valtech-components 4.0.1013 → 4.0.1014
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/atoms/display/display.component.mjs +2 -2
- package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +317 -35
- package/esm2022/lib/components/organisms/data-table/types.mjs +1 -1
- package/esm2022/lib/components/organisms/field-schema-editor/field-schema-editor.component.mjs +4 -1
- package/esm2022/lib/components/organisms/field-schema-editor/types.mjs +1 -1
- package/esm2022/lib/components/organisms/form/form.component.mjs +7 -1
- package/esm2022/lib/components/organisms/survey-builder/survey-builder.component.mjs +386 -155
- package/esm2022/lib/components/organisms/survey-builder/survey-builder.i18n.mjs +15 -1
- package/esm2022/lib/components/organisms/survey-builder/types.mjs +1 -1
- package/esm2022/lib/components/types.mjs +1 -1
- package/esm2022/lib/services/forms/form-schema-builder.service.mjs +3 -1
- package/esm2022/lib/services/forms/types.mjs +1 -1
- package/esm2022/lib/services/requests/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +728 -190
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/data-table/data-table.component.d.ts +10 -1
- package/lib/components/organisms/data-table/types.d.ts +14 -0
- package/lib/components/organisms/field-schema-editor/field-schema-editor.component.d.ts +1 -0
- package/lib/components/organisms/field-schema-editor/types.d.ts +2 -0
- package/lib/components/organisms/survey-builder/survey-builder.component.d.ts +28 -5
- package/lib/components/organisms/survey-builder/types.d.ts +1 -0
- package/lib/components/types.d.ts +2 -0
- package/lib/services/forms/types.d.ts +2 -0
- package/lib/services/requests/types.d.ts +6 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/lib/components/styles/typography.scss +1 -1
|
@@ -70,7 +70,7 @@ import fixWebmDuration from 'fix-webm-duration';
|
|
|
70
70
|
* Current version of valtech-components.
|
|
71
71
|
* This is automatically updated during the publish process.
|
|
72
72
|
*/
|
|
73
|
-
const VERSION = '4.0.
|
|
73
|
+
const VERSION = '4.0.1014';
|
|
74
74
|
|
|
75
75
|
function evaluateValtechAccess(rule, context, features = {}, visitedFeatures = new Set()) {
|
|
76
76
|
if (rule == null)
|
|
@@ -8881,7 +8881,7 @@ class DisplayComponent {
|
|
|
8881
8881
|
{{ getDisplayContent() }}
|
|
8882
8882
|
</p>
|
|
8883
8883
|
</ion-text>
|
|
8884
|
-
`, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--val-radius-xs: 10px;--val-radius-sm: 16px;--val-radius-md: 20px;--val-radius-lg: 28px;--val-radius-xl: 36px;--val-radius-full: 999px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.small{font-size:1.5rem;line-height:2rem;font-weight:800}@media (min-width: 768px){.small{font-size:2rem;line-height:2.5rem}}.medium{font-size:2rem;line-height:2.5rem;font-weight:800}@media (min-width: 768px){.medium{font-size:2.5rem;line-height:3rem}}.large{font-size:2.5rem;line-height:3rem;font-weight:800}@media (min-width: 768px){.large{font-size:3rem;line-height:3.5rem}}.xlarge{font-size:3rem;line-height:
|
|
8884
|
+
`, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--val-radius-xs: 10px;--val-radius-sm: 16px;--val-radius-md: 20px;--val-radius-lg: 28px;--val-radius-xl: 36px;--val-radius-full: 999px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.small{font-size:1.5rem;line-height:2rem;font-weight:800}@media (min-width: 768px){.small{font-size:2rem;line-height:2.5rem}}.medium{font-size:2rem;line-height:2.5rem;font-weight:800}@media (min-width: 768px){.medium{font-size:2.5rem;line-height:3rem}}.large{font-size:2.5rem;line-height:3rem;font-weight:800}@media (min-width: 768px){.large{font-size:3rem;line-height:3.5rem}}.xlarge{font-size:3rem;line-height:3.5rem;font-weight:800}@media (min-width: 768px){.xlarge{font-size:4.375rem;line-height:4.125rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
|
|
8885
8885
|
}
|
|
8886
8886
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DisplayComponent, decorators: [{
|
|
8887
8887
|
type: Component,
|
|
@@ -8891,7 +8891,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
8891
8891
|
{{ getDisplayContent() }}
|
|
8892
8892
|
</p>
|
|
8893
8893
|
</ion-text>
|
|
8894
|
-
`, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--val-radius-xs: 10px;--val-radius-sm: 16px;--val-radius-md: 20px;--val-radius-lg: 28px;--val-radius-xl: 36px;--val-radius-full: 999px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.small{font-size:1.5rem;line-height:2rem;font-weight:800}@media (min-width: 768px){.small{font-size:2rem;line-height:2.5rem}}.medium{font-size:2rem;line-height:2.5rem;font-weight:800}@media (min-width: 768px){.medium{font-size:2.5rem;line-height:3rem}}.large{font-size:2.5rem;line-height:3rem;font-weight:800}@media (min-width: 768px){.large{font-size:3rem;line-height:3.5rem}}.xlarge{font-size:3rem;line-height:
|
|
8894
|
+
`, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--val-radius-xs: 10px;--val-radius-sm: 16px;--val-radius-md: 20px;--val-radius-lg: 28px;--val-radius-xl: 36px;--val-radius-full: 999px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.small{font-size:1.5rem;line-height:2rem;font-weight:800}@media (min-width: 768px){.small{font-size:2rem;line-height:2.5rem}}.medium{font-size:2rem;line-height:2.5rem;font-weight:800}@media (min-width: 768px){.medium{font-size:2.5rem;line-height:3rem}}.large{font-size:2.5rem;line-height:3rem;font-weight:800}@media (min-width: 768px){.large{font-size:3rem;line-height:3.5rem}}.xlarge{font-size:3rem;line-height:3.5rem;font-weight:800}@media (min-width: 768px){.xlarge{font-size:4.375rem;line-height:4.125rem}}\n"] }]
|
|
8895
8895
|
}], propDecorators: { props: [{
|
|
8896
8896
|
type: Input
|
|
8897
8897
|
}] } });
|
|
@@ -38144,6 +38144,9 @@ class FormComponent {
|
|
|
38144
38144
|
@for (s of props.sections; track s.name) {
|
|
38145
38145
|
<div class="section">
|
|
38146
38146
|
<val-title [props]="{ content: s.name, size: 'large', color: '', bold: false }"></val-title>
|
|
38147
|
+
@if (s.subtitle) {
|
|
38148
|
+
<p class="section-subtitle">{{ s.subtitle }}</p>
|
|
38149
|
+
}
|
|
38147
38150
|
@for (f of s.fields; track f.name) {
|
|
38148
38151
|
<div class="input" [attr.data-testid]="f.token">
|
|
38149
38152
|
@if (f.type !== types.PHONE && f.type !== types.HANDLE && f.type !== types.ATTACHMENT) {
|
|
@@ -38360,6 +38363,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
38360
38363
|
@for (s of props.sections; track s.name) {
|
|
38361
38364
|
<div class="section">
|
|
38362
38365
|
<val-title [props]="{ content: s.name, size: 'large', color: '', bold: false }"></val-title>
|
|
38366
|
+
@if (s.subtitle) {
|
|
38367
|
+
<p class="section-subtitle">{{ s.subtitle }}</p>
|
|
38368
|
+
}
|
|
38363
38369
|
@for (f of s.fields; track f.name) {
|
|
38364
38370
|
<div class="input" [attr.data-testid]="f.token">
|
|
38365
38371
|
@if (f.type !== types.PHONE && f.type !== types.HANDLE && f.type !== types.ATTACHMENT) {
|
|
@@ -39127,6 +39133,7 @@ class FormSchemaBuilderService {
|
|
|
39127
39133
|
const section = sectionsById.get(key) ??
|
|
39128
39134
|
{
|
|
39129
39135
|
name: def.sectionLabel || '',
|
|
39136
|
+
subtitle: def.sectionSubtitle || '',
|
|
39130
39137
|
order: def.sectionOrder ?? 0,
|
|
39131
39138
|
fields: [],
|
|
39132
39139
|
};
|
|
@@ -39213,6 +39220,7 @@ class FormSchemaBuilderService {
|
|
|
39213
39220
|
options: this.normalizeOptions(field.options),
|
|
39214
39221
|
sectionId: field.sectionId,
|
|
39215
39222
|
sectionLabel: field.sectionLabel?.trim() ?? '',
|
|
39223
|
+
sectionSubtitle: field.sectionSubtitle?.trim() ?? '',
|
|
39216
39224
|
sectionOrder: field.sectionOrder,
|
|
39217
39225
|
step: field.step,
|
|
39218
39226
|
unitLabel: field.unitLabel,
|
|
@@ -40604,6 +40612,7 @@ class FieldSchemaEditorComponent {
|
|
|
40604
40612
|
this.selectedPresetId = signal('');
|
|
40605
40613
|
/** Se refresca con cada cambio de tipo — `needsOptions` no puede leer el control directo. */
|
|
40606
40614
|
this.currentType = signal('TEXT');
|
|
40615
|
+
this.currentSectionId = '';
|
|
40607
40616
|
/** Una vez que se toca el token a mano (o se edita un campo ya guardado) deja de derivarse del label. */
|
|
40608
40617
|
this.nameLocked = false;
|
|
40609
40618
|
this.name = '';
|
|
@@ -40659,6 +40668,7 @@ class FieldSchemaEditorComponent {
|
|
|
40659
40668
|
const initial = this.props.field;
|
|
40660
40669
|
if (initial) {
|
|
40661
40670
|
this.fieldId = initial.id;
|
|
40671
|
+
this.currentSectionId = initial.sectionId ?? '';
|
|
40662
40672
|
this.nameLocked = true;
|
|
40663
40673
|
this.name = initial.name;
|
|
40664
40674
|
this.labelControl.setValue(initial.label ?? '');
|
|
@@ -40746,6 +40756,7 @@ class FieldSchemaEditorComponent {
|
|
|
40746
40756
|
placeholderText: (this.placeholderControl.value || '').trim(),
|
|
40747
40757
|
hintText: (this.hintControl.value || '').trim(),
|
|
40748
40758
|
type: this.coerceType(this.typeControl.value),
|
|
40759
|
+
sectionId: this.currentSectionId,
|
|
40749
40760
|
required: this.requiredControl.value,
|
|
40750
40761
|
sectionLabel: (this.sectionControl.value || '').trim(),
|
|
40751
40762
|
options: this.needsOptions() ? this.options().map((option, index) => ({ ...option, order: index })) : undefined,
|
|
@@ -41342,6 +41353,9 @@ const SURVEY_QUESTION_TYPES = [
|
|
|
41342
41353
|
|
|
41343
41354
|
const SURVEY_BUILDER_I18N = {
|
|
41344
41355
|
es: {
|
|
41356
|
+
surveyNameLabel: 'Nombre interno',
|
|
41357
|
+
surveyNamePlaceholder: 'Ej: encuesta-ventas-entrada',
|
|
41358
|
+
noSurveyName: 'Ponle un nombre interno a la encuesta',
|
|
41345
41359
|
titleLabel: 'Título',
|
|
41346
41360
|
titlePlaceholder: 'Ej: ¿Qué te pareció el evento?',
|
|
41347
41361
|
subtitleLabel: 'Subtítulo',
|
|
@@ -41365,8 +41379,10 @@ const SURVEY_BUILDER_I18N = {
|
|
|
41365
41379
|
successImageLabel: 'Imagen de cierre',
|
|
41366
41380
|
successImagePlaceholder: 'URL de la imagen que se muestra al terminar',
|
|
41367
41381
|
questionsLabel: 'Preguntas',
|
|
41382
|
+
sectionQuestionsLabel: 'Sin sección',
|
|
41368
41383
|
questionLabelPlaceholder: 'Escribe la pregunta',
|
|
41369
41384
|
addQuestion: 'Agregar pregunta',
|
|
41385
|
+
addQuestionToSection: 'Agregar aquí',
|
|
41370
41386
|
removeQuestion: 'Quitar pregunta',
|
|
41371
41387
|
editQuestion: 'Editar pregunta',
|
|
41372
41388
|
duplicateQuestion: 'Duplicar pregunta',
|
|
@@ -41384,6 +41400,8 @@ const SURVEY_BUILDER_I18N = {
|
|
|
41384
41400
|
loadError: 'No pudimos cargar la encuesta para editar.',
|
|
41385
41401
|
stepStart: 'Inicio',
|
|
41386
41402
|
stepQuestions: 'Preguntas',
|
|
41403
|
+
sectionSubtitleLabel: 'Subtítulo',
|
|
41404
|
+
sectionSubtitlePlaceholder: 'Escribe un subtítulo para esta sección',
|
|
41387
41405
|
stepClose: 'Cierre',
|
|
41388
41406
|
stepReview: 'Revisar',
|
|
41389
41407
|
wizardStepsLabel: 'Pasos para crear la encuesta',
|
|
@@ -41401,6 +41419,9 @@ const SURVEY_BUILDER_I18N = {
|
|
|
41401
41419
|
reviewDefaultClose: 'Cierre por defecto',
|
|
41402
41420
|
},
|
|
41403
41421
|
en: {
|
|
41422
|
+
surveyNameLabel: 'Internal name',
|
|
41423
|
+
surveyNamePlaceholder: 'E.g: event-feedback',
|
|
41424
|
+
noSurveyName: 'Give the survey an internal name',
|
|
41404
41425
|
titleLabel: 'Title',
|
|
41405
41426
|
titlePlaceholder: 'E.g: How was the event?',
|
|
41406
41427
|
subtitleLabel: 'Subtitle',
|
|
@@ -41424,8 +41445,10 @@ const SURVEY_BUILDER_I18N = {
|
|
|
41424
41445
|
successImageLabel: 'Closing image',
|
|
41425
41446
|
successImagePlaceholder: 'Image URL shown after submit',
|
|
41426
41447
|
questionsLabel: 'Questions',
|
|
41448
|
+
sectionQuestionsLabel: 'No section',
|
|
41427
41449
|
questionLabelPlaceholder: 'Write the question',
|
|
41428
41450
|
addQuestion: 'Add question',
|
|
41451
|
+
addQuestionToSection: 'Add here',
|
|
41429
41452
|
removeQuestion: 'Remove question',
|
|
41430
41453
|
editQuestion: 'Edit question',
|
|
41431
41454
|
duplicateQuestion: 'Duplicate question',
|
|
@@ -41443,6 +41466,8 @@ const SURVEY_BUILDER_I18N = {
|
|
|
41443
41466
|
loadError: "We couldn't load the survey to edit.",
|
|
41444
41467
|
stepStart: 'Start',
|
|
41445
41468
|
stepQuestions: 'Questions',
|
|
41469
|
+
sectionSubtitleLabel: 'Subtitle',
|
|
41470
|
+
sectionSubtitlePlaceholder: 'Add a subtitle for this section',
|
|
41446
41471
|
stepClose: 'Close',
|
|
41447
41472
|
stepReview: 'Review',
|
|
41448
41473
|
wizardStepsLabel: 'Survey builder steps',
|
|
@@ -41606,6 +41631,44 @@ let rowUid = 0;
|
|
|
41606
41631
|
* `val-survey-response` sabe renderizar, no a lo que el editor sabe editar.
|
|
41607
41632
|
*/
|
|
41608
41633
|
class SurveyBuilderComponent {
|
|
41634
|
+
groupQuestions(rows) {
|
|
41635
|
+
const groups = [];
|
|
41636
|
+
const index = new Map();
|
|
41637
|
+
rows.forEach(question => {
|
|
41638
|
+
const section = (question.sectionLabel ?? '').trim();
|
|
41639
|
+
const sectionKey = question.sectionId || (section ? this.formBuilder.toToken(section) : '__default__');
|
|
41640
|
+
const label = section;
|
|
41641
|
+
let position = index.get(sectionKey);
|
|
41642
|
+
if (position == null) {
|
|
41643
|
+
position = groups.length;
|
|
41644
|
+
index.set(sectionKey, position);
|
|
41645
|
+
groups.push({ id: sectionKey, label, rows: [] });
|
|
41646
|
+
}
|
|
41647
|
+
groups[position].rows.push(question);
|
|
41648
|
+
});
|
|
41649
|
+
if (!groups.length) {
|
|
41650
|
+
const defaultId = '__default__';
|
|
41651
|
+
groups.push({ id: defaultId, label: '', rows: [] });
|
|
41652
|
+
}
|
|
41653
|
+
return groups;
|
|
41654
|
+
}
|
|
41655
|
+
normalizeSectionId(sectionId) {
|
|
41656
|
+
return (sectionId ?? '').trim() || '__default__';
|
|
41657
|
+
}
|
|
41658
|
+
questionGroupById(sectionId) {
|
|
41659
|
+
return this.questionGroups().find(group => group.id === sectionId);
|
|
41660
|
+
}
|
|
41661
|
+
sectionSubtitleControl(sectionId) {
|
|
41662
|
+
const normalized = this.normalizeSectionId(sectionId);
|
|
41663
|
+
if (!this.sectionSubtitleControls[normalized]) {
|
|
41664
|
+
const control = new FormControl(this.sectionSubtitles()[normalized] ?? '', { nonNullable: true });
|
|
41665
|
+
control.valueChanges.subscribe(value => {
|
|
41666
|
+
this.sectionSubtitles.update(values => ({ ...values, [normalized]: value }));
|
|
41667
|
+
});
|
|
41668
|
+
this.sectionSubtitleControls[normalized] = control;
|
|
41669
|
+
}
|
|
41670
|
+
return this.sectionSubtitleControls[normalized];
|
|
41671
|
+
}
|
|
41609
41672
|
constructor() {
|
|
41610
41673
|
this.props = {};
|
|
41611
41674
|
this.saved = new EventEmitter();
|
|
@@ -41621,6 +41684,7 @@ class SurveyBuilderComponent {
|
|
|
41621
41684
|
this.formBuilder = inject(RequestFormBuilderService);
|
|
41622
41685
|
this.errors = inject(ValtechErrorService);
|
|
41623
41686
|
this.modals = inject(ModalService);
|
|
41687
|
+
this.surveyNameControl = new FormControl('', { nonNullable: true });
|
|
41624
41688
|
this.titleControl = new FormControl('', { nonNullable: true });
|
|
41625
41689
|
this.subtitleControl = new FormControl('', { nonNullable: true });
|
|
41626
41690
|
this.headerImageControl = new FormControl('', { nonNullable: true });
|
|
@@ -41633,12 +41697,20 @@ class SurveyBuilderComponent {
|
|
|
41633
41697
|
this.validationError = signal('');
|
|
41634
41698
|
this.saving = signal(false);
|
|
41635
41699
|
this.uploadingImage = signal('');
|
|
41636
|
-
this.
|
|
41637
|
-
|
|
41638
|
-
|
|
41639
|
-
|
|
41640
|
-
|
|
41641
|
-
|
|
41700
|
+
this.sectionSubtitles = signal({});
|
|
41701
|
+
this.sectionSubtitleControls = {};
|
|
41702
|
+
this.questionGroups = computed(() => this.groupQuestions(this.questions()));
|
|
41703
|
+
this.wizardSteps = computed(() => {
|
|
41704
|
+
const groups = this.questionGroups();
|
|
41705
|
+
const steps = [{ id: 'start', label: this.t('stepStart') }];
|
|
41706
|
+
groups.forEach((group, index) => {
|
|
41707
|
+
const sectionLabel = group.label || `${this.t('sectionQuestionsLabel')} ${index + 1}`;
|
|
41708
|
+
steps.push({ id: `section-${group.id}`, label: `${index + 1}. ${sectionLabel}` });
|
|
41709
|
+
});
|
|
41710
|
+
steps.push({ id: 'close', label: this.t('stepClose') });
|
|
41711
|
+
steps.push({ id: 'review', label: this.t('stepReview') });
|
|
41712
|
+
return steps;
|
|
41713
|
+
});
|
|
41642
41714
|
this.allowedImageTypes = ['image/jpeg', 'image/png', 'image/webp', 'image/gif'];
|
|
41643
41715
|
this.maxImageBytes = 10 * 1024 * 1024;
|
|
41644
41716
|
if (!this.i18n.hasNamespace(NAMESPACE$1)) {
|
|
@@ -41657,14 +41729,15 @@ class SurveyBuilderComponent {
|
|
|
41657
41729
|
async ngOnInit() {
|
|
41658
41730
|
// Sembrado directo: la app ya tenía la encuesta, no hace falta leerla.
|
|
41659
41731
|
if (this.props.initial) {
|
|
41660
|
-
this.hydrate(this.props.initial.label, this.props.initial.subtitle, this.props.initial.questions, this.props.initial.presentation);
|
|
41732
|
+
this.hydrate(this.props.initial.name, this.props.initial.label, this.props.initial.subtitle, this.props.initial.questions, this.props.initial.presentation);
|
|
41661
41733
|
return;
|
|
41662
41734
|
}
|
|
41663
41735
|
if (!this.props.typeId)
|
|
41664
41736
|
return;
|
|
41665
41737
|
try {
|
|
41666
41738
|
const cfg = await firstValueFrom(this.requests.getRequestType(this.props.typeId));
|
|
41667
|
-
|
|
41739
|
+
const metadataName = typeof cfg.metadata?.['name'] === 'string' ? cfg.metadata['name'] : '';
|
|
41740
|
+
this.hydrate(metadataName || cfg.label, cfg.label, cfg.subtitle ?? '', cfg.fieldSchema, cfg.presentation);
|
|
41668
41741
|
}
|
|
41669
41742
|
catch (err) {
|
|
41670
41743
|
this.errors.handle(err, {
|
|
@@ -41708,7 +41781,7 @@ class SurveyBuilderComponent {
|
|
|
41708
41781
|
nextStep() {
|
|
41709
41782
|
if (!this.validateWizardStep(this.wizardStep()))
|
|
41710
41783
|
return;
|
|
41711
|
-
this.wizardStep.update(step => Math.min(step + 1, this.wizardSteps.length - 1));
|
|
41784
|
+
this.wizardStep.update(step => Math.min(step + 1, this.wizardSteps().length - 1));
|
|
41712
41785
|
}
|
|
41713
41786
|
previousStep() {
|
|
41714
41787
|
this.validationError.set('');
|
|
@@ -41751,6 +41824,18 @@ class SurveyBuilderComponent {
|
|
|
41751
41824
|
state: this.saving() ? ComponentStates.WORKING : ComponentStates.ENABLED,
|
|
41752
41825
|
};
|
|
41753
41826
|
}
|
|
41827
|
+
closeStep() {
|
|
41828
|
+
return Math.max(this.wizardSteps().length - 2, 0);
|
|
41829
|
+
}
|
|
41830
|
+
reviewStep() {
|
|
41831
|
+
return Math.max(this.wizardSteps().length - 1, 0);
|
|
41832
|
+
}
|
|
41833
|
+
sectionStepIndex(sectionIndex) {
|
|
41834
|
+
return sectionIndex + 1;
|
|
41835
|
+
}
|
|
41836
|
+
showCurrentSectionQuestionStep() {
|
|
41837
|
+
return this.isWizard() && this.wizardStep() >= 1 && this.wizardStep() < this.reviewStep();
|
|
41838
|
+
}
|
|
41754
41839
|
interpolate(template, values) {
|
|
41755
41840
|
return Object.entries(values).reduce((text, [key, value]) => text.replaceAll(`{${key}}`, String(value)), template);
|
|
41756
41841
|
}
|
|
@@ -41771,7 +41856,16 @@ class SurveyBuilderComponent {
|
|
|
41771
41856
|
icon: { name: icon, slot: 'icon-only' },
|
|
41772
41857
|
};
|
|
41773
41858
|
}
|
|
41774
|
-
|
|
41859
|
+
addQuestionAriaLabel(sectionLabel) {
|
|
41860
|
+
const section = (sectionLabel ?? '').trim();
|
|
41861
|
+
if (!section) {
|
|
41862
|
+
return this.t('addQuestionToSection');
|
|
41863
|
+
}
|
|
41864
|
+
return `${this.t('addQuestionToSection')} (${section})`;
|
|
41865
|
+
}
|
|
41866
|
+
addQuestion(sectionId) {
|
|
41867
|
+
const normalizedSectionId = this.normalizeSectionId(sectionId);
|
|
41868
|
+
const targetGroup = this.questionGroupById(normalizedSectionId);
|
|
41775
41869
|
const row = {
|
|
41776
41870
|
id: `row-${rowUid++}`,
|
|
41777
41871
|
name: '',
|
|
@@ -41780,12 +41874,45 @@ class SurveyBuilderComponent {
|
|
|
41780
41874
|
hintText: '',
|
|
41781
41875
|
type: this.questionTypes()[0],
|
|
41782
41876
|
required: true,
|
|
41877
|
+
sectionId: normalizedSectionId,
|
|
41878
|
+
sectionLabel: targetGroup?.label || undefined,
|
|
41783
41879
|
};
|
|
41784
|
-
this.questions.update(rows =>
|
|
41880
|
+
this.questions.update(rows => {
|
|
41881
|
+
const next = [...rows];
|
|
41882
|
+
const insertionIndex = this.nextQuestionIndexForSection(next, normalizedSectionId);
|
|
41883
|
+
next.splice(insertionIndex, 0, row);
|
|
41884
|
+
return next;
|
|
41885
|
+
});
|
|
41785
41886
|
// Una pregunta recién agregada está vacía: abrirla es el único paso
|
|
41786
41887
|
// siguiente posible, y dejarla cerrada la haría ver como una fila rota.
|
|
41787
41888
|
this.editingId.set(row.id);
|
|
41788
41889
|
}
|
|
41890
|
+
rowGlobalIndex(sectionId, groupRowIndex) {
|
|
41891
|
+
const normalized = this.normalizeSectionId(sectionId);
|
|
41892
|
+
let index = 0;
|
|
41893
|
+
for (const row of this.questions()) {
|
|
41894
|
+
if (this.normalizeSectionId(row.sectionId) === normalized) {
|
|
41895
|
+
if (groupRowIndex === 0)
|
|
41896
|
+
return index;
|
|
41897
|
+
groupRowIndex -= 1;
|
|
41898
|
+
}
|
|
41899
|
+
index += 1;
|
|
41900
|
+
}
|
|
41901
|
+
return Math.min(index - 1, 0);
|
|
41902
|
+
}
|
|
41903
|
+
nextQuestionIndexForSection(rows, sectionId) {
|
|
41904
|
+
const normalized = this.normalizeSectionId(sectionId);
|
|
41905
|
+
if (!rows.length)
|
|
41906
|
+
return 0;
|
|
41907
|
+
if (!normalized)
|
|
41908
|
+
return rows.length;
|
|
41909
|
+
for (let i = rows.length - 1; i >= 0; i -= 1) {
|
|
41910
|
+
if (this.normalizeSectionId(rows[i].sectionId) === normalized) {
|
|
41911
|
+
return i + 1;
|
|
41912
|
+
}
|
|
41913
|
+
}
|
|
41914
|
+
return rows.length;
|
|
41915
|
+
}
|
|
41789
41916
|
toggleEdit(row) {
|
|
41790
41917
|
this.editingId.update(current => (current === row.id ? '' : row.id));
|
|
41791
41918
|
}
|
|
@@ -41828,20 +41955,28 @@ class SurveyBuilderComponent {
|
|
|
41828
41955
|
* paso obligatorio que no se veía por ningún lado.
|
|
41829
41956
|
*/
|
|
41830
41957
|
draftQuestion(field) {
|
|
41831
|
-
this.questions.update(rows => rows.map(r => (r.id === field.id ? { ...r, ...field } : r)));
|
|
41958
|
+
this.questions.update(rows => rows.map(r => (r.id === field.id ? this.withResolvedSection({ ...r, ...field }) : r)));
|
|
41832
41959
|
if (this.validationError())
|
|
41833
41960
|
this.validationError.set('');
|
|
41834
41961
|
}
|
|
41835
41962
|
applyQuestion(field) {
|
|
41836
41963
|
this.questions.update(rows => rows.map(r => r.id === field.id
|
|
41837
41964
|
? {
|
|
41838
|
-
...field,
|
|
41965
|
+
...this.withResolvedSection(field),
|
|
41839
41966
|
name: this.formBuilder.uniqueFieldName(field.name || field.label, rows.filter(o => o.id !== r.id)),
|
|
41840
41967
|
}
|
|
41841
41968
|
: r));
|
|
41842
41969
|
this.editingId.set('');
|
|
41843
41970
|
this.validationError.set('');
|
|
41844
41971
|
}
|
|
41972
|
+
withResolvedSection(field) {
|
|
41973
|
+
const label = (field.sectionLabel ?? '').trim();
|
|
41974
|
+
const id = this.normalizeSectionId(field.sectionId);
|
|
41975
|
+
if (id !== '__default__' || !label) {
|
|
41976
|
+
return { ...field, sectionId: id, sectionLabel: label || undefined };
|
|
41977
|
+
}
|
|
41978
|
+
return { ...field, sectionId: this.formBuilder.toToken(label), sectionLabel: label };
|
|
41979
|
+
}
|
|
41845
41980
|
async onPresentationFileSelected(slot, event) {
|
|
41846
41981
|
const input = event.target;
|
|
41847
41982
|
const file = input.files?.[0];
|
|
@@ -41901,9 +42036,10 @@ class SurveyBuilderComponent {
|
|
|
41901
42036
|
label: row.label.trim(),
|
|
41902
42037
|
type: row.type,
|
|
41903
42038
|
required: row.required,
|
|
41904
|
-
sectionId: row.
|
|
42039
|
+
sectionId: row.sectionId,
|
|
41905
42040
|
sectionLabel: row.sectionLabel,
|
|
41906
|
-
|
|
42041
|
+
sectionSubtitle: this.sectionSubtitles()[this.normalizeSectionId(row.sectionId)] ?? '',
|
|
42042
|
+
sectionOrder: this.sectionOrderFor(row.sectionId, rows),
|
|
41907
42043
|
placeholderText: row.placeholderText,
|
|
41908
42044
|
hintText: row.hintText,
|
|
41909
42045
|
options: row.options,
|
|
@@ -41913,7 +42049,13 @@ class SurveyBuilderComponent {
|
|
|
41913
42049
|
const presentation = this.presentationPayload();
|
|
41914
42050
|
// La app guarda: acá solo se valida y se entrega lo escrito.
|
|
41915
42051
|
if (this.props.persist === false) {
|
|
41916
|
-
this.draft.emit({
|
|
42052
|
+
this.draft.emit({
|
|
42053
|
+
name: this.surveyNameControl.value.trim() || title,
|
|
42054
|
+
label: title,
|
|
42055
|
+
subtitle,
|
|
42056
|
+
presentation,
|
|
42057
|
+
questions: fieldSchema,
|
|
42058
|
+
});
|
|
41917
42059
|
return;
|
|
41918
42060
|
}
|
|
41919
42061
|
this.saving.set(true);
|
|
@@ -41924,6 +42066,7 @@ class SurveyBuilderComponent {
|
|
|
41924
42066
|
// endpoint (`persist: false`) y arma el id con la entidad adentro.
|
|
41925
42067
|
const typeId = this.props.typeId ?? `${this.props.typePrefix ?? DEFAULT_TYPE_PREFIX}:${this.formBuilder.toToken(title)}`;
|
|
41926
42068
|
const payload = {
|
|
42069
|
+
name: this.surveyNameControl.value.trim() || title,
|
|
41927
42070
|
label: title,
|
|
41928
42071
|
subtitle,
|
|
41929
42072
|
presentation,
|
|
@@ -41951,14 +42094,23 @@ class SurveyBuilderComponent {
|
|
|
41951
42094
|
});
|
|
41952
42095
|
}
|
|
41953
42096
|
}
|
|
41954
|
-
hydrate(label, subtitle, questions, presentation) {
|
|
42097
|
+
hydrate(name, label, subtitle, questions, presentation) {
|
|
42098
|
+
this.surveyNameControl.setValue(name ?? '');
|
|
41955
42099
|
this.titleControl.setValue(label ?? '');
|
|
41956
42100
|
this.subtitleControl.setValue(subtitle ?? '');
|
|
41957
42101
|
this.headerImageControl.setValue(presentation?.headerImageUrl ?? '');
|
|
41958
42102
|
this.successTitleControl.setValue(presentation?.successTitle || this.defaultSuccessTitle());
|
|
41959
42103
|
this.successMessageControl.setValue(presentation?.successMessage || this.defaultSuccessMessage());
|
|
41960
42104
|
this.successImageControl.setValue(presentation?.successImageUrl ?? '');
|
|
41961
|
-
|
|
42105
|
+
const rows = [...(questions ?? [])].sort((a, b) => a.order - b.order).map(f => this.rowFromField(f));
|
|
42106
|
+
const subtitles = {};
|
|
42107
|
+
rows.forEach(row => {
|
|
42108
|
+
const id = this.normalizeSectionId(row.sectionId);
|
|
42109
|
+
if (row.sectionSubtitle && subtitles[id] === undefined)
|
|
42110
|
+
subtitles[id] = row.sectionSubtitle;
|
|
42111
|
+
});
|
|
42112
|
+
this.sectionSubtitles.set(subtitles);
|
|
42113
|
+
this.questions.set(rows);
|
|
41962
42114
|
}
|
|
41963
42115
|
presentationPayload() {
|
|
41964
42116
|
const presentation = {
|
|
@@ -41978,6 +42130,13 @@ class SurveyBuilderComponent {
|
|
|
41978
42130
|
validateWizardStep(step) {
|
|
41979
42131
|
this.validationError.set('');
|
|
41980
42132
|
if (step === 0) {
|
|
42133
|
+
if (!this.isWizard())
|
|
42134
|
+
return true;
|
|
42135
|
+
if (!this.surveyNameControl.value.trim()) {
|
|
42136
|
+
this.surveyNameControl.markAsTouched();
|
|
42137
|
+
this.validationError.set(this.t('noSurveyName'));
|
|
42138
|
+
return false;
|
|
42139
|
+
}
|
|
41981
42140
|
if (!this.titleControl.value.trim()) {
|
|
41982
42141
|
this.titleControl.markAsTouched();
|
|
41983
42142
|
this.validationError.set(this.t('noTitle'));
|
|
@@ -42013,7 +42172,9 @@ class SurveyBuilderComponent {
|
|
|
42013
42172
|
hintText: f.hintText ?? '',
|
|
42014
42173
|
type: f.type,
|
|
42015
42174
|
required: !!f.required,
|
|
42175
|
+
sectionId: f.sectionId,
|
|
42016
42176
|
sectionLabel: f.sectionLabel ?? '',
|
|
42177
|
+
sectionSubtitle: f.sectionSubtitle ?? '',
|
|
42017
42178
|
sectionOrder: f.sectionOrder,
|
|
42018
42179
|
options: f.options,
|
|
42019
42180
|
};
|
|
@@ -42037,7 +42198,7 @@ class SurveyBuilderComponent {
|
|
|
42037
42198
|
};
|
|
42038
42199
|
}
|
|
42039
42200
|
async openPreview() {
|
|
42040
|
-
await this.modals.
|
|
42201
|
+
await this.modals.openAdaptive({
|
|
42041
42202
|
component: SurveyPreviewModalComponent,
|
|
42042
42203
|
componentProps: {
|
|
42043
42204
|
modalTitle: this.t('previewTitle'),
|
|
@@ -42053,26 +42214,25 @@ class SurveyBuilderComponent {
|
|
|
42053
42214
|
order: index,
|
|
42054
42215
|
name: question.name || this.formBuilder.toToken(question.label),
|
|
42055
42216
|
typeLabel: this.typeLabel(question.type),
|
|
42056
|
-
sectionId:
|
|
42057
|
-
|
|
42217
|
+
sectionId: this.normalizeSectionId(question.sectionId),
|
|
42218
|
+
sectionSubtitle: this.sectionSubtitles()[this.normalizeSectionId(question.sectionId)] ?? '',
|
|
42219
|
+
sectionOrder: this.sectionOrderFor(question.sectionId, this.questions()),
|
|
42058
42220
|
})),
|
|
42059
42221
|
},
|
|
42060
|
-
|
|
42061
|
-
});
|
|
42222
|
+
}, 'wide');
|
|
42062
42223
|
}
|
|
42063
|
-
sectionOrderFor(
|
|
42064
|
-
const
|
|
42065
|
-
|
|
42066
|
-
|
|
42067
|
-
|
|
42068
|
-
return labels.indexOf(label);
|
|
42224
|
+
sectionOrderFor(sectionId, rows) {
|
|
42225
|
+
const id = this.normalizeSectionId(sectionId);
|
|
42226
|
+
const sectionIds = [...new Set(rows.map(row => this.normalizeSectionId(row.sectionId)).filter(Boolean))];
|
|
42227
|
+
const index = sectionIds.indexOf(id);
|
|
42228
|
+
return index >= 0 ? index : undefined;
|
|
42069
42229
|
}
|
|
42070
42230
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SurveyBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42071
42231
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SurveyBuilderComponent, isStandalone: true, selector: "val-survey-builder", inputs: { props: "props" }, outputs: { saved: "saved", draft: "draft" }, ngImport: i0, template: `
|
|
42072
42232
|
<div class="survey-builder">
|
|
42073
42233
|
@if (isWizard()) {
|
|
42074
42234
|
<nav class="survey-builder__steps" [attr.aria-label]="t('wizardStepsLabel')">
|
|
42075
|
-
@for (step of wizardSteps; track step.id; let i = $index) {
|
|
42235
|
+
@for (step of wizardSteps(); track step.id; let i = $index) {
|
|
42076
42236
|
<button
|
|
42077
42237
|
type="button"
|
|
42078
42238
|
class="survey-builder__step"
|
|
@@ -42081,7 +42241,7 @@ class SurveyBuilderComponent {
|
|
|
42081
42241
|
(click)="goToStep(i)"
|
|
42082
42242
|
>
|
|
42083
42243
|
<span>{{ i + 1 }}</span>
|
|
42084
|
-
{{
|
|
42244
|
+
{{ step.label }}
|
|
42085
42245
|
</button>
|
|
42086
42246
|
}
|
|
42087
42247
|
</nav>
|
|
@@ -42098,6 +42258,9 @@ class SurveyBuilderComponent {
|
|
|
42098
42258
|
|
|
42099
42259
|
@if (showWizardSection(0)) {
|
|
42100
42260
|
<section class="survey-builder__section">
|
|
42261
|
+
<val-form-field [label]="t('surveyNameLabel')">
|
|
42262
|
+
<val-text-input [props]="{ control: surveyNameControl, placeholder: t('surveyNamePlaceholder') }" />
|
|
42263
|
+
</val-form-field>
|
|
42101
42264
|
<val-form-field [label]="t('titleLabel')">
|
|
42102
42265
|
<val-text-input [props]="{ control: titleControl, placeholder: t('titlePlaceholder') }" />
|
|
42103
42266
|
</val-form-field>
|
|
@@ -42223,7 +42386,7 @@ class SurveyBuilderComponent {
|
|
|
42223
42386
|
</div>
|
|
42224
42387
|
}
|
|
42225
42388
|
|
|
42226
|
-
@if (showWizardSection(
|
|
42389
|
+
@if (showWizardSection(closeStep())) {
|
|
42227
42390
|
<section class="survey-builder__section">
|
|
42228
42391
|
<span class="survey-builder__questions-label">{{ t('stepClose') }}</span>
|
|
42229
42392
|
<p class="survey-builder__optional-note">{{ t('successOptionalNote') }}</p>
|
|
@@ -42270,7 +42433,7 @@ class SurveyBuilderComponent {
|
|
|
42270
42433
|
</section>
|
|
42271
42434
|
}
|
|
42272
42435
|
|
|
42273
|
-
@if (
|
|
42436
|
+
@if (showCurrentSectionQuestionStep()) {
|
|
42274
42437
|
<div class="survey-builder__questions">
|
|
42275
42438
|
<span class="survey-builder__questions-label">{{ t('questionsLabel') }}</span>
|
|
42276
42439
|
|
|
@@ -42278,68 +42441,113 @@ class SurveyBuilderComponent {
|
|
|
42278
42441
|
<p class="survey-builder__empty">{{ t('noQuestions') }}</p>
|
|
42279
42442
|
}
|
|
42280
42443
|
|
|
42281
|
-
@for (
|
|
42282
|
-
|
|
42283
|
-
|
|
42284
|
-
|
|
42285
|
-
|
|
42286
|
-
<
|
|
42287
|
-
|
|
42288
|
-
|
|
42289
|
-
|
|
42290
|
-
|
|
42291
|
-
|
|
42292
|
-
|
|
42293
|
-
|
|
42294
|
-
|
|
42295
|
-
|
|
42296
|
-
|
|
42297
|
-
(onClick)="move(i, 1)"
|
|
42298
|
-
/>
|
|
42299
|
-
<val-button
|
|
42300
|
-
[props]="iconAction('q-copy-' + row.id, 'copy-outline', t('duplicateQuestion'))"
|
|
42301
|
-
(onClick)="duplicate(row)"
|
|
42302
|
-
/>
|
|
42303
|
-
<val-button
|
|
42304
|
-
[props]="iconAction('q-edit-' + row.id, 'create-outline', t('editQuestion'))"
|
|
42305
|
-
(onClick)="toggleEdit(row)"
|
|
42306
|
-
/>
|
|
42307
|
-
<val-button
|
|
42308
|
-
[props]="iconAction('q-remove-' + row.id, 'trash-outline', t('removeQuestion'), false, 'danger')"
|
|
42309
|
-
(onClick)="removeQuestion(row)"
|
|
42310
|
-
/>
|
|
42444
|
+
@for (group of questionGroups(); track group.id; let sectionIndex = $index) {
|
|
42445
|
+
@if (wizardStep() === sectionStepIndex(sectionIndex)) {
|
|
42446
|
+
<section class="survey-builder__question-section">
|
|
42447
|
+
<div class="survey-builder__section-head">
|
|
42448
|
+
<div>
|
|
42449
|
+
<strong>{{ group.label || t('sectionQuestionsLabel') }}</strong>
|
|
42450
|
+
<div class="survey-builder__section-subtitle">
|
|
42451
|
+
<val-form-field [label]="t('sectionSubtitleLabel')">
|
|
42452
|
+
<val-text-input
|
|
42453
|
+
[props]="{
|
|
42454
|
+
control: sectionSubtitleControl(group.id),
|
|
42455
|
+
placeholder: t('sectionSubtitlePlaceholder'),
|
|
42456
|
+
}"
|
|
42457
|
+
/>
|
|
42458
|
+
</val-form-field>
|
|
42459
|
+
</div>
|
|
42311
42460
|
</div>
|
|
42461
|
+
<val-button
|
|
42462
|
+
[props]="{
|
|
42463
|
+
token: 'survey-builder-add-question-' + group.id,
|
|
42464
|
+
text: t('addQuestionToSection'),
|
|
42465
|
+
color: 'dark',
|
|
42466
|
+
fill: 'outline',
|
|
42467
|
+
shape: 'round',
|
|
42468
|
+
size: 'small',
|
|
42469
|
+
type: 'button',
|
|
42470
|
+
state: 'ENABLED',
|
|
42471
|
+
icon: { name: 'add-outline', slot: 'start' },
|
|
42472
|
+
}"
|
|
42473
|
+
(onClick)="addQuestion(group.id)"
|
|
42474
|
+
/>
|
|
42312
42475
|
</div>
|
|
42313
42476
|
|
|
42314
|
-
@
|
|
42315
|
-
|
|
42316
|
-
|
|
42317
|
-
|
|
42318
|
-
|
|
42319
|
-
|
|
42320
|
-
|
|
42321
|
-
|
|
42322
|
-
|
|
42323
|
-
|
|
42324
|
-
|
|
42325
|
-
|
|
42326
|
-
|
|
42327
|
-
|
|
42328
|
-
|
|
42329
|
-
|
|
42330
|
-
|
|
42331
|
-
|
|
42332
|
-
|
|
42333
|
-
|
|
42334
|
-
|
|
42335
|
-
|
|
42477
|
+
@for (row of group.rows; track row.id; let i = $index; let first = $first; let last = $last) {
|
|
42478
|
+
@let globalIndex = rowGlobalIndex(group.id, i);
|
|
42479
|
+
<div class="survey-builder__row">
|
|
42480
|
+
<div class="survey-builder__row-head">
|
|
42481
|
+
<div class="survey-builder__row-text">
|
|
42482
|
+
<strong>{{ row.label || t('untitledQuestion') }}</strong>
|
|
42483
|
+
<span>
|
|
42484
|
+
{{
|
|
42485
|
+
typeLabel(row.type) +
|
|
42486
|
+
(row.required ? ' · ' + t('requiredTag') : '') +
|
|
42487
|
+
(row.sectionLabel ? ' · ' + row.sectionLabel : '')
|
|
42488
|
+
}}
|
|
42489
|
+
</span>
|
|
42490
|
+
</div>
|
|
42491
|
+
<div class="survey-builder__row-actions">
|
|
42492
|
+
<val-button
|
|
42493
|
+
[props]="iconAction('q-add-' + row.id, 'add-outline', addQuestionAriaLabel(row.sectionLabel), false)"
|
|
42494
|
+
(onClick)="addQuestion(row.sectionId || group.id)"
|
|
42495
|
+
/>
|
|
42496
|
+
<val-button
|
|
42497
|
+
[props]="iconAction('q-up-' + row.id, 'arrow-up-outline', t('moveUp'), first)"
|
|
42498
|
+
(onClick)="move(globalIndex, -1)"
|
|
42499
|
+
/>
|
|
42500
|
+
<val-button
|
|
42501
|
+
[props]="iconAction('q-down-' + row.id, 'arrow-down-outline', t('moveDown'), last)"
|
|
42502
|
+
(onClick)="move(globalIndex, 1)"
|
|
42503
|
+
/>
|
|
42504
|
+
<val-button
|
|
42505
|
+
[props]="iconAction('q-copy-' + row.id, 'copy-outline', t('duplicateQuestion'))"
|
|
42506
|
+
(onClick)="duplicate(row)"
|
|
42507
|
+
/>
|
|
42508
|
+
<val-button
|
|
42509
|
+
[props]="iconAction('q-edit-' + row.id, 'create-outline', t('editQuestion'))"
|
|
42510
|
+
(onClick)="toggleEdit(row)"
|
|
42511
|
+
/>
|
|
42512
|
+
<val-button
|
|
42513
|
+
[props]="iconAction('q-remove-' + row.id, 'trash-outline', t('removeQuestion'), false, 'danger')"
|
|
42514
|
+
(onClick)="removeQuestion(row)"
|
|
42515
|
+
/>
|
|
42516
|
+
</div>
|
|
42336
42517
|
</div>
|
|
42518
|
+
|
|
42519
|
+
@if (editingId() === row.id) {
|
|
42520
|
+
<div class="survey-builder__row-editor">
|
|
42521
|
+
<val-field-schema-editor
|
|
42522
|
+
#editor
|
|
42523
|
+
[props]="editorProps(row)"
|
|
42524
|
+
(changed)="draftQuestion($event)"
|
|
42525
|
+
(save)="applyQuestion($event)"
|
|
42526
|
+
/>
|
|
42527
|
+
<div class="survey-builder__row-editor-actions">
|
|
42528
|
+
<val-button
|
|
42529
|
+
[props]="{
|
|
42530
|
+
token: 'q-done-' + row.id,
|
|
42531
|
+
text: t('doneEditing'),
|
|
42532
|
+
color: 'dark',
|
|
42533
|
+
fill: 'solid',
|
|
42534
|
+
shape: 'round',
|
|
42535
|
+
size: 'default',
|
|
42536
|
+
type: 'button',
|
|
42537
|
+
state: 'ENABLED',
|
|
42538
|
+
}"
|
|
42539
|
+
(onClick)="editor.submit()"
|
|
42540
|
+
/>
|
|
42541
|
+
</div>
|
|
42542
|
+
</div>
|
|
42543
|
+
}
|
|
42337
42544
|
</div>
|
|
42338
42545
|
}
|
|
42339
|
-
</
|
|
42546
|
+
</section>
|
|
42547
|
+
}
|
|
42340
42548
|
}
|
|
42341
42549
|
|
|
42342
|
-
|
|
42550
|
+
<val-button
|
|
42343
42551
|
[props]="{
|
|
42344
42552
|
token: 'survey-builder-add-question',
|
|
42345
42553
|
text: t('addQuestion'),
|
|
@@ -42351,12 +42559,12 @@ class SurveyBuilderComponent {
|
|
|
42351
42559
|
state: 'ENABLED',
|
|
42352
42560
|
icon: { name: 'add-outline', slot: 'start' },
|
|
42353
42561
|
}"
|
|
42354
|
-
(onClick)="addQuestion()"
|
|
42562
|
+
(onClick)="addQuestion(questionGroups()[0]?.id)"
|
|
42355
42563
|
/>
|
|
42356
42564
|
</div>
|
|
42357
42565
|
}
|
|
42358
42566
|
|
|
42359
|
-
@if (showWizardSection(
|
|
42567
|
+
@if (showWizardSection(reviewStep())) {
|
|
42360
42568
|
<section class="survey-builder__review">
|
|
42361
42569
|
<span class="survey-builder__questions-label">{{ t('reviewTitle') }}</span>
|
|
42362
42570
|
<strong>{{ titleControl.value || t('untitledQuestion') }}</strong>
|
|
@@ -42379,7 +42587,7 @@ class SurveyBuilderComponent {
|
|
|
42379
42587
|
@if (wizardStep() > 0) {
|
|
42380
42588
|
<val-button [props]="wizardBackProps()" (onClick)="previousStep()" />
|
|
42381
42589
|
}
|
|
42382
|
-
@if (wizardStep() < wizardSteps.length - 1) {
|
|
42590
|
+
@if (wizardStep() < wizardSteps().length - 1) {
|
|
42383
42591
|
<val-button [props]="wizardNextProps()" (onClick)="nextStep()" />
|
|
42384
42592
|
} @else {
|
|
42385
42593
|
<val-button [props]="saveProps()" (onClick)="save()" />
|
|
@@ -42389,7 +42597,7 @@ class SurveyBuilderComponent {
|
|
|
42389
42597
|
<val-button [props]="saveProps()" (onClick)="save()" />
|
|
42390
42598
|
}
|
|
42391
42599
|
</div>
|
|
42392
|
-
`, isInline: true, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__presentation{display:flex;flex-direction:column;gap:12px;padding-top:4px}.survey-builder__section,.survey-builder__review{display:flex;flex-direction:column;gap:12px}.survey-builder__steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:16px;margin-bottom:12px}.survey-builder__step{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:8px;background:var(--ion-card-background, var(--ion-background-color, #fff));color:var(--ion-color-medium-shade, #6b6675);font-size:.8125rem;font-weight:700;cursor:pointer}.survey-builder__step span{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:999px;background:var(--ion-color-light, #f4f5f8);color:inherit;font-size:.75rem}.survey-builder__step--active{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__wizard-actions{display:flex;justify-content:flex-end;gap:8px}.survey-builder__review{padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__review strong{color:var(--ion-text-color, #000)}.survey-builder__review span:not(.survey-builder__questions-label){color:var(--ion-color-medium, #92949c);font-size:.875rem}.survey-builder__image-field{display:flex;flex-direction:column;gap:10px}.survey-builder__image-preview{position:relative;width:100%}.survey-builder__image-preview img{display:block;width:100%;aspect-ratio:16 / 9;object-fit:contain;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;background:var(--ion-color-light, #f4f5f8)}.survey-builder__image-clear{position:absolute;top:8px;right:8px;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;border-radius:999px;background:#0009;color:#fff;cursor:pointer}.survey-builder__image-upload{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 18px;border:2px dashed var(--ion-color-dark, #2f2c3a);border-radius:20px;color:var(--ion-color-dark, #2f2c3a);font-size:.875rem;font-weight:600;cursor:pointer}.survey-builder__image-upload:hover{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__image-upload--loading{opacity:.7;cursor:default}.survey-builder__image-upload ion-spinner{width:16px;height:16px}.survey-builder__image-upload input{display:none}.survey-builder__questions-label{font-size:.8125rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ion-color-medium, #92949c)}.survey-builder__empty{margin:0;font-size:.875rem;color:var(--ion-color-medium, #92949c)}.survey-builder__optional-note{margin:0;color:var(--ion-color-medium, #92949c);font-size:.875rem;line-height:1.35}.survey-builder__row{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__row-head{display:flex;flex-direction:column;gap:8px}.survey-builder__row-text{display:flex;flex-direction:column;gap:2px;min-width:0}.survey-builder__row-text strong{color:var(--ion-text-color, #000);font-size:.9375rem}.survey-builder__row-text span{color:var(--ion-color-medium, #92949c);font-size:.8125rem}.survey-builder__row-actions{display:flex;gap:4px;flex-wrap:wrap}.survey-builder__row-editor{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__row-editor-actions{display:flex;justify-content:flex-end}.survey-builder__error{margin:0;color:var(--ion-color-danger);font-size:.875rem;font-weight:700}@media (min-width: 576px){.survey-builder__row-head{flex-direction:row;align-items:flex-start;justify-content:space-between}.survey-builder__row-text{flex:1}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: FormFieldComponent, selector: "val-form-field", inputs: ["label"] }, { kind: "component", type: FieldSchemaEditorComponent, selector: "val-field-schema-editor", inputs: ["props"], outputs: ["save", "changed"] }] }); }
|
|
42600
|
+
`, isInline: true, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__question-section{display:flex;flex-direction:column;gap:10px;padding:10px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-sm, 10px)}.survey-builder__section-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.survey-builder__section-head strong{color:var(--ion-text-color, #000);font-size:.875rem}.survey-builder__presentation{display:flex;flex-direction:column;gap:12px;padding-top:4px}.survey-builder__section,.survey-builder__review{display:flex;flex-direction:column;gap:12px}.survey-builder__steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:16px;margin-bottom:12px}.survey-builder__step{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:8px;background:var(--ion-card-background, var(--ion-background-color, #fff));color:var(--ion-color-medium-shade, #6b6675);font-size:.8125rem;font-weight:700;cursor:pointer}.survey-builder__step span{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:999px;background:var(--ion-color-light, #f4f5f8);color:inherit;font-size:.75rem}.survey-builder__step--active{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__wizard-actions{display:flex;justify-content:flex-end;gap:8px}.survey-builder__review{padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__review strong{color:var(--ion-text-color, #000)}.survey-builder__review span:not(.survey-builder__questions-label){color:var(--ion-color-medium, #92949c);font-size:.875rem}.survey-builder__image-field{display:flex;flex-direction:column;gap:10px}.survey-builder__image-preview{position:relative;width:100%}.survey-builder__image-preview img{display:block;width:100%;aspect-ratio:16 / 9;object-fit:contain;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;background:var(--ion-color-light, #f4f5f8)}.survey-builder__image-clear{position:absolute;top:8px;right:8px;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;border-radius:999px;background:#0009;color:#fff;cursor:pointer}.survey-builder__image-upload{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 18px;border:2px dashed var(--ion-color-dark, #2f2c3a);border-radius:20px;color:var(--ion-color-dark, #2f2c3a);font-size:.875rem;font-weight:600;cursor:pointer}.survey-builder__image-upload:hover{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__image-upload--loading{opacity:.7;cursor:default}.survey-builder__image-upload ion-spinner{width:16px;height:16px}.survey-builder__image-upload input{display:none}.survey-builder__questions-label{font-size:.8125rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ion-color-medium, #92949c)}.survey-builder__empty{margin:0;font-size:.875rem;color:var(--ion-color-medium, #92949c)}.survey-builder__optional-note{margin:0;color:var(--ion-color-medium, #92949c);font-size:.875rem;line-height:1.35}.survey-builder__row{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__row-head{display:flex;flex-direction:column;gap:8px}.survey-builder__row-text{display:flex;flex-direction:column;gap:2px;min-width:0}.survey-builder__row-text strong{color:var(--ion-text-color, #000);font-size:.9375rem}.survey-builder__row-text span{color:var(--ion-color-medium, #92949c);font-size:.8125rem}.survey-builder__row-actions{display:flex;gap:4px;flex-wrap:wrap}.survey-builder__row-editor{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__row-editor-actions{display:flex;justify-content:flex-end}.survey-builder__error{margin:0;color:var(--ion-color-danger);font-size:.875rem;font-weight:700}@media (min-width: 576px){.survey-builder__row-head{flex-direction:row;align-items:flex-start;justify-content:space-between}.survey-builder__row-text{flex:1}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: FormFieldComponent, selector: "val-form-field", inputs: ["label"] }, { kind: "component", type: FieldSchemaEditorComponent, selector: "val-field-schema-editor", inputs: ["props"], outputs: ["save", "changed"] }] }); }
|
|
42393
42601
|
}
|
|
42394
42602
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SurveyBuilderComponent, decorators: [{
|
|
42395
42603
|
type: Component,
|
|
@@ -42406,7 +42614,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42406
42614
|
<div class="survey-builder">
|
|
42407
42615
|
@if (isWizard()) {
|
|
42408
42616
|
<nav class="survey-builder__steps" [attr.aria-label]="t('wizardStepsLabel')">
|
|
42409
|
-
@for (step of wizardSteps; track step.id; let i = $index) {
|
|
42617
|
+
@for (step of wizardSteps(); track step.id; let i = $index) {
|
|
42410
42618
|
<button
|
|
42411
42619
|
type="button"
|
|
42412
42620
|
class="survey-builder__step"
|
|
@@ -42415,7 +42623,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42415
42623
|
(click)="goToStep(i)"
|
|
42416
42624
|
>
|
|
42417
42625
|
<span>{{ i + 1 }}</span>
|
|
42418
|
-
{{
|
|
42626
|
+
{{ step.label }}
|
|
42419
42627
|
</button>
|
|
42420
42628
|
}
|
|
42421
42629
|
</nav>
|
|
@@ -42432,6 +42640,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42432
42640
|
|
|
42433
42641
|
@if (showWizardSection(0)) {
|
|
42434
42642
|
<section class="survey-builder__section">
|
|
42643
|
+
<val-form-field [label]="t('surveyNameLabel')">
|
|
42644
|
+
<val-text-input [props]="{ control: surveyNameControl, placeholder: t('surveyNamePlaceholder') }" />
|
|
42645
|
+
</val-form-field>
|
|
42435
42646
|
<val-form-field [label]="t('titleLabel')">
|
|
42436
42647
|
<val-text-input [props]="{ control: titleControl, placeholder: t('titlePlaceholder') }" />
|
|
42437
42648
|
</val-form-field>
|
|
@@ -42557,7 +42768,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42557
42768
|
</div>
|
|
42558
42769
|
}
|
|
42559
42770
|
|
|
42560
|
-
@if (showWizardSection(
|
|
42771
|
+
@if (showWizardSection(closeStep())) {
|
|
42561
42772
|
<section class="survey-builder__section">
|
|
42562
42773
|
<span class="survey-builder__questions-label">{{ t('stepClose') }}</span>
|
|
42563
42774
|
<p class="survey-builder__optional-note">{{ t('successOptionalNote') }}</p>
|
|
@@ -42604,7 +42815,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42604
42815
|
</section>
|
|
42605
42816
|
}
|
|
42606
42817
|
|
|
42607
|
-
@if (
|
|
42818
|
+
@if (showCurrentSectionQuestionStep()) {
|
|
42608
42819
|
<div class="survey-builder__questions">
|
|
42609
42820
|
<span class="survey-builder__questions-label">{{ t('questionsLabel') }}</span>
|
|
42610
42821
|
|
|
@@ -42612,68 +42823,113 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42612
42823
|
<p class="survey-builder__empty">{{ t('noQuestions') }}</p>
|
|
42613
42824
|
}
|
|
42614
42825
|
|
|
42615
|
-
@for (
|
|
42616
|
-
|
|
42617
|
-
|
|
42618
|
-
|
|
42619
|
-
|
|
42620
|
-
<
|
|
42621
|
-
|
|
42622
|
-
|
|
42623
|
-
|
|
42624
|
-
|
|
42625
|
-
|
|
42626
|
-
|
|
42627
|
-
|
|
42628
|
-
|
|
42629
|
-
|
|
42630
|
-
|
|
42631
|
-
(onClick)="move(i, 1)"
|
|
42632
|
-
/>
|
|
42633
|
-
<val-button
|
|
42634
|
-
[props]="iconAction('q-copy-' + row.id, 'copy-outline', t('duplicateQuestion'))"
|
|
42635
|
-
(onClick)="duplicate(row)"
|
|
42636
|
-
/>
|
|
42637
|
-
<val-button
|
|
42638
|
-
[props]="iconAction('q-edit-' + row.id, 'create-outline', t('editQuestion'))"
|
|
42639
|
-
(onClick)="toggleEdit(row)"
|
|
42640
|
-
/>
|
|
42641
|
-
<val-button
|
|
42642
|
-
[props]="iconAction('q-remove-' + row.id, 'trash-outline', t('removeQuestion'), false, 'danger')"
|
|
42643
|
-
(onClick)="removeQuestion(row)"
|
|
42644
|
-
/>
|
|
42826
|
+
@for (group of questionGroups(); track group.id; let sectionIndex = $index) {
|
|
42827
|
+
@if (wizardStep() === sectionStepIndex(sectionIndex)) {
|
|
42828
|
+
<section class="survey-builder__question-section">
|
|
42829
|
+
<div class="survey-builder__section-head">
|
|
42830
|
+
<div>
|
|
42831
|
+
<strong>{{ group.label || t('sectionQuestionsLabel') }}</strong>
|
|
42832
|
+
<div class="survey-builder__section-subtitle">
|
|
42833
|
+
<val-form-field [label]="t('sectionSubtitleLabel')">
|
|
42834
|
+
<val-text-input
|
|
42835
|
+
[props]="{
|
|
42836
|
+
control: sectionSubtitleControl(group.id),
|
|
42837
|
+
placeholder: t('sectionSubtitlePlaceholder'),
|
|
42838
|
+
}"
|
|
42839
|
+
/>
|
|
42840
|
+
</val-form-field>
|
|
42841
|
+
</div>
|
|
42645
42842
|
</div>
|
|
42843
|
+
<val-button
|
|
42844
|
+
[props]="{
|
|
42845
|
+
token: 'survey-builder-add-question-' + group.id,
|
|
42846
|
+
text: t('addQuestionToSection'),
|
|
42847
|
+
color: 'dark',
|
|
42848
|
+
fill: 'outline',
|
|
42849
|
+
shape: 'round',
|
|
42850
|
+
size: 'small',
|
|
42851
|
+
type: 'button',
|
|
42852
|
+
state: 'ENABLED',
|
|
42853
|
+
icon: { name: 'add-outline', slot: 'start' },
|
|
42854
|
+
}"
|
|
42855
|
+
(onClick)="addQuestion(group.id)"
|
|
42856
|
+
/>
|
|
42646
42857
|
</div>
|
|
42647
42858
|
|
|
42648
|
-
@
|
|
42649
|
-
|
|
42650
|
-
|
|
42651
|
-
|
|
42652
|
-
|
|
42653
|
-
|
|
42654
|
-
|
|
42655
|
-
|
|
42656
|
-
|
|
42657
|
-
|
|
42658
|
-
|
|
42659
|
-
|
|
42660
|
-
|
|
42661
|
-
|
|
42662
|
-
|
|
42663
|
-
|
|
42664
|
-
|
|
42665
|
-
|
|
42666
|
-
|
|
42667
|
-
|
|
42668
|
-
|
|
42669
|
-
|
|
42859
|
+
@for (row of group.rows; track row.id; let i = $index; let first = $first; let last = $last) {
|
|
42860
|
+
@let globalIndex = rowGlobalIndex(group.id, i);
|
|
42861
|
+
<div class="survey-builder__row">
|
|
42862
|
+
<div class="survey-builder__row-head">
|
|
42863
|
+
<div class="survey-builder__row-text">
|
|
42864
|
+
<strong>{{ row.label || t('untitledQuestion') }}</strong>
|
|
42865
|
+
<span>
|
|
42866
|
+
{{
|
|
42867
|
+
typeLabel(row.type) +
|
|
42868
|
+
(row.required ? ' · ' + t('requiredTag') : '') +
|
|
42869
|
+
(row.sectionLabel ? ' · ' + row.sectionLabel : '')
|
|
42870
|
+
}}
|
|
42871
|
+
</span>
|
|
42872
|
+
</div>
|
|
42873
|
+
<div class="survey-builder__row-actions">
|
|
42874
|
+
<val-button
|
|
42875
|
+
[props]="iconAction('q-add-' + row.id, 'add-outline', addQuestionAriaLabel(row.sectionLabel), false)"
|
|
42876
|
+
(onClick)="addQuestion(row.sectionId || group.id)"
|
|
42877
|
+
/>
|
|
42878
|
+
<val-button
|
|
42879
|
+
[props]="iconAction('q-up-' + row.id, 'arrow-up-outline', t('moveUp'), first)"
|
|
42880
|
+
(onClick)="move(globalIndex, -1)"
|
|
42881
|
+
/>
|
|
42882
|
+
<val-button
|
|
42883
|
+
[props]="iconAction('q-down-' + row.id, 'arrow-down-outline', t('moveDown'), last)"
|
|
42884
|
+
(onClick)="move(globalIndex, 1)"
|
|
42885
|
+
/>
|
|
42886
|
+
<val-button
|
|
42887
|
+
[props]="iconAction('q-copy-' + row.id, 'copy-outline', t('duplicateQuestion'))"
|
|
42888
|
+
(onClick)="duplicate(row)"
|
|
42889
|
+
/>
|
|
42890
|
+
<val-button
|
|
42891
|
+
[props]="iconAction('q-edit-' + row.id, 'create-outline', t('editQuestion'))"
|
|
42892
|
+
(onClick)="toggleEdit(row)"
|
|
42893
|
+
/>
|
|
42894
|
+
<val-button
|
|
42895
|
+
[props]="iconAction('q-remove-' + row.id, 'trash-outline', t('removeQuestion'), false, 'danger')"
|
|
42896
|
+
(onClick)="removeQuestion(row)"
|
|
42897
|
+
/>
|
|
42898
|
+
</div>
|
|
42670
42899
|
</div>
|
|
42900
|
+
|
|
42901
|
+
@if (editingId() === row.id) {
|
|
42902
|
+
<div class="survey-builder__row-editor">
|
|
42903
|
+
<val-field-schema-editor
|
|
42904
|
+
#editor
|
|
42905
|
+
[props]="editorProps(row)"
|
|
42906
|
+
(changed)="draftQuestion($event)"
|
|
42907
|
+
(save)="applyQuestion($event)"
|
|
42908
|
+
/>
|
|
42909
|
+
<div class="survey-builder__row-editor-actions">
|
|
42910
|
+
<val-button
|
|
42911
|
+
[props]="{
|
|
42912
|
+
token: 'q-done-' + row.id,
|
|
42913
|
+
text: t('doneEditing'),
|
|
42914
|
+
color: 'dark',
|
|
42915
|
+
fill: 'solid',
|
|
42916
|
+
shape: 'round',
|
|
42917
|
+
size: 'default',
|
|
42918
|
+
type: 'button',
|
|
42919
|
+
state: 'ENABLED',
|
|
42920
|
+
}"
|
|
42921
|
+
(onClick)="editor.submit()"
|
|
42922
|
+
/>
|
|
42923
|
+
</div>
|
|
42924
|
+
</div>
|
|
42925
|
+
}
|
|
42671
42926
|
</div>
|
|
42672
42927
|
}
|
|
42673
|
-
</
|
|
42928
|
+
</section>
|
|
42929
|
+
}
|
|
42674
42930
|
}
|
|
42675
42931
|
|
|
42676
|
-
|
|
42932
|
+
<val-button
|
|
42677
42933
|
[props]="{
|
|
42678
42934
|
token: 'survey-builder-add-question',
|
|
42679
42935
|
text: t('addQuestion'),
|
|
@@ -42685,12 +42941,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42685
42941
|
state: 'ENABLED',
|
|
42686
42942
|
icon: { name: 'add-outline', slot: 'start' },
|
|
42687
42943
|
}"
|
|
42688
|
-
(onClick)="addQuestion()"
|
|
42944
|
+
(onClick)="addQuestion(questionGroups()[0]?.id)"
|
|
42689
42945
|
/>
|
|
42690
42946
|
</div>
|
|
42691
42947
|
}
|
|
42692
42948
|
|
|
42693
|
-
@if (showWizardSection(
|
|
42949
|
+
@if (showWizardSection(reviewStep())) {
|
|
42694
42950
|
<section class="survey-builder__review">
|
|
42695
42951
|
<span class="survey-builder__questions-label">{{ t('reviewTitle') }}</span>
|
|
42696
42952
|
<strong>{{ titleControl.value || t('untitledQuestion') }}</strong>
|
|
@@ -42713,7 +42969,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42713
42969
|
@if (wizardStep() > 0) {
|
|
42714
42970
|
<val-button [props]="wizardBackProps()" (onClick)="previousStep()" />
|
|
42715
42971
|
}
|
|
42716
|
-
@if (wizardStep() < wizardSteps.length - 1) {
|
|
42972
|
+
@if (wizardStep() < wizardSteps().length - 1) {
|
|
42717
42973
|
<val-button [props]="wizardNextProps()" (onClick)="nextStep()" />
|
|
42718
42974
|
} @else {
|
|
42719
42975
|
<val-button [props]="saveProps()" (onClick)="save()" />
|
|
@@ -42723,7 +42979,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42723
42979
|
<val-button [props]="saveProps()" (onClick)="save()" />
|
|
42724
42980
|
}
|
|
42725
42981
|
</div>
|
|
42726
|
-
`, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__presentation{display:flex;flex-direction:column;gap:12px;padding-top:4px}.survey-builder__section,.survey-builder__review{display:flex;flex-direction:column;gap:12px}.survey-builder__steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:16px;margin-bottom:12px}.survey-builder__step{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:8px;background:var(--ion-card-background, var(--ion-background-color, #fff));color:var(--ion-color-medium-shade, #6b6675);font-size:.8125rem;font-weight:700;cursor:pointer}.survey-builder__step span{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:999px;background:var(--ion-color-light, #f4f5f8);color:inherit;font-size:.75rem}.survey-builder__step--active{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__wizard-actions{display:flex;justify-content:flex-end;gap:8px}.survey-builder__review{padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__review strong{color:var(--ion-text-color, #000)}.survey-builder__review span:not(.survey-builder__questions-label){color:var(--ion-color-medium, #92949c);font-size:.875rem}.survey-builder__image-field{display:flex;flex-direction:column;gap:10px}.survey-builder__image-preview{position:relative;width:100%}.survey-builder__image-preview img{display:block;width:100%;aspect-ratio:16 / 9;object-fit:contain;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;background:var(--ion-color-light, #f4f5f8)}.survey-builder__image-clear{position:absolute;top:8px;right:8px;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;border-radius:999px;background:#0009;color:#fff;cursor:pointer}.survey-builder__image-upload{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 18px;border:2px dashed var(--ion-color-dark, #2f2c3a);border-radius:20px;color:var(--ion-color-dark, #2f2c3a);font-size:.875rem;font-weight:600;cursor:pointer}.survey-builder__image-upload:hover{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__image-upload--loading{opacity:.7;cursor:default}.survey-builder__image-upload ion-spinner{width:16px;height:16px}.survey-builder__image-upload input{display:none}.survey-builder__questions-label{font-size:.8125rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ion-color-medium, #92949c)}.survey-builder__empty{margin:0;font-size:.875rem;color:var(--ion-color-medium, #92949c)}.survey-builder__optional-note{margin:0;color:var(--ion-color-medium, #92949c);font-size:.875rem;line-height:1.35}.survey-builder__row{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__row-head{display:flex;flex-direction:column;gap:8px}.survey-builder__row-text{display:flex;flex-direction:column;gap:2px;min-width:0}.survey-builder__row-text strong{color:var(--ion-text-color, #000);font-size:.9375rem}.survey-builder__row-text span{color:var(--ion-color-medium, #92949c);font-size:.8125rem}.survey-builder__row-actions{display:flex;gap:4px;flex-wrap:wrap}.survey-builder__row-editor{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__row-editor-actions{display:flex;justify-content:flex-end}.survey-builder__error{margin:0;color:var(--ion-color-danger);font-size:.875rem;font-weight:700}@media (min-width: 576px){.survey-builder__row-head{flex-direction:row;align-items:flex-start;justify-content:space-between}.survey-builder__row-text{flex:1}}\n"] }]
|
|
42982
|
+
`, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__question-section{display:flex;flex-direction:column;gap:10px;padding:10px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-sm, 10px)}.survey-builder__section-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.survey-builder__section-head strong{color:var(--ion-text-color, #000);font-size:.875rem}.survey-builder__presentation{display:flex;flex-direction:column;gap:12px;padding-top:4px}.survey-builder__section,.survey-builder__review{display:flex;flex-direction:column;gap:12px}.survey-builder__steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:16px;margin-bottom:12px}.survey-builder__step{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:8px;background:var(--ion-card-background, var(--ion-background-color, #fff));color:var(--ion-color-medium-shade, #6b6675);font-size:.8125rem;font-weight:700;cursor:pointer}.survey-builder__step span{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:999px;background:var(--ion-color-light, #f4f5f8);color:inherit;font-size:.75rem}.survey-builder__step--active{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__wizard-actions{display:flex;justify-content:flex-end;gap:8px}.survey-builder__review{padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__review strong{color:var(--ion-text-color, #000)}.survey-builder__review span:not(.survey-builder__questions-label){color:var(--ion-color-medium, #92949c);font-size:.875rem}.survey-builder__image-field{display:flex;flex-direction:column;gap:10px}.survey-builder__image-preview{position:relative;width:100%}.survey-builder__image-preview img{display:block;width:100%;aspect-ratio:16 / 9;object-fit:contain;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;background:var(--ion-color-light, #f4f5f8)}.survey-builder__image-clear{position:absolute;top:8px;right:8px;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;border-radius:999px;background:#0009;color:#fff;cursor:pointer}.survey-builder__image-upload{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 18px;border:2px dashed var(--ion-color-dark, #2f2c3a);border-radius:20px;color:var(--ion-color-dark, #2f2c3a);font-size:.875rem;font-weight:600;cursor:pointer}.survey-builder__image-upload:hover{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__image-upload--loading{opacity:.7;cursor:default}.survey-builder__image-upload ion-spinner{width:16px;height:16px}.survey-builder__image-upload input{display:none}.survey-builder__questions-label{font-size:.8125rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ion-color-medium, #92949c)}.survey-builder__empty{margin:0;font-size:.875rem;color:var(--ion-color-medium, #92949c)}.survey-builder__optional-note{margin:0;color:var(--ion-color-medium, #92949c);font-size:.875rem;line-height:1.35}.survey-builder__row{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__row-head{display:flex;flex-direction:column;gap:8px}.survey-builder__row-text{display:flex;flex-direction:column;gap:2px;min-width:0}.survey-builder__row-text strong{color:var(--ion-text-color, #000);font-size:.9375rem}.survey-builder__row-text span{color:var(--ion-color-medium, #92949c);font-size:.8125rem}.survey-builder__row-actions{display:flex;gap:4px;flex-wrap:wrap}.survey-builder__row-editor{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__row-editor-actions{display:flex;justify-content:flex-end}.survey-builder__error{margin:0;color:var(--ion-color-danger);font-size:.875rem;font-weight:700}@media (min-width: 576px){.survey-builder__row-head{flex-direction:row;align-items:flex-start;justify-content:space-between}.survey-builder__row-text{flex:1}}\n"] }]
|
|
42727
42983
|
}], ctorParameters: () => [], propDecorators: { props: [{
|
|
42728
42984
|
type: Input
|
|
42729
42985
|
}], saved: [{
|
|
@@ -51175,6 +51431,39 @@ class DataTableComponent {
|
|
|
51175
51431
|
get visibleColumns() {
|
|
51176
51432
|
return this._visibleColumns;
|
|
51177
51433
|
}
|
|
51434
|
+
get mobileCardLayout() {
|
|
51435
|
+
return this.props.mobileCardLayout || {};
|
|
51436
|
+
}
|
|
51437
|
+
get mobileCardLayoutActive() {
|
|
51438
|
+
return Object.keys(this.mobileCardLayout).length > 0;
|
|
51439
|
+
}
|
|
51440
|
+
get mobileCardPrimaryColumns() {
|
|
51441
|
+
return this.mobileCardLayout.primary ? this.resolveMobileCardColumns(this.mobileCardLayout.primary) : [];
|
|
51442
|
+
}
|
|
51443
|
+
get mobileCardSecondaryColumns() {
|
|
51444
|
+
return this.mobileCardLayout.secondary ? this.resolveMobileCardColumns(this.mobileCardLayout.secondary) : [];
|
|
51445
|
+
}
|
|
51446
|
+
get mobileCardMetaColumns() {
|
|
51447
|
+
return this.resolveMobileCardColumns(this.mobileCardLayout.meta);
|
|
51448
|
+
}
|
|
51449
|
+
get mobileCardStatusColumns() {
|
|
51450
|
+
return this.resolveMobileCardColumns(this.mobileCardLayout.status);
|
|
51451
|
+
}
|
|
51452
|
+
get mobileCardAdditionalColumns() {
|
|
51453
|
+
if (this.mobileCardLayoutActive && this.mobileCardLayout.showUnmappedColumns === false) {
|
|
51454
|
+
return [];
|
|
51455
|
+
}
|
|
51456
|
+
const mapped = new Set([
|
|
51457
|
+
...this.mobileCardPrimaryColumns.map(c => c.key),
|
|
51458
|
+
...this.mobileCardSecondaryColumns.map(c => c.key),
|
|
51459
|
+
...this.mobileCardMetaColumns.map(c => c.key),
|
|
51460
|
+
...this.mobileCardStatusColumns.map(c => c.key),
|
|
51461
|
+
]);
|
|
51462
|
+
if (mapped.size === 0) {
|
|
51463
|
+
return this.visibleColumns;
|
|
51464
|
+
}
|
|
51465
|
+
return this.visibleColumns.filter(column => !mapped.has(column.key));
|
|
51466
|
+
}
|
|
51178
51467
|
get totalColumns() {
|
|
51179
51468
|
let count = this.visibleColumns.length;
|
|
51180
51469
|
if (this.props.showSelectionColumn)
|
|
@@ -51276,6 +51565,21 @@ class DataTableComponent {
|
|
|
51276
51565
|
return 'none';
|
|
51277
51566
|
return this.currentSort.direction === 'asc' ? 'ascending' : 'descending';
|
|
51278
51567
|
}
|
|
51568
|
+
getMobileCardFieldAriaLabel(column, row) {
|
|
51569
|
+
const value = this.getCellValue(row, column);
|
|
51570
|
+
const textValue = value === null || value === undefined ? '' : `${value}`;
|
|
51571
|
+
return textValue ? `${column.label}: ${textValue}` : column.label;
|
|
51572
|
+
}
|
|
51573
|
+
resolveMobileCardColumns(keys) {
|
|
51574
|
+
if (!keys)
|
|
51575
|
+
return [];
|
|
51576
|
+
const orderedKeys = Array.isArray(keys) ? keys : [keys];
|
|
51577
|
+
const columnByKey = new Map(this.visibleColumns.map(column => [column.key, column]));
|
|
51578
|
+
return orderedKeys
|
|
51579
|
+
.map(key => columnByKey.get(key))
|
|
51580
|
+
.filter((column) => Boolean(column))
|
|
51581
|
+
.filter((column, index, list) => list.findIndex(c => c.key === column.key) === index);
|
|
51582
|
+
}
|
|
51279
51583
|
getRowNumber(index) {
|
|
51280
51584
|
const start = this.props.rowNumberStart ?? 1;
|
|
51281
51585
|
if (this.props.pagination) {
|
|
@@ -51662,22 +51966,139 @@ class DataTableComponent {
|
|
|
51662
51966
|
|
|
51663
51967
|
<!-- Card body with fields -->
|
|
51664
51968
|
<div class="card-body">
|
|
51665
|
-
@
|
|
51666
|
-
|
|
51667
|
-
|
|
51668
|
-
|
|
51669
|
-
|
|
51670
|
-
|
|
51671
|
-
|
|
51672
|
-
|
|
51673
|
-
|
|
51674
|
-
|
|
51675
|
-
|
|
51676
|
-
|
|
51677
|
-
|
|
51678
|
-
|
|
51679
|
-
|
|
51680
|
-
|
|
51969
|
+
@if (mobileCardLayoutActive) {
|
|
51970
|
+
@if (mobileCardPrimaryColumns.length) {
|
|
51971
|
+
@for (column of mobileCardPrimaryColumns; track column.key) {
|
|
51972
|
+
<div
|
|
51973
|
+
class="card-field card-field--primary"
|
|
51974
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
51975
|
+
>
|
|
51976
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
51977
|
+
<span class="card-field__value">
|
|
51978
|
+
@if (column.cellTemplate) {
|
|
51979
|
+
<ng-container
|
|
51980
|
+
*ngTemplateOutlet="
|
|
51981
|
+
column.cellTemplate;
|
|
51982
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
51983
|
+
"
|
|
51984
|
+
></ng-container>
|
|
51985
|
+
} @else {
|
|
51986
|
+
{{ getFormattedValue(row, column) }}
|
|
51987
|
+
}
|
|
51988
|
+
</span>
|
|
51989
|
+
</div>
|
|
51990
|
+
}
|
|
51991
|
+
}
|
|
51992
|
+
|
|
51993
|
+
@if (mobileCardSecondaryColumns.length) {
|
|
51994
|
+
@for (column of mobileCardSecondaryColumns; track column.key) {
|
|
51995
|
+
<div
|
|
51996
|
+
class="card-field card-field--secondary"
|
|
51997
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
51998
|
+
>
|
|
51999
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52000
|
+
<span class="card-field__value">
|
|
52001
|
+
@if (column.cellTemplate) {
|
|
52002
|
+
<ng-container
|
|
52003
|
+
*ngTemplateOutlet="
|
|
52004
|
+
column.cellTemplate;
|
|
52005
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52006
|
+
"
|
|
52007
|
+
></ng-container>
|
|
52008
|
+
} @else {
|
|
52009
|
+
{{ getFormattedValue(row, column) }}
|
|
52010
|
+
}
|
|
52011
|
+
</span>
|
|
52012
|
+
</div>
|
|
52013
|
+
}
|
|
52014
|
+
}
|
|
52015
|
+
|
|
52016
|
+
@if (mobileCardMetaColumns.length) {
|
|
52017
|
+
@for (column of mobileCardMetaColumns; track column.key) {
|
|
52018
|
+
<div
|
|
52019
|
+
class="card-field card-field--meta"
|
|
52020
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52021
|
+
>
|
|
52022
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52023
|
+
<span class="card-field__value">
|
|
52024
|
+
@if (column.cellTemplate) {
|
|
52025
|
+
<ng-container
|
|
52026
|
+
*ngTemplateOutlet="
|
|
52027
|
+
column.cellTemplate;
|
|
52028
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52029
|
+
"
|
|
52030
|
+
></ng-container>
|
|
52031
|
+
} @else {
|
|
52032
|
+
{{ getFormattedValue(row, column) }}
|
|
52033
|
+
}
|
|
52034
|
+
</span>
|
|
52035
|
+
</div>
|
|
52036
|
+
}
|
|
52037
|
+
}
|
|
52038
|
+
|
|
52039
|
+
@if (mobileCardStatusColumns.length) {
|
|
52040
|
+
@for (column of mobileCardStatusColumns; track column.key) {
|
|
52041
|
+
<div
|
|
52042
|
+
class="card-field card-field--status"
|
|
52043
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52044
|
+
>
|
|
52045
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52046
|
+
<span class="card-field__value">
|
|
52047
|
+
@if (column.cellTemplate) {
|
|
52048
|
+
<ng-container
|
|
52049
|
+
*ngTemplateOutlet="
|
|
52050
|
+
column.cellTemplate;
|
|
52051
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52052
|
+
"
|
|
52053
|
+
></ng-container>
|
|
52054
|
+
} @else {
|
|
52055
|
+
{{ getFormattedValue(row, column) }}
|
|
52056
|
+
}
|
|
52057
|
+
</span>
|
|
52058
|
+
</div>
|
|
52059
|
+
}
|
|
52060
|
+
}
|
|
52061
|
+
|
|
52062
|
+
@if (mobileCardAdditionalColumns.length) {
|
|
52063
|
+
@for (column of mobileCardAdditionalColumns; track column.key) {
|
|
52064
|
+
<div
|
|
52065
|
+
class="card-field card-field--meta"
|
|
52066
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52067
|
+
>
|
|
52068
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52069
|
+
<span class="card-field__value">
|
|
52070
|
+
@if (column.cellTemplate) {
|
|
52071
|
+
<ng-container
|
|
52072
|
+
*ngTemplateOutlet="
|
|
52073
|
+
column.cellTemplate;
|
|
52074
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52075
|
+
"
|
|
52076
|
+
></ng-container>
|
|
52077
|
+
} @else {
|
|
52078
|
+
{{ getFormattedValue(row, column) }}
|
|
52079
|
+
}
|
|
52080
|
+
</span>
|
|
52081
|
+
</div>
|
|
52082
|
+
}
|
|
52083
|
+
}
|
|
52084
|
+
} @else {
|
|
52085
|
+
@for (column of visibleColumns; track column.key) {
|
|
52086
|
+
<div class="card-field">
|
|
52087
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52088
|
+
<span class="card-field__value">
|
|
52089
|
+
@if (column.cellTemplate) {
|
|
52090
|
+
<ng-container
|
|
52091
|
+
*ngTemplateOutlet="
|
|
52092
|
+
column.cellTemplate;
|
|
52093
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52094
|
+
"
|
|
52095
|
+
></ng-container>
|
|
52096
|
+
} @else {
|
|
52097
|
+
{{ getFormattedValue(row, column) }}
|
|
52098
|
+
}
|
|
52099
|
+
</span>
|
|
52100
|
+
</div>
|
|
52101
|
+
}
|
|
51681
52102
|
}
|
|
51682
52103
|
</div>
|
|
51683
52104
|
|
|
@@ -51766,7 +52187,7 @@ class DataTableComponent {
|
|
|
51766
52187
|
</div>
|
|
51767
52188
|
}
|
|
51768
52189
|
</div>
|
|
51769
|
-
`, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--val-radius-xs: 10px;--val-radius-sm: 16px;--val-radius-md: 20px;--val-radius-lg: 28px;--val-radius-xl: 36px;--val-radius-full: 999px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}:host{display:block}.data-table-container{--dt-elevation-none: none;--dt-elevation-low: 0 1px 3px rgba(0, 0, 0, .08), 0 1px 2px rgba(0, 0, 0, .04);--dt-elevation-medium: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--dt-elevation-high: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--dt-primary: var(--ion-color-primary, #4f46e5);--dt-primary-rgb: var(--ion-color-primary-rgb, 79, 70, 229);--dt-surface: var(--ion-background-color, #ffffff);--dt-surface-variant: #f8fafc;--dt-border: #e2e8f0;--dt-text-primary: #1e293b;--dt-text-secondary: #64748b;--dt-text-muted: #94a3b8;--dt-gradient-start: #6366f1;--dt-gradient-end: #8b5cf6;--dt-border-radius: 16px;--dt-cell-padding-x: 16px;--dt-cell-padding-y: 14px;--dt-header-padding-y: 12px}.data-table-container{position:relative;background:var(--dt-surface);border-radius:var(--dt-border-radius);box-shadow:var(--dt-elevation-medium);border:1px solid var(--dt-border);overflow:hidden}.data-table-container.elevation-none{box-shadow:var(--dt-elevation-none)}.data-table-container.elevation-low{box-shadow:var(--dt-elevation-low)}.data-table-container.elevation-high{box-shadow:var(--dt-elevation-high)}.data-table-container.header-gradient:before{content:\"\";position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,var(--dt-gradient-start),var(--dt-gradient-end));border-radius:var(--dt-border-radius) var(--dt-border-radius) 0 0;z-index:2}.loading-overlay{position:absolute;inset:0;background:#ffffffe6;backdrop-filter:blur(2px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;z-index:10}.loading-overlay ion-spinner{--color: var(--dt-primary);width:32px;height:32px}.loading-message{font-size:.875rem;font-weight:500;color:var(--dt-text-secondary)}.table-wrapper{overflow-x:auto;max-height:var(--max-height)}.table-wrapper.is-loading{opacity:.5;pointer-events:none}.table-wrapper::-webkit-scrollbar{height:8px;width:8px}.table-wrapper::-webkit-scrollbar-track{background:var(--dt-surface-variant);border-radius:4px}.table-wrapper::-webkit-scrollbar-thumb{background:var(--dt-border);border-radius:4px}.table-wrapper::-webkit-scrollbar-thumb:hover{background:var(--dt-text-muted)}table{width:100%;border-collapse:collapse;font-size:.875rem}th,td{padding:var(--dt-cell-padding-y) var(--dt-cell-padding-x);text-align:left;vertical-align:middle}thead{background:var(--dt-surface-variant)}thead th{font-weight:600;font-size:.8125rem;color:var(--dt-text-secondary);white-space:nowrap;position:relative;border-bottom:1px solid var(--dt-border);padding:var(--dt-header-padding-y) var(--dt-cell-padding-x);transition:all .2s ease}thead th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}thead th.sortable:hover{background:#00000008;color:var(--dt-text-primary)}thead th.sorted{color:var(--dt-primary);background:rgba(var(--dt-primary-rgb),.04)}.header-content{display:flex;align-items:center;gap:8px}.sort-icons{display:flex;flex-direction:column;gap:0;opacity:.4;transition:opacity .2s ease}.sortable:hover .sort-icons{opacity:.7}.sorted .sort-icons{opacity:1}.sort-icons ion-icon{font-size:.75rem;color:var(--dt-text-muted);margin:-3px 0;transition:all .2s ease}.sort-icons ion-icon.active{color:var(--dt-primary);transform:scale(1.2)}tbody tr{border-bottom:1px solid var(--dt-border)}tbody tr:last-child{border-bottom:none}tbody tr.clickable{cursor:pointer}tbody tr.selected{background:rgba(var(--dt-primary-rgb),.06)}tbody td{color:var(--dt-text-primary);font-size:.875rem}.hoverable tbody tr:hover:not(.empty-row){background:var(--dt-surface-variant)}.hoverable tbody tr:hover:not(.empty-row).selected{background:rgba(var(--dt-primary-rgb),.08)}.align-left{text-align:left}.align-center{text-align:center}.align-right{text-align:right}.selection-cell{width:52px;min-width:52px;max-width:52px;text-align:center;padding:8px 12px;box-sizing:border-box}.selection-cell ion-checkbox{--size: 20px;--border-radius: 50%;--border-width: 2px;--border-color: var(--dt-border);--border-color-checked: var(--dt-primary);--background: transparent;--background-checked: var(--dt-primary);--checkmark-color: white;--checkmark-width: 2px;margin:0;display:block}.selection-cell ion-checkbox::part(container){border-radius:50%}.selection-cell input[type=radio]{width:20px;height:20px;cursor:pointer;accent-color:var(--dt-primary);margin:0;display:block}.checkbox-circular .selection-cell ion-checkbox{--border-radius: 50%}.checkbox-circular .selection-cell ion-checkbox::part(container){border-radius:50%}.row-number-cell{width:60px;text-align:center;color:var(--dt-text-muted);font-size:.75rem;font-weight:500}.actions-cell{text-align:center;white-space:nowrap}.sticky-start{position:sticky;left:0;background:inherit;z-index:1;box-shadow:2px 0 4px #0000000d}.sticky-end{position:sticky;right:0;background:inherit;z-index:1;box-shadow:-2px 0 4px #0000000d}.empty-row td{padding:64px 16px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--dt-text-secondary)}.empty-icon{font-size:3.5rem;margin-bottom:20px;opacity:.4;color:var(--dt-text-muted)}.empty-title{font-size:1.125rem;font-weight:600;margin:0 0 8px;color:var(--dt-text-primary)}.empty-description{font-size:.875rem;margin:0;max-width:320px;color:var(--dt-text-secondary);line-height:1.5}.pagination-container{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-top:1px solid var(--dt-border);background:var(--dt-surface);flex-wrap:wrap;gap:16px}.pagination-info{display:flex;align-items:center;gap:20px;font-size:.875rem;color:var(--dt-text-secondary)}.pagination-info span{font-weight:500}.page-size-select{--padding-start: 12px;--padding-end: 12px;font-size:.875rem;min-width:140px;--background: var(--dt-surface-variant);--border-radius: 8px}.pagination-controls{display:flex;align-items:center;gap:8px}.pagination-controls ion-button{--padding-start: 10px;--padding-end: 10px;--border-radius: 8px;--background: var(--dt-surface-variant);--background-hover: var(--dt-border);--color: var(--dt-text-secondary);--color-hover: var(--dt-text-primary);margin:0;height:36px;min-width:36px}.pagination-controls ion-button:disabled{opacity:.4}.pagination-controls ion-button ion-icon{font-size:1rem}.page-indicator{padding:0 16px;font-size:.875rem;color:var(--dt-text-primary);font-weight:600;background:var(--dt-surface-variant);border-radius:8px;height:36px;display:flex;align-items:center;min-width:80px;justify-content:center}.bordered th,.bordered td{border:1px solid var(--dt-border)}.striped tbody tr:nth-child(2n){background:var(--dt-surface-variant)}.striped tbody tr:nth-child(2n).selected{background:rgba(var(--dt-primary-rgb),.08)}.sticky-header .table-wrapper{overflow-y:auto}.sticky-header thead{position:sticky;top:0;z-index:5;box-shadow:0 1px 0 var(--dt-border)}.size-small{--dt-cell-padding-x: 12px;--dt-cell-padding-y: 10px;--dt-header-padding-y: 10px}.size-small th,.size-small td{font-size:.8125rem}.size-small thead th{font-size:.75rem}.size-small .selection-cell{width:44px;padding:6px 8px}.size-small .selection-cell ion-checkbox{--size: 18px}.size-small .row-number-cell{width:48px;font-size:.6875rem}.size-small .pagination-container{padding:12px 16px}.size-small .pagination-info,.size-small .page-indicator{font-size:.8125rem}.size-small .pagination-controls ion-button{height:32px;min-width:32px}.size-small .page-indicator{height:32px;min-width:70px}.size-large{--dt-cell-padding-x: 20px;--dt-cell-padding-y: 18px;--dt-header-padding-y: 16px}.size-large th,.size-large td{font-size:.9375rem}.size-large thead th{font-size:.875rem}.size-large .selection-cell{width:60px;padding:12px 16px}.size-large .selection-cell ion-checkbox{--size: 24px}.size-large .row-number-cell{width:72px;font-size:.875rem}.size-large .pagination-container{padding:20px 24px}.size-large .pagination-info,.size-large .page-indicator{font-size:.9375rem}.size-large .pagination-controls ion-button{height:40px;min-width:40px}.size-large .page-indicator{height:40px;min-width:90px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (max-width: 768px){.data-table-container{--dt-border-radius: 12px}.pagination-container{flex-direction:column;align-items:stretch;gap:12px}.pagination-info{justify-content:space-between}.pagination-controls{justify-content:center}}.table-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px;border-bottom:1px solid var(--dt-border);background:var(--dt-surface);flex-wrap:wrap}.table-toolbar:empty{display:none}@media (max-width: 576px){.table-toolbar{flex-direction:column;align-items:stretch;padding:16px}}.status-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:9999px;font-size:.75rem;font-weight:600;white-space:nowrap;letter-spacing:.025em}.status-badge--success{background:#dcfce7;color:#15803d}.status-badge--warning{background:#fef3c7;color:#b45309}.status-badge--danger{background:#fee2e2;color:#dc2626}.status-badge--primary{background:#e0e7ff;color:#4338ca}.status-badge--secondary{background:#f1f5f9;color:#475569}.status-badge--medium{background:#f1f5f9;color:#64748b}.status-badge--tertiary{background:#f3e8ff;color:#7c3aed}.status-badge--filled.status-badge--success{background:#22c55e;color:#fff}.status-badge--filled.status-badge--warning{background:#f59e0b;color:#fff}.status-badge--filled.status-badge--danger{background:#ef4444;color:#fff}.status-badge--filled.status-badge--primary{background:var(--dt-primary);color:#fff}.status-badge--outlined{background:transparent;border:1.5px solid currentColor}.status-badge--outlined.status-badge--success{color:#16a34a}.status-badge--outlined.status-badge--warning{color:#d97706}.status-badge--outlined.status-badge--danger{color:#dc2626}.status-badge--outlined.status-badge--primary{color:var(--dt-primary)}.action-buttons{display:flex;gap:6px;justify-content:center}.action-buttons ion-button{--padding-start: 8px;--padding-end: 8px;--border-radius: 8px;margin:0}.action-buttons ion-button ion-icon{font-size:1.125rem}.card-list{display:none;padding:12px;gap:12px}.data-card{background:var(--dt-surface);border:1px solid var(--dt-border);border-radius:12px;padding:16px;margin-bottom:12px;transition:all .2s ease}.data-card.selected{border-color:var(--dt-primary);background:rgba(var(--dt-primary-rgb),.04);box-shadow:0 0 0 1px var(--dt-primary)}.data-card.clickable{cursor:pointer}.data-card.clickable:hover{box-shadow:var(--dt-elevation-medium);transform:translateY(-2px)}.data-card.clickable:active{transform:translateY(0)}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--dt-border)}.card-selection{display:flex;align-items:center}.card-body{display:flex;flex-direction:column;gap:12px}.card-field{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.card-field__label{font-size:.75rem;font-weight:600;color:var(--dt-text-muted);flex-shrink:0}.card-field__value{font-size:.875rem;color:var(--dt-text-primary);text-align:right;word-break:break-word;font-weight:500}.card-actions{display:flex;justify-content:flex-end;margin-top:16px;padding-top:12px;border-top:1px solid var(--dt-border)}@media (max-width: 768px){.responsive-cards .table-wrapper{display:none}.responsive-cards .card-list{display:block}}:host-context(body.dark) .data-table-container,:host-context(.dark) .data-table-container,:host-context(.ion-palette-dark) .data-table-container,:host-context(html.ion-palette-dark) .data-table-container,:host-context([data-theme=dark]) .data-table-container{--dt-surface: #1e293b;--dt-surface-variant: #334155;--dt-border: #475569;--dt-text-primary: #f1f5f9;--dt-text-secondary: #94a3b8;--dt-text-muted: #64748b}:host-context(body.dark) .loading-overlay,:host-context(.dark) .loading-overlay,:host-context(.ion-palette-dark) .loading-overlay,:host-context(html.ion-palette-dark) .loading-overlay,:host-context([data-theme=dark]) .loading-overlay{background:#1e293be6}:host-context(body.dark) .status-badge--success,:host-context(.dark) .status-badge--success,:host-context(.ion-palette-dark) .status-badge--success,:host-context(html.ion-palette-dark) .status-badge--success,:host-context([data-theme=dark]) .status-badge--success{background:#22c55e33;color:#4ade80}:host-context(body.dark) .status-badge--warning,:host-context(.dark) .status-badge--warning,:host-context(.ion-palette-dark) .status-badge--warning,:host-context(html.ion-palette-dark) .status-badge--warning,:host-context([data-theme=dark]) .status-badge--warning{background:#f59e0b33;color:#fbbf24}:host-context(body.dark) .status-badge--danger,:host-context(.dark) .status-badge--danger,:host-context(.ion-palette-dark) .status-badge--danger,:host-context(html.ion-palette-dark) .status-badge--danger,:host-context([data-theme=dark]) .status-badge--danger{background:#ef444433;color:#f87171}:host-context(body.dark) .status-badge--primary,:host-context(.dark) .status-badge--primary,:host-context(.ion-palette-dark) .status-badge--primary,:host-context(html.ion-palette-dark) .status-badge--primary,:host-context([data-theme=dark]) .status-badge--primary{background:#6366f133;color:#a5b4fc}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
52190
|
+
`, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--val-radius-xs: 10px;--val-radius-sm: 16px;--val-radius-md: 20px;--val-radius-lg: 28px;--val-radius-xl: 36px;--val-radius-full: 999px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}:host{display:block}.data-table-container{--dt-elevation-none: none;--dt-elevation-low: 0 1px 3px rgba(0, 0, 0, .08), 0 1px 2px rgba(0, 0, 0, .04);--dt-elevation-medium: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--dt-elevation-high: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--dt-primary: var(--ion-color-primary, #4f46e5);--dt-primary-rgb: var(--ion-color-primary-rgb, 79, 70, 229);--dt-surface: var(--ion-background-color, #ffffff);--dt-surface-variant: #f8fafc;--dt-border: #e2e8f0;--dt-text-primary: #1e293b;--dt-text-secondary: #64748b;--dt-text-muted: #94a3b8;--dt-gradient-start: #6366f1;--dt-gradient-end: #8b5cf6;--dt-border-radius: 16px;--dt-cell-padding-x: 16px;--dt-cell-padding-y: 14px;--dt-header-padding-y: 12px}.data-table-container{position:relative;background:var(--dt-surface);border-radius:var(--dt-border-radius);box-shadow:var(--dt-elevation-medium);border:1px solid var(--dt-border);overflow:hidden}.data-table-container.elevation-none{box-shadow:var(--dt-elevation-none)}.data-table-container.elevation-low{box-shadow:var(--dt-elevation-low)}.data-table-container.elevation-high{box-shadow:var(--dt-elevation-high)}.data-table-container.header-gradient:before{content:\"\";position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,var(--dt-gradient-start),var(--dt-gradient-end));border-radius:var(--dt-border-radius) var(--dt-border-radius) 0 0;z-index:2}.loading-overlay{position:absolute;inset:0;background:#ffffffe6;backdrop-filter:blur(2px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;z-index:10}.loading-overlay ion-spinner{--color: var(--dt-primary);width:32px;height:32px}.loading-message{font-size:.875rem;font-weight:500;color:var(--dt-text-secondary)}.table-wrapper{overflow-x:auto;max-height:var(--max-height)}.table-wrapper.is-loading{opacity:.5;pointer-events:none}.table-wrapper::-webkit-scrollbar{height:8px;width:8px}.table-wrapper::-webkit-scrollbar-track{background:var(--dt-surface-variant);border-radius:4px}.table-wrapper::-webkit-scrollbar-thumb{background:var(--dt-border);border-radius:4px}.table-wrapper::-webkit-scrollbar-thumb:hover{background:var(--dt-text-muted)}table{width:100%;border-collapse:collapse;font-size:.875rem}th,td{padding:var(--dt-cell-padding-y) var(--dt-cell-padding-x);text-align:left;vertical-align:middle}thead{background:var(--dt-surface-variant)}thead th{font-weight:600;font-size:.8125rem;color:var(--dt-text-secondary);white-space:nowrap;position:relative;border-bottom:1px solid var(--dt-border);padding:var(--dt-header-padding-y) var(--dt-cell-padding-x);transition:all .2s ease}thead th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}thead th.sortable:hover{background:#00000008;color:var(--dt-text-primary)}thead th.sorted{color:var(--dt-primary);background:rgba(var(--dt-primary-rgb),.04)}.header-content{display:flex;align-items:center;gap:8px}.sort-icons{display:flex;flex-direction:column;gap:0;opacity:.4;transition:opacity .2s ease}.sortable:hover .sort-icons{opacity:.7}.sorted .sort-icons{opacity:1}.sort-icons ion-icon{font-size:.75rem;color:var(--dt-text-muted);margin:-3px 0;transition:all .2s ease}.sort-icons ion-icon.active{color:var(--dt-primary);transform:scale(1.2)}tbody tr{border-bottom:1px solid var(--dt-border)}tbody tr:last-child{border-bottom:none}tbody tr.clickable{cursor:pointer}tbody tr.selected{background:rgba(var(--dt-primary-rgb),.06)}tbody td{color:var(--dt-text-primary);font-size:.875rem}.hoverable tbody tr:hover:not(.empty-row){background:var(--dt-surface-variant)}.hoverable tbody tr:hover:not(.empty-row).selected{background:rgba(var(--dt-primary-rgb),.08)}.align-left{text-align:left}.align-center{text-align:center}.align-right{text-align:right}.selection-cell{width:52px;min-width:52px;max-width:52px;text-align:center;padding:8px 12px;box-sizing:border-box}.selection-cell ion-checkbox{--size: 20px;--border-radius: 50%;--border-width: 2px;--border-color: var(--dt-border);--border-color-checked: var(--dt-primary);--background: transparent;--background-checked: var(--dt-primary);--checkmark-color: white;--checkmark-width: 2px;margin:0;display:block}.selection-cell ion-checkbox::part(container){border-radius:50%}.selection-cell input[type=radio]{width:20px;height:20px;cursor:pointer;accent-color:var(--dt-primary);margin:0;display:block}.checkbox-circular .selection-cell ion-checkbox{--border-radius: 50%}.checkbox-circular .selection-cell ion-checkbox::part(container){border-radius:50%}.row-number-cell{width:60px;text-align:center;color:var(--dt-text-muted);font-size:.75rem;font-weight:500}.actions-cell{text-align:center;white-space:nowrap}.sticky-start{position:sticky;left:0;background:inherit;z-index:1;box-shadow:2px 0 4px #0000000d}.sticky-end{position:sticky;right:0;background:inherit;z-index:1;box-shadow:-2px 0 4px #0000000d}.empty-row td{padding:64px 16px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--dt-text-secondary)}.empty-icon{font-size:3.5rem;margin-bottom:20px;opacity:.4;color:var(--dt-text-muted)}.empty-title{font-size:1.125rem;font-weight:600;margin:0 0 8px;color:var(--dt-text-primary)}.empty-description{font-size:.875rem;margin:0;max-width:320px;color:var(--dt-text-secondary);line-height:1.5}.pagination-container{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-top:1px solid var(--dt-border);background:var(--dt-surface);flex-wrap:wrap;gap:16px}.pagination-info{display:flex;align-items:center;gap:20px;font-size:.875rem;color:var(--dt-text-secondary)}.pagination-info span{font-weight:500}.page-size-select{--padding-start: 12px;--padding-end: 12px;font-size:.875rem;min-width:140px;--background: var(--dt-surface-variant);--border-radius: 8px}.pagination-controls{display:flex;align-items:center;gap:8px}.pagination-controls ion-button{--padding-start: 10px;--padding-end: 10px;--border-radius: 8px;--background: var(--dt-surface-variant);--background-hover: var(--dt-border);--color: var(--dt-text-secondary);--color-hover: var(--dt-text-primary);margin:0;height:36px;min-width:36px}.pagination-controls ion-button:disabled{opacity:.4}.pagination-controls ion-button ion-icon{font-size:1rem}.page-indicator{padding:0 16px;font-size:.875rem;color:var(--dt-text-primary);font-weight:600;background:var(--dt-surface-variant);border-radius:8px;height:36px;display:flex;align-items:center;min-width:80px;justify-content:center}.bordered th,.bordered td{border:1px solid var(--dt-border)}.striped tbody tr:nth-child(2n){background:var(--dt-surface-variant)}.striped tbody tr:nth-child(2n).selected{background:rgba(var(--dt-primary-rgb),.08)}.sticky-header .table-wrapper{overflow-y:auto}.sticky-header thead{position:sticky;top:0;z-index:5;box-shadow:0 1px 0 var(--dt-border)}.size-small{--dt-cell-padding-x: 12px;--dt-cell-padding-y: 10px;--dt-header-padding-y: 10px}.size-small th,.size-small td{font-size:.8125rem}.size-small thead th{font-size:.75rem}.size-small .selection-cell{width:44px;padding:6px 8px}.size-small .selection-cell ion-checkbox{--size: 18px}.size-small .row-number-cell{width:48px;font-size:.6875rem}.size-small .pagination-container{padding:12px 16px}.size-small .pagination-info,.size-small .page-indicator{font-size:.8125rem}.size-small .pagination-controls ion-button{height:32px;min-width:32px}.size-small .page-indicator{height:32px;min-width:70px}.size-large{--dt-cell-padding-x: 20px;--dt-cell-padding-y: 18px;--dt-header-padding-y: 16px}.size-large th,.size-large td{font-size:.9375rem}.size-large thead th{font-size:.875rem}.size-large .selection-cell{width:60px;padding:12px 16px}.size-large .selection-cell ion-checkbox{--size: 24px}.size-large .row-number-cell{width:72px;font-size:.875rem}.size-large .pagination-container{padding:20px 24px}.size-large .pagination-info,.size-large .page-indicator{font-size:.9375rem}.size-large .pagination-controls ion-button{height:40px;min-width:40px}.size-large .page-indicator{height:40px;min-width:90px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (max-width: 768px){.data-table-container{--dt-border-radius: 12px}.pagination-container{flex-direction:column;align-items:stretch;gap:12px}.pagination-info{justify-content:space-between}.pagination-controls{justify-content:center}}.table-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px;border-bottom:1px solid var(--dt-border);background:var(--dt-surface);flex-wrap:wrap}.table-toolbar:empty{display:none}@media (max-width: 576px){.table-toolbar{flex-direction:column;align-items:stretch;padding:16px}}.status-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:9999px;font-size:.75rem;font-weight:600;white-space:nowrap;letter-spacing:.025em}.status-badge--success{background:#dcfce7;color:#15803d}.status-badge--warning{background:#fef3c7;color:#b45309}.status-badge--danger{background:#fee2e2;color:#dc2626}.status-badge--primary{background:#e0e7ff;color:#4338ca}.status-badge--secondary{background:#f1f5f9;color:#475569}.status-badge--medium{background:#f1f5f9;color:#64748b}.status-badge--tertiary{background:#f3e8ff;color:#7c3aed}.status-badge--filled.status-badge--success{background:#22c55e;color:#fff}.status-badge--filled.status-badge--warning{background:#f59e0b;color:#fff}.status-badge--filled.status-badge--danger{background:#ef4444;color:#fff}.status-badge--filled.status-badge--primary{background:var(--dt-primary);color:#fff}.status-badge--outlined{background:transparent;border:1.5px solid currentColor}.status-badge--outlined.status-badge--success{color:#16a34a}.status-badge--outlined.status-badge--warning{color:#d97706}.status-badge--outlined.status-badge--danger{color:#dc2626}.status-badge--outlined.status-badge--primary{color:var(--dt-primary)}.action-buttons{display:flex;gap:6px;justify-content:center}.action-buttons ion-button{--padding-start: 8px;--padding-end: 8px;--border-radius: 8px;margin:0}.action-buttons ion-button ion-icon{font-size:1.125rem}.card-list{display:none;padding:12px;gap:12px}.data-card{background:var(--dt-surface);border:1px solid var(--dt-border);border-radius:12px;padding:16px;margin-bottom:12px;transition:all .2s ease}.data-card.selected{border-color:var(--dt-primary);background:rgba(var(--dt-primary-rgb),.04);box-shadow:0 0 0 1px var(--dt-primary)}.data-card.clickable{cursor:pointer}.data-card.clickable:hover{box-shadow:var(--dt-elevation-medium);transform:translateY(-2px)}.data-card.clickable:active{transform:translateY(0)}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--dt-border)}.card-selection{display:flex;align-items:center}.card-selection ion-checkbox,.card-selection input[type=radio]{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center}.card-body{display:flex;flex-direction:column;gap:12px}.card-field{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.card-field__label{font-size:.75rem;font-weight:600;color:var(--dt-text-muted);flex-shrink:0}.card-field__value{font-size:.875rem;color:var(--dt-text-primary);text-align:right;word-break:break-word;font-weight:500}.card-field--primary .card-field__label{color:var(--dt-text-primary)}.card-field--primary .card-field__value{font-size:1rem;font-weight:600}.card-field--secondary .card-field__label,.card-field--status .card-field__label{color:var(--dt-text-muted)}.card-field--status .card-field__value{font-size:.8125rem;font-weight:600}.card-actions{display:flex;justify-content:flex-end;margin-top:16px;padding-top:12px;border-top:1px solid var(--dt-border)}@media (max-width: 768px){.responsive-cards .table-wrapper{display:none}.responsive-cards .card-list{display:block}}:host-context(body.dark) .data-table-container,:host-context(.dark) .data-table-container,:host-context(.ion-palette-dark) .data-table-container,:host-context(html.ion-palette-dark) .data-table-container,:host-context([data-theme=dark]) .data-table-container{--dt-surface: #1e293b;--dt-surface-variant: #334155;--dt-border: #475569;--dt-text-primary: #f1f5f9;--dt-text-secondary: #94a3b8;--dt-text-muted: #64748b}:host-context(body.dark) .loading-overlay,:host-context(.dark) .loading-overlay,:host-context(.ion-palette-dark) .loading-overlay,:host-context(html.ion-palette-dark) .loading-overlay,:host-context([data-theme=dark]) .loading-overlay{background:#1e293be6}:host-context(body.dark) .status-badge--success,:host-context(.dark) .status-badge--success,:host-context(.ion-palette-dark) .status-badge--success,:host-context(html.ion-palette-dark) .status-badge--success,:host-context([data-theme=dark]) .status-badge--success{background:#22c55e33;color:#4ade80}:host-context(body.dark) .status-badge--warning,:host-context(.dark) .status-badge--warning,:host-context(.ion-palette-dark) .status-badge--warning,:host-context(html.ion-palette-dark) .status-badge--warning,:host-context([data-theme=dark]) .status-badge--warning{background:#f59e0b33;color:#fbbf24}:host-context(body.dark) .status-badge--danger,:host-context(.dark) .status-badge--danger,:host-context(.ion-palette-dark) .status-badge--danger,:host-context(html.ion-palette-dark) .status-badge--danger,:host-context([data-theme=dark]) .status-badge--danger{background:#ef444433;color:#f87171}:host-context(body.dark) .status-badge--primary,:host-context(.dark) .status-badge--primary,:host-context(.ion-palette-dark) .status-badge--primary,:host-context(html.ion-palette-dark) .status-badge--primary,:host-context([data-theme=dark]) .status-badge--primary{background:#6366f133;color:#a5b4fc}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
51770
52191
|
}
|
|
51771
52192
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataTableComponent, decorators: [{
|
|
51772
52193
|
type: Component,
|
|
@@ -52021,22 +52442,139 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
52021
52442
|
|
|
52022
52443
|
<!-- Card body with fields -->
|
|
52023
52444
|
<div class="card-body">
|
|
52024
|
-
@
|
|
52025
|
-
|
|
52026
|
-
|
|
52027
|
-
|
|
52028
|
-
|
|
52029
|
-
|
|
52030
|
-
|
|
52031
|
-
|
|
52032
|
-
|
|
52033
|
-
|
|
52034
|
-
|
|
52035
|
-
|
|
52036
|
-
|
|
52037
|
-
|
|
52038
|
-
|
|
52039
|
-
|
|
52445
|
+
@if (mobileCardLayoutActive) {
|
|
52446
|
+
@if (mobileCardPrimaryColumns.length) {
|
|
52447
|
+
@for (column of mobileCardPrimaryColumns; track column.key) {
|
|
52448
|
+
<div
|
|
52449
|
+
class="card-field card-field--primary"
|
|
52450
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52451
|
+
>
|
|
52452
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52453
|
+
<span class="card-field__value">
|
|
52454
|
+
@if (column.cellTemplate) {
|
|
52455
|
+
<ng-container
|
|
52456
|
+
*ngTemplateOutlet="
|
|
52457
|
+
column.cellTemplate;
|
|
52458
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52459
|
+
"
|
|
52460
|
+
></ng-container>
|
|
52461
|
+
} @else {
|
|
52462
|
+
{{ getFormattedValue(row, column) }}
|
|
52463
|
+
}
|
|
52464
|
+
</span>
|
|
52465
|
+
</div>
|
|
52466
|
+
}
|
|
52467
|
+
}
|
|
52468
|
+
|
|
52469
|
+
@if (mobileCardSecondaryColumns.length) {
|
|
52470
|
+
@for (column of mobileCardSecondaryColumns; track column.key) {
|
|
52471
|
+
<div
|
|
52472
|
+
class="card-field card-field--secondary"
|
|
52473
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52474
|
+
>
|
|
52475
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52476
|
+
<span class="card-field__value">
|
|
52477
|
+
@if (column.cellTemplate) {
|
|
52478
|
+
<ng-container
|
|
52479
|
+
*ngTemplateOutlet="
|
|
52480
|
+
column.cellTemplate;
|
|
52481
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52482
|
+
"
|
|
52483
|
+
></ng-container>
|
|
52484
|
+
} @else {
|
|
52485
|
+
{{ getFormattedValue(row, column) }}
|
|
52486
|
+
}
|
|
52487
|
+
</span>
|
|
52488
|
+
</div>
|
|
52489
|
+
}
|
|
52490
|
+
}
|
|
52491
|
+
|
|
52492
|
+
@if (mobileCardMetaColumns.length) {
|
|
52493
|
+
@for (column of mobileCardMetaColumns; track column.key) {
|
|
52494
|
+
<div
|
|
52495
|
+
class="card-field card-field--meta"
|
|
52496
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52497
|
+
>
|
|
52498
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52499
|
+
<span class="card-field__value">
|
|
52500
|
+
@if (column.cellTemplate) {
|
|
52501
|
+
<ng-container
|
|
52502
|
+
*ngTemplateOutlet="
|
|
52503
|
+
column.cellTemplate;
|
|
52504
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52505
|
+
"
|
|
52506
|
+
></ng-container>
|
|
52507
|
+
} @else {
|
|
52508
|
+
{{ getFormattedValue(row, column) }}
|
|
52509
|
+
}
|
|
52510
|
+
</span>
|
|
52511
|
+
</div>
|
|
52512
|
+
}
|
|
52513
|
+
}
|
|
52514
|
+
|
|
52515
|
+
@if (mobileCardStatusColumns.length) {
|
|
52516
|
+
@for (column of mobileCardStatusColumns; track column.key) {
|
|
52517
|
+
<div
|
|
52518
|
+
class="card-field card-field--status"
|
|
52519
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52520
|
+
>
|
|
52521
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52522
|
+
<span class="card-field__value">
|
|
52523
|
+
@if (column.cellTemplate) {
|
|
52524
|
+
<ng-container
|
|
52525
|
+
*ngTemplateOutlet="
|
|
52526
|
+
column.cellTemplate;
|
|
52527
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52528
|
+
"
|
|
52529
|
+
></ng-container>
|
|
52530
|
+
} @else {
|
|
52531
|
+
{{ getFormattedValue(row, column) }}
|
|
52532
|
+
}
|
|
52533
|
+
</span>
|
|
52534
|
+
</div>
|
|
52535
|
+
}
|
|
52536
|
+
}
|
|
52537
|
+
|
|
52538
|
+
@if (mobileCardAdditionalColumns.length) {
|
|
52539
|
+
@for (column of mobileCardAdditionalColumns; track column.key) {
|
|
52540
|
+
<div
|
|
52541
|
+
class="card-field card-field--meta"
|
|
52542
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52543
|
+
>
|
|
52544
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52545
|
+
<span class="card-field__value">
|
|
52546
|
+
@if (column.cellTemplate) {
|
|
52547
|
+
<ng-container
|
|
52548
|
+
*ngTemplateOutlet="
|
|
52549
|
+
column.cellTemplate;
|
|
52550
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52551
|
+
"
|
|
52552
|
+
></ng-container>
|
|
52553
|
+
} @else {
|
|
52554
|
+
{{ getFormattedValue(row, column) }}
|
|
52555
|
+
}
|
|
52556
|
+
</span>
|
|
52557
|
+
</div>
|
|
52558
|
+
}
|
|
52559
|
+
}
|
|
52560
|
+
} @else {
|
|
52561
|
+
@for (column of visibleColumns; track column.key) {
|
|
52562
|
+
<div class="card-field">
|
|
52563
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52564
|
+
<span class="card-field__value">
|
|
52565
|
+
@if (column.cellTemplate) {
|
|
52566
|
+
<ng-container
|
|
52567
|
+
*ngTemplateOutlet="
|
|
52568
|
+
column.cellTemplate;
|
|
52569
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52570
|
+
"
|
|
52571
|
+
></ng-container>
|
|
52572
|
+
} @else {
|
|
52573
|
+
{{ getFormattedValue(row, column) }}
|
|
52574
|
+
}
|
|
52575
|
+
</span>
|
|
52576
|
+
</div>
|
|
52577
|
+
}
|
|
52040
52578
|
}
|
|
52041
52579
|
</div>
|
|
52042
52580
|
|
|
@@ -52125,7 +52663,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
52125
52663
|
</div>
|
|
52126
52664
|
}
|
|
52127
52665
|
</div>
|
|
52128
|
-
`, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--val-radius-xs: 10px;--val-radius-sm: 16px;--val-radius-md: 20px;--val-radius-lg: 28px;--val-radius-xl: 36px;--val-radius-full: 999px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}:host{display:block}.data-table-container{--dt-elevation-none: none;--dt-elevation-low: 0 1px 3px rgba(0, 0, 0, .08), 0 1px 2px rgba(0, 0, 0, .04);--dt-elevation-medium: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--dt-elevation-high: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--dt-primary: var(--ion-color-primary, #4f46e5);--dt-primary-rgb: var(--ion-color-primary-rgb, 79, 70, 229);--dt-surface: var(--ion-background-color, #ffffff);--dt-surface-variant: #f8fafc;--dt-border: #e2e8f0;--dt-text-primary: #1e293b;--dt-text-secondary: #64748b;--dt-text-muted: #94a3b8;--dt-gradient-start: #6366f1;--dt-gradient-end: #8b5cf6;--dt-border-radius: 16px;--dt-cell-padding-x: 16px;--dt-cell-padding-y: 14px;--dt-header-padding-y: 12px}.data-table-container{position:relative;background:var(--dt-surface);border-radius:var(--dt-border-radius);box-shadow:var(--dt-elevation-medium);border:1px solid var(--dt-border);overflow:hidden}.data-table-container.elevation-none{box-shadow:var(--dt-elevation-none)}.data-table-container.elevation-low{box-shadow:var(--dt-elevation-low)}.data-table-container.elevation-high{box-shadow:var(--dt-elevation-high)}.data-table-container.header-gradient:before{content:\"\";position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,var(--dt-gradient-start),var(--dt-gradient-end));border-radius:var(--dt-border-radius) var(--dt-border-radius) 0 0;z-index:2}.loading-overlay{position:absolute;inset:0;background:#ffffffe6;backdrop-filter:blur(2px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;z-index:10}.loading-overlay ion-spinner{--color: var(--dt-primary);width:32px;height:32px}.loading-message{font-size:.875rem;font-weight:500;color:var(--dt-text-secondary)}.table-wrapper{overflow-x:auto;max-height:var(--max-height)}.table-wrapper.is-loading{opacity:.5;pointer-events:none}.table-wrapper::-webkit-scrollbar{height:8px;width:8px}.table-wrapper::-webkit-scrollbar-track{background:var(--dt-surface-variant);border-radius:4px}.table-wrapper::-webkit-scrollbar-thumb{background:var(--dt-border);border-radius:4px}.table-wrapper::-webkit-scrollbar-thumb:hover{background:var(--dt-text-muted)}table{width:100%;border-collapse:collapse;font-size:.875rem}th,td{padding:var(--dt-cell-padding-y) var(--dt-cell-padding-x);text-align:left;vertical-align:middle}thead{background:var(--dt-surface-variant)}thead th{font-weight:600;font-size:.8125rem;color:var(--dt-text-secondary);white-space:nowrap;position:relative;border-bottom:1px solid var(--dt-border);padding:var(--dt-header-padding-y) var(--dt-cell-padding-x);transition:all .2s ease}thead th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}thead th.sortable:hover{background:#00000008;color:var(--dt-text-primary)}thead th.sorted{color:var(--dt-primary);background:rgba(var(--dt-primary-rgb),.04)}.header-content{display:flex;align-items:center;gap:8px}.sort-icons{display:flex;flex-direction:column;gap:0;opacity:.4;transition:opacity .2s ease}.sortable:hover .sort-icons{opacity:.7}.sorted .sort-icons{opacity:1}.sort-icons ion-icon{font-size:.75rem;color:var(--dt-text-muted);margin:-3px 0;transition:all .2s ease}.sort-icons ion-icon.active{color:var(--dt-primary);transform:scale(1.2)}tbody tr{border-bottom:1px solid var(--dt-border)}tbody tr:last-child{border-bottom:none}tbody tr.clickable{cursor:pointer}tbody tr.selected{background:rgba(var(--dt-primary-rgb),.06)}tbody td{color:var(--dt-text-primary);font-size:.875rem}.hoverable tbody tr:hover:not(.empty-row){background:var(--dt-surface-variant)}.hoverable tbody tr:hover:not(.empty-row).selected{background:rgba(var(--dt-primary-rgb),.08)}.align-left{text-align:left}.align-center{text-align:center}.align-right{text-align:right}.selection-cell{width:52px;min-width:52px;max-width:52px;text-align:center;padding:8px 12px;box-sizing:border-box}.selection-cell ion-checkbox{--size: 20px;--border-radius: 50%;--border-width: 2px;--border-color: var(--dt-border);--border-color-checked: var(--dt-primary);--background: transparent;--background-checked: var(--dt-primary);--checkmark-color: white;--checkmark-width: 2px;margin:0;display:block}.selection-cell ion-checkbox::part(container){border-radius:50%}.selection-cell input[type=radio]{width:20px;height:20px;cursor:pointer;accent-color:var(--dt-primary);margin:0;display:block}.checkbox-circular .selection-cell ion-checkbox{--border-radius: 50%}.checkbox-circular .selection-cell ion-checkbox::part(container){border-radius:50%}.row-number-cell{width:60px;text-align:center;color:var(--dt-text-muted);font-size:.75rem;font-weight:500}.actions-cell{text-align:center;white-space:nowrap}.sticky-start{position:sticky;left:0;background:inherit;z-index:1;box-shadow:2px 0 4px #0000000d}.sticky-end{position:sticky;right:0;background:inherit;z-index:1;box-shadow:-2px 0 4px #0000000d}.empty-row td{padding:64px 16px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--dt-text-secondary)}.empty-icon{font-size:3.5rem;margin-bottom:20px;opacity:.4;color:var(--dt-text-muted)}.empty-title{font-size:1.125rem;font-weight:600;margin:0 0 8px;color:var(--dt-text-primary)}.empty-description{font-size:.875rem;margin:0;max-width:320px;color:var(--dt-text-secondary);line-height:1.5}.pagination-container{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-top:1px solid var(--dt-border);background:var(--dt-surface);flex-wrap:wrap;gap:16px}.pagination-info{display:flex;align-items:center;gap:20px;font-size:.875rem;color:var(--dt-text-secondary)}.pagination-info span{font-weight:500}.page-size-select{--padding-start: 12px;--padding-end: 12px;font-size:.875rem;min-width:140px;--background: var(--dt-surface-variant);--border-radius: 8px}.pagination-controls{display:flex;align-items:center;gap:8px}.pagination-controls ion-button{--padding-start: 10px;--padding-end: 10px;--border-radius: 8px;--background: var(--dt-surface-variant);--background-hover: var(--dt-border);--color: var(--dt-text-secondary);--color-hover: var(--dt-text-primary);margin:0;height:36px;min-width:36px}.pagination-controls ion-button:disabled{opacity:.4}.pagination-controls ion-button ion-icon{font-size:1rem}.page-indicator{padding:0 16px;font-size:.875rem;color:var(--dt-text-primary);font-weight:600;background:var(--dt-surface-variant);border-radius:8px;height:36px;display:flex;align-items:center;min-width:80px;justify-content:center}.bordered th,.bordered td{border:1px solid var(--dt-border)}.striped tbody tr:nth-child(2n){background:var(--dt-surface-variant)}.striped tbody tr:nth-child(2n).selected{background:rgba(var(--dt-primary-rgb),.08)}.sticky-header .table-wrapper{overflow-y:auto}.sticky-header thead{position:sticky;top:0;z-index:5;box-shadow:0 1px 0 var(--dt-border)}.size-small{--dt-cell-padding-x: 12px;--dt-cell-padding-y: 10px;--dt-header-padding-y: 10px}.size-small th,.size-small td{font-size:.8125rem}.size-small thead th{font-size:.75rem}.size-small .selection-cell{width:44px;padding:6px 8px}.size-small .selection-cell ion-checkbox{--size: 18px}.size-small .row-number-cell{width:48px;font-size:.6875rem}.size-small .pagination-container{padding:12px 16px}.size-small .pagination-info,.size-small .page-indicator{font-size:.8125rem}.size-small .pagination-controls ion-button{height:32px;min-width:32px}.size-small .page-indicator{height:32px;min-width:70px}.size-large{--dt-cell-padding-x: 20px;--dt-cell-padding-y: 18px;--dt-header-padding-y: 16px}.size-large th,.size-large td{font-size:.9375rem}.size-large thead th{font-size:.875rem}.size-large .selection-cell{width:60px;padding:12px 16px}.size-large .selection-cell ion-checkbox{--size: 24px}.size-large .row-number-cell{width:72px;font-size:.875rem}.size-large .pagination-container{padding:20px 24px}.size-large .pagination-info,.size-large .page-indicator{font-size:.9375rem}.size-large .pagination-controls ion-button{height:40px;min-width:40px}.size-large .page-indicator{height:40px;min-width:90px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (max-width: 768px){.data-table-container{--dt-border-radius: 12px}.pagination-container{flex-direction:column;align-items:stretch;gap:12px}.pagination-info{justify-content:space-between}.pagination-controls{justify-content:center}}.table-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px;border-bottom:1px solid var(--dt-border);background:var(--dt-surface);flex-wrap:wrap}.table-toolbar:empty{display:none}@media (max-width: 576px){.table-toolbar{flex-direction:column;align-items:stretch;padding:16px}}.status-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:9999px;font-size:.75rem;font-weight:600;white-space:nowrap;letter-spacing:.025em}.status-badge--success{background:#dcfce7;color:#15803d}.status-badge--warning{background:#fef3c7;color:#b45309}.status-badge--danger{background:#fee2e2;color:#dc2626}.status-badge--primary{background:#e0e7ff;color:#4338ca}.status-badge--secondary{background:#f1f5f9;color:#475569}.status-badge--medium{background:#f1f5f9;color:#64748b}.status-badge--tertiary{background:#f3e8ff;color:#7c3aed}.status-badge--filled.status-badge--success{background:#22c55e;color:#fff}.status-badge--filled.status-badge--warning{background:#f59e0b;color:#fff}.status-badge--filled.status-badge--danger{background:#ef4444;color:#fff}.status-badge--filled.status-badge--primary{background:var(--dt-primary);color:#fff}.status-badge--outlined{background:transparent;border:1.5px solid currentColor}.status-badge--outlined.status-badge--success{color:#16a34a}.status-badge--outlined.status-badge--warning{color:#d97706}.status-badge--outlined.status-badge--danger{color:#dc2626}.status-badge--outlined.status-badge--primary{color:var(--dt-primary)}.action-buttons{display:flex;gap:6px;justify-content:center}.action-buttons ion-button{--padding-start: 8px;--padding-end: 8px;--border-radius: 8px;margin:0}.action-buttons ion-button ion-icon{font-size:1.125rem}.card-list{display:none;padding:12px;gap:12px}.data-card{background:var(--dt-surface);border:1px solid var(--dt-border);border-radius:12px;padding:16px;margin-bottom:12px;transition:all .2s ease}.data-card.selected{border-color:var(--dt-primary);background:rgba(var(--dt-primary-rgb),.04);box-shadow:0 0 0 1px var(--dt-primary)}.data-card.clickable{cursor:pointer}.data-card.clickable:hover{box-shadow:var(--dt-elevation-medium);transform:translateY(-2px)}.data-card.clickable:active{transform:translateY(0)}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--dt-border)}.card-selection{display:flex;align-items:center}.card-body{display:flex;flex-direction:column;gap:12px}.card-field{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.card-field__label{font-size:.75rem;font-weight:600;color:var(--dt-text-muted);flex-shrink:0}.card-field__value{font-size:.875rem;color:var(--dt-text-primary);text-align:right;word-break:break-word;font-weight:500}.card-actions{display:flex;justify-content:flex-end;margin-top:16px;padding-top:12px;border-top:1px solid var(--dt-border)}@media (max-width: 768px){.responsive-cards .table-wrapper{display:none}.responsive-cards .card-list{display:block}}:host-context(body.dark) .data-table-container,:host-context(.dark) .data-table-container,:host-context(.ion-palette-dark) .data-table-container,:host-context(html.ion-palette-dark) .data-table-container,:host-context([data-theme=dark]) .data-table-container{--dt-surface: #1e293b;--dt-surface-variant: #334155;--dt-border: #475569;--dt-text-primary: #f1f5f9;--dt-text-secondary: #94a3b8;--dt-text-muted: #64748b}:host-context(body.dark) .loading-overlay,:host-context(.dark) .loading-overlay,:host-context(.ion-palette-dark) .loading-overlay,:host-context(html.ion-palette-dark) .loading-overlay,:host-context([data-theme=dark]) .loading-overlay{background:#1e293be6}:host-context(body.dark) .status-badge--success,:host-context(.dark) .status-badge--success,:host-context(.ion-palette-dark) .status-badge--success,:host-context(html.ion-palette-dark) .status-badge--success,:host-context([data-theme=dark]) .status-badge--success{background:#22c55e33;color:#4ade80}:host-context(body.dark) .status-badge--warning,:host-context(.dark) .status-badge--warning,:host-context(.ion-palette-dark) .status-badge--warning,:host-context(html.ion-palette-dark) .status-badge--warning,:host-context([data-theme=dark]) .status-badge--warning{background:#f59e0b33;color:#fbbf24}:host-context(body.dark) .status-badge--danger,:host-context(.dark) .status-badge--danger,:host-context(.ion-palette-dark) .status-badge--danger,:host-context(html.ion-palette-dark) .status-badge--danger,:host-context([data-theme=dark]) .status-badge--danger{background:#ef444433;color:#f87171}:host-context(body.dark) .status-badge--primary,:host-context(.dark) .status-badge--primary,:host-context(.ion-palette-dark) .status-badge--primary,:host-context(html.ion-palette-dark) .status-badge--primary,:host-context([data-theme=dark]) .status-badge--primary{background:#6366f133;color:#a5b4fc}\n"] }]
|
|
52666
|
+
`, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--val-radius-xs: 10px;--val-radius-sm: 16px;--val-radius-md: 20px;--val-radius-lg: 28px;--val-radius-xl: 36px;--val-radius-full: 999px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}:host{display:block}.data-table-container{--dt-elevation-none: none;--dt-elevation-low: 0 1px 3px rgba(0, 0, 0, .08), 0 1px 2px rgba(0, 0, 0, .04);--dt-elevation-medium: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--dt-elevation-high: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--dt-primary: var(--ion-color-primary, #4f46e5);--dt-primary-rgb: var(--ion-color-primary-rgb, 79, 70, 229);--dt-surface: var(--ion-background-color, #ffffff);--dt-surface-variant: #f8fafc;--dt-border: #e2e8f0;--dt-text-primary: #1e293b;--dt-text-secondary: #64748b;--dt-text-muted: #94a3b8;--dt-gradient-start: #6366f1;--dt-gradient-end: #8b5cf6;--dt-border-radius: 16px;--dt-cell-padding-x: 16px;--dt-cell-padding-y: 14px;--dt-header-padding-y: 12px}.data-table-container{position:relative;background:var(--dt-surface);border-radius:var(--dt-border-radius);box-shadow:var(--dt-elevation-medium);border:1px solid var(--dt-border);overflow:hidden}.data-table-container.elevation-none{box-shadow:var(--dt-elevation-none)}.data-table-container.elevation-low{box-shadow:var(--dt-elevation-low)}.data-table-container.elevation-high{box-shadow:var(--dt-elevation-high)}.data-table-container.header-gradient:before{content:\"\";position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,var(--dt-gradient-start),var(--dt-gradient-end));border-radius:var(--dt-border-radius) var(--dt-border-radius) 0 0;z-index:2}.loading-overlay{position:absolute;inset:0;background:#ffffffe6;backdrop-filter:blur(2px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;z-index:10}.loading-overlay ion-spinner{--color: var(--dt-primary);width:32px;height:32px}.loading-message{font-size:.875rem;font-weight:500;color:var(--dt-text-secondary)}.table-wrapper{overflow-x:auto;max-height:var(--max-height)}.table-wrapper.is-loading{opacity:.5;pointer-events:none}.table-wrapper::-webkit-scrollbar{height:8px;width:8px}.table-wrapper::-webkit-scrollbar-track{background:var(--dt-surface-variant);border-radius:4px}.table-wrapper::-webkit-scrollbar-thumb{background:var(--dt-border);border-radius:4px}.table-wrapper::-webkit-scrollbar-thumb:hover{background:var(--dt-text-muted)}table{width:100%;border-collapse:collapse;font-size:.875rem}th,td{padding:var(--dt-cell-padding-y) var(--dt-cell-padding-x);text-align:left;vertical-align:middle}thead{background:var(--dt-surface-variant)}thead th{font-weight:600;font-size:.8125rem;color:var(--dt-text-secondary);white-space:nowrap;position:relative;border-bottom:1px solid var(--dt-border);padding:var(--dt-header-padding-y) var(--dt-cell-padding-x);transition:all .2s ease}thead th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}thead th.sortable:hover{background:#00000008;color:var(--dt-text-primary)}thead th.sorted{color:var(--dt-primary);background:rgba(var(--dt-primary-rgb),.04)}.header-content{display:flex;align-items:center;gap:8px}.sort-icons{display:flex;flex-direction:column;gap:0;opacity:.4;transition:opacity .2s ease}.sortable:hover .sort-icons{opacity:.7}.sorted .sort-icons{opacity:1}.sort-icons ion-icon{font-size:.75rem;color:var(--dt-text-muted);margin:-3px 0;transition:all .2s ease}.sort-icons ion-icon.active{color:var(--dt-primary);transform:scale(1.2)}tbody tr{border-bottom:1px solid var(--dt-border)}tbody tr:last-child{border-bottom:none}tbody tr.clickable{cursor:pointer}tbody tr.selected{background:rgba(var(--dt-primary-rgb),.06)}tbody td{color:var(--dt-text-primary);font-size:.875rem}.hoverable tbody tr:hover:not(.empty-row){background:var(--dt-surface-variant)}.hoverable tbody tr:hover:not(.empty-row).selected{background:rgba(var(--dt-primary-rgb),.08)}.align-left{text-align:left}.align-center{text-align:center}.align-right{text-align:right}.selection-cell{width:52px;min-width:52px;max-width:52px;text-align:center;padding:8px 12px;box-sizing:border-box}.selection-cell ion-checkbox{--size: 20px;--border-radius: 50%;--border-width: 2px;--border-color: var(--dt-border);--border-color-checked: var(--dt-primary);--background: transparent;--background-checked: var(--dt-primary);--checkmark-color: white;--checkmark-width: 2px;margin:0;display:block}.selection-cell ion-checkbox::part(container){border-radius:50%}.selection-cell input[type=radio]{width:20px;height:20px;cursor:pointer;accent-color:var(--dt-primary);margin:0;display:block}.checkbox-circular .selection-cell ion-checkbox{--border-radius: 50%}.checkbox-circular .selection-cell ion-checkbox::part(container){border-radius:50%}.row-number-cell{width:60px;text-align:center;color:var(--dt-text-muted);font-size:.75rem;font-weight:500}.actions-cell{text-align:center;white-space:nowrap}.sticky-start{position:sticky;left:0;background:inherit;z-index:1;box-shadow:2px 0 4px #0000000d}.sticky-end{position:sticky;right:0;background:inherit;z-index:1;box-shadow:-2px 0 4px #0000000d}.empty-row td{padding:64px 16px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--dt-text-secondary)}.empty-icon{font-size:3.5rem;margin-bottom:20px;opacity:.4;color:var(--dt-text-muted)}.empty-title{font-size:1.125rem;font-weight:600;margin:0 0 8px;color:var(--dt-text-primary)}.empty-description{font-size:.875rem;margin:0;max-width:320px;color:var(--dt-text-secondary);line-height:1.5}.pagination-container{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-top:1px solid var(--dt-border);background:var(--dt-surface);flex-wrap:wrap;gap:16px}.pagination-info{display:flex;align-items:center;gap:20px;font-size:.875rem;color:var(--dt-text-secondary)}.pagination-info span{font-weight:500}.page-size-select{--padding-start: 12px;--padding-end: 12px;font-size:.875rem;min-width:140px;--background: var(--dt-surface-variant);--border-radius: 8px}.pagination-controls{display:flex;align-items:center;gap:8px}.pagination-controls ion-button{--padding-start: 10px;--padding-end: 10px;--border-radius: 8px;--background: var(--dt-surface-variant);--background-hover: var(--dt-border);--color: var(--dt-text-secondary);--color-hover: var(--dt-text-primary);margin:0;height:36px;min-width:36px}.pagination-controls ion-button:disabled{opacity:.4}.pagination-controls ion-button ion-icon{font-size:1rem}.page-indicator{padding:0 16px;font-size:.875rem;color:var(--dt-text-primary);font-weight:600;background:var(--dt-surface-variant);border-radius:8px;height:36px;display:flex;align-items:center;min-width:80px;justify-content:center}.bordered th,.bordered td{border:1px solid var(--dt-border)}.striped tbody tr:nth-child(2n){background:var(--dt-surface-variant)}.striped tbody tr:nth-child(2n).selected{background:rgba(var(--dt-primary-rgb),.08)}.sticky-header .table-wrapper{overflow-y:auto}.sticky-header thead{position:sticky;top:0;z-index:5;box-shadow:0 1px 0 var(--dt-border)}.size-small{--dt-cell-padding-x: 12px;--dt-cell-padding-y: 10px;--dt-header-padding-y: 10px}.size-small th,.size-small td{font-size:.8125rem}.size-small thead th{font-size:.75rem}.size-small .selection-cell{width:44px;padding:6px 8px}.size-small .selection-cell ion-checkbox{--size: 18px}.size-small .row-number-cell{width:48px;font-size:.6875rem}.size-small .pagination-container{padding:12px 16px}.size-small .pagination-info,.size-small .page-indicator{font-size:.8125rem}.size-small .pagination-controls ion-button{height:32px;min-width:32px}.size-small .page-indicator{height:32px;min-width:70px}.size-large{--dt-cell-padding-x: 20px;--dt-cell-padding-y: 18px;--dt-header-padding-y: 16px}.size-large th,.size-large td{font-size:.9375rem}.size-large thead th{font-size:.875rem}.size-large .selection-cell{width:60px;padding:12px 16px}.size-large .selection-cell ion-checkbox{--size: 24px}.size-large .row-number-cell{width:72px;font-size:.875rem}.size-large .pagination-container{padding:20px 24px}.size-large .pagination-info,.size-large .page-indicator{font-size:.9375rem}.size-large .pagination-controls ion-button{height:40px;min-width:40px}.size-large .page-indicator{height:40px;min-width:90px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (max-width: 768px){.data-table-container{--dt-border-radius: 12px}.pagination-container{flex-direction:column;align-items:stretch;gap:12px}.pagination-info{justify-content:space-between}.pagination-controls{justify-content:center}}.table-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px;border-bottom:1px solid var(--dt-border);background:var(--dt-surface);flex-wrap:wrap}.table-toolbar:empty{display:none}@media (max-width: 576px){.table-toolbar{flex-direction:column;align-items:stretch;padding:16px}}.status-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:9999px;font-size:.75rem;font-weight:600;white-space:nowrap;letter-spacing:.025em}.status-badge--success{background:#dcfce7;color:#15803d}.status-badge--warning{background:#fef3c7;color:#b45309}.status-badge--danger{background:#fee2e2;color:#dc2626}.status-badge--primary{background:#e0e7ff;color:#4338ca}.status-badge--secondary{background:#f1f5f9;color:#475569}.status-badge--medium{background:#f1f5f9;color:#64748b}.status-badge--tertiary{background:#f3e8ff;color:#7c3aed}.status-badge--filled.status-badge--success{background:#22c55e;color:#fff}.status-badge--filled.status-badge--warning{background:#f59e0b;color:#fff}.status-badge--filled.status-badge--danger{background:#ef4444;color:#fff}.status-badge--filled.status-badge--primary{background:var(--dt-primary);color:#fff}.status-badge--outlined{background:transparent;border:1.5px solid currentColor}.status-badge--outlined.status-badge--success{color:#16a34a}.status-badge--outlined.status-badge--warning{color:#d97706}.status-badge--outlined.status-badge--danger{color:#dc2626}.status-badge--outlined.status-badge--primary{color:var(--dt-primary)}.action-buttons{display:flex;gap:6px;justify-content:center}.action-buttons ion-button{--padding-start: 8px;--padding-end: 8px;--border-radius: 8px;margin:0}.action-buttons ion-button ion-icon{font-size:1.125rem}.card-list{display:none;padding:12px;gap:12px}.data-card{background:var(--dt-surface);border:1px solid var(--dt-border);border-radius:12px;padding:16px;margin-bottom:12px;transition:all .2s ease}.data-card.selected{border-color:var(--dt-primary);background:rgba(var(--dt-primary-rgb),.04);box-shadow:0 0 0 1px var(--dt-primary)}.data-card.clickable{cursor:pointer}.data-card.clickable:hover{box-shadow:var(--dt-elevation-medium);transform:translateY(-2px)}.data-card.clickable:active{transform:translateY(0)}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--dt-border)}.card-selection{display:flex;align-items:center}.card-selection ion-checkbox,.card-selection input[type=radio]{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center}.card-body{display:flex;flex-direction:column;gap:12px}.card-field{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.card-field__label{font-size:.75rem;font-weight:600;color:var(--dt-text-muted);flex-shrink:0}.card-field__value{font-size:.875rem;color:var(--dt-text-primary);text-align:right;word-break:break-word;font-weight:500}.card-field--primary .card-field__label{color:var(--dt-text-primary)}.card-field--primary .card-field__value{font-size:1rem;font-weight:600}.card-field--secondary .card-field__label,.card-field--status .card-field__label{color:var(--dt-text-muted)}.card-field--status .card-field__value{font-size:.8125rem;font-weight:600}.card-actions{display:flex;justify-content:flex-end;margin-top:16px;padding-top:12px;border-top:1px solid var(--dt-border)}@media (max-width: 768px){.responsive-cards .table-wrapper{display:none}.responsive-cards .card-list{display:block}}:host-context(body.dark) .data-table-container,:host-context(.dark) .data-table-container,:host-context(.ion-palette-dark) .data-table-container,:host-context(html.ion-palette-dark) .data-table-container,:host-context([data-theme=dark]) .data-table-container{--dt-surface: #1e293b;--dt-surface-variant: #334155;--dt-border: #475569;--dt-text-primary: #f1f5f9;--dt-text-secondary: #94a3b8;--dt-text-muted: #64748b}:host-context(body.dark) .loading-overlay,:host-context(.dark) .loading-overlay,:host-context(.ion-palette-dark) .loading-overlay,:host-context(html.ion-palette-dark) .loading-overlay,:host-context([data-theme=dark]) .loading-overlay{background:#1e293be6}:host-context(body.dark) .status-badge--success,:host-context(.dark) .status-badge--success,:host-context(.ion-palette-dark) .status-badge--success,:host-context(html.ion-palette-dark) .status-badge--success,:host-context([data-theme=dark]) .status-badge--success{background:#22c55e33;color:#4ade80}:host-context(body.dark) .status-badge--warning,:host-context(.dark) .status-badge--warning,:host-context(.ion-palette-dark) .status-badge--warning,:host-context(html.ion-palette-dark) .status-badge--warning,:host-context([data-theme=dark]) .status-badge--warning{background:#f59e0b33;color:#fbbf24}:host-context(body.dark) .status-badge--danger,:host-context(.dark) .status-badge--danger,:host-context(.ion-palette-dark) .status-badge--danger,:host-context(html.ion-palette-dark) .status-badge--danger,:host-context([data-theme=dark]) .status-badge--danger{background:#ef444433;color:#f87171}:host-context(body.dark) .status-badge--primary,:host-context(.dark) .status-badge--primary,:host-context(.ion-palette-dark) .status-badge--primary,:host-context(html.ion-palette-dark) .status-badge--primary,:host-context([data-theme=dark]) .status-badge--primary{background:#6366f133;color:#a5b4fc}\n"] }]
|
|
52129
52667
|
}], propDecorators: { props: [{
|
|
52130
52668
|
type: Input
|
|
52131
52669
|
}], rowClick: [{
|