valtech-components 4.0.1013 → 4.0.1015
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 +14 -7
- 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 +432 -157
- package/esm2022/lib/components/organisms/survey-builder/survey-builder.i18n.mjs +21 -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 +790 -198
- 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 +4 -0
- package/lib/components/organisms/survey-builder/survey-builder.component.d.ts +33 -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.1015';
|
|
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,
|
|
@@ -40808,9 +40819,11 @@ class FieldSchemaEditorComponent {
|
|
|
40808
40819
|
</val-form-field>
|
|
40809
40820
|
}
|
|
40810
40821
|
|
|
40811
|
-
|
|
40812
|
-
<val-
|
|
40813
|
-
|
|
40822
|
+
@if (props.showSection !== false) {
|
|
40823
|
+
<val-form-field [label]="t('sectionLabel')">
|
|
40824
|
+
<val-text-input [props]="{ control: sectionControl, placeholder: t('sectionPlaceholder'), state: state() }" />
|
|
40825
|
+
</val-form-field>
|
|
40826
|
+
}
|
|
40814
40827
|
|
|
40815
40828
|
<val-toggle-input
|
|
40816
40829
|
[props]="{
|
|
@@ -40884,9 +40897,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
40884
40897
|
</val-form-field>
|
|
40885
40898
|
}
|
|
40886
40899
|
|
|
40887
|
-
|
|
40888
|
-
<val-
|
|
40889
|
-
|
|
40900
|
+
@if (props.showSection !== false) {
|
|
40901
|
+
<val-form-field [label]="t('sectionLabel')">
|
|
40902
|
+
<val-text-input [props]="{ control: sectionControl, placeholder: t('sectionPlaceholder'), state: state() }" />
|
|
40903
|
+
</val-form-field>
|
|
40904
|
+
}
|
|
40890
40905
|
|
|
40891
40906
|
<val-toggle-input
|
|
40892
40907
|
[props]="{
|
|
@@ -41342,6 +41357,9 @@ const SURVEY_QUESTION_TYPES = [
|
|
|
41342
41357
|
|
|
41343
41358
|
const SURVEY_BUILDER_I18N = {
|
|
41344
41359
|
es: {
|
|
41360
|
+
surveyNameLabel: 'Nombre interno',
|
|
41361
|
+
surveyNamePlaceholder: 'Ej: encuesta-ventas-entrada',
|
|
41362
|
+
noSurveyName: 'Ponle un nombre interno a la encuesta',
|
|
41345
41363
|
titleLabel: 'Título',
|
|
41346
41364
|
titlePlaceholder: 'Ej: ¿Qué te pareció el evento?',
|
|
41347
41365
|
subtitleLabel: 'Subtítulo',
|
|
@@ -41365,8 +41383,10 @@ const SURVEY_BUILDER_I18N = {
|
|
|
41365
41383
|
successImageLabel: 'Imagen de cierre',
|
|
41366
41384
|
successImagePlaceholder: 'URL de la imagen que se muestra al terminar',
|
|
41367
41385
|
questionsLabel: 'Preguntas',
|
|
41386
|
+
sectionQuestionsLabel: 'Sin sección',
|
|
41368
41387
|
questionLabelPlaceholder: 'Escribe la pregunta',
|
|
41369
41388
|
addQuestion: 'Agregar pregunta',
|
|
41389
|
+
addQuestionToSection: 'Agregar aquí',
|
|
41370
41390
|
removeQuestion: 'Quitar pregunta',
|
|
41371
41391
|
editQuestion: 'Editar pregunta',
|
|
41372
41392
|
duplicateQuestion: 'Duplicar pregunta',
|
|
@@ -41379,11 +41399,16 @@ const SURVEY_BUILDER_I18N = {
|
|
|
41379
41399
|
save: 'Guardar encuesta',
|
|
41380
41400
|
noTitle: 'Ponle un título a la encuesta',
|
|
41381
41401
|
noQuestions: 'Agrega al menos una pregunta',
|
|
41402
|
+
noSectionName: 'Ponle nombre a la sección',
|
|
41382
41403
|
emptyQuestionLabel: 'Todas las preguntas necesitan texto',
|
|
41383
41404
|
saveError: 'No pudimos guardar la encuesta. Inténtalo de nuevo en un rato.',
|
|
41384
41405
|
loadError: 'No pudimos cargar la encuesta para editar.',
|
|
41385
41406
|
stepStart: 'Inicio',
|
|
41386
41407
|
stepQuestions: 'Preguntas',
|
|
41408
|
+
sectionNameLabel: 'Nombre de la sección',
|
|
41409
|
+
sectionNamePlaceholder: 'Ej: Información personal',
|
|
41410
|
+
sectionSubtitleLabel: 'Subtítulo',
|
|
41411
|
+
sectionSubtitlePlaceholder: 'Escribe un subtítulo para esta sección',
|
|
41387
41412
|
stepClose: 'Cierre',
|
|
41388
41413
|
stepReview: 'Revisar',
|
|
41389
41414
|
wizardStepsLabel: 'Pasos para crear la encuesta',
|
|
@@ -41401,6 +41426,9 @@ const SURVEY_BUILDER_I18N = {
|
|
|
41401
41426
|
reviewDefaultClose: 'Cierre por defecto',
|
|
41402
41427
|
},
|
|
41403
41428
|
en: {
|
|
41429
|
+
surveyNameLabel: 'Internal name',
|
|
41430
|
+
surveyNamePlaceholder: 'E.g: event-feedback',
|
|
41431
|
+
noSurveyName: 'Give the survey an internal name',
|
|
41404
41432
|
titleLabel: 'Title',
|
|
41405
41433
|
titlePlaceholder: 'E.g: How was the event?',
|
|
41406
41434
|
subtitleLabel: 'Subtitle',
|
|
@@ -41424,8 +41452,10 @@ const SURVEY_BUILDER_I18N = {
|
|
|
41424
41452
|
successImageLabel: 'Closing image',
|
|
41425
41453
|
successImagePlaceholder: 'Image URL shown after submit',
|
|
41426
41454
|
questionsLabel: 'Questions',
|
|
41455
|
+
sectionQuestionsLabel: 'No section',
|
|
41427
41456
|
questionLabelPlaceholder: 'Write the question',
|
|
41428
41457
|
addQuestion: 'Add question',
|
|
41458
|
+
addQuestionToSection: 'Add here',
|
|
41429
41459
|
removeQuestion: 'Remove question',
|
|
41430
41460
|
editQuestion: 'Edit question',
|
|
41431
41461
|
duplicateQuestion: 'Duplicate question',
|
|
@@ -41438,11 +41468,16 @@ const SURVEY_BUILDER_I18N = {
|
|
|
41438
41468
|
save: 'Save survey',
|
|
41439
41469
|
noTitle: 'Give the survey a title',
|
|
41440
41470
|
noQuestions: 'Add at least one question',
|
|
41471
|
+
noSectionName: 'Give the section a name',
|
|
41441
41472
|
emptyQuestionLabel: 'Every question needs text',
|
|
41442
41473
|
saveError: "We couldn't save the survey. Please try again in a while.",
|
|
41443
41474
|
loadError: "We couldn't load the survey to edit.",
|
|
41444
41475
|
stepStart: 'Start',
|
|
41445
41476
|
stepQuestions: 'Questions',
|
|
41477
|
+
sectionNameLabel: 'Section name',
|
|
41478
|
+
sectionNamePlaceholder: 'E.g: Personal information',
|
|
41479
|
+
sectionSubtitleLabel: 'Subtitle',
|
|
41480
|
+
sectionSubtitlePlaceholder: 'Add a subtitle for this section',
|
|
41446
41481
|
stepClose: 'Close',
|
|
41447
41482
|
stepReview: 'Review',
|
|
41448
41483
|
wizardStepsLabel: 'Survey builder steps',
|
|
@@ -41606,6 +41641,65 @@ let rowUid = 0;
|
|
|
41606
41641
|
* `val-survey-response` sabe renderizar, no a lo que el editor sabe editar.
|
|
41607
41642
|
*/
|
|
41608
41643
|
class SurveyBuilderComponent {
|
|
41644
|
+
groupQuestions(rows) {
|
|
41645
|
+
const groups = this.sectionIds().map(id => ({
|
|
41646
|
+
id,
|
|
41647
|
+
label: this.sectionNames()[id] ?? '',
|
|
41648
|
+
subtitle: this.sectionSubtitles()[id] ?? '',
|
|
41649
|
+
rows: [],
|
|
41650
|
+
}));
|
|
41651
|
+
const index = new Map();
|
|
41652
|
+
groups.forEach((group, position) => index.set(group.id, position));
|
|
41653
|
+
rows.forEach(question => {
|
|
41654
|
+
const section = (question.sectionLabel ?? '').trim();
|
|
41655
|
+
const sectionKey = question.sectionId || (section ? this.formBuilder.toToken(section) : '__default__');
|
|
41656
|
+
const label = this.sectionNames()[sectionKey] ?? section;
|
|
41657
|
+
let position = index.get(sectionKey);
|
|
41658
|
+
if (position == null) {
|
|
41659
|
+
position = groups.length;
|
|
41660
|
+
index.set(sectionKey, position);
|
|
41661
|
+
groups.push({ id: sectionKey, label, subtitle: this.sectionSubtitles()[sectionKey] ?? '', rows: [] });
|
|
41662
|
+
}
|
|
41663
|
+
groups[position].rows.push(question);
|
|
41664
|
+
});
|
|
41665
|
+
if (!groups.length) {
|
|
41666
|
+
const defaultId = '__default__';
|
|
41667
|
+
groups.push({ id: defaultId, label: this.sectionNames()[defaultId] ?? '', subtitle: this.sectionSubtitles()[defaultId] ?? '', rows: [] });
|
|
41668
|
+
}
|
|
41669
|
+
return groups;
|
|
41670
|
+
}
|
|
41671
|
+
normalizeSectionId(sectionId) {
|
|
41672
|
+
return (sectionId ?? '').trim() || '__default__';
|
|
41673
|
+
}
|
|
41674
|
+
questionGroupById(sectionId) {
|
|
41675
|
+
return this.questionGroups().find(group => group.id === sectionId);
|
|
41676
|
+
}
|
|
41677
|
+
sectionNameControl(sectionId) {
|
|
41678
|
+
const normalized = this.normalizeSectionId(sectionId);
|
|
41679
|
+
if (!this.sectionNameControls[normalized]) {
|
|
41680
|
+
const control = new FormControl(this.sectionNames()[normalized] ?? '', { nonNullable: true });
|
|
41681
|
+
control.valueChanges.subscribe(value => {
|
|
41682
|
+
const label = (value ?? '').trim();
|
|
41683
|
+
this.sectionNames.update(values => ({ ...values, [normalized]: value }));
|
|
41684
|
+
this.questions.update(rows => rows.map(row => this.normalizeSectionId(row.sectionId) === normalized
|
|
41685
|
+
? { ...row, sectionId: normalized, sectionLabel: label || undefined }
|
|
41686
|
+
: row));
|
|
41687
|
+
});
|
|
41688
|
+
this.sectionNameControls[normalized] = control;
|
|
41689
|
+
}
|
|
41690
|
+
return this.sectionNameControls[normalized];
|
|
41691
|
+
}
|
|
41692
|
+
sectionSubtitleControl(sectionId) {
|
|
41693
|
+
const normalized = this.normalizeSectionId(sectionId);
|
|
41694
|
+
if (!this.sectionSubtitleControls[normalized]) {
|
|
41695
|
+
const control = new FormControl(this.sectionSubtitles()[normalized] ?? '', { nonNullable: true });
|
|
41696
|
+
control.valueChanges.subscribe(value => {
|
|
41697
|
+
this.sectionSubtitles.update(values => ({ ...values, [normalized]: value }));
|
|
41698
|
+
});
|
|
41699
|
+
this.sectionSubtitleControls[normalized] = control;
|
|
41700
|
+
}
|
|
41701
|
+
return this.sectionSubtitleControls[normalized];
|
|
41702
|
+
}
|
|
41609
41703
|
constructor() {
|
|
41610
41704
|
this.props = {};
|
|
41611
41705
|
this.saved = new EventEmitter();
|
|
@@ -41621,6 +41715,7 @@ class SurveyBuilderComponent {
|
|
|
41621
41715
|
this.formBuilder = inject(RequestFormBuilderService);
|
|
41622
41716
|
this.errors = inject(ValtechErrorService);
|
|
41623
41717
|
this.modals = inject(ModalService);
|
|
41718
|
+
this.surveyNameControl = new FormControl('', { nonNullable: true });
|
|
41624
41719
|
this.titleControl = new FormControl('', { nonNullable: true });
|
|
41625
41720
|
this.subtitleControl = new FormControl('', { nonNullable: true });
|
|
41626
41721
|
this.headerImageControl = new FormControl('', { nonNullable: true });
|
|
@@ -41633,12 +41728,23 @@ class SurveyBuilderComponent {
|
|
|
41633
41728
|
this.validationError = signal('');
|
|
41634
41729
|
this.saving = signal(false);
|
|
41635
41730
|
this.uploadingImage = signal('');
|
|
41636
|
-
this.
|
|
41637
|
-
|
|
41638
|
-
|
|
41639
|
-
|
|
41640
|
-
|
|
41641
|
-
|
|
41731
|
+
this.sectionIds = signal(['__default__']);
|
|
41732
|
+
this.sectionNames = signal({});
|
|
41733
|
+
this.sectionSubtitles = signal({});
|
|
41734
|
+
this.sectionNameControls = {};
|
|
41735
|
+
this.sectionSubtitleControls = {};
|
|
41736
|
+
this.questionGroups = computed(() => this.groupQuestions(this.questions()));
|
|
41737
|
+
this.wizardSteps = computed(() => {
|
|
41738
|
+
const groups = this.questionGroups();
|
|
41739
|
+
const steps = [{ id: 'start', label: this.t('stepStart') }];
|
|
41740
|
+
groups.forEach((group, index) => {
|
|
41741
|
+
const sectionLabel = group.label || `${this.t('sectionQuestionsLabel')} ${index + 1}`;
|
|
41742
|
+
steps.push({ id: `section-${group.id}`, label: `${index + 1}. ${sectionLabel}` });
|
|
41743
|
+
});
|
|
41744
|
+
steps.push({ id: 'close', label: this.t('stepClose') });
|
|
41745
|
+
steps.push({ id: 'review', label: this.t('stepReview') });
|
|
41746
|
+
return steps;
|
|
41747
|
+
});
|
|
41642
41748
|
this.allowedImageTypes = ['image/jpeg', 'image/png', 'image/webp', 'image/gif'];
|
|
41643
41749
|
this.maxImageBytes = 10 * 1024 * 1024;
|
|
41644
41750
|
if (!this.i18n.hasNamespace(NAMESPACE$1)) {
|
|
@@ -41657,14 +41763,15 @@ class SurveyBuilderComponent {
|
|
|
41657
41763
|
async ngOnInit() {
|
|
41658
41764
|
// Sembrado directo: la app ya tenía la encuesta, no hace falta leerla.
|
|
41659
41765
|
if (this.props.initial) {
|
|
41660
|
-
this.hydrate(this.props.initial.label, this.props.initial.subtitle, this.props.initial.questions, this.props.initial.presentation);
|
|
41766
|
+
this.hydrate(this.props.initial.name, this.props.initial.label, this.props.initial.subtitle, this.props.initial.questions, this.props.initial.presentation);
|
|
41661
41767
|
return;
|
|
41662
41768
|
}
|
|
41663
41769
|
if (!this.props.typeId)
|
|
41664
41770
|
return;
|
|
41665
41771
|
try {
|
|
41666
41772
|
const cfg = await firstValueFrom(this.requests.getRequestType(this.props.typeId));
|
|
41667
|
-
|
|
41773
|
+
const metadataName = typeof cfg.metadata?.['name'] === 'string' ? cfg.metadata['name'] : '';
|
|
41774
|
+
this.hydrate(metadataName || cfg.label, cfg.label, cfg.subtitle ?? '', cfg.fieldSchema, cfg.presentation);
|
|
41668
41775
|
}
|
|
41669
41776
|
catch (err) {
|
|
41670
41777
|
this.errors.handle(err, {
|
|
@@ -41708,7 +41815,7 @@ class SurveyBuilderComponent {
|
|
|
41708
41815
|
nextStep() {
|
|
41709
41816
|
if (!this.validateWizardStep(this.wizardStep()))
|
|
41710
41817
|
return;
|
|
41711
|
-
this.wizardStep.update(step => Math.min(step + 1, this.wizardSteps.length - 1));
|
|
41818
|
+
this.wizardStep.update(step => Math.min(step + 1, this.wizardSteps().length - 1));
|
|
41712
41819
|
}
|
|
41713
41820
|
previousStep() {
|
|
41714
41821
|
this.validationError.set('');
|
|
@@ -41751,11 +41858,23 @@ class SurveyBuilderComponent {
|
|
|
41751
41858
|
state: this.saving() ? ComponentStates.WORKING : ComponentStates.ENABLED,
|
|
41752
41859
|
};
|
|
41753
41860
|
}
|
|
41861
|
+
closeStep() {
|
|
41862
|
+
return Math.max(this.wizardSteps().length - 2, 0);
|
|
41863
|
+
}
|
|
41864
|
+
reviewStep() {
|
|
41865
|
+
return Math.max(this.wizardSteps().length - 1, 0);
|
|
41866
|
+
}
|
|
41867
|
+
sectionStepIndex(sectionIndex) {
|
|
41868
|
+
return sectionIndex + 1;
|
|
41869
|
+
}
|
|
41870
|
+
showCurrentSectionQuestionStep() {
|
|
41871
|
+
return this.isWizard() && this.wizardStep() >= 1 && this.wizardStep() < this.reviewStep();
|
|
41872
|
+
}
|
|
41754
41873
|
interpolate(template, values) {
|
|
41755
41874
|
return Object.entries(values).reduce((text, [key, value]) => text.replaceAll(`{${key}}`, String(value)), template);
|
|
41756
41875
|
}
|
|
41757
41876
|
editorProps(row) {
|
|
41758
|
-
return { mode: 'edit', field: row, allowedTypes: this.questionTypes() };
|
|
41877
|
+
return { mode: 'edit', field: row, allowedTypes: this.questionTypes(), showSection: false };
|
|
41759
41878
|
}
|
|
41760
41879
|
iconAction(token, icon, label, disabled = false, color = 'dark') {
|
|
41761
41880
|
return {
|
|
@@ -41771,7 +41890,17 @@ class SurveyBuilderComponent {
|
|
|
41771
41890
|
icon: { name: icon, slot: 'icon-only' },
|
|
41772
41891
|
};
|
|
41773
41892
|
}
|
|
41774
|
-
|
|
41893
|
+
addQuestionAriaLabel(sectionLabel) {
|
|
41894
|
+
const section = (sectionLabel ?? '').trim();
|
|
41895
|
+
if (!section) {
|
|
41896
|
+
return this.t('addQuestionToSection');
|
|
41897
|
+
}
|
|
41898
|
+
return `${this.t('addQuestionToSection')} (${section})`;
|
|
41899
|
+
}
|
|
41900
|
+
addQuestion(sectionId) {
|
|
41901
|
+
const normalizedSectionId = this.normalizeSectionId(sectionId);
|
|
41902
|
+
const targetGroup = this.questionGroupById(normalizedSectionId);
|
|
41903
|
+
const sectionLabel = this.sectionNameControl(normalizedSectionId).value.trim() || targetGroup?.label || '';
|
|
41775
41904
|
const row = {
|
|
41776
41905
|
id: `row-${rowUid++}`,
|
|
41777
41906
|
name: '',
|
|
@@ -41780,12 +41909,45 @@ class SurveyBuilderComponent {
|
|
|
41780
41909
|
hintText: '',
|
|
41781
41910
|
type: this.questionTypes()[0],
|
|
41782
41911
|
required: true,
|
|
41912
|
+
sectionId: normalizedSectionId,
|
|
41913
|
+
sectionLabel: sectionLabel || undefined,
|
|
41783
41914
|
};
|
|
41784
|
-
this.questions.update(rows =>
|
|
41915
|
+
this.questions.update(rows => {
|
|
41916
|
+
const next = [...rows];
|
|
41917
|
+
const insertionIndex = this.nextQuestionIndexForSection(next, normalizedSectionId);
|
|
41918
|
+
next.splice(insertionIndex, 0, row);
|
|
41919
|
+
return next;
|
|
41920
|
+
});
|
|
41785
41921
|
// Una pregunta recién agregada está vacía: abrirla es el único paso
|
|
41786
41922
|
// siguiente posible, y dejarla cerrada la haría ver como una fila rota.
|
|
41787
41923
|
this.editingId.set(row.id);
|
|
41788
41924
|
}
|
|
41925
|
+
rowGlobalIndex(sectionId, groupRowIndex) {
|
|
41926
|
+
const normalized = this.normalizeSectionId(sectionId);
|
|
41927
|
+
let index = 0;
|
|
41928
|
+
for (const row of this.questions()) {
|
|
41929
|
+
if (this.normalizeSectionId(row.sectionId) === normalized) {
|
|
41930
|
+
if (groupRowIndex === 0)
|
|
41931
|
+
return index;
|
|
41932
|
+
groupRowIndex -= 1;
|
|
41933
|
+
}
|
|
41934
|
+
index += 1;
|
|
41935
|
+
}
|
|
41936
|
+
return Math.min(index - 1, 0);
|
|
41937
|
+
}
|
|
41938
|
+
nextQuestionIndexForSection(rows, sectionId) {
|
|
41939
|
+
const normalized = this.normalizeSectionId(sectionId);
|
|
41940
|
+
if (!rows.length)
|
|
41941
|
+
return 0;
|
|
41942
|
+
if (!normalized)
|
|
41943
|
+
return rows.length;
|
|
41944
|
+
for (let i = rows.length - 1; i >= 0; i -= 1) {
|
|
41945
|
+
if (this.normalizeSectionId(rows[i].sectionId) === normalized) {
|
|
41946
|
+
return i + 1;
|
|
41947
|
+
}
|
|
41948
|
+
}
|
|
41949
|
+
return rows.length;
|
|
41950
|
+
}
|
|
41789
41951
|
toggleEdit(row) {
|
|
41790
41952
|
this.editingId.update(current => (current === row.id ? '' : row.id));
|
|
41791
41953
|
}
|
|
@@ -41828,20 +41990,28 @@ class SurveyBuilderComponent {
|
|
|
41828
41990
|
* paso obligatorio que no se veía por ningún lado.
|
|
41829
41991
|
*/
|
|
41830
41992
|
draftQuestion(field) {
|
|
41831
|
-
this.questions.update(rows => rows.map(r => (r.id === field.id ? { ...r, ...field } : r)));
|
|
41993
|
+
this.questions.update(rows => rows.map(r => (r.id === field.id ? this.withResolvedSection({ ...r, ...field }) : r)));
|
|
41832
41994
|
if (this.validationError())
|
|
41833
41995
|
this.validationError.set('');
|
|
41834
41996
|
}
|
|
41835
41997
|
applyQuestion(field) {
|
|
41836
41998
|
this.questions.update(rows => rows.map(r => r.id === field.id
|
|
41837
41999
|
? {
|
|
41838
|
-
...field,
|
|
42000
|
+
...this.withResolvedSection(field),
|
|
41839
42001
|
name: this.formBuilder.uniqueFieldName(field.name || field.label, rows.filter(o => o.id !== r.id)),
|
|
41840
42002
|
}
|
|
41841
42003
|
: r));
|
|
41842
42004
|
this.editingId.set('');
|
|
41843
42005
|
this.validationError.set('');
|
|
41844
42006
|
}
|
|
42007
|
+
withResolvedSection(field) {
|
|
42008
|
+
const label = (field.sectionLabel ?? '').trim();
|
|
42009
|
+
const id = this.normalizeSectionId(field.sectionId);
|
|
42010
|
+
if (id !== '__default__' || !label) {
|
|
42011
|
+
return { ...field, sectionId: id, sectionLabel: label || undefined };
|
|
42012
|
+
}
|
|
42013
|
+
return { ...field, sectionId: this.formBuilder.toToken(label), sectionLabel: label };
|
|
42014
|
+
}
|
|
41845
42015
|
async onPresentationFileSelected(slot, event) {
|
|
41846
42016
|
const input = event.target;
|
|
41847
42017
|
const file = input.files?.[0];
|
|
@@ -41901,9 +42071,10 @@ class SurveyBuilderComponent {
|
|
|
41901
42071
|
label: row.label.trim(),
|
|
41902
42072
|
type: row.type,
|
|
41903
42073
|
required: row.required,
|
|
41904
|
-
sectionId: row.
|
|
41905
|
-
sectionLabel: row.sectionLabel,
|
|
41906
|
-
|
|
42074
|
+
sectionId: row.sectionId,
|
|
42075
|
+
sectionLabel: this.sectionNameControl(row.sectionId).value.trim() || row.sectionLabel,
|
|
42076
|
+
sectionSubtitle: this.sectionSubtitles()[this.normalizeSectionId(row.sectionId)] ?? '',
|
|
42077
|
+
sectionOrder: this.sectionOrderFor(row.sectionId, rows),
|
|
41907
42078
|
placeholderText: row.placeholderText,
|
|
41908
42079
|
hintText: row.hintText,
|
|
41909
42080
|
options: row.options,
|
|
@@ -41913,7 +42084,13 @@ class SurveyBuilderComponent {
|
|
|
41913
42084
|
const presentation = this.presentationPayload();
|
|
41914
42085
|
// La app guarda: acá solo se valida y se entrega lo escrito.
|
|
41915
42086
|
if (this.props.persist === false) {
|
|
41916
|
-
this.draft.emit({
|
|
42087
|
+
this.draft.emit({
|
|
42088
|
+
name: this.surveyNameControl.value.trim() || title,
|
|
42089
|
+
label: title,
|
|
42090
|
+
subtitle,
|
|
42091
|
+
presentation,
|
|
42092
|
+
questions: fieldSchema,
|
|
42093
|
+
});
|
|
41917
42094
|
return;
|
|
41918
42095
|
}
|
|
41919
42096
|
this.saving.set(true);
|
|
@@ -41924,6 +42101,7 @@ class SurveyBuilderComponent {
|
|
|
41924
42101
|
// endpoint (`persist: false`) y arma el id con la entidad adentro.
|
|
41925
42102
|
const typeId = this.props.typeId ?? `${this.props.typePrefix ?? DEFAULT_TYPE_PREFIX}:${this.formBuilder.toToken(title)}`;
|
|
41926
42103
|
const payload = {
|
|
42104
|
+
name: this.surveyNameControl.value.trim() || title,
|
|
41927
42105
|
label: title,
|
|
41928
42106
|
subtitle,
|
|
41929
42107
|
presentation,
|
|
@@ -41951,14 +42129,29 @@ class SurveyBuilderComponent {
|
|
|
41951
42129
|
});
|
|
41952
42130
|
}
|
|
41953
42131
|
}
|
|
41954
|
-
hydrate(label, subtitle, questions, presentation) {
|
|
42132
|
+
hydrate(name, label, subtitle, questions, presentation) {
|
|
42133
|
+
this.surveyNameControl.setValue(name ?? '');
|
|
41955
42134
|
this.titleControl.setValue(label ?? '');
|
|
41956
42135
|
this.subtitleControl.setValue(subtitle ?? '');
|
|
41957
42136
|
this.headerImageControl.setValue(presentation?.headerImageUrl ?? '');
|
|
41958
42137
|
this.successTitleControl.setValue(presentation?.successTitle || this.defaultSuccessTitle());
|
|
41959
42138
|
this.successMessageControl.setValue(presentation?.successMessage || this.defaultSuccessMessage());
|
|
41960
42139
|
this.successImageControl.setValue(presentation?.successImageUrl ?? '');
|
|
41961
|
-
|
|
42140
|
+
const rows = [...(questions ?? [])].sort((a, b) => a.order - b.order).map(f => this.rowFromField(f));
|
|
42141
|
+
const ids = [...new Set(rows.map(row => this.normalizeSectionId(row.sectionId)))];
|
|
42142
|
+
this.sectionIds.set(ids.length ? ids : ['__default__']);
|
|
42143
|
+
const names = {};
|
|
42144
|
+
const subtitles = {};
|
|
42145
|
+
rows.forEach(row => {
|
|
42146
|
+
const id = this.normalizeSectionId(row.sectionId);
|
|
42147
|
+
if (row.sectionLabel && names[id] === undefined)
|
|
42148
|
+
names[id] = row.sectionLabel;
|
|
42149
|
+
if (row.sectionSubtitle && subtitles[id] === undefined)
|
|
42150
|
+
subtitles[id] = row.sectionSubtitle;
|
|
42151
|
+
});
|
|
42152
|
+
this.sectionNames.set(names);
|
|
42153
|
+
this.sectionSubtitles.set(subtitles);
|
|
42154
|
+
this.questions.set(rows);
|
|
41962
42155
|
}
|
|
41963
42156
|
presentationPayload() {
|
|
41964
42157
|
const presentation = {
|
|
@@ -41978,6 +42171,13 @@ class SurveyBuilderComponent {
|
|
|
41978
42171
|
validateWizardStep(step) {
|
|
41979
42172
|
this.validationError.set('');
|
|
41980
42173
|
if (step === 0) {
|
|
42174
|
+
if (!this.isWizard())
|
|
42175
|
+
return true;
|
|
42176
|
+
if (!this.surveyNameControl.value.trim()) {
|
|
42177
|
+
this.surveyNameControl.markAsTouched();
|
|
42178
|
+
this.validationError.set(this.t('noSurveyName'));
|
|
42179
|
+
return false;
|
|
42180
|
+
}
|
|
41981
42181
|
if (!this.titleControl.value.trim()) {
|
|
41982
42182
|
this.titleControl.markAsTouched();
|
|
41983
42183
|
this.validationError.set(this.t('noTitle'));
|
|
@@ -42013,7 +42213,9 @@ class SurveyBuilderComponent {
|
|
|
42013
42213
|
hintText: f.hintText ?? '',
|
|
42014
42214
|
type: f.type,
|
|
42015
42215
|
required: !!f.required,
|
|
42216
|
+
sectionId: f.sectionId,
|
|
42016
42217
|
sectionLabel: f.sectionLabel ?? '',
|
|
42218
|
+
sectionSubtitle: f.sectionSubtitle ?? '',
|
|
42017
42219
|
sectionOrder: f.sectionOrder,
|
|
42018
42220
|
options: f.options,
|
|
42019
42221
|
};
|
|
@@ -42037,7 +42239,7 @@ class SurveyBuilderComponent {
|
|
|
42037
42239
|
};
|
|
42038
42240
|
}
|
|
42039
42241
|
async openPreview() {
|
|
42040
|
-
await this.modals.
|
|
42242
|
+
await this.modals.openAdaptive({
|
|
42041
42243
|
component: SurveyPreviewModalComponent,
|
|
42042
42244
|
componentProps: {
|
|
42043
42245
|
modalTitle: this.t('previewTitle'),
|
|
@@ -42053,26 +42255,26 @@ class SurveyBuilderComponent {
|
|
|
42053
42255
|
order: index,
|
|
42054
42256
|
name: question.name || this.formBuilder.toToken(question.label),
|
|
42055
42257
|
typeLabel: this.typeLabel(question.type),
|
|
42056
|
-
sectionId:
|
|
42057
|
-
|
|
42258
|
+
sectionId: this.normalizeSectionId(question.sectionId),
|
|
42259
|
+
sectionLabel: this.sectionNameControl(question.sectionId).value.trim() || question.sectionLabel,
|
|
42260
|
+
sectionSubtitle: this.sectionSubtitles()[this.normalizeSectionId(question.sectionId)] ?? '',
|
|
42261
|
+
sectionOrder: this.sectionOrderFor(question.sectionId, this.questions()),
|
|
42058
42262
|
})),
|
|
42059
42263
|
},
|
|
42060
|
-
|
|
42061
|
-
});
|
|
42264
|
+
}, 'wide');
|
|
42062
42265
|
}
|
|
42063
|
-
sectionOrderFor(
|
|
42064
|
-
const
|
|
42065
|
-
|
|
42066
|
-
|
|
42067
|
-
|
|
42068
|
-
return labels.indexOf(label);
|
|
42266
|
+
sectionOrderFor(sectionId, rows) {
|
|
42267
|
+
const id = this.normalizeSectionId(sectionId);
|
|
42268
|
+
const sectionIds = [...new Set(rows.map(row => this.normalizeSectionId(row.sectionId)).filter(Boolean))];
|
|
42269
|
+
const index = sectionIds.indexOf(id);
|
|
42270
|
+
return index >= 0 ? index : undefined;
|
|
42069
42271
|
}
|
|
42070
42272
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SurveyBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42071
42273
|
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
42274
|
<div class="survey-builder">
|
|
42073
42275
|
@if (isWizard()) {
|
|
42074
42276
|
<nav class="survey-builder__steps" [attr.aria-label]="t('wizardStepsLabel')">
|
|
42075
|
-
@for (step of wizardSteps; track step.id; let i = $index) {
|
|
42277
|
+
@for (step of wizardSteps(); track step.id; let i = $index) {
|
|
42076
42278
|
<button
|
|
42077
42279
|
type="button"
|
|
42078
42280
|
class="survey-builder__step"
|
|
@@ -42081,7 +42283,7 @@ class SurveyBuilderComponent {
|
|
|
42081
42283
|
(click)="goToStep(i)"
|
|
42082
42284
|
>
|
|
42083
42285
|
<span>{{ i + 1 }}</span>
|
|
42084
|
-
{{
|
|
42286
|
+
{{ step.label }}
|
|
42085
42287
|
</button>
|
|
42086
42288
|
}
|
|
42087
42289
|
</nav>
|
|
@@ -42098,6 +42300,9 @@ class SurveyBuilderComponent {
|
|
|
42098
42300
|
|
|
42099
42301
|
@if (showWizardSection(0)) {
|
|
42100
42302
|
<section class="survey-builder__section">
|
|
42303
|
+
<val-form-field [label]="t('surveyNameLabel')">
|
|
42304
|
+
<val-text-input [props]="{ control: surveyNameControl, placeholder: t('surveyNamePlaceholder') }" />
|
|
42305
|
+
</val-form-field>
|
|
42101
42306
|
<val-form-field [label]="t('titleLabel')">
|
|
42102
42307
|
<val-text-input [props]="{ control: titleControl, placeholder: t('titlePlaceholder') }" />
|
|
42103
42308
|
</val-form-field>
|
|
@@ -42223,7 +42428,7 @@ class SurveyBuilderComponent {
|
|
|
42223
42428
|
</div>
|
|
42224
42429
|
}
|
|
42225
42430
|
|
|
42226
|
-
@if (showWizardSection(
|
|
42431
|
+
@if (showWizardSection(closeStep())) {
|
|
42227
42432
|
<section class="survey-builder__section">
|
|
42228
42433
|
<span class="survey-builder__questions-label">{{ t('stepClose') }}</span>
|
|
42229
42434
|
<p class="survey-builder__optional-note">{{ t('successOptionalNote') }}</p>
|
|
@@ -42270,7 +42475,7 @@ class SurveyBuilderComponent {
|
|
|
42270
42475
|
</section>
|
|
42271
42476
|
}
|
|
42272
42477
|
|
|
42273
|
-
@if (
|
|
42478
|
+
@if (showCurrentSectionQuestionStep()) {
|
|
42274
42479
|
<div class="survey-builder__questions">
|
|
42275
42480
|
<span class="survey-builder__questions-label">{{ t('questionsLabel') }}</span>
|
|
42276
42481
|
|
|
@@ -42278,68 +42483,119 @@ class SurveyBuilderComponent {
|
|
|
42278
42483
|
<p class="survey-builder__empty">{{ t('noQuestions') }}</p>
|
|
42279
42484
|
}
|
|
42280
42485
|
|
|
42281
|
-
@for (
|
|
42282
|
-
|
|
42283
|
-
|
|
42284
|
-
|
|
42285
|
-
|
|
42286
|
-
<
|
|
42287
|
-
|
|
42288
|
-
</span>
|
|
42289
|
-
</div>
|
|
42290
|
-
<div class="survey-builder__row-actions">
|
|
42291
|
-
<val-button
|
|
42292
|
-
[props]="iconAction('q-up-' + row.id, 'arrow-up-outline', t('moveUp'), first)"
|
|
42293
|
-
(onClick)="move(i, -1)"
|
|
42294
|
-
/>
|
|
42295
|
-
<val-button
|
|
42296
|
-
[props]="iconAction('q-down-' + row.id, 'arrow-down-outline', t('moveDown'), last)"
|
|
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
|
-
/>
|
|
42311
|
-
</div>
|
|
42312
|
-
</div>
|
|
42313
|
-
|
|
42314
|
-
@if (editingId() === row.id) {
|
|
42315
|
-
<div class="survey-builder__row-editor">
|
|
42316
|
-
<val-field-schema-editor
|
|
42317
|
-
#editor
|
|
42318
|
-
[props]="editorProps(row)"
|
|
42319
|
-
(changed)="draftQuestion($event)"
|
|
42320
|
-
(save)="applyQuestion($event)"
|
|
42321
|
-
/>
|
|
42322
|
-
<div class="survey-builder__row-editor-actions">
|
|
42323
|
-
<val-button
|
|
42486
|
+
@for (group of questionGroups(); track group.id; let sectionIndex = $index) {
|
|
42487
|
+
@if (wizardStep() === sectionStepIndex(sectionIndex)) {
|
|
42488
|
+
<section class="survey-builder__question-section">
|
|
42489
|
+
<div class="survey-builder__section-head">
|
|
42490
|
+
<div class="survey-builder__section-fields">
|
|
42491
|
+
<val-form-field [label]="t('sectionNameLabel')">
|
|
42492
|
+
<val-text-input
|
|
42324
42493
|
[props]="{
|
|
42325
|
-
|
|
42326
|
-
|
|
42327
|
-
color: 'dark',
|
|
42328
|
-
fill: 'solid',
|
|
42329
|
-
shape: 'round',
|
|
42330
|
-
size: 'default',
|
|
42331
|
-
type: 'button',
|
|
42332
|
-
state: 'ENABLED',
|
|
42494
|
+
control: sectionNameControl(group.id),
|
|
42495
|
+
placeholder: t('sectionNamePlaceholder'),
|
|
42333
42496
|
}"
|
|
42334
|
-
(onClick)="editor.submit()"
|
|
42335
42497
|
/>
|
|
42498
|
+
</val-form-field>
|
|
42499
|
+
<div class="survey-builder__section-subtitle">
|
|
42500
|
+
<val-form-field [label]="t('sectionSubtitleLabel')">
|
|
42501
|
+
<val-text-input
|
|
42502
|
+
[props]="{
|
|
42503
|
+
control: sectionSubtitleControl(group.id),
|
|
42504
|
+
placeholder: t('sectionSubtitlePlaceholder'),
|
|
42505
|
+
}"
|
|
42506
|
+
/>
|
|
42507
|
+
</val-form-field>
|
|
42508
|
+
</div>
|
|
42509
|
+
</div>
|
|
42510
|
+
<val-button
|
|
42511
|
+
[props]="{
|
|
42512
|
+
token: 'survey-builder-add-question-' + group.id,
|
|
42513
|
+
text: t('addQuestionToSection'),
|
|
42514
|
+
color: 'dark',
|
|
42515
|
+
fill: 'outline',
|
|
42516
|
+
shape: 'round',
|
|
42517
|
+
size: 'small',
|
|
42518
|
+
type: 'button',
|
|
42519
|
+
state: 'ENABLED',
|
|
42520
|
+
icon: { name: 'add-outline', slot: 'start' },
|
|
42521
|
+
}"
|
|
42522
|
+
(onClick)="addQuestion(group.id)"
|
|
42523
|
+
/>
|
|
42524
|
+
</div>
|
|
42525
|
+
|
|
42526
|
+
@for (row of group.rows; track row.id; let i = $index; let first = $first; let last = $last) {
|
|
42527
|
+
@let globalIndex = rowGlobalIndex(group.id, i);
|
|
42528
|
+
<div class="survey-builder__row">
|
|
42529
|
+
<div class="survey-builder__row-head">
|
|
42530
|
+
<div class="survey-builder__row-text">
|
|
42531
|
+
<strong>{{ row.label || t('untitledQuestion') }}</strong>
|
|
42532
|
+
<span>
|
|
42533
|
+
{{
|
|
42534
|
+
typeLabel(row.type) +
|
|
42535
|
+
(row.required ? ' · ' + t('requiredTag') : '')
|
|
42536
|
+
}}
|
|
42537
|
+
</span>
|
|
42538
|
+
</div>
|
|
42539
|
+
<div class="survey-builder__row-actions">
|
|
42540
|
+
<val-button
|
|
42541
|
+
[props]="iconAction('q-add-' + row.id, 'add-outline', addQuestionAriaLabel(row.sectionLabel), false)"
|
|
42542
|
+
(onClick)="addQuestion(row.sectionId || group.id)"
|
|
42543
|
+
/>
|
|
42544
|
+
<val-button
|
|
42545
|
+
[props]="iconAction('q-up-' + row.id, 'arrow-up-outline', t('moveUp'), first)"
|
|
42546
|
+
(onClick)="move(globalIndex, -1)"
|
|
42547
|
+
/>
|
|
42548
|
+
<val-button
|
|
42549
|
+
[props]="iconAction('q-down-' + row.id, 'arrow-down-outline', t('moveDown'), last)"
|
|
42550
|
+
(onClick)="move(globalIndex, 1)"
|
|
42551
|
+
/>
|
|
42552
|
+
<val-button
|
|
42553
|
+
[props]="iconAction('q-copy-' + row.id, 'copy-outline', t('duplicateQuestion'))"
|
|
42554
|
+
(onClick)="duplicate(row)"
|
|
42555
|
+
/>
|
|
42556
|
+
<val-button
|
|
42557
|
+
[props]="iconAction('q-edit-' + row.id, 'create-outline', t('editQuestion'))"
|
|
42558
|
+
(onClick)="toggleEdit(row)"
|
|
42559
|
+
/>
|
|
42560
|
+
<val-button
|
|
42561
|
+
[props]="iconAction('q-remove-' + row.id, 'trash-outline', t('removeQuestion'), false, 'danger')"
|
|
42562
|
+
(onClick)="removeQuestion(row)"
|
|
42563
|
+
/>
|
|
42564
|
+
</div>
|
|
42336
42565
|
</div>
|
|
42566
|
+
|
|
42567
|
+
@if (editingId() === row.id) {
|
|
42568
|
+
<div class="survey-builder__row-editor">
|
|
42569
|
+
<val-field-schema-editor
|
|
42570
|
+
#editor
|
|
42571
|
+
[props]="editorProps(row)"
|
|
42572
|
+
(changed)="draftQuestion($event)"
|
|
42573
|
+
(save)="applyQuestion($event)"
|
|
42574
|
+
/>
|
|
42575
|
+
<div class="survey-builder__row-editor-actions">
|
|
42576
|
+
<val-button
|
|
42577
|
+
[props]="{
|
|
42578
|
+
token: 'q-done-' + row.id,
|
|
42579
|
+
text: t('doneEditing'),
|
|
42580
|
+
color: 'dark',
|
|
42581
|
+
fill: 'solid',
|
|
42582
|
+
shape: 'round',
|
|
42583
|
+
size: 'default',
|
|
42584
|
+
type: 'button',
|
|
42585
|
+
state: 'ENABLED',
|
|
42586
|
+
}"
|
|
42587
|
+
(onClick)="editor.submit()"
|
|
42588
|
+
/>
|
|
42589
|
+
</div>
|
|
42590
|
+
</div>
|
|
42591
|
+
}
|
|
42337
42592
|
</div>
|
|
42338
42593
|
}
|
|
42339
|
-
</
|
|
42594
|
+
</section>
|
|
42595
|
+
}
|
|
42340
42596
|
}
|
|
42341
42597
|
|
|
42342
|
-
|
|
42598
|
+
<val-button
|
|
42343
42599
|
[props]="{
|
|
42344
42600
|
token: 'survey-builder-add-question',
|
|
42345
42601
|
text: t('addQuestion'),
|
|
@@ -42351,12 +42607,12 @@ class SurveyBuilderComponent {
|
|
|
42351
42607
|
state: 'ENABLED',
|
|
42352
42608
|
icon: { name: 'add-outline', slot: 'start' },
|
|
42353
42609
|
}"
|
|
42354
|
-
(onClick)="addQuestion()"
|
|
42610
|
+
(onClick)="addQuestion(questionGroups()[0]?.id)"
|
|
42355
42611
|
/>
|
|
42356
42612
|
</div>
|
|
42357
42613
|
}
|
|
42358
42614
|
|
|
42359
|
-
@if (showWizardSection(
|
|
42615
|
+
@if (showWizardSection(reviewStep())) {
|
|
42360
42616
|
<section class="survey-builder__review">
|
|
42361
42617
|
<span class="survey-builder__questions-label">{{ t('reviewTitle') }}</span>
|
|
42362
42618
|
<strong>{{ titleControl.value || t('untitledQuestion') }}</strong>
|
|
@@ -42379,7 +42635,7 @@ class SurveyBuilderComponent {
|
|
|
42379
42635
|
@if (wizardStep() > 0) {
|
|
42380
42636
|
<val-button [props]="wizardBackProps()" (onClick)="previousStep()" />
|
|
42381
42637
|
}
|
|
42382
|
-
@if (wizardStep() < wizardSteps.length - 1) {
|
|
42638
|
+
@if (wizardStep() < wizardSteps().length - 1) {
|
|
42383
42639
|
<val-button [props]="wizardNextProps()" (onClick)="nextStep()" />
|
|
42384
42640
|
} @else {
|
|
42385
42641
|
<val-button [props]="saveProps()" (onClick)="save()" />
|
|
@@ -42389,7 +42645,7 @@ class SurveyBuilderComponent {
|
|
|
42389
42645
|
<val-button [props]="saveProps()" (onClick)="save()" />
|
|
42390
42646
|
}
|
|
42391
42647
|
</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"] }] }); }
|
|
42648
|
+
`, 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
42649
|
}
|
|
42394
42650
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SurveyBuilderComponent, decorators: [{
|
|
42395
42651
|
type: Component,
|
|
@@ -42406,7 +42662,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42406
42662
|
<div class="survey-builder">
|
|
42407
42663
|
@if (isWizard()) {
|
|
42408
42664
|
<nav class="survey-builder__steps" [attr.aria-label]="t('wizardStepsLabel')">
|
|
42409
|
-
@for (step of wizardSteps; track step.id; let i = $index) {
|
|
42665
|
+
@for (step of wizardSteps(); track step.id; let i = $index) {
|
|
42410
42666
|
<button
|
|
42411
42667
|
type="button"
|
|
42412
42668
|
class="survey-builder__step"
|
|
@@ -42415,7 +42671,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42415
42671
|
(click)="goToStep(i)"
|
|
42416
42672
|
>
|
|
42417
42673
|
<span>{{ i + 1 }}</span>
|
|
42418
|
-
{{
|
|
42674
|
+
{{ step.label }}
|
|
42419
42675
|
</button>
|
|
42420
42676
|
}
|
|
42421
42677
|
</nav>
|
|
@@ -42432,6 +42688,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42432
42688
|
|
|
42433
42689
|
@if (showWizardSection(0)) {
|
|
42434
42690
|
<section class="survey-builder__section">
|
|
42691
|
+
<val-form-field [label]="t('surveyNameLabel')">
|
|
42692
|
+
<val-text-input [props]="{ control: surveyNameControl, placeholder: t('surveyNamePlaceholder') }" />
|
|
42693
|
+
</val-form-field>
|
|
42435
42694
|
<val-form-field [label]="t('titleLabel')">
|
|
42436
42695
|
<val-text-input [props]="{ control: titleControl, placeholder: t('titlePlaceholder') }" />
|
|
42437
42696
|
</val-form-field>
|
|
@@ -42557,7 +42816,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42557
42816
|
</div>
|
|
42558
42817
|
}
|
|
42559
42818
|
|
|
42560
|
-
@if (showWizardSection(
|
|
42819
|
+
@if (showWizardSection(closeStep())) {
|
|
42561
42820
|
<section class="survey-builder__section">
|
|
42562
42821
|
<span class="survey-builder__questions-label">{{ t('stepClose') }}</span>
|
|
42563
42822
|
<p class="survey-builder__optional-note">{{ t('successOptionalNote') }}</p>
|
|
@@ -42604,7 +42863,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42604
42863
|
</section>
|
|
42605
42864
|
}
|
|
42606
42865
|
|
|
42607
|
-
@if (
|
|
42866
|
+
@if (showCurrentSectionQuestionStep()) {
|
|
42608
42867
|
<div class="survey-builder__questions">
|
|
42609
42868
|
<span class="survey-builder__questions-label">{{ t('questionsLabel') }}</span>
|
|
42610
42869
|
|
|
@@ -42612,68 +42871,119 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42612
42871
|
<p class="survey-builder__empty">{{ t('noQuestions') }}</p>
|
|
42613
42872
|
}
|
|
42614
42873
|
|
|
42615
|
-
@for (
|
|
42616
|
-
|
|
42617
|
-
|
|
42618
|
-
|
|
42619
|
-
|
|
42620
|
-
<
|
|
42621
|
-
|
|
42622
|
-
</span>
|
|
42623
|
-
</div>
|
|
42624
|
-
<div class="survey-builder__row-actions">
|
|
42625
|
-
<val-button
|
|
42626
|
-
[props]="iconAction('q-up-' + row.id, 'arrow-up-outline', t('moveUp'), first)"
|
|
42627
|
-
(onClick)="move(i, -1)"
|
|
42628
|
-
/>
|
|
42629
|
-
<val-button
|
|
42630
|
-
[props]="iconAction('q-down-' + row.id, 'arrow-down-outline', t('moveDown'), last)"
|
|
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
|
-
/>
|
|
42645
|
-
</div>
|
|
42646
|
-
</div>
|
|
42647
|
-
|
|
42648
|
-
@if (editingId() === row.id) {
|
|
42649
|
-
<div class="survey-builder__row-editor">
|
|
42650
|
-
<val-field-schema-editor
|
|
42651
|
-
#editor
|
|
42652
|
-
[props]="editorProps(row)"
|
|
42653
|
-
(changed)="draftQuestion($event)"
|
|
42654
|
-
(save)="applyQuestion($event)"
|
|
42655
|
-
/>
|
|
42656
|
-
<div class="survey-builder__row-editor-actions">
|
|
42657
|
-
<val-button
|
|
42874
|
+
@for (group of questionGroups(); track group.id; let sectionIndex = $index) {
|
|
42875
|
+
@if (wizardStep() === sectionStepIndex(sectionIndex)) {
|
|
42876
|
+
<section class="survey-builder__question-section">
|
|
42877
|
+
<div class="survey-builder__section-head">
|
|
42878
|
+
<div class="survey-builder__section-fields">
|
|
42879
|
+
<val-form-field [label]="t('sectionNameLabel')">
|
|
42880
|
+
<val-text-input
|
|
42658
42881
|
[props]="{
|
|
42659
|
-
|
|
42660
|
-
|
|
42661
|
-
color: 'dark',
|
|
42662
|
-
fill: 'solid',
|
|
42663
|
-
shape: 'round',
|
|
42664
|
-
size: 'default',
|
|
42665
|
-
type: 'button',
|
|
42666
|
-
state: 'ENABLED',
|
|
42882
|
+
control: sectionNameControl(group.id),
|
|
42883
|
+
placeholder: t('sectionNamePlaceholder'),
|
|
42667
42884
|
}"
|
|
42668
|
-
(onClick)="editor.submit()"
|
|
42669
42885
|
/>
|
|
42886
|
+
</val-form-field>
|
|
42887
|
+
<div class="survey-builder__section-subtitle">
|
|
42888
|
+
<val-form-field [label]="t('sectionSubtitleLabel')">
|
|
42889
|
+
<val-text-input
|
|
42890
|
+
[props]="{
|
|
42891
|
+
control: sectionSubtitleControl(group.id),
|
|
42892
|
+
placeholder: t('sectionSubtitlePlaceholder'),
|
|
42893
|
+
}"
|
|
42894
|
+
/>
|
|
42895
|
+
</val-form-field>
|
|
42896
|
+
</div>
|
|
42897
|
+
</div>
|
|
42898
|
+
<val-button
|
|
42899
|
+
[props]="{
|
|
42900
|
+
token: 'survey-builder-add-question-' + group.id,
|
|
42901
|
+
text: t('addQuestionToSection'),
|
|
42902
|
+
color: 'dark',
|
|
42903
|
+
fill: 'outline',
|
|
42904
|
+
shape: 'round',
|
|
42905
|
+
size: 'small',
|
|
42906
|
+
type: 'button',
|
|
42907
|
+
state: 'ENABLED',
|
|
42908
|
+
icon: { name: 'add-outline', slot: 'start' },
|
|
42909
|
+
}"
|
|
42910
|
+
(onClick)="addQuestion(group.id)"
|
|
42911
|
+
/>
|
|
42912
|
+
</div>
|
|
42913
|
+
|
|
42914
|
+
@for (row of group.rows; track row.id; let i = $index; let first = $first; let last = $last) {
|
|
42915
|
+
@let globalIndex = rowGlobalIndex(group.id, i);
|
|
42916
|
+
<div class="survey-builder__row">
|
|
42917
|
+
<div class="survey-builder__row-head">
|
|
42918
|
+
<div class="survey-builder__row-text">
|
|
42919
|
+
<strong>{{ row.label || t('untitledQuestion') }}</strong>
|
|
42920
|
+
<span>
|
|
42921
|
+
{{
|
|
42922
|
+
typeLabel(row.type) +
|
|
42923
|
+
(row.required ? ' · ' + t('requiredTag') : '')
|
|
42924
|
+
}}
|
|
42925
|
+
</span>
|
|
42926
|
+
</div>
|
|
42927
|
+
<div class="survey-builder__row-actions">
|
|
42928
|
+
<val-button
|
|
42929
|
+
[props]="iconAction('q-add-' + row.id, 'add-outline', addQuestionAriaLabel(row.sectionLabel), false)"
|
|
42930
|
+
(onClick)="addQuestion(row.sectionId || group.id)"
|
|
42931
|
+
/>
|
|
42932
|
+
<val-button
|
|
42933
|
+
[props]="iconAction('q-up-' + row.id, 'arrow-up-outline', t('moveUp'), first)"
|
|
42934
|
+
(onClick)="move(globalIndex, -1)"
|
|
42935
|
+
/>
|
|
42936
|
+
<val-button
|
|
42937
|
+
[props]="iconAction('q-down-' + row.id, 'arrow-down-outline', t('moveDown'), last)"
|
|
42938
|
+
(onClick)="move(globalIndex, 1)"
|
|
42939
|
+
/>
|
|
42940
|
+
<val-button
|
|
42941
|
+
[props]="iconAction('q-copy-' + row.id, 'copy-outline', t('duplicateQuestion'))"
|
|
42942
|
+
(onClick)="duplicate(row)"
|
|
42943
|
+
/>
|
|
42944
|
+
<val-button
|
|
42945
|
+
[props]="iconAction('q-edit-' + row.id, 'create-outline', t('editQuestion'))"
|
|
42946
|
+
(onClick)="toggleEdit(row)"
|
|
42947
|
+
/>
|
|
42948
|
+
<val-button
|
|
42949
|
+
[props]="iconAction('q-remove-' + row.id, 'trash-outline', t('removeQuestion'), false, 'danger')"
|
|
42950
|
+
(onClick)="removeQuestion(row)"
|
|
42951
|
+
/>
|
|
42952
|
+
</div>
|
|
42670
42953
|
</div>
|
|
42954
|
+
|
|
42955
|
+
@if (editingId() === row.id) {
|
|
42956
|
+
<div class="survey-builder__row-editor">
|
|
42957
|
+
<val-field-schema-editor
|
|
42958
|
+
#editor
|
|
42959
|
+
[props]="editorProps(row)"
|
|
42960
|
+
(changed)="draftQuestion($event)"
|
|
42961
|
+
(save)="applyQuestion($event)"
|
|
42962
|
+
/>
|
|
42963
|
+
<div class="survey-builder__row-editor-actions">
|
|
42964
|
+
<val-button
|
|
42965
|
+
[props]="{
|
|
42966
|
+
token: 'q-done-' + row.id,
|
|
42967
|
+
text: t('doneEditing'),
|
|
42968
|
+
color: 'dark',
|
|
42969
|
+
fill: 'solid',
|
|
42970
|
+
shape: 'round',
|
|
42971
|
+
size: 'default',
|
|
42972
|
+
type: 'button',
|
|
42973
|
+
state: 'ENABLED',
|
|
42974
|
+
}"
|
|
42975
|
+
(onClick)="editor.submit()"
|
|
42976
|
+
/>
|
|
42977
|
+
</div>
|
|
42978
|
+
</div>
|
|
42979
|
+
}
|
|
42671
42980
|
</div>
|
|
42672
42981
|
}
|
|
42673
|
-
</
|
|
42982
|
+
</section>
|
|
42983
|
+
}
|
|
42674
42984
|
}
|
|
42675
42985
|
|
|
42676
|
-
|
|
42986
|
+
<val-button
|
|
42677
42987
|
[props]="{
|
|
42678
42988
|
token: 'survey-builder-add-question',
|
|
42679
42989
|
text: t('addQuestion'),
|
|
@@ -42685,12 +42995,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42685
42995
|
state: 'ENABLED',
|
|
42686
42996
|
icon: { name: 'add-outline', slot: 'start' },
|
|
42687
42997
|
}"
|
|
42688
|
-
(onClick)="addQuestion()"
|
|
42998
|
+
(onClick)="addQuestion(questionGroups()[0]?.id)"
|
|
42689
42999
|
/>
|
|
42690
43000
|
</div>
|
|
42691
43001
|
}
|
|
42692
43002
|
|
|
42693
|
-
@if (showWizardSection(
|
|
43003
|
+
@if (showWizardSection(reviewStep())) {
|
|
42694
43004
|
<section class="survey-builder__review">
|
|
42695
43005
|
<span class="survey-builder__questions-label">{{ t('reviewTitle') }}</span>
|
|
42696
43006
|
<strong>{{ titleControl.value || t('untitledQuestion') }}</strong>
|
|
@@ -42713,7 +43023,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42713
43023
|
@if (wizardStep() > 0) {
|
|
42714
43024
|
<val-button [props]="wizardBackProps()" (onClick)="previousStep()" />
|
|
42715
43025
|
}
|
|
42716
|
-
@if (wizardStep() < wizardSteps.length - 1) {
|
|
43026
|
+
@if (wizardStep() < wizardSteps().length - 1) {
|
|
42717
43027
|
<val-button [props]="wizardNextProps()" (onClick)="nextStep()" />
|
|
42718
43028
|
} @else {
|
|
42719
43029
|
<val-button [props]="saveProps()" (onClick)="save()" />
|
|
@@ -42723,7 +43033,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42723
43033
|
<val-button [props]="saveProps()" (onClick)="save()" />
|
|
42724
43034
|
}
|
|
42725
43035
|
</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"] }]
|
|
43036
|
+
`, 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
43037
|
}], ctorParameters: () => [], propDecorators: { props: [{
|
|
42728
43038
|
type: Input
|
|
42729
43039
|
}], saved: [{
|
|
@@ -51175,6 +51485,39 @@ class DataTableComponent {
|
|
|
51175
51485
|
get visibleColumns() {
|
|
51176
51486
|
return this._visibleColumns;
|
|
51177
51487
|
}
|
|
51488
|
+
get mobileCardLayout() {
|
|
51489
|
+
return this.props.mobileCardLayout || {};
|
|
51490
|
+
}
|
|
51491
|
+
get mobileCardLayoutActive() {
|
|
51492
|
+
return Object.keys(this.mobileCardLayout).length > 0;
|
|
51493
|
+
}
|
|
51494
|
+
get mobileCardPrimaryColumns() {
|
|
51495
|
+
return this.mobileCardLayout.primary ? this.resolveMobileCardColumns(this.mobileCardLayout.primary) : [];
|
|
51496
|
+
}
|
|
51497
|
+
get mobileCardSecondaryColumns() {
|
|
51498
|
+
return this.mobileCardLayout.secondary ? this.resolveMobileCardColumns(this.mobileCardLayout.secondary) : [];
|
|
51499
|
+
}
|
|
51500
|
+
get mobileCardMetaColumns() {
|
|
51501
|
+
return this.resolveMobileCardColumns(this.mobileCardLayout.meta);
|
|
51502
|
+
}
|
|
51503
|
+
get mobileCardStatusColumns() {
|
|
51504
|
+
return this.resolveMobileCardColumns(this.mobileCardLayout.status);
|
|
51505
|
+
}
|
|
51506
|
+
get mobileCardAdditionalColumns() {
|
|
51507
|
+
if (this.mobileCardLayoutActive && this.mobileCardLayout.showUnmappedColumns === false) {
|
|
51508
|
+
return [];
|
|
51509
|
+
}
|
|
51510
|
+
const mapped = new Set([
|
|
51511
|
+
...this.mobileCardPrimaryColumns.map(c => c.key),
|
|
51512
|
+
...this.mobileCardSecondaryColumns.map(c => c.key),
|
|
51513
|
+
...this.mobileCardMetaColumns.map(c => c.key),
|
|
51514
|
+
...this.mobileCardStatusColumns.map(c => c.key),
|
|
51515
|
+
]);
|
|
51516
|
+
if (mapped.size === 0) {
|
|
51517
|
+
return this.visibleColumns;
|
|
51518
|
+
}
|
|
51519
|
+
return this.visibleColumns.filter(column => !mapped.has(column.key));
|
|
51520
|
+
}
|
|
51178
51521
|
get totalColumns() {
|
|
51179
51522
|
let count = this.visibleColumns.length;
|
|
51180
51523
|
if (this.props.showSelectionColumn)
|
|
@@ -51276,6 +51619,21 @@ class DataTableComponent {
|
|
|
51276
51619
|
return 'none';
|
|
51277
51620
|
return this.currentSort.direction === 'asc' ? 'ascending' : 'descending';
|
|
51278
51621
|
}
|
|
51622
|
+
getMobileCardFieldAriaLabel(column, row) {
|
|
51623
|
+
const value = this.getCellValue(row, column);
|
|
51624
|
+
const textValue = value === null || value === undefined ? '' : `${value}`;
|
|
51625
|
+
return textValue ? `${column.label}: ${textValue}` : column.label;
|
|
51626
|
+
}
|
|
51627
|
+
resolveMobileCardColumns(keys) {
|
|
51628
|
+
if (!keys)
|
|
51629
|
+
return [];
|
|
51630
|
+
const orderedKeys = Array.isArray(keys) ? keys : [keys];
|
|
51631
|
+
const columnByKey = new Map(this.visibleColumns.map(column => [column.key, column]));
|
|
51632
|
+
return orderedKeys
|
|
51633
|
+
.map(key => columnByKey.get(key))
|
|
51634
|
+
.filter((column) => Boolean(column))
|
|
51635
|
+
.filter((column, index, list) => list.findIndex(c => c.key === column.key) === index);
|
|
51636
|
+
}
|
|
51279
51637
|
getRowNumber(index) {
|
|
51280
51638
|
const start = this.props.rowNumberStart ?? 1;
|
|
51281
51639
|
if (this.props.pagination) {
|
|
@@ -51662,22 +52020,139 @@ class DataTableComponent {
|
|
|
51662
52020
|
|
|
51663
52021
|
<!-- Card body with fields -->
|
|
51664
52022
|
<div class="card-body">
|
|
51665
|
-
@
|
|
51666
|
-
|
|
51667
|
-
|
|
51668
|
-
|
|
51669
|
-
|
|
51670
|
-
|
|
51671
|
-
|
|
51672
|
-
|
|
51673
|
-
|
|
51674
|
-
|
|
51675
|
-
|
|
51676
|
-
|
|
51677
|
-
|
|
51678
|
-
|
|
51679
|
-
|
|
51680
|
-
|
|
52023
|
+
@if (mobileCardLayoutActive) {
|
|
52024
|
+
@if (mobileCardPrimaryColumns.length) {
|
|
52025
|
+
@for (column of mobileCardPrimaryColumns; track column.key) {
|
|
52026
|
+
<div
|
|
52027
|
+
class="card-field card-field--primary"
|
|
52028
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52029
|
+
>
|
|
52030
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52031
|
+
<span class="card-field__value">
|
|
52032
|
+
@if (column.cellTemplate) {
|
|
52033
|
+
<ng-container
|
|
52034
|
+
*ngTemplateOutlet="
|
|
52035
|
+
column.cellTemplate;
|
|
52036
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52037
|
+
"
|
|
52038
|
+
></ng-container>
|
|
52039
|
+
} @else {
|
|
52040
|
+
{{ getFormattedValue(row, column) }}
|
|
52041
|
+
}
|
|
52042
|
+
</span>
|
|
52043
|
+
</div>
|
|
52044
|
+
}
|
|
52045
|
+
}
|
|
52046
|
+
|
|
52047
|
+
@if (mobileCardSecondaryColumns.length) {
|
|
52048
|
+
@for (column of mobileCardSecondaryColumns; track column.key) {
|
|
52049
|
+
<div
|
|
52050
|
+
class="card-field card-field--secondary"
|
|
52051
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52052
|
+
>
|
|
52053
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52054
|
+
<span class="card-field__value">
|
|
52055
|
+
@if (column.cellTemplate) {
|
|
52056
|
+
<ng-container
|
|
52057
|
+
*ngTemplateOutlet="
|
|
52058
|
+
column.cellTemplate;
|
|
52059
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52060
|
+
"
|
|
52061
|
+
></ng-container>
|
|
52062
|
+
} @else {
|
|
52063
|
+
{{ getFormattedValue(row, column) }}
|
|
52064
|
+
}
|
|
52065
|
+
</span>
|
|
52066
|
+
</div>
|
|
52067
|
+
}
|
|
52068
|
+
}
|
|
52069
|
+
|
|
52070
|
+
@if (mobileCardMetaColumns.length) {
|
|
52071
|
+
@for (column of mobileCardMetaColumns; track column.key) {
|
|
52072
|
+
<div
|
|
52073
|
+
class="card-field card-field--meta"
|
|
52074
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52075
|
+
>
|
|
52076
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52077
|
+
<span class="card-field__value">
|
|
52078
|
+
@if (column.cellTemplate) {
|
|
52079
|
+
<ng-container
|
|
52080
|
+
*ngTemplateOutlet="
|
|
52081
|
+
column.cellTemplate;
|
|
52082
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52083
|
+
"
|
|
52084
|
+
></ng-container>
|
|
52085
|
+
} @else {
|
|
52086
|
+
{{ getFormattedValue(row, column) }}
|
|
52087
|
+
}
|
|
52088
|
+
</span>
|
|
52089
|
+
</div>
|
|
52090
|
+
}
|
|
52091
|
+
}
|
|
52092
|
+
|
|
52093
|
+
@if (mobileCardStatusColumns.length) {
|
|
52094
|
+
@for (column of mobileCardStatusColumns; track column.key) {
|
|
52095
|
+
<div
|
|
52096
|
+
class="card-field card-field--status"
|
|
52097
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52098
|
+
>
|
|
52099
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52100
|
+
<span class="card-field__value">
|
|
52101
|
+
@if (column.cellTemplate) {
|
|
52102
|
+
<ng-container
|
|
52103
|
+
*ngTemplateOutlet="
|
|
52104
|
+
column.cellTemplate;
|
|
52105
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52106
|
+
"
|
|
52107
|
+
></ng-container>
|
|
52108
|
+
} @else {
|
|
52109
|
+
{{ getFormattedValue(row, column) }}
|
|
52110
|
+
}
|
|
52111
|
+
</span>
|
|
52112
|
+
</div>
|
|
52113
|
+
}
|
|
52114
|
+
}
|
|
52115
|
+
|
|
52116
|
+
@if (mobileCardAdditionalColumns.length) {
|
|
52117
|
+
@for (column of mobileCardAdditionalColumns; track column.key) {
|
|
52118
|
+
<div
|
|
52119
|
+
class="card-field card-field--meta"
|
|
52120
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52121
|
+
>
|
|
52122
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52123
|
+
<span class="card-field__value">
|
|
52124
|
+
@if (column.cellTemplate) {
|
|
52125
|
+
<ng-container
|
|
52126
|
+
*ngTemplateOutlet="
|
|
52127
|
+
column.cellTemplate;
|
|
52128
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52129
|
+
"
|
|
52130
|
+
></ng-container>
|
|
52131
|
+
} @else {
|
|
52132
|
+
{{ getFormattedValue(row, column) }}
|
|
52133
|
+
}
|
|
52134
|
+
</span>
|
|
52135
|
+
</div>
|
|
52136
|
+
}
|
|
52137
|
+
}
|
|
52138
|
+
} @else {
|
|
52139
|
+
@for (column of visibleColumns; track column.key) {
|
|
52140
|
+
<div class="card-field">
|
|
52141
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52142
|
+
<span class="card-field__value">
|
|
52143
|
+
@if (column.cellTemplate) {
|
|
52144
|
+
<ng-container
|
|
52145
|
+
*ngTemplateOutlet="
|
|
52146
|
+
column.cellTemplate;
|
|
52147
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52148
|
+
"
|
|
52149
|
+
></ng-container>
|
|
52150
|
+
} @else {
|
|
52151
|
+
{{ getFormattedValue(row, column) }}
|
|
52152
|
+
}
|
|
52153
|
+
</span>
|
|
52154
|
+
</div>
|
|
52155
|
+
}
|
|
51681
52156
|
}
|
|
51682
52157
|
</div>
|
|
51683
52158
|
|
|
@@ -51766,7 +52241,7 @@ class DataTableComponent {
|
|
|
51766
52241
|
</div>
|
|
51767
52242
|
}
|
|
51768
52243
|
</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 }); }
|
|
52244
|
+
`, 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
52245
|
}
|
|
51771
52246
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataTableComponent, decorators: [{
|
|
51772
52247
|
type: Component,
|
|
@@ -52021,22 +52496,139 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
52021
52496
|
|
|
52022
52497
|
<!-- Card body with fields -->
|
|
52023
52498
|
<div class="card-body">
|
|
52024
|
-
@
|
|
52025
|
-
|
|
52026
|
-
|
|
52027
|
-
|
|
52028
|
-
|
|
52029
|
-
|
|
52030
|
-
|
|
52031
|
-
|
|
52032
|
-
|
|
52033
|
-
|
|
52034
|
-
|
|
52035
|
-
|
|
52036
|
-
|
|
52037
|
-
|
|
52038
|
-
|
|
52039
|
-
|
|
52499
|
+
@if (mobileCardLayoutActive) {
|
|
52500
|
+
@if (mobileCardPrimaryColumns.length) {
|
|
52501
|
+
@for (column of mobileCardPrimaryColumns; track column.key) {
|
|
52502
|
+
<div
|
|
52503
|
+
class="card-field card-field--primary"
|
|
52504
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52505
|
+
>
|
|
52506
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52507
|
+
<span class="card-field__value">
|
|
52508
|
+
@if (column.cellTemplate) {
|
|
52509
|
+
<ng-container
|
|
52510
|
+
*ngTemplateOutlet="
|
|
52511
|
+
column.cellTemplate;
|
|
52512
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52513
|
+
"
|
|
52514
|
+
></ng-container>
|
|
52515
|
+
} @else {
|
|
52516
|
+
{{ getFormattedValue(row, column) }}
|
|
52517
|
+
}
|
|
52518
|
+
</span>
|
|
52519
|
+
</div>
|
|
52520
|
+
}
|
|
52521
|
+
}
|
|
52522
|
+
|
|
52523
|
+
@if (mobileCardSecondaryColumns.length) {
|
|
52524
|
+
@for (column of mobileCardSecondaryColumns; track column.key) {
|
|
52525
|
+
<div
|
|
52526
|
+
class="card-field card-field--secondary"
|
|
52527
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52528
|
+
>
|
|
52529
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52530
|
+
<span class="card-field__value">
|
|
52531
|
+
@if (column.cellTemplate) {
|
|
52532
|
+
<ng-container
|
|
52533
|
+
*ngTemplateOutlet="
|
|
52534
|
+
column.cellTemplate;
|
|
52535
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52536
|
+
"
|
|
52537
|
+
></ng-container>
|
|
52538
|
+
} @else {
|
|
52539
|
+
{{ getFormattedValue(row, column) }}
|
|
52540
|
+
}
|
|
52541
|
+
</span>
|
|
52542
|
+
</div>
|
|
52543
|
+
}
|
|
52544
|
+
}
|
|
52545
|
+
|
|
52546
|
+
@if (mobileCardMetaColumns.length) {
|
|
52547
|
+
@for (column of mobileCardMetaColumns; track column.key) {
|
|
52548
|
+
<div
|
|
52549
|
+
class="card-field card-field--meta"
|
|
52550
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52551
|
+
>
|
|
52552
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52553
|
+
<span class="card-field__value">
|
|
52554
|
+
@if (column.cellTemplate) {
|
|
52555
|
+
<ng-container
|
|
52556
|
+
*ngTemplateOutlet="
|
|
52557
|
+
column.cellTemplate;
|
|
52558
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52559
|
+
"
|
|
52560
|
+
></ng-container>
|
|
52561
|
+
} @else {
|
|
52562
|
+
{{ getFormattedValue(row, column) }}
|
|
52563
|
+
}
|
|
52564
|
+
</span>
|
|
52565
|
+
</div>
|
|
52566
|
+
}
|
|
52567
|
+
}
|
|
52568
|
+
|
|
52569
|
+
@if (mobileCardStatusColumns.length) {
|
|
52570
|
+
@for (column of mobileCardStatusColumns; track column.key) {
|
|
52571
|
+
<div
|
|
52572
|
+
class="card-field card-field--status"
|
|
52573
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52574
|
+
>
|
|
52575
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52576
|
+
<span class="card-field__value">
|
|
52577
|
+
@if (column.cellTemplate) {
|
|
52578
|
+
<ng-container
|
|
52579
|
+
*ngTemplateOutlet="
|
|
52580
|
+
column.cellTemplate;
|
|
52581
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52582
|
+
"
|
|
52583
|
+
></ng-container>
|
|
52584
|
+
} @else {
|
|
52585
|
+
{{ getFormattedValue(row, column) }}
|
|
52586
|
+
}
|
|
52587
|
+
</span>
|
|
52588
|
+
</div>
|
|
52589
|
+
}
|
|
52590
|
+
}
|
|
52591
|
+
|
|
52592
|
+
@if (mobileCardAdditionalColumns.length) {
|
|
52593
|
+
@for (column of mobileCardAdditionalColumns; track column.key) {
|
|
52594
|
+
<div
|
|
52595
|
+
class="card-field card-field--meta"
|
|
52596
|
+
[attr.aria-label]="getMobileCardFieldAriaLabel(column, row)"
|
|
52597
|
+
>
|
|
52598
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52599
|
+
<span class="card-field__value">
|
|
52600
|
+
@if (column.cellTemplate) {
|
|
52601
|
+
<ng-container
|
|
52602
|
+
*ngTemplateOutlet="
|
|
52603
|
+
column.cellTemplate;
|
|
52604
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52605
|
+
"
|
|
52606
|
+
></ng-container>
|
|
52607
|
+
} @else {
|
|
52608
|
+
{{ getFormattedValue(row, column) }}
|
|
52609
|
+
}
|
|
52610
|
+
</span>
|
|
52611
|
+
</div>
|
|
52612
|
+
}
|
|
52613
|
+
}
|
|
52614
|
+
} @else {
|
|
52615
|
+
@for (column of visibleColumns; track column.key) {
|
|
52616
|
+
<div class="card-field">
|
|
52617
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
52618
|
+
<span class="card-field__value">
|
|
52619
|
+
@if (column.cellTemplate) {
|
|
52620
|
+
<ng-container
|
|
52621
|
+
*ngTemplateOutlet="
|
|
52622
|
+
column.cellTemplate;
|
|
52623
|
+
context: { row, column, value: getCellValue(row, column) }
|
|
52624
|
+
"
|
|
52625
|
+
></ng-container>
|
|
52626
|
+
} @else {
|
|
52627
|
+
{{ getFormattedValue(row, column) }}
|
|
52628
|
+
}
|
|
52629
|
+
</span>
|
|
52630
|
+
</div>
|
|
52631
|
+
}
|
|
52040
52632
|
}
|
|
52041
52633
|
</div>
|
|
52042
52634
|
|
|
@@ -52125,7 +52717,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
52125
52717
|
</div>
|
|
52126
52718
|
}
|
|
52127
52719
|
</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"] }]
|
|
52720
|
+
`, 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
52721
|
}], propDecorators: { props: [{
|
|
52130
52722
|
type: Input
|
|
52131
52723
|
}], rowClick: [{
|