@seniorsistemas/data-seniorx-core 3.3.0 → 3.4.0-main-e91c7773
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/core/constants/nested-table.const.d.ts +3 -0
- package/core/constants/table.const.d.ts +2 -0
- package/core/types/nested-table.type.d.ts +18 -0
- package/esm2022/core/constants/nested-table.const.mjs +4 -0
- package/esm2022/core/constants/table.const.mjs +15 -1
- package/esm2022/core/types/nested-table.type.mjs +2 -0
- package/esm2022/features/datepicker/datepicker.component.mjs +179 -9
- package/esm2022/features/nested-table/nested-table.component.mjs +132 -0
- package/esm2022/features/panel/panel.component.mjs +3 -3
- package/esm2022/features/table/components/table-actions-menu.component.mjs +47 -6
- package/esm2022/features/table/components/table-cell-content.component.mjs +3 -3
- package/esm2022/features/table/table.component.mjs +17 -67
- package/esm2022/features/table/utils/table-data.util.mjs +40 -1
- package/esm2022/locales/en.json +5 -0
- package/esm2022/locales/es-CO.json +5 -0
- package/esm2022/locales/pt.json +5 -0
- package/esm2022/providers/features.provider.mjs +3 -1
- package/esm2022/public-api.mjs +2 -1
- package/features/datepicker/datepicker.component.d.ts +14 -1
- package/features/nested-table/nested-table.component.d.ts +47 -0
- package/features/table/components/table-actions-menu.component.d.ts +16 -1
- package/features/table/table.component.d.ts +0 -1
- package/features/table/utils/table-data.util.d.ts +7 -1
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs +435 -83
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/src/locales/en.json +5 -0
- package/src/locales/es-CO.json +5 -0
- package/src/locales/pt.json +5 -0
- package/styles/accessibility.scss +92 -0
- package/styles.css +89 -1
|
@@ -378,6 +378,9 @@ var enTranslations = {
|
|
|
378
378
|
"platform.datacore.accessibility_panel_content_field": "Panel content text",
|
|
379
379
|
"platform.datacore.accessibility_panel_toggleable_toggle": "Toggle panel collapsible option",
|
|
380
380
|
"platform.datacore.accessibility_panel_collapsed_toggle": "Toggle panel collapsed state",
|
|
381
|
+
"platform.datacore.accessibility_nested_table_group_toggle": "Toggle group row",
|
|
382
|
+
"platform.datacore.accessibility_nested_table_hint": "Information",
|
|
383
|
+
"platform.datacore.accessibility_nested_table_row": "group",
|
|
381
384
|
"platform.datacore.accessibility_code_editor_demo_tabs": "Code editor component demonstration tabs",
|
|
382
385
|
"platform.datacore.accessibility_code_editor_language_field": "Programming language selection",
|
|
383
386
|
"platform.datacore.accessibility_code_editor_width_field": "Code editor width",
|
|
@@ -561,6 +564,8 @@ var enTranslations = {
|
|
|
561
564
|
"platform.datacore.showcase_demos_pick_list_description": "Standard list",
|
|
562
565
|
"platform.datacore.showcase_demos_table_label": "Table",
|
|
563
566
|
"platform.datacore.showcase_demos_table_description": "Table and filters",
|
|
567
|
+
"platform.datacore.showcase_demos_nested_table_label": "Nested Table",
|
|
568
|
+
"platform.datacore.showcase_demos_nested_table_description": "Two-level table with row expansion",
|
|
564
569
|
"platform.datacore.showcase_demos_card_list_label": "Card List",
|
|
565
570
|
"platform.datacore.showcase_demos_card_list_description": "Grid cards",
|
|
566
571
|
"platform.datacore.showcase_demos_row_card_list_label": "Row Card List",
|
|
@@ -5291,6 +5296,9 @@ var esTranslations = {
|
|
|
5291
5296
|
"platform.datacore.accessibility_panel_content_field": "Texto del contenido del panel",
|
|
5292
5297
|
"platform.datacore.accessibility_panel_toggleable_toggle": "Alternar opción colapsable del panel",
|
|
5293
5298
|
"platform.datacore.accessibility_panel_collapsed_toggle": "Alternar estado colapsado del panel",
|
|
5299
|
+
"platform.datacore.accessibility_nested_table_group_toggle": "Expandir o contraer fila de grupo",
|
|
5300
|
+
"platform.datacore.accessibility_nested_table_hint": "Información",
|
|
5301
|
+
"platform.datacore.accessibility_nested_table_row": "grupo",
|
|
5294
5302
|
"platform.datacore.accessibility_code_editor_demo_tabs": "Pestañas de demostración del componente editor de código",
|
|
5295
5303
|
"platform.datacore.accessibility_code_editor_language_field": "Selección de lenguaje de programación",
|
|
5296
5304
|
"platform.datacore.accessibility_code_editor_width_field": "Ancho del editor de código",
|
|
@@ -5473,6 +5481,8 @@ var esTranslations = {
|
|
|
5473
5481
|
"platform.datacore.showcase_demos_pick_list_description": "Lista estándar",
|
|
5474
5482
|
"platform.datacore.showcase_demos_table_label": "Table",
|
|
5475
5483
|
"platform.datacore.showcase_demos_table_description": "Tabla y filtros",
|
|
5484
|
+
"platform.datacore.showcase_demos_nested_table_label": "Nested Table",
|
|
5485
|
+
"platform.datacore.showcase_demos_nested_table_description": "Tabla de dos niveles con expansión de fila",
|
|
5476
5486
|
"platform.datacore.showcase_demos_card_list_label": "Card List",
|
|
5477
5487
|
"platform.datacore.showcase_demos_card_list_description": "Tarjetas en cuadrícula",
|
|
5478
5488
|
"platform.datacore.showcase_demos_row_card_list_label": "Row Card List",
|
|
@@ -10204,6 +10214,9 @@ var ptTranslations = {
|
|
|
10204
10214
|
"platform.datacore.accessibility_panel_content_field": "Texto do conteúdo do painel",
|
|
10205
10215
|
"platform.datacore.accessibility_panel_toggleable_toggle": "Alternar opção colapsável do painel",
|
|
10206
10216
|
"platform.datacore.accessibility_panel_collapsed_toggle": "Alternar estado colapsado do painel",
|
|
10217
|
+
"platform.datacore.accessibility_nested_table_group_toggle": "Expandir ou recolher linha de grupo",
|
|
10218
|
+
"platform.datacore.accessibility_nested_table_hint": "Informação",
|
|
10219
|
+
"platform.datacore.accessibility_nested_table_row": "grupo",
|
|
10207
10220
|
"platform.datacore.accessibility_code_editor_demo_tabs": "Abas de demonstração do componente editor de código",
|
|
10208
10221
|
"platform.datacore.accessibility_code_editor_language_field": "Seleção de linguagem de programação",
|
|
10209
10222
|
"platform.datacore.accessibility_code_editor_width_field": "Largura do editor de código",
|
|
@@ -10387,6 +10400,8 @@ var ptTranslations = {
|
|
|
10387
10400
|
"platform.datacore.showcase_demos_pick_list_description": "Listagem padrão",
|
|
10388
10401
|
"platform.datacore.showcase_demos_table_label": "Table",
|
|
10389
10402
|
"platform.datacore.showcase_demos_table_description": "Tabela e filtros",
|
|
10403
|
+
"platform.datacore.showcase_demos_nested_table_label": "Nested Table",
|
|
10404
|
+
"platform.datacore.showcase_demos_nested_table_description": "Tabela de duas camadas com expansão de linha",
|
|
10390
10405
|
"platform.datacore.showcase_demos_card_list_label": "Card List",
|
|
10391
10406
|
"platform.datacore.showcase_demos_card_list_description": "Cards em grade",
|
|
10392
10407
|
"platform.datacore.showcase_demos_row_card_list_label": "Row Card List",
|
|
@@ -18370,6 +18385,20 @@ const TABLE_DEFAULT_ROW_ID_PREVIEW_LENGTH = 20;
|
|
|
18370
18385
|
const TABLE_HEX_RADIX = 16;
|
|
18371
18386
|
const TABLE_RGB_MAX = 255;
|
|
18372
18387
|
const TABLE_MENU_GAP_PX = 4;
|
|
18388
|
+
// Respiro minimo entre o menu de acoes e a borda da tela, usado quando ele nao cabe
|
|
18389
|
+
// abaixo do gatilho e precisa ser trazido pra dentro da viewport.
|
|
18390
|
+
const TABLE_MENU_VIEWPORT_MARGIN_PX = 8;
|
|
18391
|
+
// Altura do estado VAZIO quando a tabela esta empilhada (ver emptyBodyHeightPx).
|
|
18392
|
+
//
|
|
18393
|
+
// O corpo da tabela reserva "linhas por pagina x altura da linha" pra evitar o salto
|
|
18394
|
+
// de layout quando os dados chegam. Empilhado, cada linha e um cartao de 120px: 10
|
|
18395
|
+
// linhas viram 1224px de nada. Medido num Galaxy S9+ (658px de altura util), a lista
|
|
18396
|
+
// vazia esticava a pagina pra 3,4 telas de rolagem - rolar tudo isso pra chegar ao
|
|
18397
|
+
// fim de uma lista que nao tem nada.
|
|
18398
|
+
//
|
|
18399
|
+
// Reservar espaco so faz sentido pra conteudo que vem. No vazio nao vem, entao vale
|
|
18400
|
+
// uma altura fixa, a mesma do piso de carregamento.
|
|
18401
|
+
const TABLE_EMPTY_STATE_MOBILE_HEIGHT_PX = TABLE_DEFAULT_MIN_LOADING_HEIGHT_PX;
|
|
18373
18402
|
const TABLE_TAG_FOREGROUND_DARKEN_AMOUNT = 0.22;
|
|
18374
18403
|
const TABLE_TAG_BACKGROUND_ALPHA = 0.14;
|
|
18375
18404
|
const TABLE_ICON_RENDER_SIZE_PX = 16;
|
|
@@ -23478,7 +23507,7 @@ const HANDLE_WIDTH = 6;
|
|
|
23478
23507
|
const TASK_LABEL_HORIZONTAL_PADDING = 6;
|
|
23479
23508
|
const DRAG_MIN_HANDLE_FACTOR = 2;
|
|
23480
23509
|
const POPUP_AUTO_REMOVE_DELAY_MS = 3000;
|
|
23481
|
-
const MONTHS_IN_YEAR = 12;
|
|
23510
|
+
const MONTHS_IN_YEAR$1 = 12;
|
|
23482
23511
|
const BAR_SELECTOR = '.sdc-gantt-bar';
|
|
23483
23512
|
var DragMode;
|
|
23484
23513
|
(function (DragMode) {
|
|
@@ -24068,7 +24097,7 @@ class GanttEngine {
|
|
|
24068
24097
|
case 'week':
|
|
24069
24098
|
return (diffDays(rangeStart, taskStart) / DAYS_IN_WEEK$1) * colW;
|
|
24070
24099
|
case 'month': {
|
|
24071
|
-
const monthDiff = (taskStart.getFullYear() - rangeStart.getFullYear()) * MONTHS_IN_YEAR +
|
|
24100
|
+
const monthDiff = (taskStart.getFullYear() - rangeStart.getFullYear()) * MONTHS_IN_YEAR$1 +
|
|
24072
24101
|
(taskStart.getMonth() - rangeStart.getMonth());
|
|
24073
24102
|
const dayFraction = (taskStart.getDate() - 1) / new Date(taskStart.getFullYear(), taskStart.getMonth() + 1, 0).getDate();
|
|
24074
24103
|
return (monthDiff + dayFraction) * colW;
|
|
@@ -26618,11 +26647,11 @@ class PanelComponent {
|
|
|
26618
26647
|
return 'platform.datacore.accessibility_panel_collapse';
|
|
26619
26648
|
}
|
|
26620
26649
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
26621
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PanelComponent, isStandalone: true, selector: "sdc-panel", inputs: { header: "header", toggleable: "toggleable", collapsed: "collapsed", severity: "severity", borderButtonOptions: "borderButtonOptions", panelClass: ["class", "panelClass"], ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy" }, outputs: { collapsedChange: "collapsedChange" }, ngImport: i0, template: "<section\n [class]=\"panelClasses\"\n [class.sdc-panel--collapsed]=\"collapsed\"\n [class.sdc-panel--toggleable]=\"toggleable\"\n [class.sdc-panel--with-border-button]=\"showBorderButton\"\n [ngClass]=\"severityClass\"\n [attr.aria-label]=\"(ariaLabel || header) | translate\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-expanded]=\"toggleable ? !collapsed : null\"\n>\n @if (showBorderButton) {\n <button\n type=\"button\"\n class=\"sdc-panel__border-button\"\n [disabled]=\"borderButtonDisabled\"\n [attr.aria-label]=\"borderButtonLabel | translate\"\n [attr.title]=\"borderButtonTooltip ? (borderButtonTooltip | translate) : null\"\n (click)=\"onBorderButtonClick($event)\"\n >\n @if (borderButtonIcon) {\n <i [class]=\"borderButtonIcon\" aria-hidden=\"true\"></i>\n <span class=\"sdc-panel__sr-only\">{{ borderButtonLabel | translate }}</span>\n } @else {\n <span>{{ borderButtonLabel | translate }}</span>\n }\n </button>\n }\n\n @if (header || toggleable) {\n <div class=\"sdc-panel__header\">\n <div class=\"sdc-panel__header-content\">\n @if (header) {\n <span class=\"sdc-panel__title\">{{ header | translate }}</span>\n }\n\n <ng-content select=\"[sdcPanelHeaderContent]\"></ng-content>\n </div>\n\n <div class=\"sdc-panel__header-actions\">\n <ng-content select=\"[sdcPanelActions]\"></ng-content>\n\n @if (toggleable) {\n <button\n type=\"button\"\n class=\"sdc-panel__toggle fas\"\n [ngClass]=\"collapsed ? 'fa-plus' : 'fa-minus'\"\n [attr.aria-controls]=\"contentId\"\n [attr.aria-expanded]=\"!collapsed\"\n [attr.aria-label]=\"getToggleAriaLabel() | translate\"\n (click)=\"toggleCollapsed()\"\n >\n <span class=\"sdc-panel__sr-only\">{{ getToggleAriaLabel() | translate }}</span>\n </button>\n }\n </div>\n </div>\n }\n\n @if (!toggleable || !collapsed) {\n <div\n [id]=\"contentId\"\n class=\"sdc-panel__content\"\n [attr.aria-label]=\"'platform.datacore.accessibility_panel_content' | translate\"\n >\n <div class=\"sdc-panel__body\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"sdc-panel__footer\">\n <ng-content select=\"[sdcFooter]\"></ng-content>\n </div>\n </div>\n }\n</section>\n", styles: [":host{display:block}.sdc-panel{position:relative;display:block;overflow:hidden;background-color:var(--sdc-panel-bg, var(--sdc-surface-bg, #ffffff));border:var(--sdc-panel-border, var(--sdc-surface-border, 1px solid #dedce5));border-radius:var(--sdc-panel-radius, var(--sdc-surface-radius, 4px));box-shadow:var(--sdc-panel-shadow, var(--sdc-surface-shadow, none));padding:var(--sdc-panel-padding, var(--sdc-surface-padding, 22px 22px 20px));transition:var(--sdc-panel-transition, var(--sdc-surface-transition, border-color .25s ease))}.sdc-panel.sdc-panel--success{border-left:4px solid var(--sdc-panel-success, #1f9d55)}.sdc-panel.sdc-panel--info{border-left:4px solid var(--sdc-panel-info, #2563eb)}.sdc-panel.sdc-panel--warn{border-left:4px solid var(--sdc-panel-warn, #d97706)}.sdc-panel.sdc-panel--error{border-left:4px solid var(--sdc-panel-error, #dc2626)}.sdc-panel__header{display:flex;align-items:center;justify-content:space-between;gap:1rem;min-height:var(--sdc-panel-header-min-height, var(--sdc-surface-header-min-height, 34px));padding-bottom:var(--sdc-panel-header-padding-bottom, var(--sdc-surface-header-padding-bottom, 20px));border-bottom:var(--sdc-panel-divider-border, var(--sdc-surface-divider-border, 1px solid #dedce5));color:var(--sdc-panel-title-color, var(--sdc-surface-title-color, #212533))}.sdc-panel--collapsed .sdc-panel__header{padding-bottom:0;border-bottom:none}.sdc-panel__header-content{display:flex;align-items:center;gap:var(--sdc-panel-header-gap, var(--sdc-control-gap-lg, .75rem));min-width:0;flex-wrap:wrap}.sdc-panel__header-actions{display:flex;align-items:center;gap:var(--sdc-panel-header-gap, var(--sdc-control-gap, .5rem));flex:0 0 auto}.sdc-panel__title{color:inherit;font-size:var(--sdc-panel-title-font-size, var(--sdc-surface-title-font-size, 14px));font-weight:var(--sdc-panel-title-font-weight, var(--sdc-surface-title-font-weight, 400));line-height:var(--sdc-panel-title-line-height, var(--sdc-surface-title-line-height, 20px))}.sdc-panel__toggle,.sdc-panel__border-button{display:inline-flex;align-items:center;justify-content:center;min-width:var(--sdc-panel-action-size, 24px);min-height:var(--sdc-panel-action-size, 24px);border:none;background:transparent;color:inherit;cursor:pointer}.sdc-panel__toggle{flex:0 0 auto;border-radius:999px}.sdc-panel__toggle:focus-visible{outline:2px solid currentColor;outline-offset:2px}.sdc-panel__border-button{position:absolute;inset-block-start:1rem;inset-inline-start:0;z-index:1;padding:.5rem;border-radius:999px;background:var(--sdc-panel-border-button-bg, #ffffff);box-shadow:0 10px 20px #0f172a1f;transform:translate(-40%)}.sdc-panel__border-button:focus-visible{outline:2px solid currentColor;outline-offset:2px}.sdc-panel__border-button:disabled{cursor:not-allowed;opacity:.56}.sdc-panel__content{padding-top:var(--sdc-panel-content-padding-top, 15px)}.sdc-panel__body{padding:var(--sdc-panel-content-padding, var(--sdc-surface-content-padding, 0))}.sdc-panel__footer{margin-top:var(--sdc-panel-footer-margin-top, var(--sdc-surface-footer-margin-top, 15px));padding-top:var(--sdc-panel-footer-padding-top, var(--sdc-surface-footer-padding-top, 15px));border-top:var(--sdc-panel-divider-border, var(--sdc-surface-divider-border, 1px solid #dedce5))}.sdc-panel__footer:empty{display:none}.sdc-panel__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}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
26650
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PanelComponent, isStandalone: true, selector: "sdc-panel", inputs: { header: "header", toggleable: "toggleable", collapsed: "collapsed", severity: "severity", borderButtonOptions: "borderButtonOptions", panelClass: ["class", "panelClass"], ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy" }, outputs: { collapsedChange: "collapsedChange" }, ngImport: i0, template: "<section\n [class]=\"panelClasses\"\n [class.sdc-panel--collapsed]=\"collapsed\"\n [class.sdc-panel--toggleable]=\"toggleable\"\n [class.sdc-panel--with-border-button]=\"showBorderButton\"\n [ngClass]=\"severityClass\"\n [attr.aria-label]=\"(ariaLabel || header) | translate\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-expanded]=\"toggleable ? !collapsed : null\"\n>\n @if (showBorderButton) {\n <button\n type=\"button\"\n class=\"sdc-panel__border-button\"\n [disabled]=\"borderButtonDisabled\"\n [attr.aria-label]=\"borderButtonLabel | translate\"\n [attr.title]=\"borderButtonTooltip ? (borderButtonTooltip | translate) : null\"\n (click)=\"onBorderButtonClick($event)\"\n >\n @if (borderButtonIcon) {\n <i [class]=\"borderButtonIcon\" aria-hidden=\"true\"></i>\n <span class=\"sdc-panel__sr-only\">{{ borderButtonLabel | translate }}</span>\n } @else {\n <span>{{ borderButtonLabel | translate }}</span>\n }\n </button>\n }\n\n @if (header || toggleable) {\n <div class=\"sdc-panel__header\">\n <div class=\"sdc-panel__header-content\">\n @if (header) {\n <span class=\"sdc-panel__title\">{{ header | translate }}</span>\n }\n\n <ng-content select=\"[sdcPanelHeaderContent]\"></ng-content>\n </div>\n\n <div class=\"sdc-panel__header-actions\">\n <ng-content select=\"[sdcPanelActions]\"></ng-content>\n\n @if (toggleable) {\n <button\n type=\"button\"\n class=\"sdc-panel__toggle fas\"\n [ngClass]=\"collapsed ? 'fa-plus' : 'fa-minus'\"\n [attr.aria-controls]=\"contentId\"\n [attr.aria-expanded]=\"!collapsed\"\n [attr.aria-label]=\"getToggleAriaLabel() | translate\"\n (click)=\"toggleCollapsed()\"\n >\n <span class=\"sdc-panel__sr-only\">{{ getToggleAriaLabel() | translate }}</span>\n </button>\n }\n </div>\n </div>\n }\n\n @if (!toggleable || !collapsed) {\n <div\n [id]=\"contentId\"\n class=\"sdc-panel__content\"\n [attr.aria-label]=\"'platform.datacore.accessibility_panel_content' | translate\"\n >\n <div class=\"sdc-panel__body\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"sdc-panel__footer\">\n <ng-content select=\"[sdcFooter]\"></ng-content>\n </div>\n </div>\n }\n</section>\n", styles: [":host{display:block}.sdc-panel{position:relative;display:block;overflow:hidden;background-color:var(--sdc-panel-bg, var(--sdc-surface-bg, #ffffff));border:var(--sdc-panel-border, var(--sdc-surface-border, 1px solid #dedce5));border-radius:var(--sdc-panel-radius, var(--sdc-surface-radius, 4px));box-shadow:var(--sdc-panel-shadow, var(--sdc-surface-shadow, none));padding:var(--sdc-panel-padding, var(--sdc-surface-padding, 22px 22px 20px));transition:var(--sdc-panel-transition, var(--sdc-surface-transition, border-color .25s ease))}.sdc-panel.sdc-panel--success{border-left:4px solid var(--sdc-panel-success, #1f9d55)}.sdc-panel.sdc-panel--info{border-left:4px solid var(--sdc-panel-info, #2563eb)}.sdc-panel.sdc-panel--warn{border-left:4px solid var(--sdc-panel-warn, #d97706)}.sdc-panel.sdc-panel--error{border-left:4px solid var(--sdc-panel-error, #dc2626)}.sdc-panel__header{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap-reverse;min-height:var(--sdc-panel-header-min-height, var(--sdc-surface-header-min-height, 34px));padding-bottom:var(--sdc-panel-header-padding-bottom, var(--sdc-surface-header-padding-bottom, 20px));border-bottom:var(--sdc-panel-divider-border, var(--sdc-surface-divider-border, 1px solid #dedce5));color:var(--sdc-panel-title-color, var(--sdc-surface-title-color, #212533))}.sdc-panel--collapsed .sdc-panel__header{padding-bottom:0;border-bottom:none}.sdc-panel__header-content{display:flex;align-items:center;gap:var(--sdc-panel-header-gap, var(--sdc-control-gap-lg, .75rem));min-width:0;flex-wrap:wrap}.sdc-panel__header-actions{margin-left:auto;display:flex;flex-wrap:wrap-reverse;justify-content:flex-end;align-items:center;gap:var(--sdc-panel-header-gap, var(--sdc-control-gap, .5rem));flex:0 0 auto;max-width:100%}.sdc-panel__title{color:inherit;font-size:var(--sdc-panel-title-font-size, var(--sdc-surface-title-font-size, 14px));font-weight:var(--sdc-panel-title-font-weight, var(--sdc-surface-title-font-weight, 400));line-height:var(--sdc-panel-title-line-height, var(--sdc-surface-title-line-height, 20px))}.sdc-panel__toggle,.sdc-panel__border-button{display:inline-flex;align-items:center;justify-content:center;min-width:var(--sdc-panel-action-size, 24px);min-height:var(--sdc-panel-action-size, 24px);border:none;background:transparent;color:inherit;cursor:pointer}.sdc-panel__toggle{flex:0 0 auto;border-radius:999px}.sdc-panel__toggle:focus-visible{outline:2px solid currentColor;outline-offset:2px}.sdc-panel__border-button{position:absolute;inset-block-start:1rem;inset-inline-start:0;z-index:1;padding:.5rem;border-radius:999px;background:var(--sdc-panel-border-button-bg, #ffffff);box-shadow:0 10px 20px #0f172a1f;transform:translate(-40%)}.sdc-panel__border-button:focus-visible{outline:2px solid currentColor;outline-offset:2px}.sdc-panel__border-button:disabled{cursor:not-allowed;opacity:.56}.sdc-panel__content{padding-top:var(--sdc-panel-content-padding-top, 15px)}.sdc-panel__body{padding:var(--sdc-panel-content-padding, var(--sdc-surface-content-padding, 0))}.sdc-panel__footer{margin-top:var(--sdc-panel-footer-margin-top, var(--sdc-surface-footer-margin-top, 15px));padding-top:var(--sdc-panel-footer-padding-top, var(--sdc-surface-footer-padding-top, 15px));border-top:var(--sdc-panel-divider-border, var(--sdc-surface-divider-border, 1px solid #dedce5))}.sdc-panel__footer:empty{display:none}.sdc-panel__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}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
26622
26651
|
}
|
|
26623
26652
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PanelComponent, decorators: [{
|
|
26624
26653
|
type: Component,
|
|
26625
|
-
args: [{ imports: [CommonModule, TranslateModule], standalone: true, selector: 'sdc-panel', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<section\n [class]=\"panelClasses\"\n [class.sdc-panel--collapsed]=\"collapsed\"\n [class.sdc-panel--toggleable]=\"toggleable\"\n [class.sdc-panel--with-border-button]=\"showBorderButton\"\n [ngClass]=\"severityClass\"\n [attr.aria-label]=\"(ariaLabel || header) | translate\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-expanded]=\"toggleable ? !collapsed : null\"\n>\n @if (showBorderButton) {\n <button\n type=\"button\"\n class=\"sdc-panel__border-button\"\n [disabled]=\"borderButtonDisabled\"\n [attr.aria-label]=\"borderButtonLabel | translate\"\n [attr.title]=\"borderButtonTooltip ? (borderButtonTooltip | translate) : null\"\n (click)=\"onBorderButtonClick($event)\"\n >\n @if (borderButtonIcon) {\n <i [class]=\"borderButtonIcon\" aria-hidden=\"true\"></i>\n <span class=\"sdc-panel__sr-only\">{{ borderButtonLabel | translate }}</span>\n } @else {\n <span>{{ borderButtonLabel | translate }}</span>\n }\n </button>\n }\n\n @if (header || toggleable) {\n <div class=\"sdc-panel__header\">\n <div class=\"sdc-panel__header-content\">\n @if (header) {\n <span class=\"sdc-panel__title\">{{ header | translate }}</span>\n }\n\n <ng-content select=\"[sdcPanelHeaderContent]\"></ng-content>\n </div>\n\n <div class=\"sdc-panel__header-actions\">\n <ng-content select=\"[sdcPanelActions]\"></ng-content>\n\n @if (toggleable) {\n <button\n type=\"button\"\n class=\"sdc-panel__toggle fas\"\n [ngClass]=\"collapsed ? 'fa-plus' : 'fa-minus'\"\n [attr.aria-controls]=\"contentId\"\n [attr.aria-expanded]=\"!collapsed\"\n [attr.aria-label]=\"getToggleAriaLabel() | translate\"\n (click)=\"toggleCollapsed()\"\n >\n <span class=\"sdc-panel__sr-only\">{{ getToggleAriaLabel() | translate }}</span>\n </button>\n }\n </div>\n </div>\n }\n\n @if (!toggleable || !collapsed) {\n <div\n [id]=\"contentId\"\n class=\"sdc-panel__content\"\n [attr.aria-label]=\"'platform.datacore.accessibility_panel_content' | translate\"\n >\n <div class=\"sdc-panel__body\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"sdc-panel__footer\">\n <ng-content select=\"[sdcFooter]\"></ng-content>\n </div>\n </div>\n }\n</section>\n", styles: [":host{display:block}.sdc-panel{position:relative;display:block;overflow:hidden;background-color:var(--sdc-panel-bg, var(--sdc-surface-bg, #ffffff));border:var(--sdc-panel-border, var(--sdc-surface-border, 1px solid #dedce5));border-radius:var(--sdc-panel-radius, var(--sdc-surface-radius, 4px));box-shadow:var(--sdc-panel-shadow, var(--sdc-surface-shadow, none));padding:var(--sdc-panel-padding, var(--sdc-surface-padding, 22px 22px 20px));transition:var(--sdc-panel-transition, var(--sdc-surface-transition, border-color .25s ease))}.sdc-panel.sdc-panel--success{border-left:4px solid var(--sdc-panel-success, #1f9d55)}.sdc-panel.sdc-panel--info{border-left:4px solid var(--sdc-panel-info, #2563eb)}.sdc-panel.sdc-panel--warn{border-left:4px solid var(--sdc-panel-warn, #d97706)}.sdc-panel.sdc-panel--error{border-left:4px solid var(--sdc-panel-error, #dc2626)}.sdc-panel__header{display:flex;align-items:center;justify-content:space-between;gap:1rem;min-height:var(--sdc-panel-header-min-height, var(--sdc-surface-header-min-height, 34px));padding-bottom:var(--sdc-panel-header-padding-bottom, var(--sdc-surface-header-padding-bottom, 20px));border-bottom:var(--sdc-panel-divider-border, var(--sdc-surface-divider-border, 1px solid #dedce5));color:var(--sdc-panel-title-color, var(--sdc-surface-title-color, #212533))}.sdc-panel--collapsed .sdc-panel__header{padding-bottom:0;border-bottom:none}.sdc-panel__header-content{display:flex;align-items:center;gap:var(--sdc-panel-header-gap, var(--sdc-control-gap-lg, .75rem));min-width:0;flex-wrap:wrap}.sdc-panel__header-actions{display:flex;align-items:center;gap:var(--sdc-panel-header-gap, var(--sdc-control-gap, .5rem));flex:0 0 auto}.sdc-panel__title{color:inherit;font-size:var(--sdc-panel-title-font-size, var(--sdc-surface-title-font-size, 14px));font-weight:var(--sdc-panel-title-font-weight, var(--sdc-surface-title-font-weight, 400));line-height:var(--sdc-panel-title-line-height, var(--sdc-surface-title-line-height, 20px))}.sdc-panel__toggle,.sdc-panel__border-button{display:inline-flex;align-items:center;justify-content:center;min-width:var(--sdc-panel-action-size, 24px);min-height:var(--sdc-panel-action-size, 24px);border:none;background:transparent;color:inherit;cursor:pointer}.sdc-panel__toggle{flex:0 0 auto;border-radius:999px}.sdc-panel__toggle:focus-visible{outline:2px solid currentColor;outline-offset:2px}.sdc-panel__border-button{position:absolute;inset-block-start:1rem;inset-inline-start:0;z-index:1;padding:.5rem;border-radius:999px;background:var(--sdc-panel-border-button-bg, #ffffff);box-shadow:0 10px 20px #0f172a1f;transform:translate(-40%)}.sdc-panel__border-button:focus-visible{outline:2px solid currentColor;outline-offset:2px}.sdc-panel__border-button:disabled{cursor:not-allowed;opacity:.56}.sdc-panel__content{padding-top:var(--sdc-panel-content-padding-top, 15px)}.sdc-panel__body{padding:var(--sdc-panel-content-padding, var(--sdc-surface-content-padding, 0))}.sdc-panel__footer{margin-top:var(--sdc-panel-footer-margin-top, var(--sdc-surface-footer-margin-top, 15px));padding-top:var(--sdc-panel-footer-padding-top, var(--sdc-surface-footer-padding-top, 15px));border-top:var(--sdc-panel-divider-border, var(--sdc-surface-divider-border, 1px solid #dedce5))}.sdc-panel__footer:empty{display:none}.sdc-panel__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}\n"] }]
|
|
26654
|
+
args: [{ imports: [CommonModule, TranslateModule], standalone: true, selector: 'sdc-panel', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<section\n [class]=\"panelClasses\"\n [class.sdc-panel--collapsed]=\"collapsed\"\n [class.sdc-panel--toggleable]=\"toggleable\"\n [class.sdc-panel--with-border-button]=\"showBorderButton\"\n [ngClass]=\"severityClass\"\n [attr.aria-label]=\"(ariaLabel || header) | translate\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-expanded]=\"toggleable ? !collapsed : null\"\n>\n @if (showBorderButton) {\n <button\n type=\"button\"\n class=\"sdc-panel__border-button\"\n [disabled]=\"borderButtonDisabled\"\n [attr.aria-label]=\"borderButtonLabel | translate\"\n [attr.title]=\"borderButtonTooltip ? (borderButtonTooltip | translate) : null\"\n (click)=\"onBorderButtonClick($event)\"\n >\n @if (borderButtonIcon) {\n <i [class]=\"borderButtonIcon\" aria-hidden=\"true\"></i>\n <span class=\"sdc-panel__sr-only\">{{ borderButtonLabel | translate }}</span>\n } @else {\n <span>{{ borderButtonLabel | translate }}</span>\n }\n </button>\n }\n\n @if (header || toggleable) {\n <div class=\"sdc-panel__header\">\n <div class=\"sdc-panel__header-content\">\n @if (header) {\n <span class=\"sdc-panel__title\">{{ header | translate }}</span>\n }\n\n <ng-content select=\"[sdcPanelHeaderContent]\"></ng-content>\n </div>\n\n <div class=\"sdc-panel__header-actions\">\n <ng-content select=\"[sdcPanelActions]\"></ng-content>\n\n @if (toggleable) {\n <button\n type=\"button\"\n class=\"sdc-panel__toggle fas\"\n [ngClass]=\"collapsed ? 'fa-plus' : 'fa-minus'\"\n [attr.aria-controls]=\"contentId\"\n [attr.aria-expanded]=\"!collapsed\"\n [attr.aria-label]=\"getToggleAriaLabel() | translate\"\n (click)=\"toggleCollapsed()\"\n >\n <span class=\"sdc-panel__sr-only\">{{ getToggleAriaLabel() | translate }}</span>\n </button>\n }\n </div>\n </div>\n }\n\n @if (!toggleable || !collapsed) {\n <div\n [id]=\"contentId\"\n class=\"sdc-panel__content\"\n [attr.aria-label]=\"'platform.datacore.accessibility_panel_content' | translate\"\n >\n <div class=\"sdc-panel__body\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"sdc-panel__footer\">\n <ng-content select=\"[sdcFooter]\"></ng-content>\n </div>\n </div>\n }\n</section>\n", styles: [":host{display:block}.sdc-panel{position:relative;display:block;overflow:hidden;background-color:var(--sdc-panel-bg, var(--sdc-surface-bg, #ffffff));border:var(--sdc-panel-border, var(--sdc-surface-border, 1px solid #dedce5));border-radius:var(--sdc-panel-radius, var(--sdc-surface-radius, 4px));box-shadow:var(--sdc-panel-shadow, var(--sdc-surface-shadow, none));padding:var(--sdc-panel-padding, var(--sdc-surface-padding, 22px 22px 20px));transition:var(--sdc-panel-transition, var(--sdc-surface-transition, border-color .25s ease))}.sdc-panel.sdc-panel--success{border-left:4px solid var(--sdc-panel-success, #1f9d55)}.sdc-panel.sdc-panel--info{border-left:4px solid var(--sdc-panel-info, #2563eb)}.sdc-panel.sdc-panel--warn{border-left:4px solid var(--sdc-panel-warn, #d97706)}.sdc-panel.sdc-panel--error{border-left:4px solid var(--sdc-panel-error, #dc2626)}.sdc-panel__header{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap-reverse;min-height:var(--sdc-panel-header-min-height, var(--sdc-surface-header-min-height, 34px));padding-bottom:var(--sdc-panel-header-padding-bottom, var(--sdc-surface-header-padding-bottom, 20px));border-bottom:var(--sdc-panel-divider-border, var(--sdc-surface-divider-border, 1px solid #dedce5));color:var(--sdc-panel-title-color, var(--sdc-surface-title-color, #212533))}.sdc-panel--collapsed .sdc-panel__header{padding-bottom:0;border-bottom:none}.sdc-panel__header-content{display:flex;align-items:center;gap:var(--sdc-panel-header-gap, var(--sdc-control-gap-lg, .75rem));min-width:0;flex-wrap:wrap}.sdc-panel__header-actions{margin-left:auto;display:flex;flex-wrap:wrap-reverse;justify-content:flex-end;align-items:center;gap:var(--sdc-panel-header-gap, var(--sdc-control-gap, .5rem));flex:0 0 auto;max-width:100%}.sdc-panel__title{color:inherit;font-size:var(--sdc-panel-title-font-size, var(--sdc-surface-title-font-size, 14px));font-weight:var(--sdc-panel-title-font-weight, var(--sdc-surface-title-font-weight, 400));line-height:var(--sdc-panel-title-line-height, var(--sdc-surface-title-line-height, 20px))}.sdc-panel__toggle,.sdc-panel__border-button{display:inline-flex;align-items:center;justify-content:center;min-width:var(--sdc-panel-action-size, 24px);min-height:var(--sdc-panel-action-size, 24px);border:none;background:transparent;color:inherit;cursor:pointer}.sdc-panel__toggle{flex:0 0 auto;border-radius:999px}.sdc-panel__toggle:focus-visible{outline:2px solid currentColor;outline-offset:2px}.sdc-panel__border-button{position:absolute;inset-block-start:1rem;inset-inline-start:0;z-index:1;padding:.5rem;border-radius:999px;background:var(--sdc-panel-border-button-bg, #ffffff);box-shadow:0 10px 20px #0f172a1f;transform:translate(-40%)}.sdc-panel__border-button:focus-visible{outline:2px solid currentColor;outline-offset:2px}.sdc-panel__border-button:disabled{cursor:not-allowed;opacity:.56}.sdc-panel__content{padding-top:var(--sdc-panel-content-padding-top, 15px)}.sdc-panel__body{padding:var(--sdc-panel-content-padding, var(--sdc-surface-content-padding, 0))}.sdc-panel__footer{margin-top:var(--sdc-panel-footer-margin-top, var(--sdc-surface-footer-margin-top, 15px));padding-top:var(--sdc-panel-footer-padding-top, var(--sdc-surface-footer-padding-top, 15px));border-top:var(--sdc-panel-divider-border, var(--sdc-surface-divider-border, 1px solid #dedce5))}.sdc-panel__footer:empty{display:none}.sdc-panel__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}\n"] }]
|
|
26626
26655
|
}], propDecorators: { header: [{
|
|
26627
26656
|
type: Input
|
|
26628
26657
|
}], toggleable: [{
|
|
@@ -30360,7 +30389,9 @@ var TableMenuFocusTarget;
|
|
|
30360
30389
|
})(TableMenuFocusTarget || (TableMenuFocusTarget = {}));
|
|
30361
30390
|
|
|
30362
30391
|
class TableActionsMenuComponent {
|
|
30392
|
+
cdr;
|
|
30363
30393
|
menuItems;
|
|
30394
|
+
painel;
|
|
30364
30395
|
ariaLabel = 'platform.datacore.accessibility_actions_menu';
|
|
30365
30396
|
items = [];
|
|
30366
30397
|
left = 0;
|
|
@@ -30370,8 +30401,41 @@ class TableActionsMenuComponent {
|
|
|
30370
30401
|
close = new EventEmitter();
|
|
30371
30402
|
select = new EventEmitter();
|
|
30372
30403
|
activeIndex = -1;
|
|
30404
|
+
constructor(cdr) {
|
|
30405
|
+
this.cdr = cdr;
|
|
30406
|
+
}
|
|
30373
30407
|
ngAfterViewInit() {
|
|
30374
|
-
queueMicrotask(() =>
|
|
30408
|
+
queueMicrotask(() => {
|
|
30409
|
+
this.manterDentroDaViewport();
|
|
30410
|
+
this.focusFirstEnabledItem();
|
|
30411
|
+
});
|
|
30412
|
+
}
|
|
30413
|
+
/**
|
|
30414
|
+
* O chamador posiciona o menu logo abaixo do gatilho (table.component.ts:
|
|
30415
|
+
* `top: rect.bottom + gap`) sem saber a altura dele, que so existe depois de
|
|
30416
|
+
* renderizar. Numa linha perto do rodape o menu nascia fora da tela - medido num
|
|
30417
|
+
* iPad Mini (viewport de 1024px): abria em top 1028, bottom 1094, com o item
|
|
30418
|
+
* "Visualizar" em 1038. Como e `position: fixed`, rolar a pagina NAO traz ele de
|
|
30419
|
+
* volta - ficava impossivel de alcancar.
|
|
30420
|
+
*
|
|
30421
|
+
* Aqui, ja com a medida real, o menu encosta na borda em vez de passar dela. A
|
|
30422
|
+
* horizontal segue a mesma ideia.
|
|
30423
|
+
*/
|
|
30424
|
+
manterDentroDaViewport() {
|
|
30425
|
+
const el = this.painel?.nativeElement;
|
|
30426
|
+
if (!el) {
|
|
30427
|
+
return;
|
|
30428
|
+
}
|
|
30429
|
+
const { width, height } = el.getBoundingClientRect();
|
|
30430
|
+
const margem = TABLE_MENU_VIEWPORT_MARGIN_PX;
|
|
30431
|
+
const top = Math.max(margem, Math.min(this.top, window.innerHeight - height - margem));
|
|
30432
|
+
const left = Math.max(margem, Math.min(this.left, window.innerWidth - width - margem));
|
|
30433
|
+
if (top === this.top && left === this.left) {
|
|
30434
|
+
return;
|
|
30435
|
+
}
|
|
30436
|
+
this.top = top;
|
|
30437
|
+
this.left = left;
|
|
30438
|
+
this.cdr.markForCheck();
|
|
30375
30439
|
}
|
|
30376
30440
|
onItemFocus(index) {
|
|
30377
30441
|
if (this.items[index]?.disabled) {
|
|
@@ -30488,9 +30552,10 @@ class TableActionsMenuComponent {
|
|
|
30488
30552
|
event.preventDefault();
|
|
30489
30553
|
this.focusIndex(enabledIndexes[currentEnabledPosition + 1]);
|
|
30490
30554
|
}
|
|
30491
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableActionsMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30492
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TableActionsMenuComponent, isStandalone: true, selector: "sdc-table-actions-menu", inputs: { ariaLabel: "ariaLabel", items: "items", left: "left", menuId: "menuId", top: "top", width: "width" }, outputs: { close: "close", select: "select" }, viewQueries: [{ propertyName: "menuItems", predicate: ["menuItem"], descendants: true }], ngImport: i0, template: `
|
|
30555
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableActionsMenuComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
30556
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TableActionsMenuComponent, isStandalone: true, selector: "sdc-table-actions-menu", inputs: { ariaLabel: "ariaLabel", items: "items", left: "left", menuId: "menuId", top: "top", width: "width" }, outputs: { close: "close", select: "select" }, viewQueries: [{ propertyName: "painel", first: true, predicate: ["painel"], descendants: true }, { propertyName: "menuItems", predicate: ["menuItem"], descendants: true }], ngImport: i0, template: `
|
|
30493
30557
|
<div
|
|
30558
|
+
#painel
|
|
30494
30559
|
class="sdc-actions-menu sdc-actions-menu--portal"
|
|
30495
30560
|
[id]="menuId || null"
|
|
30496
30561
|
[style.top.px]="top"
|
|
@@ -30530,6 +30595,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
30530
30595
|
type: Component,
|
|
30531
30596
|
args: [{ selector: 'sdc-table-actions-menu', standalone: true, imports: [CommonModule, TranslateModule, IconRendererComponent], template: `
|
|
30532
30597
|
<div
|
|
30598
|
+
#painel
|
|
30533
30599
|
class="sdc-actions-menu sdc-actions-menu--portal"
|
|
30534
30600
|
[id]="menuId || null"
|
|
30535
30601
|
[style.top.px]="top"
|
|
@@ -30564,9 +30630,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
30564
30630
|
}
|
|
30565
30631
|
</div>
|
|
30566
30632
|
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".sdc-actions-menu{background:#fff;border:1px solid #d1d5db;border-radius:0;box-shadow:0 1px 2px #0f172a14;padding:0}.sdc-actions-menu--portal{position:fixed;z-index:2147483647}.sdc-actions-item{width:100%;display:flex;align-items:stretch;justify-content:flex-start;border:0;border-bottom:1px solid #e5e7eb;background:#fff;padding:0;text-align:left;cursor:pointer;font:inherit;color:#374151;min-height:2.25rem;transition:background-color .15s ease,color .15s ease}.sdc-actions-item:last-child{border-bottom:0}.sdc-actions-item__content{display:inline-flex;align-items:center;gap:.5rem;padding:.625rem .875rem;width:100%;font-size:.8125rem;line-height:1.2}.sdc-actions-item:hover:not(:disabled),.sdc-actions-item:focus-visible:not(:disabled){background:#f9fafb;outline:none}.sdc-actions-item:disabled,.sdc-actions-item.sdc-actions-item--disabled,.sdc-actions-item[data-disabled=true]{color:#9ca3af;cursor:not-allowed;background:#fff;pointer-events:none}.sdc-actions-item:disabled .sdc-actions-item__content,.sdc-actions-item.sdc-actions-item--disabled .sdc-actions-item__content,.sdc-actions-item[data-disabled=true] .sdc-actions-item__content{opacity:.55}\n"] }]
|
|
30567
|
-
}], propDecorators: { menuItems: [{
|
|
30633
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { menuItems: [{
|
|
30568
30634
|
type: ViewChildren,
|
|
30569
30635
|
args: ['menuItem']
|
|
30636
|
+
}], painel: [{
|
|
30637
|
+
type: ViewChild,
|
|
30638
|
+
args: ['painel']
|
|
30570
30639
|
}], ariaLabel: [{
|
|
30571
30640
|
type: Input
|
|
30572
30641
|
}], items: [{
|
|
@@ -30785,6 +30854,45 @@ function filterTableRows(data, cols, query, resolveValue) {
|
|
|
30785
30854
|
return stringifyUnknown(value).toLowerCase().includes(normalizedQuery);
|
|
30786
30855
|
}));
|
|
30787
30856
|
}
|
|
30857
|
+
// Extraido de TableComponent.sortedData pra ser reaproveitado por sdc-nested-table no
|
|
30858
|
+
// nivel de grupo, que precisa do mesmo comparador sem reimplementar sdc-table inteiro.
|
|
30859
|
+
function sortTableRows(data, field, order, resolveValue) {
|
|
30860
|
+
if (!field || order === 0) {
|
|
30861
|
+
return [...data];
|
|
30862
|
+
}
|
|
30863
|
+
const rows = [...data];
|
|
30864
|
+
return rows.sort((leftRow, rightRow) => {
|
|
30865
|
+
const leftValue = resolveValue(leftRow, field);
|
|
30866
|
+
const rightValue = resolveValue(rightRow, field);
|
|
30867
|
+
if (leftValue == null && rightValue == null) {
|
|
30868
|
+
return 0;
|
|
30869
|
+
}
|
|
30870
|
+
if (leftValue == null) {
|
|
30871
|
+
return -order;
|
|
30872
|
+
}
|
|
30873
|
+
if (rightValue == null) {
|
|
30874
|
+
return order;
|
|
30875
|
+
}
|
|
30876
|
+
if (typeof leftValue === 'number' && typeof rightValue === 'number') {
|
|
30877
|
+
return (leftValue - rightValue) * order;
|
|
30878
|
+
}
|
|
30879
|
+
return stringifyUnknown(leftValue).localeCompare(stringifyUnknown(rightValue)) * order;
|
|
30880
|
+
});
|
|
30881
|
+
}
|
|
30882
|
+
// Compartilhado por TableComponent.toggleSort e NestedTableComponent.toggleGroupSort -
|
|
30883
|
+
// mesmo ciclo tri-state (asc -> desc -> neutro) nos dois niveis.
|
|
30884
|
+
function cycleSortState(currentField, currentOrder, field) {
|
|
30885
|
+
if (currentField !== field) {
|
|
30886
|
+
return { field, order: 1 };
|
|
30887
|
+
}
|
|
30888
|
+
if (currentOrder === 1) {
|
|
30889
|
+
return { field, order: -1 };
|
|
30890
|
+
}
|
|
30891
|
+
if (currentOrder === -1) {
|
|
30892
|
+
return { field: null, order: 0 };
|
|
30893
|
+
}
|
|
30894
|
+
return { field, order: 1 };
|
|
30895
|
+
}
|
|
30788
30896
|
|
|
30789
30897
|
const HEX_COLOR_STRING_LENGTH = 6;
|
|
30790
30898
|
function resolveTableVisualConfig(input, value, row) {
|
|
@@ -31123,7 +31231,7 @@ class TableCellContentComponent {
|
|
|
31123
31231
|
this.toggleActionsMenu.emit({ event, trigger });
|
|
31124
31232
|
}
|
|
31125
31233
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableCellContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
31126
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TableCellContentComponent, isStandalone: true, selector: "sdc-table-cell-content", inputs: { cellConfigs: "cellConfigs", col: "col", resolveValue: "resolveValue", row: "row", actionsMenuOpen: "actionsMenuOpen", actionsMenuId: "actionsMenuId", defaultTextOverflow: "defaultTextOverflow", rowCheckboxId: "rowCheckboxId", rowLabel: "rowLabel", rowSelectionDisabled: "rowSelectionDisabled", forceLeftAlign: "forceLeftAlign", rowSelected: "rowSelected" }, outputs: { toggleActionsMenu: "toggleActionsMenu", toggleRow: "toggleRow", triggerButtonAction: "triggerButtonAction" }, host: { properties: { "class.sdc-table-cell-content--align-left": "resolvedAlignment === 'left'", "class.sdc-table-cell-content--align-center": "resolvedAlignment === 'center'", "class.sdc-table-cell-content--align-right": "resolvedAlignment === 'right'", "class.sdc-table-cell-content--nowrap": "col?.textOverflow === 'none'" } }, ngImport: i0, template: "<div class=\"sdc-table-content\">\n @if (col.content?.length) {\n <div class=\"sdc-table-multi-content\">\n @for (item of col.content!; track $index) {\n @switch (item.type ?? 'text') {\n @case ('strong') {\n <strong\n [ngStyle]=\"item.style\"\n [class]=\"item.class ?? ''\"\n >{{ cellTextValue(item.field) | translate }}</strong>\n }\n @case ('code') {\n <code [ngStyle]=\"item.style\" [class]=\"item.class ?? ''\">{{ cellTextValue(item.field) }}</code>\n }\n @default {\n <span [ngStyle]=\"item.style\" [class]=\"item.class ?? ''\">{{ cellTextValue(item.field) | translate }}</span>\n }\n }\n }\n </div>\n } @else {\n @switch (col.type ?? 'text') {\n @case ('checkbox-selection') {\n <div class=\"sdc-table-checkbox\">\n <input\n type=\"checkbox\"\n [id]=\"rowCheckboxId\"\n [disabled]=\"rowSelectionDisabled\"\n [checked]=\"rowSelected\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (change)=\"toggleRow.emit(getCheckedValue($event))\"\n [attr.aria-label]=\"\n 'platform.datacore.accessibility_select_row'\n | translate: { name: (rowLabel | translate) }\n \"\n [attr.aria-checked]=\"rowSelected\"\n />\n <label [attr.for]=\"rowCheckboxId\" class=\"sr-only\">\n {{\n 'platform.datacore.accessibility_select_row'\n | translate: { name: (rowLabel | translate) }\n }}\n </label>\n </div>\n }\n\n @case ('date') {\n <span class=\"sdc-table-text\" [attr.title]=\"ellipsisTitleText(formatDate())\">{{ formatDate() }}</span>\n }\n\n @case ('strong') {\n <span class=\"sdc-table-strong-label\"\n [attr.title]=\"ellipsisTitleText(cellTextValue() | translate)\">\n {{ cellTextValue() | translate | sdcTruncate:col:defaultTextOverflow }}\n </span>\n }\n\n @case ('code') {\n <code class=\"sdc-table-code-label\"\n [attr.title]=\"ellipsisTitleText(cellTextValue())\">{{ displayText() }}</code>\n }\n\n @case ('link') {\n <a class=\"sdc-table-link\"\n [href]=\"cellTextValue()\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.stopPropagation()\"\n [attr.title]=\"ellipsisTitleText(cellTextValue() | translate)\">\n {{ cellTextValue() | translate | sdcTruncate:col:defaultTextOverflow }}\n </a>\n }\n\n @case ('currency') {\n <span class=\"sdc-table-text\"\n [attr.title]=\"ellipsisTitleText(formatCurrency())\">{{ formatCurrency() }}</span>\n }\n\n @case ('tag') {\n <div class=\"sdc-table-tags\">\n @for (tagItem of tagItems(); track tagItem.label + '-' + $index) {\n <span\n class=\"sdc-table-tag\"\n [class.sdc-table-tag--enabled]=\"tagItem.tone === 'enabled'\"\n [class.sdc-table-tag--disabled]=\"tagItem.tone === 'disabled'\"\n [ngStyle]=\"tagItem.styles\"\n [attr.title]=\"tagItem.tooltip ? (tagItem.tooltip | translate) : (tagItem.label | translate)\"\n >\n @if (tagItem.icon) {\n <sdc-icon-renderer\n class=\"sdc-table-tag__icon\"\n [icon]=\"tagItem.icon\"\n [iconType]=\"tagItem.iconType\"\n [size]=\"tagIconSize\"\n ></sdc-icon-renderer>\n }\n {{ tagItem.label | translate }}\n </span>\n }\n\n @if (tagOverflow(); as overflow) {\n @if (overflow.hiddenCount > 0) {\n <span\n class=\"sdc-table-tag sdc-table-tag--more\"\n [attr.title]=\"\n 'platform.datacore.accessibility_table_tag_more_items'\n | translate: { items: tagOverflowTitle(overflow) }\n \"\n >\u2026</span>\n }\n }\n </div>\n }\n\n @case ('button') {\n <div class=\"sdc-table-button\">\n <sdc-button\n class=\"sdc-table-action-button\"\n [size]=\"cellConfigs.button.size ?? 'default'\"\n [priority]=\"cellConfigs.button.priority || 'primary'\"\n [icon]=\"cellConfigs.button.icon\"\n [label]=\"cellConfigs.button.label ?? ''\"\n [disabled]=\"cellConfigs.button.disabled ?? false\"\n [title]=\"cellConfigs.button.tooltip\"\n [attr.size]=\"cellConfigs.button.size\"\n [attr.priority]=\"cellConfigs.button.priority || 'primary'\"\n [attr.severity]=\"cellConfigs.button.priority || 'primary'\"\n [attr.icon]=\"cellConfigs.button.icon\"\n [attr.label]=\"cellConfigs.button.label\"\n [attr.disabled]=\"cellConfigs.button.disabled ? '' : null\"\n [attr.title]=\"cellConfigs.button.tooltip || null\"\n [attr.aria-label]=\"\n (buttonAriaLabel() | translate)\n + ' - '\n + (rowLabel | translate)\n \"\n [attr.data-key]=\"buttonKey()\"\n (click)=\"cellConfigs.button.disabled ? null : triggerButtonAction.emit()\"\n (keydown.enter)=\"cellConfigs.button.disabled ? null : triggerButtonAction.emit()\"\n (keydown.space)=\"$event.preventDefault(); cellConfigs.button.disabled ? null : triggerButtonAction.emit()\"\n ></sdc-button>\n </div>\n }\n\n @case ('actions') {\n <div\n class=\"sdc-table-actions\"\n [class.sdc-table-actions--open]=\"actionsMenuOpen\"\n >\n <button\n #actionsTrigger\n type=\"button\"\n class=\"sdc-table-actions-trigger\"\n [class.sdc-table-actions-trigger--open]=\"actionsMenuOpen\"\n [attr.aria-label]=\"\n (actionsButtonLabel() | translate)\n + ' - '\n + (rowLabel | translate)\n \"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-controls]=\"actionsMenuOpen ? actionsMenuId : null\"\n [attr.aria-expanded]=\"actionsMenuOpen\"\n (click)=\"onActionsClick($event, actionsTrigger)\"\n >\n <span class=\"sdc-table-actions-trigger__label\">\n {{ actionsButtonLabel() | translate }}\n </span>\n <i class=\"fas fa-chevron-down sdc-table-actions-trigger__icon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n\n @case ('icon') {\n @if (iconPresentation(); as iconItem) {\n <span\n class=\"sdc-table-icon\"\n [ngStyle]=\"iconItem.colorStyle\"\n [attr.title]=\"iconItem.tooltip ? (iconItem.tooltip | translate) : null\"\n [attr.aria-label]=\"\n (iconItem.label || iconItem.tooltip)\n ? ((iconItem.label || iconItem.tooltip)! | translate)\n : null\n \"\n >\n @if (iconItem.icon) {\n <sdc-icon-renderer\n [icon]=\"iconItem.icon\"\n [iconType]=\"iconItem.iconType\"\n [size]=\"iconSize\"\n ></sdc-icon-renderer>\n }\n @if (iconItem.label) {\n <span class=\"sdc-table-icon__label\">{{ iconItem.label | translate }}</span>\n }\n </span>\n }\n }\n\n @case ('icon-title') {\n @if (titleIconPresentation(); as titleIconItem) {\n <span\n class=\"sdc-table-icon-title\"\n [ngStyle]=\"titleIconItem.colorStyle\"\n [attr.title]=\"titleIconItem.tooltip ? (titleIconItem.tooltip | translate) : null\"\n >\n @if (titleIconItem.icon) {\n <sdc-icon-renderer\n [icon]=\"titleIconItem.icon\"\n [iconType]=\"titleIconItem.iconType\"\n [size]=\"iconSize\"\n ></sdc-icon-renderer>\n }\n @if (titleIconItem.label) {\n <span [attr.title]=\"ellipsisTitleText(titleIconItem.label | translate)\">\n {{ titleIconItem.label | translate | sdcTruncate:col:defaultTextOverflow }}\n </span>\n }\n </span>\n }\n }\n\n @default {\n <span class=\"sdc-table-text\"\n [attr.title]=\"ellipsisTitleText(cellTextValue() | translate)\">\n {{ cellTextValue() | translate | sdcTruncate:col:defaultTextOverflow }}\n </span>\n }\n }\n }\n</div>\n", styles: [":host{display:block;width:100%;min-width:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sdc-table-content{display:flex;align-items:center;width:100%;min-width:0}:host(.sdc-table-cell-content--align-left) .sdc-table-content{justify-content:flex-start;text-align:left}:host(.sdc-table-cell-content--align-center) .sdc-table-content{justify-content:center;text-align:center}:host(.sdc-table-cell-content--align-right) .sdc-table-content{justify-content:flex-end;text-align:right}.sdc-table-multi-content{display:flex;flex-direction:column;gap:.25rem;min-width:0;max-width:100%}.sdc-table-multi-content strong,.sdc-table-multi-content code,.sdc-table-multi-content span,.sdc-table-text,.sdc-table-strong-label,.sdc-table-code-label,.sdc-table-link{min-width:0;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-table-strong-label{font-weight:500}.sdc-table-code-label{color:var(--sdc-tab-primary)}.sdc-table-link{display:inline-block;color:var(--sdc-tab-primary);text-decoration:underline}.sdc-table-link:hover,.sdc-table-link:focus-visible{text-decoration:none}.sdc-table-tags{display:flex;flex-wrap:wrap;gap:.5rem;min-width:0;max-width:100%;overflow:hidden}.sdc-table-tag{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;width:fit-content;min-width:fit-content;max-width:100%;border-radius:9999px;font-weight:500;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid currentColor;box-sizing:border-box;font-size:.875rem;padding:.35rem .875rem}.sdc-table-tag__icon{flex:0 0 auto}.sdc-table-tag--enabled{background:#dcfce7;color:#16a34a;border-color:#16a34a}.sdc-table-tag--disabled{background:#fee2e2;color:#ef4444;border-color:#ef4444}.sdc-table-tag--more{background:#f3f4f6;color:#374151;border-color:#374151;cursor:default;font-weight:700}.sdc-table-button{display:flex;align-items:center;justify-content:center;min-height:44px;width:100%;min-width:0}.sdc-table-button ::ng-deep sdc-button,.sdc-table-button ::ng-deep button{min-height:unset;min-width:unset;max-width:100%}.sdc-table-action-button{width:100%;max-width:100%;min-width:0}.sdc-table-icon,.sdc-table-icon-title{display:inline-flex;align-items:center;gap:.5rem;min-width:0;max-width:100%}.sdc-table-icon__label,.sdc-table-icon-title span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.sdc-table-checkbox{display:flex;align-items:center;justify-content:center}.sdc-table-checkbox input[type=checkbox]{cursor:pointer}.sdc-table-checkbox input[type=checkbox]:disabled{cursor:not-allowed;opacity:.55}.sdc-table-actions{position:relative;display:inline-flex;align-items:center;justify-content:center;width:100%;min-width:0}.sdc-table-actions-trigger{appearance:none;border:1px solid #c9ced6;background:#fff;border-radius:999px;min-width:4.875rem;height:2rem;padding:0 .75rem;display:inline-flex;align-items:center;justify-content:center;gap:.375rem;font:inherit;font-size:.8125rem;color:#374151;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,background-color .15s ease}.sdc-table-actions-trigger:hover{background:#f9fafb}.sdc-table-actions-trigger:focus-visible,.sdc-table-actions-trigger--open{outline:none;border-color:#9ca3af;box-shadow:0 0 0 2px #1118270a}.sdc-table-actions-trigger__label{line-height:1;white-space:nowrap}.sdc-table-actions-trigger__icon{font-size:.625rem;line-height:1;color:#6b7280}@media (max-width: 768px){.sdc-table-multi-content strong,.sdc-table-multi-content code,.sdc-table-multi-content span{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word}.sdc-table-tag{font-size:.8125rem;padding:.35rem .75rem}.sdc-table-actions-trigger{min-width:4.375rem;height:1.75rem;padding:0 .625rem;font-size:.75rem}.sdc-table-text,.sdc-table-strong-label,.sdc-table-code-label,.sdc-table-link,.sdc-table-icon__label,.sdc-table-icon-title span{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["id", "label", "ariaLabel", "disabled", "loading", "width", "priority", "size", "type", "icon", "rightIcon", "auxiliary", "rounded", "caret", "tooltip", "animation", "slide", "styleClass", "badge", "menuOptions", "menuContext", "model"], outputs: ["clicked"] }, { kind: "component", type: IconRendererComponent, selector: "sdc-icon-renderer", inputs: ["icon", "iconType", "size"] }, { kind: "pipe", type: SdcTruncatePipe, name: "sdcTruncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
31234
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TableCellContentComponent, isStandalone: true, selector: "sdc-table-cell-content", inputs: { cellConfigs: "cellConfigs", col: "col", resolveValue: "resolveValue", row: "row", actionsMenuOpen: "actionsMenuOpen", actionsMenuId: "actionsMenuId", defaultTextOverflow: "defaultTextOverflow", rowCheckboxId: "rowCheckboxId", rowLabel: "rowLabel", rowSelectionDisabled: "rowSelectionDisabled", forceLeftAlign: "forceLeftAlign", rowSelected: "rowSelected" }, outputs: { toggleActionsMenu: "toggleActionsMenu", toggleRow: "toggleRow", triggerButtonAction: "triggerButtonAction" }, host: { properties: { "class.sdc-table-cell-content--align-left": "resolvedAlignment === 'left'", "class.sdc-table-cell-content--align-center": "resolvedAlignment === 'center'", "class.sdc-table-cell-content--align-right": "resolvedAlignment === 'right'", "class.sdc-table-cell-content--nowrap": "col?.textOverflow === 'none'" } }, ngImport: i0, template: "<div class=\"sdc-table-content\">\n @if (col.content?.length) {\n <div class=\"sdc-table-multi-content\">\n @for (item of col.content!; track $index) {\n @switch (item.type ?? 'text') {\n @case ('strong') {\n <strong\n [ngStyle]=\"item.style\"\n [class]=\"item.class ?? ''\"\n [attr.title]=\"ellipsisTitleText(cellTextValue(item.field) | translate)\"\n >{{ displayText(item.field) | translate }}</strong>\n }\n @case ('code') {\n <code\n [ngStyle]=\"item.style\"\n [class]=\"item.class ?? ''\"\n [attr.title]=\"ellipsisTitleText(cellTextValue(item.field))\"\n >{{ displayText(item.field) }}</code>\n }\n @default {\n <span\n [ngStyle]=\"item.style\"\n [class]=\"item.class ?? ''\"\n [attr.title]=\"ellipsisTitleText(cellTextValue(item.field) | translate)\"\n >{{ displayText(item.field) | translate }}</span>\n }\n }\n }\n </div>\n } @else {\n @switch (col.type ?? 'text') {\n @case ('checkbox-selection') {\n <div class=\"sdc-table-checkbox\">\n <input\n type=\"checkbox\"\n [id]=\"rowCheckboxId\"\n [disabled]=\"rowSelectionDisabled\"\n [checked]=\"rowSelected\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (change)=\"toggleRow.emit(getCheckedValue($event))\"\n [attr.aria-label]=\"\n 'platform.datacore.accessibility_select_row'\n | translate: { name: (rowLabel | translate) }\n \"\n [attr.aria-checked]=\"rowSelected\"\n />\n <label [attr.for]=\"rowCheckboxId\" class=\"sr-only\">\n {{\n 'platform.datacore.accessibility_select_row'\n | translate: { name: (rowLabel | translate) }\n }}\n </label>\n </div>\n }\n\n @case ('date') {\n <span class=\"sdc-table-text\" [attr.title]=\"ellipsisTitleText(formatDate())\">{{ formatDate() }}</span>\n }\n\n @case ('strong') {\n <span class=\"sdc-table-strong-label\"\n [attr.title]=\"ellipsisTitleText(cellTextValue() | translate)\">\n {{ cellTextValue() | translate | sdcTruncate:col:defaultTextOverflow }}\n </span>\n }\n\n @case ('code') {\n <code class=\"sdc-table-code-label\"\n [attr.title]=\"ellipsisTitleText(cellTextValue())\">{{ displayText() }}</code>\n }\n\n @case ('link') {\n <a class=\"sdc-table-link\"\n [href]=\"cellTextValue()\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.stopPropagation()\"\n [attr.title]=\"ellipsisTitleText(cellTextValue() | translate)\">\n {{ cellTextValue() | translate | sdcTruncate:col:defaultTextOverflow }}\n </a>\n }\n\n @case ('currency') {\n <span class=\"sdc-table-text\"\n [attr.title]=\"ellipsisTitleText(formatCurrency())\">{{ formatCurrency() }}</span>\n }\n\n @case ('tag') {\n <div class=\"sdc-table-tags\">\n @for (tagItem of tagItems(); track tagItem.label + '-' + $index) {\n <span\n class=\"sdc-table-tag\"\n [class.sdc-table-tag--enabled]=\"tagItem.tone === 'enabled'\"\n [class.sdc-table-tag--disabled]=\"tagItem.tone === 'disabled'\"\n [ngStyle]=\"tagItem.styles\"\n [attr.title]=\"tagItem.tooltip ? (tagItem.tooltip | translate) : (tagItem.label | translate)\"\n >\n @if (tagItem.icon) {\n <sdc-icon-renderer\n class=\"sdc-table-tag__icon\"\n [icon]=\"tagItem.icon\"\n [iconType]=\"tagItem.iconType\"\n [size]=\"tagIconSize\"\n ></sdc-icon-renderer>\n }\n {{ tagItem.label | translate }}\n </span>\n }\n\n @if (tagOverflow(); as overflow) {\n @if (overflow.hiddenCount > 0) {\n <span\n class=\"sdc-table-tag sdc-table-tag--more\"\n [attr.title]=\"\n 'platform.datacore.accessibility_table_tag_more_items'\n | translate: { items: tagOverflowTitle(overflow) }\n \"\n >\u2026</span>\n }\n }\n </div>\n }\n\n @case ('button') {\n <div class=\"sdc-table-button\">\n <sdc-button\n class=\"sdc-table-action-button\"\n [size]=\"cellConfigs.button.size ?? 'default'\"\n [priority]=\"cellConfigs.button.priority || 'primary'\"\n [icon]=\"cellConfigs.button.icon\"\n [label]=\"cellConfigs.button.label ?? ''\"\n [disabled]=\"cellConfigs.button.disabled ?? false\"\n [title]=\"cellConfigs.button.tooltip\"\n [attr.size]=\"cellConfigs.button.size\"\n [attr.priority]=\"cellConfigs.button.priority || 'primary'\"\n [attr.severity]=\"cellConfigs.button.priority || 'primary'\"\n [attr.icon]=\"cellConfigs.button.icon\"\n [attr.label]=\"cellConfigs.button.label\"\n [attr.disabled]=\"cellConfigs.button.disabled ? '' : null\"\n [attr.title]=\"cellConfigs.button.tooltip || null\"\n [attr.aria-label]=\"\n (buttonAriaLabel() | translate)\n + ' - '\n + (rowLabel | translate)\n \"\n [attr.data-key]=\"buttonKey()\"\n (click)=\"cellConfigs.button.disabled ? null : triggerButtonAction.emit()\"\n (keydown.enter)=\"cellConfigs.button.disabled ? null : triggerButtonAction.emit()\"\n (keydown.space)=\"$event.preventDefault(); cellConfigs.button.disabled ? null : triggerButtonAction.emit()\"\n ></sdc-button>\n </div>\n }\n\n @case ('actions') {\n <div\n class=\"sdc-table-actions\"\n [class.sdc-table-actions--open]=\"actionsMenuOpen\"\n >\n <button\n #actionsTrigger\n type=\"button\"\n class=\"sdc-table-actions-trigger\"\n [class.sdc-table-actions-trigger--open]=\"actionsMenuOpen\"\n [attr.aria-label]=\"\n (actionsButtonLabel() | translate)\n + ' - '\n + (rowLabel | translate)\n \"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-controls]=\"actionsMenuOpen ? actionsMenuId : null\"\n [attr.aria-expanded]=\"actionsMenuOpen\"\n (click)=\"onActionsClick($event, actionsTrigger)\"\n >\n <span class=\"sdc-table-actions-trigger__label\">\n {{ actionsButtonLabel() | translate }}\n </span>\n <i class=\"fas fa-chevron-down sdc-table-actions-trigger__icon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n\n @case ('icon') {\n @if (iconPresentation(); as iconItem) {\n <span\n class=\"sdc-table-icon\"\n [ngStyle]=\"iconItem.colorStyle\"\n [attr.title]=\"iconItem.tooltip ? (iconItem.tooltip | translate) : null\"\n [attr.aria-label]=\"\n (iconItem.label || iconItem.tooltip)\n ? ((iconItem.label || iconItem.tooltip)! | translate)\n : null\n \"\n >\n @if (iconItem.icon) {\n <sdc-icon-renderer\n [icon]=\"iconItem.icon\"\n [iconType]=\"iconItem.iconType\"\n [size]=\"iconSize\"\n ></sdc-icon-renderer>\n }\n @if (iconItem.label) {\n <span class=\"sdc-table-icon__label\">{{ iconItem.label | translate }}</span>\n }\n </span>\n }\n }\n\n @case ('icon-title') {\n @if (titleIconPresentation(); as titleIconItem) {\n <span\n class=\"sdc-table-icon-title\"\n [ngStyle]=\"titleIconItem.colorStyle\"\n [attr.title]=\"titleIconItem.tooltip ? (titleIconItem.tooltip | translate) : null\"\n >\n @if (titleIconItem.icon) {\n <sdc-icon-renderer\n [icon]=\"titleIconItem.icon\"\n [iconType]=\"titleIconItem.iconType\"\n [size]=\"iconSize\"\n ></sdc-icon-renderer>\n }\n @if (titleIconItem.label) {\n <span [attr.title]=\"ellipsisTitleText(titleIconItem.label | translate)\">\n {{ titleIconItem.label | translate | sdcTruncate:col:defaultTextOverflow }}\n </span>\n }\n </span>\n }\n }\n\n @default {\n <span class=\"sdc-table-text\"\n [attr.title]=\"ellipsisTitleText(cellTextValue() | translate)\">\n {{ cellTextValue() | translate | sdcTruncate:col:defaultTextOverflow }}\n </span>\n }\n }\n }\n</div>\n", styles: [":host{display:block;width:100%;min-width:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sdc-table-content{display:flex;align-items:center;width:100%;min-width:0}:host(.sdc-table-cell-content--align-left) .sdc-table-content{justify-content:flex-start;text-align:left}:host(.sdc-table-cell-content--align-center) .sdc-table-content{justify-content:center;text-align:center}:host(.sdc-table-cell-content--align-right) .sdc-table-content{justify-content:flex-end;text-align:right}.sdc-table-multi-content{display:flex;flex-direction:column;gap:.25rem;min-width:0;max-width:100%}.sdc-table-multi-content strong,.sdc-table-multi-content code,.sdc-table-multi-content span,.sdc-table-text,.sdc-table-strong-label,.sdc-table-code-label,.sdc-table-link{min-width:0;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-table-strong-label{font-weight:500}.sdc-table-code-label{color:var(--sdc-tab-primary)}.sdc-table-link{display:inline-block;color:var(--sdc-tab-primary);text-decoration:underline}.sdc-table-link:hover,.sdc-table-link:focus-visible{text-decoration:none}.sdc-table-tags{display:flex;flex-wrap:wrap;gap:.5rem;min-width:0;max-width:100%;overflow:hidden}.sdc-table-tag{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;width:fit-content;min-width:fit-content;max-width:100%;border-radius:9999px;font-weight:500;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid currentColor;box-sizing:border-box;font-size:.875rem;padding:.35rem .875rem}.sdc-table-tag__icon{flex:0 0 auto}.sdc-table-tag--enabled{background:#dcfce7;color:#16a34a;border-color:#16a34a}.sdc-table-tag--disabled{background:#fee2e2;color:#ef4444;border-color:#ef4444}.sdc-table-tag--more{background:#f3f4f6;color:#374151;border-color:#374151;cursor:default;font-weight:700}.sdc-table-button{display:flex;align-items:center;justify-content:center;min-height:44px;width:100%;min-width:0}.sdc-table-button ::ng-deep sdc-button,.sdc-table-button ::ng-deep button{min-height:unset;min-width:unset;max-width:100%}.sdc-table-action-button{width:100%;max-width:100%;min-width:0}.sdc-table-icon,.sdc-table-icon-title{display:inline-flex;align-items:center;gap:.5rem;min-width:0;max-width:100%}.sdc-table-icon__label,.sdc-table-icon-title span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.sdc-table-checkbox{display:flex;align-items:center;justify-content:center}.sdc-table-checkbox input[type=checkbox]{cursor:pointer}.sdc-table-checkbox input[type=checkbox]:disabled{cursor:not-allowed;opacity:.55}.sdc-table-actions{position:relative;display:inline-flex;align-items:center;justify-content:center;width:100%;min-width:0}.sdc-table-actions-trigger{appearance:none;border:1px solid #c9ced6;background:#fff;border-radius:999px;min-width:4.875rem;height:2rem;padding:0 .75rem;display:inline-flex;align-items:center;justify-content:center;gap:.375rem;font:inherit;font-size:.8125rem;color:#374151;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,background-color .15s ease}.sdc-table-actions-trigger:hover{background:#f9fafb}.sdc-table-actions-trigger:focus-visible,.sdc-table-actions-trigger--open{outline:none;border-color:#9ca3af;box-shadow:0 0 0 2px #1118270a}.sdc-table-actions-trigger__label{line-height:1;white-space:nowrap}.sdc-table-actions-trigger__icon{font-size:.625rem;line-height:1;color:#6b7280}@media (max-width: 768px){.sdc-table-multi-content strong,.sdc-table-multi-content code,.sdc-table-multi-content span{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word}.sdc-table-tag{font-size:.8125rem;padding:.35rem .75rem}.sdc-table-actions-trigger{min-width:4.375rem;height:1.75rem;padding:0 .625rem;font-size:.75rem}.sdc-table-text,.sdc-table-strong-label,.sdc-table-code-label,.sdc-table-link,.sdc-table-icon__label,.sdc-table-icon-title span{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word}:host-context(.sdc-table-expandable-summary-value) .sdc-table-text,:host-context(.sdc-table-expandable-summary-value) .sdc-table-multi-content>*{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["id", "label", "ariaLabel", "disabled", "loading", "width", "priority", "size", "type", "icon", "rightIcon", "auxiliary", "rounded", "caret", "tooltip", "animation", "slide", "styleClass", "badge", "menuOptions", "menuContext", "model"], outputs: ["clicked"] }, { kind: "component", type: IconRendererComponent, selector: "sdc-icon-renderer", inputs: ["icon", "iconType", "size"] }, { kind: "pipe", type: SdcTruncatePipe, name: "sdcTruncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
31127
31235
|
}
|
|
31128
31236
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableCellContentComponent, decorators: [{
|
|
31129
31237
|
type: Component,
|
|
@@ -31132,7 +31240,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
31132
31240
|
'[class.sdc-table-cell-content--align-center]': "resolvedAlignment === 'center'",
|
|
31133
31241
|
'[class.sdc-table-cell-content--align-right]': "resolvedAlignment === 'right'",
|
|
31134
31242
|
'[class.sdc-table-cell-content--nowrap]': "col?.textOverflow === 'none'"
|
|
31135
|
-
}, template: "<div class=\"sdc-table-content\">\n @if (col.content?.length) {\n <div class=\"sdc-table-multi-content\">\n @for (item of col.content!; track $index) {\n @switch (item.type ?? 'text') {\n @case ('strong') {\n <strong\n [ngStyle]=\"item.style\"\n [class]=\"item.class ?? ''\"\n >{{ cellTextValue(item.field) | translate }}</strong>\n }\n @case ('code') {\n <code [ngStyle]=\"item.style\" [class]=\"item.class ?? ''\">{{ cellTextValue(item.field) }}</code>\n }\n @default {\n <span [ngStyle]=\"item.style\" [class]=\"item.class ?? ''\">{{ cellTextValue(item.field) | translate }}</span>\n }\n }\n }\n </div>\n } @else {\n @switch (col.type ?? 'text') {\n @case ('checkbox-selection') {\n <div class=\"sdc-table-checkbox\">\n <input\n type=\"checkbox\"\n [id]=\"rowCheckboxId\"\n [disabled]=\"rowSelectionDisabled\"\n [checked]=\"rowSelected\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (change)=\"toggleRow.emit(getCheckedValue($event))\"\n [attr.aria-label]=\"\n 'platform.datacore.accessibility_select_row'\n | translate: { name: (rowLabel | translate) }\n \"\n [attr.aria-checked]=\"rowSelected\"\n />\n <label [attr.for]=\"rowCheckboxId\" class=\"sr-only\">\n {{\n 'platform.datacore.accessibility_select_row'\n | translate: { name: (rowLabel | translate) }\n }}\n </label>\n </div>\n }\n\n @case ('date') {\n <span class=\"sdc-table-text\" [attr.title]=\"ellipsisTitleText(formatDate())\">{{ formatDate() }}</span>\n }\n\n @case ('strong') {\n <span class=\"sdc-table-strong-label\"\n [attr.title]=\"ellipsisTitleText(cellTextValue() | translate)\">\n {{ cellTextValue() | translate | sdcTruncate:col:defaultTextOverflow }}\n </span>\n }\n\n @case ('code') {\n <code class=\"sdc-table-code-label\"\n [attr.title]=\"ellipsisTitleText(cellTextValue())\">{{ displayText() }}</code>\n }\n\n @case ('link') {\n <a class=\"sdc-table-link\"\n [href]=\"cellTextValue()\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.stopPropagation()\"\n [attr.title]=\"ellipsisTitleText(cellTextValue() | translate)\">\n {{ cellTextValue() | translate | sdcTruncate:col:defaultTextOverflow }}\n </a>\n }\n\n @case ('currency') {\n <span class=\"sdc-table-text\"\n [attr.title]=\"ellipsisTitleText(formatCurrency())\">{{ formatCurrency() }}</span>\n }\n\n @case ('tag') {\n <div class=\"sdc-table-tags\">\n @for (tagItem of tagItems(); track tagItem.label + '-' + $index) {\n <span\n class=\"sdc-table-tag\"\n [class.sdc-table-tag--enabled]=\"tagItem.tone === 'enabled'\"\n [class.sdc-table-tag--disabled]=\"tagItem.tone === 'disabled'\"\n [ngStyle]=\"tagItem.styles\"\n [attr.title]=\"tagItem.tooltip ? (tagItem.tooltip | translate) : (tagItem.label | translate)\"\n >\n @if (tagItem.icon) {\n <sdc-icon-renderer\n class=\"sdc-table-tag__icon\"\n [icon]=\"tagItem.icon\"\n [iconType]=\"tagItem.iconType\"\n [size]=\"tagIconSize\"\n ></sdc-icon-renderer>\n }\n {{ tagItem.label | translate }}\n </span>\n }\n\n @if (tagOverflow(); as overflow) {\n @if (overflow.hiddenCount > 0) {\n <span\n class=\"sdc-table-tag sdc-table-tag--more\"\n [attr.title]=\"\n 'platform.datacore.accessibility_table_tag_more_items'\n | translate: { items: tagOverflowTitle(overflow) }\n \"\n >\u2026</span>\n }\n }\n </div>\n }\n\n @case ('button') {\n <div class=\"sdc-table-button\">\n <sdc-button\n class=\"sdc-table-action-button\"\n [size]=\"cellConfigs.button.size ?? 'default'\"\n [priority]=\"cellConfigs.button.priority || 'primary'\"\n [icon]=\"cellConfigs.button.icon\"\n [label]=\"cellConfigs.button.label ?? ''\"\n [disabled]=\"cellConfigs.button.disabled ?? false\"\n [title]=\"cellConfigs.button.tooltip\"\n [attr.size]=\"cellConfigs.button.size\"\n [attr.priority]=\"cellConfigs.button.priority || 'primary'\"\n [attr.severity]=\"cellConfigs.button.priority || 'primary'\"\n [attr.icon]=\"cellConfigs.button.icon\"\n [attr.label]=\"cellConfigs.button.label\"\n [attr.disabled]=\"cellConfigs.button.disabled ? '' : null\"\n [attr.title]=\"cellConfigs.button.tooltip || null\"\n [attr.aria-label]=\"\n (buttonAriaLabel() | translate)\n + ' - '\n + (rowLabel | translate)\n \"\n [attr.data-key]=\"buttonKey()\"\n (click)=\"cellConfigs.button.disabled ? null : triggerButtonAction.emit()\"\n (keydown.enter)=\"cellConfigs.button.disabled ? null : triggerButtonAction.emit()\"\n (keydown.space)=\"$event.preventDefault(); cellConfigs.button.disabled ? null : triggerButtonAction.emit()\"\n ></sdc-button>\n </div>\n }\n\n @case ('actions') {\n <div\n class=\"sdc-table-actions\"\n [class.sdc-table-actions--open]=\"actionsMenuOpen\"\n >\n <button\n #actionsTrigger\n type=\"button\"\n class=\"sdc-table-actions-trigger\"\n [class.sdc-table-actions-trigger--open]=\"actionsMenuOpen\"\n [attr.aria-label]=\"\n (actionsButtonLabel() | translate)\n + ' - '\n + (rowLabel | translate)\n \"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-controls]=\"actionsMenuOpen ? actionsMenuId : null\"\n [attr.aria-expanded]=\"actionsMenuOpen\"\n (click)=\"onActionsClick($event, actionsTrigger)\"\n >\n <span class=\"sdc-table-actions-trigger__label\">\n {{ actionsButtonLabel() | translate }}\n </span>\n <i class=\"fas fa-chevron-down sdc-table-actions-trigger__icon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n\n @case ('icon') {\n @if (iconPresentation(); as iconItem) {\n <span\n class=\"sdc-table-icon\"\n [ngStyle]=\"iconItem.colorStyle\"\n [attr.title]=\"iconItem.tooltip ? (iconItem.tooltip | translate) : null\"\n [attr.aria-label]=\"\n (iconItem.label || iconItem.tooltip)\n ? ((iconItem.label || iconItem.tooltip)! | translate)\n : null\n \"\n >\n @if (iconItem.icon) {\n <sdc-icon-renderer\n [icon]=\"iconItem.icon\"\n [iconType]=\"iconItem.iconType\"\n [size]=\"iconSize\"\n ></sdc-icon-renderer>\n }\n @if (iconItem.label) {\n <span class=\"sdc-table-icon__label\">{{ iconItem.label | translate }}</span>\n }\n </span>\n }\n }\n\n @case ('icon-title') {\n @if (titleIconPresentation(); as titleIconItem) {\n <span\n class=\"sdc-table-icon-title\"\n [ngStyle]=\"titleIconItem.colorStyle\"\n [attr.title]=\"titleIconItem.tooltip ? (titleIconItem.tooltip | translate) : null\"\n >\n @if (titleIconItem.icon) {\n <sdc-icon-renderer\n [icon]=\"titleIconItem.icon\"\n [iconType]=\"titleIconItem.iconType\"\n [size]=\"iconSize\"\n ></sdc-icon-renderer>\n }\n @if (titleIconItem.label) {\n <span [attr.title]=\"ellipsisTitleText(titleIconItem.label | translate)\">\n {{ titleIconItem.label | translate | sdcTruncate:col:defaultTextOverflow }}\n </span>\n }\n </span>\n }\n }\n\n @default {\n <span class=\"sdc-table-text\"\n [attr.title]=\"ellipsisTitleText(cellTextValue() | translate)\">\n {{ cellTextValue() | translate | sdcTruncate:col:defaultTextOverflow }}\n </span>\n }\n }\n }\n</div>\n", styles: [":host{display:block;width:100%;min-width:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sdc-table-content{display:flex;align-items:center;width:100%;min-width:0}:host(.sdc-table-cell-content--align-left) .sdc-table-content{justify-content:flex-start;text-align:left}:host(.sdc-table-cell-content--align-center) .sdc-table-content{justify-content:center;text-align:center}:host(.sdc-table-cell-content--align-right) .sdc-table-content{justify-content:flex-end;text-align:right}.sdc-table-multi-content{display:flex;flex-direction:column;gap:.25rem;min-width:0;max-width:100%}.sdc-table-multi-content strong,.sdc-table-multi-content code,.sdc-table-multi-content span,.sdc-table-text,.sdc-table-strong-label,.sdc-table-code-label,.sdc-table-link{min-width:0;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-table-strong-label{font-weight:500}.sdc-table-code-label{color:var(--sdc-tab-primary)}.sdc-table-link{display:inline-block;color:var(--sdc-tab-primary);text-decoration:underline}.sdc-table-link:hover,.sdc-table-link:focus-visible{text-decoration:none}.sdc-table-tags{display:flex;flex-wrap:wrap;gap:.5rem;min-width:0;max-width:100%;overflow:hidden}.sdc-table-tag{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;width:fit-content;min-width:fit-content;max-width:100%;border-radius:9999px;font-weight:500;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid currentColor;box-sizing:border-box;font-size:.875rem;padding:.35rem .875rem}.sdc-table-tag__icon{flex:0 0 auto}.sdc-table-tag--enabled{background:#dcfce7;color:#16a34a;border-color:#16a34a}.sdc-table-tag--disabled{background:#fee2e2;color:#ef4444;border-color:#ef4444}.sdc-table-tag--more{background:#f3f4f6;color:#374151;border-color:#374151;cursor:default;font-weight:700}.sdc-table-button{display:flex;align-items:center;justify-content:center;min-height:44px;width:100%;min-width:0}.sdc-table-button ::ng-deep sdc-button,.sdc-table-button ::ng-deep button{min-height:unset;min-width:unset;max-width:100%}.sdc-table-action-button{width:100%;max-width:100%;min-width:0}.sdc-table-icon,.sdc-table-icon-title{display:inline-flex;align-items:center;gap:.5rem;min-width:0;max-width:100%}.sdc-table-icon__label,.sdc-table-icon-title span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.sdc-table-checkbox{display:flex;align-items:center;justify-content:center}.sdc-table-checkbox input[type=checkbox]{cursor:pointer}.sdc-table-checkbox input[type=checkbox]:disabled{cursor:not-allowed;opacity:.55}.sdc-table-actions{position:relative;display:inline-flex;align-items:center;justify-content:center;width:100%;min-width:0}.sdc-table-actions-trigger{appearance:none;border:1px solid #c9ced6;background:#fff;border-radius:999px;min-width:4.875rem;height:2rem;padding:0 .75rem;display:inline-flex;align-items:center;justify-content:center;gap:.375rem;font:inherit;font-size:.8125rem;color:#374151;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,background-color .15s ease}.sdc-table-actions-trigger:hover{background:#f9fafb}.sdc-table-actions-trigger:focus-visible,.sdc-table-actions-trigger--open{outline:none;border-color:#9ca3af;box-shadow:0 0 0 2px #1118270a}.sdc-table-actions-trigger__label{line-height:1;white-space:nowrap}.sdc-table-actions-trigger__icon{font-size:.625rem;line-height:1;color:#6b7280}@media (max-width: 768px){.sdc-table-multi-content strong,.sdc-table-multi-content code,.sdc-table-multi-content span{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word}.sdc-table-tag{font-size:.8125rem;padding:.35rem .75rem}.sdc-table-actions-trigger{min-width:4.375rem;height:1.75rem;padding:0 .625rem;font-size:.75rem}.sdc-table-text,.sdc-table-strong-label,.sdc-table-code-label,.sdc-table-link,.sdc-table-icon__label,.sdc-table-icon-title span{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word}}\n"] }]
|
|
31243
|
+
}, template: "<div class=\"sdc-table-content\">\n @if (col.content?.length) {\n <div class=\"sdc-table-multi-content\">\n @for (item of col.content!; track $index) {\n @switch (item.type ?? 'text') {\n @case ('strong') {\n <strong\n [ngStyle]=\"item.style\"\n [class]=\"item.class ?? ''\"\n [attr.title]=\"ellipsisTitleText(cellTextValue(item.field) | translate)\"\n >{{ displayText(item.field) | translate }}</strong>\n }\n @case ('code') {\n <code\n [ngStyle]=\"item.style\"\n [class]=\"item.class ?? ''\"\n [attr.title]=\"ellipsisTitleText(cellTextValue(item.field))\"\n >{{ displayText(item.field) }}</code>\n }\n @default {\n <span\n [ngStyle]=\"item.style\"\n [class]=\"item.class ?? ''\"\n [attr.title]=\"ellipsisTitleText(cellTextValue(item.field) | translate)\"\n >{{ displayText(item.field) | translate }}</span>\n }\n }\n }\n </div>\n } @else {\n @switch (col.type ?? 'text') {\n @case ('checkbox-selection') {\n <div class=\"sdc-table-checkbox\">\n <input\n type=\"checkbox\"\n [id]=\"rowCheckboxId\"\n [disabled]=\"rowSelectionDisabled\"\n [checked]=\"rowSelected\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (change)=\"toggleRow.emit(getCheckedValue($event))\"\n [attr.aria-label]=\"\n 'platform.datacore.accessibility_select_row'\n | translate: { name: (rowLabel | translate) }\n \"\n [attr.aria-checked]=\"rowSelected\"\n />\n <label [attr.for]=\"rowCheckboxId\" class=\"sr-only\">\n {{\n 'platform.datacore.accessibility_select_row'\n | translate: { name: (rowLabel | translate) }\n }}\n </label>\n </div>\n }\n\n @case ('date') {\n <span class=\"sdc-table-text\" [attr.title]=\"ellipsisTitleText(formatDate())\">{{ formatDate() }}</span>\n }\n\n @case ('strong') {\n <span class=\"sdc-table-strong-label\"\n [attr.title]=\"ellipsisTitleText(cellTextValue() | translate)\">\n {{ cellTextValue() | translate | sdcTruncate:col:defaultTextOverflow }}\n </span>\n }\n\n @case ('code') {\n <code class=\"sdc-table-code-label\"\n [attr.title]=\"ellipsisTitleText(cellTextValue())\">{{ displayText() }}</code>\n }\n\n @case ('link') {\n <a class=\"sdc-table-link\"\n [href]=\"cellTextValue()\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.stopPropagation()\"\n [attr.title]=\"ellipsisTitleText(cellTextValue() | translate)\">\n {{ cellTextValue() | translate | sdcTruncate:col:defaultTextOverflow }}\n </a>\n }\n\n @case ('currency') {\n <span class=\"sdc-table-text\"\n [attr.title]=\"ellipsisTitleText(formatCurrency())\">{{ formatCurrency() }}</span>\n }\n\n @case ('tag') {\n <div class=\"sdc-table-tags\">\n @for (tagItem of tagItems(); track tagItem.label + '-' + $index) {\n <span\n class=\"sdc-table-tag\"\n [class.sdc-table-tag--enabled]=\"tagItem.tone === 'enabled'\"\n [class.sdc-table-tag--disabled]=\"tagItem.tone === 'disabled'\"\n [ngStyle]=\"tagItem.styles\"\n [attr.title]=\"tagItem.tooltip ? (tagItem.tooltip | translate) : (tagItem.label | translate)\"\n >\n @if (tagItem.icon) {\n <sdc-icon-renderer\n class=\"sdc-table-tag__icon\"\n [icon]=\"tagItem.icon\"\n [iconType]=\"tagItem.iconType\"\n [size]=\"tagIconSize\"\n ></sdc-icon-renderer>\n }\n {{ tagItem.label | translate }}\n </span>\n }\n\n @if (tagOverflow(); as overflow) {\n @if (overflow.hiddenCount > 0) {\n <span\n class=\"sdc-table-tag sdc-table-tag--more\"\n [attr.title]=\"\n 'platform.datacore.accessibility_table_tag_more_items'\n | translate: { items: tagOverflowTitle(overflow) }\n \"\n >\u2026</span>\n }\n }\n </div>\n }\n\n @case ('button') {\n <div class=\"sdc-table-button\">\n <sdc-button\n class=\"sdc-table-action-button\"\n [size]=\"cellConfigs.button.size ?? 'default'\"\n [priority]=\"cellConfigs.button.priority || 'primary'\"\n [icon]=\"cellConfigs.button.icon\"\n [label]=\"cellConfigs.button.label ?? ''\"\n [disabled]=\"cellConfigs.button.disabled ?? false\"\n [title]=\"cellConfigs.button.tooltip\"\n [attr.size]=\"cellConfigs.button.size\"\n [attr.priority]=\"cellConfigs.button.priority || 'primary'\"\n [attr.severity]=\"cellConfigs.button.priority || 'primary'\"\n [attr.icon]=\"cellConfigs.button.icon\"\n [attr.label]=\"cellConfigs.button.label\"\n [attr.disabled]=\"cellConfigs.button.disabled ? '' : null\"\n [attr.title]=\"cellConfigs.button.tooltip || null\"\n [attr.aria-label]=\"\n (buttonAriaLabel() | translate)\n + ' - '\n + (rowLabel | translate)\n \"\n [attr.data-key]=\"buttonKey()\"\n (click)=\"cellConfigs.button.disabled ? null : triggerButtonAction.emit()\"\n (keydown.enter)=\"cellConfigs.button.disabled ? null : triggerButtonAction.emit()\"\n (keydown.space)=\"$event.preventDefault(); cellConfigs.button.disabled ? null : triggerButtonAction.emit()\"\n ></sdc-button>\n </div>\n }\n\n @case ('actions') {\n <div\n class=\"sdc-table-actions\"\n [class.sdc-table-actions--open]=\"actionsMenuOpen\"\n >\n <button\n #actionsTrigger\n type=\"button\"\n class=\"sdc-table-actions-trigger\"\n [class.sdc-table-actions-trigger--open]=\"actionsMenuOpen\"\n [attr.aria-label]=\"\n (actionsButtonLabel() | translate)\n + ' - '\n + (rowLabel | translate)\n \"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-controls]=\"actionsMenuOpen ? actionsMenuId : null\"\n [attr.aria-expanded]=\"actionsMenuOpen\"\n (click)=\"onActionsClick($event, actionsTrigger)\"\n >\n <span class=\"sdc-table-actions-trigger__label\">\n {{ actionsButtonLabel() | translate }}\n </span>\n <i class=\"fas fa-chevron-down sdc-table-actions-trigger__icon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n\n @case ('icon') {\n @if (iconPresentation(); as iconItem) {\n <span\n class=\"sdc-table-icon\"\n [ngStyle]=\"iconItem.colorStyle\"\n [attr.title]=\"iconItem.tooltip ? (iconItem.tooltip | translate) : null\"\n [attr.aria-label]=\"\n (iconItem.label || iconItem.tooltip)\n ? ((iconItem.label || iconItem.tooltip)! | translate)\n : null\n \"\n >\n @if (iconItem.icon) {\n <sdc-icon-renderer\n [icon]=\"iconItem.icon\"\n [iconType]=\"iconItem.iconType\"\n [size]=\"iconSize\"\n ></sdc-icon-renderer>\n }\n @if (iconItem.label) {\n <span class=\"sdc-table-icon__label\">{{ iconItem.label | translate }}</span>\n }\n </span>\n }\n }\n\n @case ('icon-title') {\n @if (titleIconPresentation(); as titleIconItem) {\n <span\n class=\"sdc-table-icon-title\"\n [ngStyle]=\"titleIconItem.colorStyle\"\n [attr.title]=\"titleIconItem.tooltip ? (titleIconItem.tooltip | translate) : null\"\n >\n @if (titleIconItem.icon) {\n <sdc-icon-renderer\n [icon]=\"titleIconItem.icon\"\n [iconType]=\"titleIconItem.iconType\"\n [size]=\"iconSize\"\n ></sdc-icon-renderer>\n }\n @if (titleIconItem.label) {\n <span [attr.title]=\"ellipsisTitleText(titleIconItem.label | translate)\">\n {{ titleIconItem.label | translate | sdcTruncate:col:defaultTextOverflow }}\n </span>\n }\n </span>\n }\n }\n\n @default {\n <span class=\"sdc-table-text\"\n [attr.title]=\"ellipsisTitleText(cellTextValue() | translate)\">\n {{ cellTextValue() | translate | sdcTruncate:col:defaultTextOverflow }}\n </span>\n }\n }\n }\n</div>\n", styles: [":host{display:block;width:100%;min-width:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sdc-table-content{display:flex;align-items:center;width:100%;min-width:0}:host(.sdc-table-cell-content--align-left) .sdc-table-content{justify-content:flex-start;text-align:left}:host(.sdc-table-cell-content--align-center) .sdc-table-content{justify-content:center;text-align:center}:host(.sdc-table-cell-content--align-right) .sdc-table-content{justify-content:flex-end;text-align:right}.sdc-table-multi-content{display:flex;flex-direction:column;gap:.25rem;min-width:0;max-width:100%}.sdc-table-multi-content strong,.sdc-table-multi-content code,.sdc-table-multi-content span,.sdc-table-text,.sdc-table-strong-label,.sdc-table-code-label,.sdc-table-link{min-width:0;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-table-strong-label{font-weight:500}.sdc-table-code-label{color:var(--sdc-tab-primary)}.sdc-table-link{display:inline-block;color:var(--sdc-tab-primary);text-decoration:underline}.sdc-table-link:hover,.sdc-table-link:focus-visible{text-decoration:none}.sdc-table-tags{display:flex;flex-wrap:wrap;gap:.5rem;min-width:0;max-width:100%;overflow:hidden}.sdc-table-tag{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;width:fit-content;min-width:fit-content;max-width:100%;border-radius:9999px;font-weight:500;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid currentColor;box-sizing:border-box;font-size:.875rem;padding:.35rem .875rem}.sdc-table-tag__icon{flex:0 0 auto}.sdc-table-tag--enabled{background:#dcfce7;color:#16a34a;border-color:#16a34a}.sdc-table-tag--disabled{background:#fee2e2;color:#ef4444;border-color:#ef4444}.sdc-table-tag--more{background:#f3f4f6;color:#374151;border-color:#374151;cursor:default;font-weight:700}.sdc-table-button{display:flex;align-items:center;justify-content:center;min-height:44px;width:100%;min-width:0}.sdc-table-button ::ng-deep sdc-button,.sdc-table-button ::ng-deep button{min-height:unset;min-width:unset;max-width:100%}.sdc-table-action-button{width:100%;max-width:100%;min-width:0}.sdc-table-icon,.sdc-table-icon-title{display:inline-flex;align-items:center;gap:.5rem;min-width:0;max-width:100%}.sdc-table-icon__label,.sdc-table-icon-title span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.sdc-table-checkbox{display:flex;align-items:center;justify-content:center}.sdc-table-checkbox input[type=checkbox]{cursor:pointer}.sdc-table-checkbox input[type=checkbox]:disabled{cursor:not-allowed;opacity:.55}.sdc-table-actions{position:relative;display:inline-flex;align-items:center;justify-content:center;width:100%;min-width:0}.sdc-table-actions-trigger{appearance:none;border:1px solid #c9ced6;background:#fff;border-radius:999px;min-width:4.875rem;height:2rem;padding:0 .75rem;display:inline-flex;align-items:center;justify-content:center;gap:.375rem;font:inherit;font-size:.8125rem;color:#374151;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,background-color .15s ease}.sdc-table-actions-trigger:hover{background:#f9fafb}.sdc-table-actions-trigger:focus-visible,.sdc-table-actions-trigger--open{outline:none;border-color:#9ca3af;box-shadow:0 0 0 2px #1118270a}.sdc-table-actions-trigger__label{line-height:1;white-space:nowrap}.sdc-table-actions-trigger__icon{font-size:.625rem;line-height:1;color:#6b7280}@media (max-width: 768px){.sdc-table-multi-content strong,.sdc-table-multi-content code,.sdc-table-multi-content span{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word}.sdc-table-tag{font-size:.8125rem;padding:.35rem .75rem}.sdc-table-actions-trigger{min-width:4.375rem;height:1.75rem;padding:0 .625rem;font-size:.75rem}.sdc-table-text,.sdc-table-strong-label,.sdc-table-code-label,.sdc-table-link,.sdc-table-icon__label,.sdc-table-icon-title span{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word}:host-context(.sdc-table-expandable-summary-value) .sdc-table-text,:host-context(.sdc-table-expandable-summary-value) .sdc-table-multi-content>*{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere}}\n"] }]
|
|
31136
31244
|
}], propDecorators: { cellConfigs: [{
|
|
31137
31245
|
type: Input,
|
|
31138
31246
|
args: [{ required: true }]
|
|
@@ -31403,29 +31511,7 @@ class TableComponent {
|
|
|
31403
31511
|
if (this.isApiMode()) {
|
|
31404
31512
|
return this.filteredData();
|
|
31405
31513
|
}
|
|
31406
|
-
|
|
31407
|
-
const order = this.sortOrder();
|
|
31408
|
-
const rows = [...this.filteredData()];
|
|
31409
|
-
if (!field || order === 0) {
|
|
31410
|
-
return rows;
|
|
31411
|
-
}
|
|
31412
|
-
return rows.sort((leftRow, rightRow) => {
|
|
31413
|
-
const leftValue = this.resolveValue(leftRow, field);
|
|
31414
|
-
const rightValue = this.resolveValue(rightRow, field);
|
|
31415
|
-
if (leftValue == null && rightValue == null) {
|
|
31416
|
-
return 0;
|
|
31417
|
-
}
|
|
31418
|
-
if (leftValue == null) {
|
|
31419
|
-
return -order;
|
|
31420
|
-
}
|
|
31421
|
-
if (rightValue == null) {
|
|
31422
|
-
return order;
|
|
31423
|
-
}
|
|
31424
|
-
if (typeof leftValue === 'number' && typeof rightValue === 'number') {
|
|
31425
|
-
return (leftValue - rightValue) * order;
|
|
31426
|
-
}
|
|
31427
|
-
return this.toComparableText(leftValue).localeCompare(this.toComparableText(rightValue)) * order;
|
|
31428
|
-
});
|
|
31514
|
+
return sortTableRows(this.filteredData(), this.sortField(), this.sortOrder(), this.resolveValue);
|
|
31429
31515
|
});
|
|
31430
31516
|
totalRecords = computed(() => {
|
|
31431
31517
|
if (!this.isApiMode()) {
|
|
@@ -31462,7 +31548,14 @@ class TableComponent {
|
|
|
31462
31548
|
const estimatedHeight = safeRows * rowHeight + TABLE_DEFAULT_LOADING_VERTICAL_PADDING_PX;
|
|
31463
31549
|
return Math.max(TABLE_DEFAULT_MIN_LOADING_HEIGHT_PX, estimatedHeight);
|
|
31464
31550
|
});
|
|
31465
|
-
|
|
31551
|
+
// O corpo reserva "linhas por pagina x altura da linha" pra nao dar salto de layout
|
|
31552
|
+
// quando os dados chegam. No estado VAZIO nao chega nada, e empilhado a conta
|
|
31553
|
+
// explode: cada linha e um cartao de 120px, entao 10 linhas pedem 1224px de nada -
|
|
31554
|
+
// medido num Galaxy S9+, a lista vazia virava 3,4 telas de rolagem.
|
|
31555
|
+
//
|
|
31556
|
+
// So no empilhado: em tela larga a reserva da uns 460px e segura o rodape no lugar,
|
|
31557
|
+
// que e o comportamento que ja existia.
|
|
31558
|
+
emptyBodyHeightPx = computed(() => this.isMobile() ? TABLE_EMPTY_STATE_MOBILE_HEIGHT_PX : this.bodyViewportHeightPx());
|
|
31466
31559
|
tableMinWidthPx = computed(() => getTableMinWidthPx(this.colsSignal()));
|
|
31467
31560
|
resolveValue = (obj, path) => getNestedValue(obj, path, this.pathPartsCache);
|
|
31468
31561
|
onDocumentClick() {
|
|
@@ -31508,24 +31601,9 @@ class TableComponent {
|
|
|
31508
31601
|
if (!enabled || !field) {
|
|
31509
31602
|
return;
|
|
31510
31603
|
}
|
|
31511
|
-
|
|
31512
|
-
|
|
31513
|
-
|
|
31514
|
-
}
|
|
31515
|
-
else {
|
|
31516
|
-
const currentOrder = this.sortOrder();
|
|
31517
|
-
if (currentOrder === 1) {
|
|
31518
|
-
this.sortOrder.set(-1);
|
|
31519
|
-
}
|
|
31520
|
-
else if (currentOrder === -1) {
|
|
31521
|
-
this.sortOrder.set(0);
|
|
31522
|
-
this.sortField.set(null);
|
|
31523
|
-
}
|
|
31524
|
-
else {
|
|
31525
|
-
this.sortOrder.set(1);
|
|
31526
|
-
this.sortField.set(field);
|
|
31527
|
-
}
|
|
31528
|
-
}
|
|
31604
|
+
const next = cycleSortState(this.sortField(), this.sortOrder(), field);
|
|
31605
|
+
this.sortField.set(next.field);
|
|
31606
|
+
this.sortOrder.set(next.order);
|
|
31529
31607
|
this.first.set(TABLE_INDEX_ZERO);
|
|
31530
31608
|
if (this.isApiMode()) {
|
|
31531
31609
|
this.emitLazyLoad('sort');
|
|
@@ -31875,26 +31953,6 @@ class TableComponent {
|
|
|
31875
31953
|
return currentSelection.length === nextSelection.length
|
|
31876
31954
|
&& currentSelection.every((row, index) => row === nextSelection[index]);
|
|
31877
31955
|
}
|
|
31878
|
-
toComparableText(value) {
|
|
31879
|
-
if (value == null) {
|
|
31880
|
-
return '';
|
|
31881
|
-
}
|
|
31882
|
-
if (typeof value === 'string') {
|
|
31883
|
-
return value;
|
|
31884
|
-
}
|
|
31885
|
-
if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {
|
|
31886
|
-
return String(value);
|
|
31887
|
-
}
|
|
31888
|
-
if (typeof value === 'object') {
|
|
31889
|
-
try {
|
|
31890
|
-
return JSON.stringify(value);
|
|
31891
|
-
}
|
|
31892
|
-
catch {
|
|
31893
|
-
return '';
|
|
31894
|
-
}
|
|
31895
|
-
}
|
|
31896
|
-
return '';
|
|
31897
|
-
}
|
|
31898
31956
|
nextActionsMenuId() {
|
|
31899
31957
|
this.actionsMenuIdSequence += 1;
|
|
31900
31958
|
return `sdc-table-actions-menu-${this.actionsMenuIdSequence}`;
|
|
@@ -31919,7 +31977,7 @@ class TableComponent {
|
|
|
31919
31977
|
nextElement?.focus();
|
|
31920
31978
|
}
|
|
31921
31979
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
31922
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TableComponent, isStandalone: true, selector: "sdc-table", inputs: { cols: "cols", data: "data", selection: "selection", loading: "loading", loadingIndicator: "loadingIndicator", config: "config", ariaLabel: "ariaLabel" }, outputs: { action: "action", rowClick: "rowClick", lazyLoad: "lazyLoad", selectionChange: "selectionChange" }, host: { listeners: { "document:click": "onDocumentClick()", "document:keydown.escape": "onEscapeKey()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<section\n class=\"sdc-table\"\n [class.sdc-table-stack]=\"isMobile()\"\n [class.sdc-table-filtered]=\"!!globalFilter().trim()\"\n [class.sdc-table--loading]=\"isLoading\"\n [class.sdc-table--initial-loading]=\"showInitialLoading()\"\n>\n <sdc-loading-state\n class=\"sdc-table-loading-wrap\"\n [loading]=\"isLoading\"\n [blockWindow]=\"false\"\n [blockDelayMs]=\"0\"\n [indicator]=\"loadingIndicator\"\n >\n <div class=\"sdc-table-shell\" [style.--sdc-table-body-height.px]=\"bodyViewportHeightPx()\">\n @if (showSearch()) {\n <div class=\"sdc-table-caption\">\n <div class=\"sdc-table-caption__search\" [class.sdc-table-caption__search--full-width]=\"searchFullWidth()\">\n <sdc-searchbox\n [disabled]=\"isLoading\"\n [placeholder]=\"searchPlaceholder()\"\n [triggerMode]=\"triggerMode()\"\n (onSearch)=\"onSearchTerm($event)\"\n (onClear)=\"onClearSearch()\"\n [attr.aria-label]=\"'platform.datacore.accessibility_search_field' | translate\"\n />\n </div>\n </div>\n }\n\n @if (!isMobile()) {\n <div\n class=\"sdc-table-scroll\"\n [style.--sdc-table-min-width]=\"isFitLayout() ? '100%' : tableMinWidthPx() + 'px'\"\n >\n <table\n class=\"sdc-table-grid\"\n [class.sdc-table-grid--fit]=\"isFitLayout()\"\n role=\"table\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-rowcount]=\"totalRecords()\"\n [attr.aria-busy]=\"isLoading\"\n >\n <colgroup>\n @for (col of cols; track $index) {\n <col [style.width]=\"colWidthStyle(col)\" />\n }\n </colgroup>\n\n <thead>\n <tr role=\"row\">\n @for (col of cols; track $index) {\n <th\n scope=\"col\"\n role=\"columnheader\"\n [class.sdc-table-th-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-th-currency]=\"col.type === 'currency'\"\n [class.sdc-table-th-button]=\"col.type === 'button'\"\n [class.sdc-table-th-actions]=\"col.type === 'actions'\"\n [class.sdc-table-sortable]=\"canSortColumn(col)\"\n [class.sdc-table-sortable-disabled]=\"isSortableColumn(col) && !canSortColumn(col)\"\n [class.sdc-table-header-disabled]=\"!hasDataRows()\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col, 'header')\"\n [attr.aria-sort]=\"getSortAriaAttribute(col)\"\n [attr.tabindex]=\"hasDataRows() && canSortColumn(col) ? 0 : null\"\n [attr.aria-disabled]=\"!hasDataRows() || (isSortableColumn(col) && !canSortColumn(col)) ? 'true' : null\"\n [attr.aria-label]=\"\n isSortableColumn(col)\n ? (\n (col.header | translate)\n + ' - '\n + ('platform.datacore.accessibility_sortable_column' | translate)\n )\n : (col.header | translate)\n \"\n (click)=\"hasDataRows() && col.field ? toggleSort(col.field, canSortColumn(col)) : null\"\n (keydown.enter)=\"hasDataRows() && col.field ? toggleSort(col.field, canSortColumn(col)) : null\"\n (keydown.space)=\"$event.preventDefault();\n hasDataRows() && col.field ? toggleSort(col.field, canSortColumn(col)) : null\"\n >\n @if (col.type === 'checkbox-selection' && (cellsCfg().checkbox.selectAll ?? true)) {\n <div class=\"sdc-table-th-inner sdc-table-th-inner--checkbox\">\n <span class=\"sdc-table-th-label sr-only\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n <span class=\"sdc-table-th-center\">\n <input\n type=\"checkbox\"\n [id]=\"getSelectAllCheckboxId($index)\"\n [checked]=\"isPageFullySelected()\"\n [indeterminate]=\"isPagePartiallySelected()\"\n [disabled]=\"!hasSelectablePageRows()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleSelectPage(getCheckedValue($event))\"\n (keydown.space)=\"$event.preventDefault(); toggleSelectPage(!isPageFullySelected())\"\n [attr.aria-label]=\"'platform.datacore.accessibility_select_all_rows' | translate\"\n [attr.aria-checked]=\"getPageSelectionAriaChecked()\"\n />\n <label [for]=\"getSelectAllCheckboxId($index)\" class=\"sr-only\">\n {{ 'platform.datacore.accessibility_select_all_rows' | translate }}\n </label>\n </span>\n </div>\n } @else {\n <div class=\"sdc-table-th-inner\" [class.sdc-table-th-inner--sortable]=\"isSortableColumn(col)\">\n <span class=\"sdc-table-th-label\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n\n @if (col.headerTooltip) {\n <sdc-tooltip\n class=\"sdc-table-th-tooltip\"\n [pTooltip]=\"col.headerTooltip\"\n [tooltipPosition]=\"col.headerTooltipPosition ?? 'top'\"\n [tooltipEvent]=\"col.headerTooltipEvent ?? 'hover'\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <i class=\"fas fa-circle-info sdc-table-th-tooltip__icon\" aria-hidden=\"true\"></i>\n </sdc-tooltip>\n }\n\n <span class=\"sdc-table-sort-overlay\" aria-hidden=\"true\">\n <sdc-table-sort-indicator\n [columnField]=\"col.field || null\"\n [columnType]=\"col.type\"\n [sortable]=\"isSortableColumn(col)\"\n [sortField]=\"sortField()\"\n [sortOrder]=\"sortOrder()\"\n ></sdc-table-sort-indicator>\n </span>\n </div>\n }\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex; let r = $index) {\n <tr class=\"sdc-table-initial-loading-row\" role=\"row\" [attr.aria-rowindex]=\"r + 1\" aria-hidden=\"true\">\n @for (col of cols; track $index) {\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-td--initial-loading\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n >\n <div class=\"sdc-table-td-val sdc-table-td-val--initial-loading\"></div>\n </td>\n }\n </tr>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <tr\n role=\"row\"\n [attr.aria-rowindex]=\"r + 1\"\n (click)=\"onRowClicked(row)\"\n (keydown.enter)=\"onRowClicked(row)\"\n >\n @for (col of cols; track $index) {\n <td\n class=\"sdc-table-td sdc-table-tdc\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n [attr.id]=\"col.colId || null\"\n role=\"cell\"\n >\n @if (col.cellTag === 'span') {\n <span class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </span>\n } @else if (col.cellTag === 'i') {\n <i class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </i>\n } @else if (col.cellTag === 'p') {\n <p class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </p>\n } @else {\n <div class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n }\n </td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n ></sdc-empty-state>\n }\n </div>\n } @else if (mobileMode() === 'stacked') {\n <div\n class=\"sdc-table-mobile-list\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-busy]=\"isLoading\"\n >\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex; let r = $index) {\n <div class=\"sdc-table-mobile-card sdc-table-mobile-card--loading\" aria-hidden=\"true\">\n @for (col of cols; track $index) {\n <div class=\"sdc-table-mobile-field sdc-table-mobile-field--loading\">\n <div class=\"sdc-table-mobile-label sdc-table-mobile-label--loading\"></div>\n <div class=\"sdc-table-mobile-skeleton\"></div>\n </div>\n }\n </div>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <div class=\"sdc-table-mobile-card\">\n @for (col of cols; track $index) {\n <div\n class=\"sdc-table-mobile-field\"\n [class.sdc-table-mobile-field--full-width]=\"\n col.type === 'button' || col.type === 'actions' || col.type === 'checkbox-selection'\n \"\n [class.sdc-table-mobile-field--selected]=\"sortField() === col.field\"\n [class.sdc-table-mobile-field--sortable]=\"col.field && isSortableColumn(col)\"\n (click)=\"col.field && toggleSort(col.field, isSortableColumn(col))\"\n >\n @if (mobileFieldLabel(col)) {\n <div class=\"sdc-table-mobile-label-wrap\">\n @if (col.field && isSortableColumn(col)) {\n <button\n type=\"button\"\n class=\"sdc-table-mobile-label sdc-table-mobile-label--sortable\"\n [attr.aria-label]=\"\n (mobileFieldLabel(col) | translate)\n + ' - '\n + ('platform.datacore.accessibility_sortable_column' | translate)\n \"\n (click)=\"$event.stopPropagation(); toggleSort(col.field, isSortableColumn(col))\"\n (keydown.enter)=\"toggleSort(col.field, isSortableColumn(col))\"\n (keydown.space)=\"$event.preventDefault(); toggleSort(col.field, isSortableColumn(col))\"\n >\n <span>{{ mobileFieldLabel(col) | translate }}</span>\n <sdc-table-sort-indicator\n [columnField]=\"col.field || null\"\n [columnType]=\"col.type\"\n [sortable]=\"isSortableColumn(col)\"\n [sortField]=\"sortField()\"\n [sortOrder]=\"sortOrder()\"\n ></sdc-table-sort-indicator>\n </button>\n } @else {\n <div class=\"sdc-table-mobile-label\">\n <span>{{ mobileFieldLabel(col) | translate }}</span>\n </div>\n }\n </div>\n }\n\n <div class=\"sdc-table-mobile-value\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n ></sdc-empty-state>\n }\n } @else {\n <ul\n class=\"sdc-table-expandable-list\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-busy]=\"isLoading\"\n >\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex) {\n <li class=\"sdc-table-expandable-item sdc-table-expandable-item--loading\" aria-hidden=\"true\">\n <div class=\"sdc-table-expandable-summary sdc-table-expandable-summary--loading\">\n <div class=\"sdc-table-expandable-summary-fields\">\n <div class=\"sdc-table-mobile-skeleton sdc-table-expandable-skeleton-primary\"></div>\n <div class=\"sdc-table-mobile-skeleton sdc-table-expandable-skeleton-secondary\"></div>\n </div>\n <span class=\"sdc-table-expandable-chevron\" aria-hidden=\"true\">\n <i class=\"fas fa-chevron-down\"></i>\n </span>\n </div>\n </li>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <li\n class=\"sdc-table-expandable-item\"\n [class.sdc-table-expandable-item--expanded]=\"isRowExpanded(r)\"\n >\n <div\n class=\"sdc-table-expandable-summary\"\n (click)=\"toggleExpandRow(r)\"\n (keydown.enter)=\"toggleExpandRow(r)\"\n (keydown.space)=\"$event.preventDefault(); toggleExpandRow(r)\"\n >\n @if (checkboxCol(); as cbCol) {\n <div\n class=\"sdc-table-expandable-checkbox\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"cbCol\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"false\"\n [actionsMenuId]=\"null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, cbCol)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, cbCol, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n }\n <div class=\"sdc-table-expandable-summary-fields\">\n @for (col of summaryCols(); track $index) {\n <div class=\"sdc-table-expandable-summary-field\">\n <span class=\"sdc-table-expandable-summary-label\">{{ mobileFieldLabel(col) | translate }}</span>\n <div class=\"sdc-table-expandable-summary-value\">\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"false\"\n [actionsMenuId]=\"null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n </div>\n }\n </div>\n <button\n type=\"button\"\n class=\"sdc-table-expandable-toggle\"\n [attr.aria-expanded]=\"isRowExpanded(r)\"\n [attr.aria-label]=\"\n isRowExpanded(r)\n ? ('platform.datacore.accessibility_collapse_row' | translate)\n : ('platform.datacore.accessibility_expand_row' | translate)\n \"\n (click)=\"$event.stopPropagation(); toggleExpandRow(r)\"\n (keydown.enter)=\"$event.stopPropagation(); toggleExpandRow(r)\"\n (keydown.space)=\"$event.preventDefault(); $event.stopPropagation(); toggleExpandRow(r)\"\n >\n <span\n class=\"sdc-table-expandable-chevron\"\n [class.sdc-table-expandable-chevron--open]=\"isRowExpanded(r)\"\n aria-hidden=\"true\"\n ><i class=\"fas fa-chevron-down\"></i></span>\n </button>\n </div>\n @if (isRowExpanded(r)) {\n <div class=\"sdc-table-expandable-details\">\n @for (col of cols; track $index) {\n @if (col.type !== 'checkbox-selection') {\n <div\n class=\"sdc-table-expandable-field\"\n [class.sdc-table-expandable-field--full-width]=\"\n col.type === 'button' || col.type === 'actions'\n \"\n >\n @if (col.type !== 'button' && col.type !== 'actions') {\n <div class=\"sdc-table-expandable-label-wrap\">\n <span class=\"sdc-table-expandable-label\">{{ mobileFieldLabel(col) | translate }}</span>\n </div>\n }\n <div class=\"sdc-table-expandable-value\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n </div>\n }\n }\n </div>\n }\n </li>\n }\n }\n </ul>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n ></sdc-empty-state>\n }\n }\n\n @if (showPaginator()) {\n <div class=\"sdc-table-paginator\">\n <sdc-paginator\n [first]=\"first()\"\n [rows]=\"rows()\"\n [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"isMobile() ? [] : rowsPerPageOptions()\"\n [showRowsPerPageSelector]=\"showRowsPerPageSelector()\"\n [isMobile]=\"isMobile()\"\n [totalRecordsLabel]=\"totalRecordsLabel()\"\n (pageChange)=\"onPageChange($event)\"\n ></sdc-paginator>\n </div>\n }\n </div>\n </sdc-loading-state>\n</section>\n\n@if (openMenuState(); as menu) {\n <sdc-table-actions-menu\n [items]=\"menu.items\"\n [menuId]=\"menu.menuId\"\n [top]=\"menu.top\"\n [left]=\"menu.left\"\n [width]=\"menu.width\"\n (close)=\"onMenuClose($event)\"\n (select)=\"onPortalActionClick($event)\"\n ></sdc-table-actions-menu>\n}\n", styles: [":host{display:block;width:100%;box-sizing:border-box}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sdc-table{width:100%;box-sizing:border-box;overflow:visible;background:var(--sdc-table-bg-card)}.sdc-table-shell{display:block;--sdc-table-body-height: 220px;overflow:visible}.sdc-table-loading-wrap{display:block;width:100%;overflow:visible}.sdc-table-caption{width:100%;justify-content:flex-end;display:flex;padding:.75rem 0}.sdc-table-caption__search{width:min(100%,22rem)}.sdc-table-caption__search--full-width{width:100%}.sdc-table-scroll{width:100%;overflow-x:auto;overflow-y:visible}.sdc-table-grid{min-width:var(--sdc-table-min-width, 100%);width:100%;border-collapse:collapse;table-layout:auto}.sdc-table-grid--fit{table-layout:fixed}thead th{padding:var(--sdc-table-padding-cell);background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);-webkit-user-select:none;user-select:none;transition:background var(--sdc-table-transition-fast),border var(--sdc-table-transition-fast);min-height:44px;position:relative;overflow:hidden;text-align:left}thead th.sdc-table-sortable{cursor:pointer}thead th.sdc-table-sortable:hover{background:var(--sdc-table-th-hover-bg)}thead th.sdc-table-sortable-disabled,thead th.sdc-table-header-disabled{cursor:default}thead th.sdc-table-sortable-disabled:focus,thead th.sdc-table-sortable-disabled:focus-visible{outline:none;box-shadow:none}thead th.sdc-table-sortable:focus,thead th.sdc-table-sortable:focus-visible{outline:2px solid var(--sdc-tab-primary, #007bff);outline-offset:-2px;box-shadow:inset 0 0 0 3px #007bff33;position:relative;z-index:1}thead th.sdc-table-is-selected{background:var(--sdc-table-th-selected-bg)!important}thead th.sdc-table-is-selected .sdc-table-sort-overlay{right:.5rem}.sdc-table-th-inner{display:flex;align-items:center;gap:var(--sdc-table-gap-th-inner);width:100%;min-width:0;overflow:hidden;text-align:inherit}.sdc-table-sort-overlay{position:absolute;right:0;top:50%;transform:translateY(-50%)}tbody td{padding:.5rem var(--sdc-table-padding-cell);border-bottom:1px solid var(--sdc-table-border-gray);vertical-align:middle;overflow:visible}.sdc-table-td-val{display:flex;align-items:center;width:100%;min-width:0;overflow:hidden}.sdc-table-td-val--initial-loading{min-height:1.5rem}.sdc-table-initial-loading-row{background:var(--sdc-table-bg-card)}.sdc-table-td--initial-loading{height:3.625rem}.sdc-table-th-label{color:#333!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;display:block;flex:1 1 auto;width:100%;text-align:inherit}.sdc-table-th-inner--sortable{padding-right:1.5rem}.sdc-table-th-tooltip{flex-shrink:0;display:inline-flex;align-items:center}.sdc-table-th-tooltip__icon{font-size:.75rem;color:var(--sdc-table-th-tooltip-icon, #767676);cursor:help}.sdc-table-empty-state{display:flex;align-items:center;justify-content:center;min-height:var(--sdc-table-body-height);padding:0}.sdc-table--loading .sdc-table-shell{pointer-events:none;-webkit-user-select:none;user-select:none}.sdc-table--initial-loading .sdc-table-scroll{overflow-x:hidden}thead th.sdc-table-th-checkbox .sdc-table-th-inner--checkbox{justify-content:center}thead th.sdc-table-th-checkbox .sdc-table-th-center{display:flex;align-items:center;justify-content:center;width:100%}thead th.sdc-table-th-checkbox .sdc-table-th-center input{cursor:pointer;margin:0}thead th.sdc-table-th-checkbox .sdc-table-th-center input:disabled{cursor:not-allowed}.sdc-table-paginator{padding:.5rem 0;position:sticky;bottom:0;z-index:1;background:var(--sdc-table-bg-card)}.sdc-table-td-align-left{text-align:left}.sdc-table-td-align-center{text-align:center}.sdc-table-td-align-right{text-align:right}.sdc-table-th-align-left{text-align:left}.sdc-table-th-align-center{text-align:center}.sdc-table-th-align-right{text-align:right}.sdc-table-cell-content--nowrap .sdc-table-text,.sdc-table-cell-content--nowrap .sdc-table-strong-label,.sdc-table-cell-content--nowrap .sdc-table-code-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}@keyframes sdc-mobile-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.sdc-table-mobile-list{display:flex;flex-direction:column;width:100%;border:1px solid var(--sdc-border-strong, #d1d5db);border-radius:.5rem;overflow:hidden}.sdc-table-mobile-card{display:flex;flex-direction:column;background:var(--sdc-formfield-default-bg, #ffffff);border-top:2px solid var(--sdc-border-strong, #d1d5db)}.sdc-table-mobile-card:first-child{border-top:0}.sdc-table-mobile-field{display:grid;grid-template-columns:minmax(0,7.5rem) minmax(0,1fr);gap:.25rem .75rem;align-items:start;padding:.5rem 1rem;border-top:1px solid rgba(0,0,0,.05)}.sdc-table-mobile-field:first-child{border-top:0;padding-top:.75rem}.sdc-table-mobile-field:last-child{padding-bottom:.75rem}.sdc-table-mobile-field--selected{background:#11182706}.sdc-table-mobile-field--full-width{grid-template-columns:1fr;gap:.25rem}.sdc-table-mobile-label-wrap,.sdc-table-mobile-value{min-width:0}.sdc-table-mobile-field--full-width>.sdc-table-mobile-label-wrap{display:none}.sdc-table-mobile-label,.sdc-table-mobile-label--sortable{display:flex;align-items:center;justify-content:flex-start;gap:.25rem;width:100%;margin:0;padding:0;border:0;background:transparent;color:var(--sdc-text-muted, #6b7280);font:inherit;font-size:.6875rem;font-weight:500;line-height:1.6;letter-spacing:.015em;text-align:left}.sdc-table-mobile-label--sortable{cursor:pointer}.sdc-table-mobile-label--sortable:focus-visible{outline:2px solid var(--sdc-tab-primary, #428bca);outline-offset:3px;border-radius:.375rem}.sdc-table-mobile-label--loading{width:5.5rem;height:.625rem;border-radius:999px;animation:sdc-mobile-shimmer 1.8s ease infinite;background:linear-gradient(90deg,#94a3b824,#94a3b842,#94a3b824);background-size:200% 100%}.sdc-table-mobile-skeleton{min-height:1.25rem;border-radius:.25rem;animation:sdc-mobile-shimmer 1.8s ease infinite;background:linear-gradient(90deg,#94a3b81a,#94a3b82e,#94a3b81a);background-size:200% 100%}.sdc-table-mobile-value{display:flex;align-items:flex-start;width:100%}@media (max-width: 768px){.sdc-table-caption__search{width:100%}.sdc-table-paginator{justify-content:center!important;border-top:1px solid var(--sdc-table-border-gray)}.sdc-table-mobile-field--sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.sdc-table-mobile-field--sortable:hover{background:#11182705}}@media (max-width: 540px){.sdc-table-mobile-list{border-radius:.375rem}.sdc-table-mobile-field{grid-template-columns:1fr;gap:.125rem;padding:.4375rem .875rem}.sdc-table-mobile-field:first-child{padding-top:.625rem}.sdc-table-mobile-field:last-child{padding-bottom:.625rem}}.sdc-table-expandable-list{display:flex;flex-direction:column;width:100%;list-style:none;margin:0;padding:0;border:1px solid var(--sdc-border-strong, #d1d5db);border-radius:.5rem;overflow:hidden}.sdc-table-expandable-item{display:flex;flex-direction:column;background:var(--sdc-formfield-default-bg, #ffffff);border-top:1px solid var(--sdc-border-strong, #d1d5db)}.sdc-table-expandable-item:first-child{border-top:0}.sdc-table-expandable-summary{display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;cursor:pointer;-webkit-user-select:none;user-select:none}.sdc-table-expandable-summary--loading{pointer-events:none}.sdc-table-expandable-summary:hover{background:#11182705}.sdc-table-expandable-checkbox{flex:0 0 auto}.sdc-table-expandable-summary-fields{display:flex;flex:1 1 0;flex-wrap:wrap;gap:.125rem 1.5rem;min-width:0}.sdc-table-expandable-summary-field{display:flex;flex-direction:column;min-width:0}.sdc-table-expandable-summary-label{color:var(--sdc-text-muted, #6b7280);font-size:.6875rem;font-weight:500;line-height:1.6;letter-spacing:.015em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-table-expandable-summary-value{display:flex;align-items:center;min-width:0}.sdc-table-expandable-toggle{display:flex;align-items:center;justify-content:center;flex:0 0 auto;width:1.75rem;height:1.75rem;padding:0;border:0;border-radius:50%;background:transparent;color:var(--sdc-text-muted, #6b7280);cursor:pointer;transition:color var(--sdc-table-transition-fast, .15s ease),background var(--sdc-table-transition-fast, .15s ease)}.sdc-table-expandable-toggle:focus-visible{outline:2px solid var(--sdc-tab-primary, #428bca);outline-offset:2px}.sdc-table-expandable-toggle:hover{color:var(--sdc-text-default, #111827);background:#1118270f}.sdc-table-expandable-chevron{display:flex;align-items:center;justify-content:center;font-size:.75rem;transition:transform .2s ease}.sdc-table-expandable-label-wrap,.sdc-table-expandable-value{min-width:0}.sdc-table-expandable-details{padding:.375rem 0;border-top:1px solid rgba(0,0,0,.06);background:#11182704}.sdc-table-expandable-field{display:grid;grid-template-columns:minmax(0,7.5rem) minmax(0,1fr);gap:.25rem .75rem;align-items:start;padding:.375rem 1rem;border-top:1px solid rgba(0,0,0,.04)}.sdc-table-expandable-field--full-width{grid-template-columns:1fr;gap:.25rem}.sdc-table-expandable-field:first-child{border-top:0}.sdc-table-expandable-field--full-width>.sdc-table-expandable-label-wrap{display:none}.sdc-table-expandable-label{display:flex;align-items:center;color:var(--sdc-text-muted, #6b7280);font-size:.6875rem;font-weight:500;line-height:1.6;letter-spacing:.015em}.sdc-table-expandable-value{display:flex;align-items:flex-start;width:100%}.sdc-table-expandable-skeleton-primary{width:55%;max-width:10rem}.sdc-table-expandable-skeleton-secondary{width:35%;max-width:7rem}.sdc-table-expandable-chevron--open{transform:rotate(180deg)}.sdc-table-expandable-item--expanded .sdc-table-expandable-summary{background:#11182706}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode", "debounceTimeMs", "ariaLabel", "inputRole", "inputAriaControls", "inputAriaDescribedBy", "inputAriaActiveDescendant", "inputAriaHaspopup", "inputAriaExpanded", "inputAutocomplete", "submitOnEnter", "clearOnEscape"], outputs: ["debouncedValueChange", "onSearch", "onClear"] }, { kind: "component", type: PaginatorComponent, selector: "sdc-paginator", inputs: ["first", "rows", "totalRecords", "rowsPerPageOptions", "showRowsPerPageSelector", "isMobile", "totalRecordsLabel"], outputs: ["pageChange"] }, { kind: "component", type: LoadingStateComponent, selector: "sdc-loading-state", inputs: ["indicator", "id", "blockWindow", "blockDelayMs", "unblockDelayMs", "loading"] }, { kind: "component", type: EmptyStateComponent, selector: "sdc-empty-state", inputs: ["id", "title", "variant", "titleParams", "iconClass", "description", "descriptionParams", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "primaryActionLabelParams", "secondaryActionLabel", "secondaryActionLabelParams", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: TableSortIndicatorComponent, selector: "sdc-table-sort-indicator", inputs: ["columnField", "columnType", "sortField", "sortOrder", "sortable"] }, { kind: "component", type: TableCellContentComponent, selector: "sdc-table-cell-content", inputs: ["cellConfigs", "col", "resolveValue", "row", "actionsMenuOpen", "actionsMenuId", "defaultTextOverflow", "rowCheckboxId", "rowLabel", "rowSelectionDisabled", "forceLeftAlign", "rowSelected"], outputs: ["toggleActionsMenu", "toggleRow", "triggerButtonAction"] }, { kind: "component", type: TableActionsMenuComponent, selector: "sdc-table-actions-menu", inputs: ["ariaLabel", "items", "left", "menuId", "top", "width"], outputs: ["close", "select"] }, { kind: "component", type: TooltipComponent, selector: "sdc-tooltip", inputs: ["pTooltip", "tooltipPosition", "tooltipEvent", "fitContent", "tooltipDisabled", "allowHtml"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
31980
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TableComponent, isStandalone: true, selector: "sdc-table", inputs: { cols: "cols", data: "data", selection: "selection", loading: "loading", loadingIndicator: "loadingIndicator", config: "config", ariaLabel: "ariaLabel" }, outputs: { action: "action", rowClick: "rowClick", lazyLoad: "lazyLoad", selectionChange: "selectionChange" }, host: { listeners: { "document:click": "onDocumentClick()", "document:keydown.escape": "onEscapeKey()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<section\n class=\"sdc-table\"\n [class.sdc-table-stack]=\"isMobile()\"\n [class.sdc-table-filtered]=\"!!globalFilter().trim()\"\n [class.sdc-table--loading]=\"isLoading\"\n [class.sdc-table--initial-loading]=\"showInitialLoading()\"\n>\n <sdc-loading-state\n class=\"sdc-table-loading-wrap\"\n [loading]=\"isLoading\"\n [blockWindow]=\"false\"\n [blockDelayMs]=\"0\"\n [indicator]=\"loadingIndicator\"\n >\n <div class=\"sdc-table-shell\" [style.--sdc-table-body-height.px]=\"bodyViewportHeightPx()\">\n @if (showSearch()) {\n <div class=\"sdc-table-caption\">\n <div class=\"sdc-table-caption__search\" [class.sdc-table-caption__search--full-width]=\"searchFullWidth()\">\n <sdc-searchbox\n [disabled]=\"isLoading\"\n [placeholder]=\"searchPlaceholder()\"\n [triggerMode]=\"triggerMode()\"\n (onSearch)=\"onSearchTerm($event)\"\n (onClear)=\"onClearSearch()\"\n [attr.aria-label]=\"'platform.datacore.accessibility_search_field' | translate\"\n />\n </div>\n </div>\n }\n\n @if (!isMobile()) {\n <div\n class=\"sdc-table-scroll\"\n [style.--sdc-table-min-width]=\"isFitLayout() ? '100%' : tableMinWidthPx() + 'px'\"\n >\n <table\n class=\"sdc-table-grid\"\n [class.sdc-table-grid--fit]=\"isFitLayout()\"\n role=\"table\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-rowcount]=\"totalRecords()\"\n [attr.aria-busy]=\"isLoading\"\n >\n <colgroup>\n @for (col of cols; track $index) {\n <col [style.width]=\"colWidthStyle(col)\" />\n }\n </colgroup>\n\n <thead>\n <tr role=\"row\">\n @for (col of cols; track $index) {\n <th\n scope=\"col\"\n role=\"columnheader\"\n [class.sdc-table-th-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-th-currency]=\"col.type === 'currency'\"\n [class.sdc-table-th-button]=\"col.type === 'button'\"\n [class.sdc-table-th-actions]=\"col.type === 'actions'\"\n [class.sdc-table-sortable]=\"canSortColumn(col)\"\n [class.sdc-table-sortable-disabled]=\"isSortableColumn(col) && !canSortColumn(col)\"\n [class.sdc-table-header-disabled]=\"!hasDataRows()\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col, 'header')\"\n [attr.aria-sort]=\"getSortAriaAttribute(col)\"\n [attr.tabindex]=\"hasDataRows() && canSortColumn(col) ? 0 : null\"\n [attr.aria-disabled]=\"!hasDataRows() || (isSortableColumn(col) && !canSortColumn(col)) ? 'true' : null\"\n [attr.aria-label]=\"\n isSortableColumn(col)\n ? (\n (col.header | translate)\n + ' - '\n + ('platform.datacore.accessibility_sortable_column' | translate)\n )\n : (col.header | translate)\n \"\n (click)=\"hasDataRows() && col.field ? toggleSort(col.field, canSortColumn(col)) : null\"\n (keydown.enter)=\"hasDataRows() && col.field ? toggleSort(col.field, canSortColumn(col)) : null\"\n (keydown.space)=\"$event.preventDefault();\n hasDataRows() && col.field ? toggleSort(col.field, canSortColumn(col)) : null\"\n >\n @if (col.type === 'checkbox-selection' && (cellsCfg().checkbox.selectAll ?? true)) {\n <div class=\"sdc-table-th-inner sdc-table-th-inner--checkbox\">\n <span class=\"sdc-table-th-label sr-only\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n <span class=\"sdc-table-th-center\">\n <input\n type=\"checkbox\"\n [id]=\"getSelectAllCheckboxId($index)\"\n [checked]=\"isPageFullySelected()\"\n [indeterminate]=\"isPagePartiallySelected()\"\n [disabled]=\"!hasSelectablePageRows()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleSelectPage(getCheckedValue($event))\"\n (keydown.space)=\"$event.preventDefault(); toggleSelectPage(!isPageFullySelected())\"\n [attr.aria-label]=\"'platform.datacore.accessibility_select_all_rows' | translate\"\n [attr.aria-checked]=\"getPageSelectionAriaChecked()\"\n />\n <label [for]=\"getSelectAllCheckboxId($index)\" class=\"sr-only\">\n {{ 'platform.datacore.accessibility_select_all_rows' | translate }}\n </label>\n </span>\n </div>\n } @else {\n <div class=\"sdc-table-th-inner\" [class.sdc-table-th-inner--sortable]=\"isSortableColumn(col)\">\n <span class=\"sdc-table-th-label\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n\n @if (col.headerTooltip) {\n <sdc-tooltip\n class=\"sdc-table-th-tooltip\"\n [pTooltip]=\"col.headerTooltip\"\n [tooltipPosition]=\"col.headerTooltipPosition ?? 'top'\"\n [tooltipEvent]=\"col.headerTooltipEvent ?? 'hover'\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <i class=\"fas fa-circle-info sdc-table-th-tooltip__icon\" aria-hidden=\"true\"></i>\n </sdc-tooltip>\n }\n\n <span class=\"sdc-table-sort-overlay\" aria-hidden=\"true\">\n <sdc-table-sort-indicator\n [columnField]=\"col.field || null\"\n [columnType]=\"col.type\"\n [sortable]=\"isSortableColumn(col)\"\n [sortField]=\"sortField()\"\n [sortOrder]=\"sortOrder()\"\n ></sdc-table-sort-indicator>\n </span>\n </div>\n }\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex; let r = $index) {\n <tr class=\"sdc-table-initial-loading-row\" role=\"row\" [attr.aria-rowindex]=\"r + 1\" aria-hidden=\"true\">\n @for (col of cols; track $index) {\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-td--initial-loading\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n >\n <div class=\"sdc-table-td-val sdc-table-td-val--initial-loading\"></div>\n </td>\n }\n </tr>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <tr\n role=\"row\"\n [attr.aria-rowindex]=\"r + 1\"\n (click)=\"onRowClicked(row)\"\n (keydown.enter)=\"onRowClicked(row)\"\n >\n @for (col of cols; track $index) {\n <td\n class=\"sdc-table-td sdc-table-tdc\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n [attr.id]=\"col.colId || null\"\n role=\"cell\"\n >\n @if (col.cellTag === 'span') {\n <span class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </span>\n } @else if (col.cellTag === 'i') {\n <i class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </i>\n } @else if (col.cellTag === 'p') {\n <p class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </p>\n } @else {\n <div class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n }\n </td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n ></sdc-empty-state>\n }\n </div>\n } @else if (mobileMode() === 'stacked') {\n <div\n class=\"sdc-table-mobile-list\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-busy]=\"isLoading\"\n >\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex; let r = $index) {\n <div class=\"sdc-table-mobile-card sdc-table-mobile-card--loading\" aria-hidden=\"true\">\n @for (col of cols; track $index) {\n <div class=\"sdc-table-mobile-field sdc-table-mobile-field--loading\">\n <div class=\"sdc-table-mobile-label sdc-table-mobile-label--loading\"></div>\n <div class=\"sdc-table-mobile-skeleton\"></div>\n </div>\n }\n </div>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <div class=\"sdc-table-mobile-card\">\n @for (col of cols; track $index) {\n <div\n class=\"sdc-table-mobile-field\"\n [class.sdc-table-mobile-field--full-width]=\"\n col.type === 'button' || col.type === 'actions' || col.type === 'checkbox-selection'\n \"\n [class.sdc-table-mobile-field--selected]=\"sortField() === col.field\"\n [class.sdc-table-mobile-field--sortable]=\"col.field && isSortableColumn(col)\"\n (click)=\"col.field && toggleSort(col.field, isSortableColumn(col))\"\n >\n @if (mobileFieldLabel(col)) {\n <div class=\"sdc-table-mobile-label-wrap\">\n @if (col.field && isSortableColumn(col)) {\n <button\n type=\"button\"\n class=\"sdc-table-mobile-label sdc-table-mobile-label--sortable\"\n [attr.aria-label]=\"\n (mobileFieldLabel(col) | translate)\n + ' - '\n + ('platform.datacore.accessibility_sortable_column' | translate)\n \"\n (click)=\"$event.stopPropagation(); toggleSort(col.field, isSortableColumn(col))\"\n (keydown.enter)=\"toggleSort(col.field, isSortableColumn(col))\"\n (keydown.space)=\"$event.preventDefault(); toggleSort(col.field, isSortableColumn(col))\"\n >\n <span>{{ mobileFieldLabel(col) | translate }}</span>\n <sdc-table-sort-indicator\n [columnField]=\"col.field || null\"\n [columnType]=\"col.type\"\n [sortable]=\"isSortableColumn(col)\"\n [sortField]=\"sortField()\"\n [sortOrder]=\"sortOrder()\"\n ></sdc-table-sort-indicator>\n </button>\n } @else {\n <div class=\"sdc-table-mobile-label\">\n <span>{{ mobileFieldLabel(col) | translate }}</span>\n </div>\n }\n </div>\n }\n\n <div class=\"sdc-table-mobile-value\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n ></sdc-empty-state>\n }\n } @else {\n <ul\n class=\"sdc-table-expandable-list\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-busy]=\"isLoading\"\n >\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex) {\n <li class=\"sdc-table-expandable-item sdc-table-expandable-item--loading\" aria-hidden=\"true\">\n <div class=\"sdc-table-expandable-summary sdc-table-expandable-summary--loading\">\n <div class=\"sdc-table-expandable-summary-fields\">\n <div class=\"sdc-table-mobile-skeleton sdc-table-expandable-skeleton-primary\"></div>\n <div class=\"sdc-table-mobile-skeleton sdc-table-expandable-skeleton-secondary\"></div>\n </div>\n <span class=\"sdc-table-expandable-chevron\" aria-hidden=\"true\">\n <i class=\"fas fa-chevron-down\"></i>\n </span>\n </div>\n </li>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <li\n class=\"sdc-table-expandable-item\"\n [class.sdc-table-expandable-item--expanded]=\"isRowExpanded(r)\"\n >\n <div\n class=\"sdc-table-expandable-summary\"\n (click)=\"toggleExpandRow(r)\"\n (keydown.enter)=\"toggleExpandRow(r)\"\n (keydown.space)=\"$event.preventDefault(); toggleExpandRow(r)\"\n >\n @if (checkboxCol(); as cbCol) {\n <div\n class=\"sdc-table-expandable-checkbox\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"cbCol\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"false\"\n [actionsMenuId]=\"null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, cbCol)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, cbCol, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n }\n <div class=\"sdc-table-expandable-summary-fields\">\n @for (col of summaryCols(); track $index) {\n <div class=\"sdc-table-expandable-summary-field\">\n <span class=\"sdc-table-expandable-summary-label\">{{ mobileFieldLabel(col) | translate }}</span>\n <div class=\"sdc-table-expandable-summary-value\">\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"false\"\n [actionsMenuId]=\"null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n </div>\n }\n </div>\n <button\n type=\"button\"\n class=\"sdc-table-expandable-toggle\"\n [attr.aria-expanded]=\"isRowExpanded(r)\"\n [attr.aria-label]=\"\n isRowExpanded(r)\n ? ('platform.datacore.accessibility_collapse_row' | translate)\n : ('platform.datacore.accessibility_expand_row' | translate)\n \"\n (click)=\"$event.stopPropagation(); toggleExpandRow(r)\"\n (keydown.enter)=\"$event.stopPropagation(); toggleExpandRow(r)\"\n (keydown.space)=\"$event.preventDefault(); $event.stopPropagation(); toggleExpandRow(r)\"\n >\n <span\n class=\"sdc-table-expandable-chevron\"\n [class.sdc-table-expandable-chevron--open]=\"isRowExpanded(r)\"\n aria-hidden=\"true\"\n ><i class=\"fas fa-chevron-down\"></i></span>\n </button>\n </div>\n @if (isRowExpanded(r)) {\n <div class=\"sdc-table-expandable-details\">\n @for (col of cols; track $index) {\n @if (col.type !== 'checkbox-selection') {\n <div\n class=\"sdc-table-expandable-field\"\n [class.sdc-table-expandable-field--full-width]=\"\n col.type === 'button' || col.type === 'actions'\n \"\n >\n @if (col.type !== 'button' && col.type !== 'actions') {\n <div class=\"sdc-table-expandable-label-wrap\">\n <span class=\"sdc-table-expandable-label\">{{ mobileFieldLabel(col) | translate }}</span>\n </div>\n }\n <div class=\"sdc-table-expandable-value\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n </div>\n }\n }\n </div>\n }\n </li>\n }\n }\n </ul>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n ></sdc-empty-state>\n }\n }\n\n @if (showPaginator()) {\n <div class=\"sdc-table-paginator\">\n <sdc-paginator\n [first]=\"first()\"\n [rows]=\"rows()\"\n [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"isMobile() ? [] : rowsPerPageOptions()\"\n [showRowsPerPageSelector]=\"showRowsPerPageSelector()\"\n [isMobile]=\"isMobile()\"\n [totalRecordsLabel]=\"totalRecordsLabel()\"\n (pageChange)=\"onPageChange($event)\"\n ></sdc-paginator>\n </div>\n }\n </div>\n </sdc-loading-state>\n</section>\n\n@if (openMenuState(); as menu) {\n <sdc-table-actions-menu\n [items]=\"menu.items\"\n [menuId]=\"menu.menuId\"\n [top]=\"menu.top\"\n [left]=\"menu.left\"\n [width]=\"menu.width\"\n (close)=\"onMenuClose($event)\"\n (select)=\"onPortalActionClick($event)\"\n ></sdc-table-actions-menu>\n}\n", styles: [":host{display:block;width:100%;box-sizing:border-box}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sdc-table{width:100%;box-sizing:border-box;overflow:visible;background:var(--sdc-table-bg-card)}.sdc-table-shell{display:block;--sdc-table-body-height: 220px;overflow:visible}.sdc-table-loading-wrap{display:block;width:100%;overflow:visible}.sdc-table-caption{width:100%;justify-content:flex-end;display:flex;padding:.75rem 0}.sdc-table-caption__search{width:min(100%,22rem)}.sdc-table-caption__search--full-width{width:100%}.sdc-table-scroll{width:100%;overflow-x:auto;overflow-y:visible}.sdc-table-grid{min-width:var(--sdc-table-min-width, 100%);width:100%;border-collapse:collapse;table-layout:auto}.sdc-table-grid--fit{table-layout:fixed}thead th{padding:var(--sdc-table-padding-cell);background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);-webkit-user-select:none;user-select:none;transition:background var(--sdc-table-transition-fast),border var(--sdc-table-transition-fast);min-height:44px;position:relative;overflow:hidden;text-align:left}thead th.sdc-table-sortable{cursor:pointer}thead th.sdc-table-sortable:hover{background:var(--sdc-table-th-hover-bg)}thead th.sdc-table-sortable-disabled,thead th.sdc-table-header-disabled{cursor:default}thead th.sdc-table-sortable-disabled:focus,thead th.sdc-table-sortable-disabled:focus-visible{outline:none;box-shadow:none}thead th.sdc-table-sortable:focus,thead th.sdc-table-sortable:focus-visible{outline:2px solid var(--sdc-tab-primary, #007bff);outline-offset:-2px;box-shadow:inset 0 0 0 3px #007bff33;position:relative;z-index:1}thead th.sdc-table-is-selected{background:var(--sdc-table-th-selected-bg)!important}thead th.sdc-table-is-selected .sdc-table-sort-overlay{right:.5rem}.sdc-table-th-inner{display:flex;align-items:center;gap:var(--sdc-table-gap-th-inner);width:100%;min-width:0;overflow:hidden;text-align:inherit}.sdc-table-sort-overlay{position:absolute;right:0;top:50%;transform:translateY(-50%)}tbody td{padding:.5rem var(--sdc-table-padding-cell);border-bottom:1px solid var(--sdc-table-border-gray);vertical-align:middle;overflow:visible}.sdc-table-td-val{display:flex;align-items:center;width:100%;min-width:0;overflow:hidden}.sdc-table-td-val--initial-loading{min-height:1.5rem}.sdc-table-initial-loading-row{background:var(--sdc-table-bg-card)}.sdc-table-td--initial-loading{height:3.625rem}.sdc-table-th-label{color:#333!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;display:block;flex:1 1 auto;width:100%;text-align:inherit}.sdc-table-th-inner--sortable{padding-right:1.5rem}.sdc-table-th-tooltip{flex-shrink:0;display:inline-flex;align-items:center}.sdc-table-th-tooltip__icon{font-size:.75rem;color:var(--sdc-table-th-tooltip-icon, #767676);cursor:help}.sdc-table-empty-state{display:flex;align-items:center;justify-content:center;min-height:var(--sdc-table-body-height);padding:0}.sdc-table--loading .sdc-table-shell{pointer-events:none;-webkit-user-select:none;user-select:none}.sdc-table--initial-loading .sdc-table-scroll{overflow-x:hidden}thead th.sdc-table-th-checkbox .sdc-table-th-inner--checkbox{justify-content:center}thead th.sdc-table-th-checkbox .sdc-table-th-center{display:flex;align-items:center;justify-content:center;width:100%}thead th.sdc-table-th-checkbox .sdc-table-th-center input{cursor:pointer;margin:0}thead th.sdc-table-th-checkbox .sdc-table-th-center input:disabled{cursor:not-allowed}.sdc-table-paginator{padding:.5rem 0;position:sticky;bottom:0;z-index:1;background:var(--sdc-table-bg-card)}.sdc-table-td-align-left{text-align:left}.sdc-table-td-align-center{text-align:center}.sdc-table-td-align-right{text-align:right}.sdc-table-th-align-left{text-align:left}.sdc-table-th-align-center{text-align:center}.sdc-table-th-align-right{text-align:right}.sdc-table-cell-content--nowrap .sdc-table-text,.sdc-table-cell-content--nowrap .sdc-table-strong-label,.sdc-table-cell-content--nowrap .sdc-table-code-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}@keyframes sdc-mobile-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.sdc-table-mobile-list{display:flex;flex-direction:column;width:100%;border:1px solid var(--sdc-table-border-gray);border-radius:.5rem;overflow:hidden}.sdc-table-mobile-card{display:flex;flex-direction:column;background:var(--sdc-table-bg-card);border-top:2px solid var(--sdc-table-border-gray)}.sdc-table-mobile-card:first-child{border-top:0}.sdc-table-mobile-field{display:grid;grid-template-columns:minmax(0,7.5rem) minmax(0,1fr);gap:.25rem .75rem;align-items:start;padding:.5rem 1rem;border-top:1px solid var(--sdc-table-border-gray)}.sdc-table-mobile-field:first-child{border-top:0;padding-top:.75rem}.sdc-table-mobile-field:last-child{padding-bottom:.75rem}.sdc-table-mobile-field--selected{background:#11182706}.sdc-table-mobile-field--full-width{grid-template-columns:1fr;gap:.25rem}.sdc-table-mobile-label-wrap,.sdc-table-mobile-value{min-width:0}.sdc-table-mobile-field--full-width>.sdc-table-mobile-label-wrap{display:none}.sdc-table-mobile-label,.sdc-table-mobile-label--sortable{display:flex;align-items:center;justify-content:flex-start;gap:.25rem;width:100%;margin:0;padding:0;border:0;background:transparent;color:var(--sdc-text-muted, #6b7280);font:inherit;font-size:.6875rem;font-weight:500;line-height:1.6;letter-spacing:.015em;text-align:left}.sdc-table-mobile-label--sortable{cursor:pointer}.sdc-table-mobile-label--sortable:focus-visible{outline:2px solid var(--sdc-tab-primary, #428bca);outline-offset:3px;border-radius:.375rem}.sdc-table-mobile-label--loading{width:5.5rem;height:.625rem;border-radius:999px;animation:sdc-mobile-shimmer 1.8s ease infinite;background:linear-gradient(90deg,#94a3b824,#94a3b842,#94a3b824);background-size:200% 100%}.sdc-table-mobile-skeleton{min-height:1.25rem;border-radius:.25rem;animation:sdc-mobile-shimmer 1.8s ease infinite;background:linear-gradient(90deg,#94a3b81a,#94a3b82e,#94a3b81a);background-size:200% 100%}.sdc-table-mobile-value{display:flex;align-items:flex-start;width:100%}@media (max-width: 768px){.sdc-table-caption__search{width:100%}.sdc-table-paginator{justify-content:center!important;border-top:1px solid var(--sdc-table-border-gray)}.sdc-table-mobile-field--sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.sdc-table-mobile-field--sortable:hover{background:#11182705}}@media (max-width: 540px){.sdc-table-mobile-list{border-radius:.375rem}.sdc-table-mobile-field{grid-template-columns:1fr;gap:.125rem;padding:.4375rem .875rem}.sdc-table-mobile-field:first-child{padding-top:.625rem}.sdc-table-mobile-field:last-child{padding-bottom:.625rem}}.sdc-table-expandable-list{display:flex;flex-direction:column;width:100%;list-style:none;margin:0;padding:0;border:1px solid var(--sdc-table-border-gray);border-radius:.5rem;overflow:hidden}.sdc-table-expandable-item{display:flex;flex-direction:column;background:var(--sdc-table-bg-card);border-top:1px solid var(--sdc-table-border-gray)}.sdc-table-expandable-item:first-child{border-top:0}.sdc-table-expandable-summary{display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;cursor:pointer;-webkit-user-select:none;user-select:none}.sdc-table-expandable-summary--loading{pointer-events:none}.sdc-table-expandable-summary:hover{background:#11182705}.sdc-table-expandable-checkbox{flex:0 0 auto}.sdc-table-expandable-summary-fields{display:flex;flex:1 1 0;flex-wrap:wrap;gap:.125rem 1.5rem;min-width:0}.sdc-table-expandable-summary-field{display:flex;flex-direction:column;min-width:0}.sdc-table-expandable-summary-label{color:var(--sdc-text-muted, #6b7280);font-size:.6875rem;font-weight:500;line-height:1.6;letter-spacing:.015em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-table-expandable-summary-value{display:flex;align-items:center;min-width:0}.sdc-table-expandable-toggle{display:flex;align-items:center;justify-content:center;flex:0 0 auto;width:1.75rem;height:1.75rem;padding:0;border:0;border-radius:50%;background:transparent;color:var(--sdc-text-muted, #6b7280);cursor:pointer;transition:color var(--sdc-table-transition-fast, .15s ease),background var(--sdc-table-transition-fast, .15s ease)}.sdc-table-expandable-toggle:focus-visible{outline:2px solid var(--sdc-tab-primary, #428bca);outline-offset:2px}.sdc-table-expandable-toggle:hover{color:var(--sdc-text-default, #111827);background:#1118270f}.sdc-table-expandable-chevron{display:flex;align-items:center;justify-content:center;font-size:.75rem;transition:transform .2s ease}.sdc-table-expandable-label-wrap,.sdc-table-expandable-value{min-width:0}.sdc-table-expandable-details{padding:.375rem 0;border-top:1px solid var(--sdc-table-border-gray);background:#11182704}.sdc-table-expandable-field{display:grid;grid-template-columns:minmax(0,7.5rem) minmax(0,1fr);gap:.25rem .75rem;align-items:start;padding:.375rem 1rem;border-top:1px solid rgba(0,0,0,.04)}.sdc-table-expandable-field--full-width{grid-template-columns:1fr;gap:.25rem}.sdc-table-expandable-field:first-child{border-top:0}.sdc-table-expandable-field--full-width>.sdc-table-expandable-label-wrap{display:none}.sdc-table-expandable-label{display:flex;align-items:center;color:var(--sdc-text-muted, #6b7280);font-size:.6875rem;font-weight:500;line-height:1.6;letter-spacing:.015em}.sdc-table-expandable-value{display:flex;align-items:flex-start;width:100%}.sdc-table-expandable-skeleton-primary{width:55%;max-width:10rem}.sdc-table-expandable-skeleton-secondary{width:35%;max-width:7rem}.sdc-table-expandable-chevron--open{transform:rotate(180deg)}.sdc-table-expandable-item--expanded .sdc-table-expandable-summary{background:#11182706}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode", "debounceTimeMs", "ariaLabel", "inputRole", "inputAriaControls", "inputAriaDescribedBy", "inputAriaActiveDescendant", "inputAriaHaspopup", "inputAriaExpanded", "inputAutocomplete", "submitOnEnter", "clearOnEscape"], outputs: ["debouncedValueChange", "onSearch", "onClear"] }, { kind: "component", type: PaginatorComponent, selector: "sdc-paginator", inputs: ["first", "rows", "totalRecords", "rowsPerPageOptions", "showRowsPerPageSelector", "isMobile", "totalRecordsLabel"], outputs: ["pageChange"] }, { kind: "component", type: LoadingStateComponent, selector: "sdc-loading-state", inputs: ["indicator", "id", "blockWindow", "blockDelayMs", "unblockDelayMs", "loading"] }, { kind: "component", type: EmptyStateComponent, selector: "sdc-empty-state", inputs: ["id", "title", "variant", "titleParams", "iconClass", "description", "descriptionParams", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "primaryActionLabelParams", "secondaryActionLabel", "secondaryActionLabelParams", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: TableSortIndicatorComponent, selector: "sdc-table-sort-indicator", inputs: ["columnField", "columnType", "sortField", "sortOrder", "sortable"] }, { kind: "component", type: TableCellContentComponent, selector: "sdc-table-cell-content", inputs: ["cellConfigs", "col", "resolveValue", "row", "actionsMenuOpen", "actionsMenuId", "defaultTextOverflow", "rowCheckboxId", "rowLabel", "rowSelectionDisabled", "forceLeftAlign", "rowSelected"], outputs: ["toggleActionsMenu", "toggleRow", "triggerButtonAction"] }, { kind: "component", type: TableActionsMenuComponent, selector: "sdc-table-actions-menu", inputs: ["ariaLabel", "items", "left", "menuId", "top", "width"], outputs: ["close", "select"] }, { kind: "component", type: TooltipComponent, selector: "sdc-tooltip", inputs: ["pTooltip", "tooltipPosition", "tooltipEvent", "fitContent", "tooltipDisabled", "allowHtml"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
31923
31981
|
}
|
|
31924
31982
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableComponent, decorators: [{
|
|
31925
31983
|
type: Component,
|
|
@@ -31935,7 +31993,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
31935
31993
|
TableCellContentComponent,
|
|
31936
31994
|
TableActionsMenuComponent,
|
|
31937
31995
|
TooltipComponent
|
|
31938
|
-
], encapsulation: ViewEncapsulation.Emulated, changeDetection: ChangeDetectionStrategy.OnPush, template: "<section\n class=\"sdc-table\"\n [class.sdc-table-stack]=\"isMobile()\"\n [class.sdc-table-filtered]=\"!!globalFilter().trim()\"\n [class.sdc-table--loading]=\"isLoading\"\n [class.sdc-table--initial-loading]=\"showInitialLoading()\"\n>\n <sdc-loading-state\n class=\"sdc-table-loading-wrap\"\n [loading]=\"isLoading\"\n [blockWindow]=\"false\"\n [blockDelayMs]=\"0\"\n [indicator]=\"loadingIndicator\"\n >\n <div class=\"sdc-table-shell\" [style.--sdc-table-body-height.px]=\"bodyViewportHeightPx()\">\n @if (showSearch()) {\n <div class=\"sdc-table-caption\">\n <div class=\"sdc-table-caption__search\" [class.sdc-table-caption__search--full-width]=\"searchFullWidth()\">\n <sdc-searchbox\n [disabled]=\"isLoading\"\n [placeholder]=\"searchPlaceholder()\"\n [triggerMode]=\"triggerMode()\"\n (onSearch)=\"onSearchTerm($event)\"\n (onClear)=\"onClearSearch()\"\n [attr.aria-label]=\"'platform.datacore.accessibility_search_field' | translate\"\n />\n </div>\n </div>\n }\n\n @if (!isMobile()) {\n <div\n class=\"sdc-table-scroll\"\n [style.--sdc-table-min-width]=\"isFitLayout() ? '100%' : tableMinWidthPx() + 'px'\"\n >\n <table\n class=\"sdc-table-grid\"\n [class.sdc-table-grid--fit]=\"isFitLayout()\"\n role=\"table\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-rowcount]=\"totalRecords()\"\n [attr.aria-busy]=\"isLoading\"\n >\n <colgroup>\n @for (col of cols; track $index) {\n <col [style.width]=\"colWidthStyle(col)\" />\n }\n </colgroup>\n\n <thead>\n <tr role=\"row\">\n @for (col of cols; track $index) {\n <th\n scope=\"col\"\n role=\"columnheader\"\n [class.sdc-table-th-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-th-currency]=\"col.type === 'currency'\"\n [class.sdc-table-th-button]=\"col.type === 'button'\"\n [class.sdc-table-th-actions]=\"col.type === 'actions'\"\n [class.sdc-table-sortable]=\"canSortColumn(col)\"\n [class.sdc-table-sortable-disabled]=\"isSortableColumn(col) && !canSortColumn(col)\"\n [class.sdc-table-header-disabled]=\"!hasDataRows()\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col, 'header')\"\n [attr.aria-sort]=\"getSortAriaAttribute(col)\"\n [attr.tabindex]=\"hasDataRows() && canSortColumn(col) ? 0 : null\"\n [attr.aria-disabled]=\"!hasDataRows() || (isSortableColumn(col) && !canSortColumn(col)) ? 'true' : null\"\n [attr.aria-label]=\"\n isSortableColumn(col)\n ? (\n (col.header | translate)\n + ' - '\n + ('platform.datacore.accessibility_sortable_column' | translate)\n )\n : (col.header | translate)\n \"\n (click)=\"hasDataRows() && col.field ? toggleSort(col.field, canSortColumn(col)) : null\"\n (keydown.enter)=\"hasDataRows() && col.field ? toggleSort(col.field, canSortColumn(col)) : null\"\n (keydown.space)=\"$event.preventDefault();\n hasDataRows() && col.field ? toggleSort(col.field, canSortColumn(col)) : null\"\n >\n @if (col.type === 'checkbox-selection' && (cellsCfg().checkbox.selectAll ?? true)) {\n <div class=\"sdc-table-th-inner sdc-table-th-inner--checkbox\">\n <span class=\"sdc-table-th-label sr-only\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n <span class=\"sdc-table-th-center\">\n <input\n type=\"checkbox\"\n [id]=\"getSelectAllCheckboxId($index)\"\n [checked]=\"isPageFullySelected()\"\n [indeterminate]=\"isPagePartiallySelected()\"\n [disabled]=\"!hasSelectablePageRows()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleSelectPage(getCheckedValue($event))\"\n (keydown.space)=\"$event.preventDefault(); toggleSelectPage(!isPageFullySelected())\"\n [attr.aria-label]=\"'platform.datacore.accessibility_select_all_rows' | translate\"\n [attr.aria-checked]=\"getPageSelectionAriaChecked()\"\n />\n <label [for]=\"getSelectAllCheckboxId($index)\" class=\"sr-only\">\n {{ 'platform.datacore.accessibility_select_all_rows' | translate }}\n </label>\n </span>\n </div>\n } @else {\n <div class=\"sdc-table-th-inner\" [class.sdc-table-th-inner--sortable]=\"isSortableColumn(col)\">\n <span class=\"sdc-table-th-label\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n\n @if (col.headerTooltip) {\n <sdc-tooltip\n class=\"sdc-table-th-tooltip\"\n [pTooltip]=\"col.headerTooltip\"\n [tooltipPosition]=\"col.headerTooltipPosition ?? 'top'\"\n [tooltipEvent]=\"col.headerTooltipEvent ?? 'hover'\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <i class=\"fas fa-circle-info sdc-table-th-tooltip__icon\" aria-hidden=\"true\"></i>\n </sdc-tooltip>\n }\n\n <span class=\"sdc-table-sort-overlay\" aria-hidden=\"true\">\n <sdc-table-sort-indicator\n [columnField]=\"col.field || null\"\n [columnType]=\"col.type\"\n [sortable]=\"isSortableColumn(col)\"\n [sortField]=\"sortField()\"\n [sortOrder]=\"sortOrder()\"\n ></sdc-table-sort-indicator>\n </span>\n </div>\n }\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex; let r = $index) {\n <tr class=\"sdc-table-initial-loading-row\" role=\"row\" [attr.aria-rowindex]=\"r + 1\" aria-hidden=\"true\">\n @for (col of cols; track $index) {\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-td--initial-loading\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n >\n <div class=\"sdc-table-td-val sdc-table-td-val--initial-loading\"></div>\n </td>\n }\n </tr>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <tr\n role=\"row\"\n [attr.aria-rowindex]=\"r + 1\"\n (click)=\"onRowClicked(row)\"\n (keydown.enter)=\"onRowClicked(row)\"\n >\n @for (col of cols; track $index) {\n <td\n class=\"sdc-table-td sdc-table-tdc\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n [attr.id]=\"col.colId || null\"\n role=\"cell\"\n >\n @if (col.cellTag === 'span') {\n <span class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </span>\n } @else if (col.cellTag === 'i') {\n <i class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </i>\n } @else if (col.cellTag === 'p') {\n <p class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </p>\n } @else {\n <div class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n }\n </td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n ></sdc-empty-state>\n }\n </div>\n } @else if (mobileMode() === 'stacked') {\n <div\n class=\"sdc-table-mobile-list\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-busy]=\"isLoading\"\n >\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex; let r = $index) {\n <div class=\"sdc-table-mobile-card sdc-table-mobile-card--loading\" aria-hidden=\"true\">\n @for (col of cols; track $index) {\n <div class=\"sdc-table-mobile-field sdc-table-mobile-field--loading\">\n <div class=\"sdc-table-mobile-label sdc-table-mobile-label--loading\"></div>\n <div class=\"sdc-table-mobile-skeleton\"></div>\n </div>\n }\n </div>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <div class=\"sdc-table-mobile-card\">\n @for (col of cols; track $index) {\n <div\n class=\"sdc-table-mobile-field\"\n [class.sdc-table-mobile-field--full-width]=\"\n col.type === 'button' || col.type === 'actions' || col.type === 'checkbox-selection'\n \"\n [class.sdc-table-mobile-field--selected]=\"sortField() === col.field\"\n [class.sdc-table-mobile-field--sortable]=\"col.field && isSortableColumn(col)\"\n (click)=\"col.field && toggleSort(col.field, isSortableColumn(col))\"\n >\n @if (mobileFieldLabel(col)) {\n <div class=\"sdc-table-mobile-label-wrap\">\n @if (col.field && isSortableColumn(col)) {\n <button\n type=\"button\"\n class=\"sdc-table-mobile-label sdc-table-mobile-label--sortable\"\n [attr.aria-label]=\"\n (mobileFieldLabel(col) | translate)\n + ' - '\n + ('platform.datacore.accessibility_sortable_column' | translate)\n \"\n (click)=\"$event.stopPropagation(); toggleSort(col.field, isSortableColumn(col))\"\n (keydown.enter)=\"toggleSort(col.field, isSortableColumn(col))\"\n (keydown.space)=\"$event.preventDefault(); toggleSort(col.field, isSortableColumn(col))\"\n >\n <span>{{ mobileFieldLabel(col) | translate }}</span>\n <sdc-table-sort-indicator\n [columnField]=\"col.field || null\"\n [columnType]=\"col.type\"\n [sortable]=\"isSortableColumn(col)\"\n [sortField]=\"sortField()\"\n [sortOrder]=\"sortOrder()\"\n ></sdc-table-sort-indicator>\n </button>\n } @else {\n <div class=\"sdc-table-mobile-label\">\n <span>{{ mobileFieldLabel(col) | translate }}</span>\n </div>\n }\n </div>\n }\n\n <div class=\"sdc-table-mobile-value\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n ></sdc-empty-state>\n }\n } @else {\n <ul\n class=\"sdc-table-expandable-list\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-busy]=\"isLoading\"\n >\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex) {\n <li class=\"sdc-table-expandable-item sdc-table-expandable-item--loading\" aria-hidden=\"true\">\n <div class=\"sdc-table-expandable-summary sdc-table-expandable-summary--loading\">\n <div class=\"sdc-table-expandable-summary-fields\">\n <div class=\"sdc-table-mobile-skeleton sdc-table-expandable-skeleton-primary\"></div>\n <div class=\"sdc-table-mobile-skeleton sdc-table-expandable-skeleton-secondary\"></div>\n </div>\n <span class=\"sdc-table-expandable-chevron\" aria-hidden=\"true\">\n <i class=\"fas fa-chevron-down\"></i>\n </span>\n </div>\n </li>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <li\n class=\"sdc-table-expandable-item\"\n [class.sdc-table-expandable-item--expanded]=\"isRowExpanded(r)\"\n >\n <div\n class=\"sdc-table-expandable-summary\"\n (click)=\"toggleExpandRow(r)\"\n (keydown.enter)=\"toggleExpandRow(r)\"\n (keydown.space)=\"$event.preventDefault(); toggleExpandRow(r)\"\n >\n @if (checkboxCol(); as cbCol) {\n <div\n class=\"sdc-table-expandable-checkbox\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"cbCol\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"false\"\n [actionsMenuId]=\"null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, cbCol)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, cbCol, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n }\n <div class=\"sdc-table-expandable-summary-fields\">\n @for (col of summaryCols(); track $index) {\n <div class=\"sdc-table-expandable-summary-field\">\n <span class=\"sdc-table-expandable-summary-label\">{{ mobileFieldLabel(col) | translate }}</span>\n <div class=\"sdc-table-expandable-summary-value\">\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"false\"\n [actionsMenuId]=\"null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n </div>\n }\n </div>\n <button\n type=\"button\"\n class=\"sdc-table-expandable-toggle\"\n [attr.aria-expanded]=\"isRowExpanded(r)\"\n [attr.aria-label]=\"\n isRowExpanded(r)\n ? ('platform.datacore.accessibility_collapse_row' | translate)\n : ('platform.datacore.accessibility_expand_row' | translate)\n \"\n (click)=\"$event.stopPropagation(); toggleExpandRow(r)\"\n (keydown.enter)=\"$event.stopPropagation(); toggleExpandRow(r)\"\n (keydown.space)=\"$event.preventDefault(); $event.stopPropagation(); toggleExpandRow(r)\"\n >\n <span\n class=\"sdc-table-expandable-chevron\"\n [class.sdc-table-expandable-chevron--open]=\"isRowExpanded(r)\"\n aria-hidden=\"true\"\n ><i class=\"fas fa-chevron-down\"></i></span>\n </button>\n </div>\n @if (isRowExpanded(r)) {\n <div class=\"sdc-table-expandable-details\">\n @for (col of cols; track $index) {\n @if (col.type !== 'checkbox-selection') {\n <div\n class=\"sdc-table-expandable-field\"\n [class.sdc-table-expandable-field--full-width]=\"\n col.type === 'button' || col.type === 'actions'\n \"\n >\n @if (col.type !== 'button' && col.type !== 'actions') {\n <div class=\"sdc-table-expandable-label-wrap\">\n <span class=\"sdc-table-expandable-label\">{{ mobileFieldLabel(col) | translate }}</span>\n </div>\n }\n <div class=\"sdc-table-expandable-value\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n </div>\n }\n }\n </div>\n }\n </li>\n }\n }\n </ul>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n ></sdc-empty-state>\n }\n }\n\n @if (showPaginator()) {\n <div class=\"sdc-table-paginator\">\n <sdc-paginator\n [first]=\"first()\"\n [rows]=\"rows()\"\n [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"isMobile() ? [] : rowsPerPageOptions()\"\n [showRowsPerPageSelector]=\"showRowsPerPageSelector()\"\n [isMobile]=\"isMobile()\"\n [totalRecordsLabel]=\"totalRecordsLabel()\"\n (pageChange)=\"onPageChange($event)\"\n ></sdc-paginator>\n </div>\n }\n </div>\n </sdc-loading-state>\n</section>\n\n@if (openMenuState(); as menu) {\n <sdc-table-actions-menu\n [items]=\"menu.items\"\n [menuId]=\"menu.menuId\"\n [top]=\"menu.top\"\n [left]=\"menu.left\"\n [width]=\"menu.width\"\n (close)=\"onMenuClose($event)\"\n (select)=\"onPortalActionClick($event)\"\n ></sdc-table-actions-menu>\n}\n", styles: [":host{display:block;width:100%;box-sizing:border-box}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sdc-table{width:100%;box-sizing:border-box;overflow:visible;background:var(--sdc-table-bg-card)}.sdc-table-shell{display:block;--sdc-table-body-height: 220px;overflow:visible}.sdc-table-loading-wrap{display:block;width:100%;overflow:visible}.sdc-table-caption{width:100%;justify-content:flex-end;display:flex;padding:.75rem 0}.sdc-table-caption__search{width:min(100%,22rem)}.sdc-table-caption__search--full-width{width:100%}.sdc-table-scroll{width:100%;overflow-x:auto;overflow-y:visible}.sdc-table-grid{min-width:var(--sdc-table-min-width, 100%);width:100%;border-collapse:collapse;table-layout:auto}.sdc-table-grid--fit{table-layout:fixed}thead th{padding:var(--sdc-table-padding-cell);background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);-webkit-user-select:none;user-select:none;transition:background var(--sdc-table-transition-fast),border var(--sdc-table-transition-fast);min-height:44px;position:relative;overflow:hidden;text-align:left}thead th.sdc-table-sortable{cursor:pointer}thead th.sdc-table-sortable:hover{background:var(--sdc-table-th-hover-bg)}thead th.sdc-table-sortable-disabled,thead th.sdc-table-header-disabled{cursor:default}thead th.sdc-table-sortable-disabled:focus,thead th.sdc-table-sortable-disabled:focus-visible{outline:none;box-shadow:none}thead th.sdc-table-sortable:focus,thead th.sdc-table-sortable:focus-visible{outline:2px solid var(--sdc-tab-primary, #007bff);outline-offset:-2px;box-shadow:inset 0 0 0 3px #007bff33;position:relative;z-index:1}thead th.sdc-table-is-selected{background:var(--sdc-table-th-selected-bg)!important}thead th.sdc-table-is-selected .sdc-table-sort-overlay{right:.5rem}.sdc-table-th-inner{display:flex;align-items:center;gap:var(--sdc-table-gap-th-inner);width:100%;min-width:0;overflow:hidden;text-align:inherit}.sdc-table-sort-overlay{position:absolute;right:0;top:50%;transform:translateY(-50%)}tbody td{padding:.5rem var(--sdc-table-padding-cell);border-bottom:1px solid var(--sdc-table-border-gray);vertical-align:middle;overflow:visible}.sdc-table-td-val{display:flex;align-items:center;width:100%;min-width:0;overflow:hidden}.sdc-table-td-val--initial-loading{min-height:1.5rem}.sdc-table-initial-loading-row{background:var(--sdc-table-bg-card)}.sdc-table-td--initial-loading{height:3.625rem}.sdc-table-th-label{color:#333!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;display:block;flex:1 1 auto;width:100%;text-align:inherit}.sdc-table-th-inner--sortable{padding-right:1.5rem}.sdc-table-th-tooltip{flex-shrink:0;display:inline-flex;align-items:center}.sdc-table-th-tooltip__icon{font-size:.75rem;color:var(--sdc-table-th-tooltip-icon, #767676);cursor:help}.sdc-table-empty-state{display:flex;align-items:center;justify-content:center;min-height:var(--sdc-table-body-height);padding:0}.sdc-table--loading .sdc-table-shell{pointer-events:none;-webkit-user-select:none;user-select:none}.sdc-table--initial-loading .sdc-table-scroll{overflow-x:hidden}thead th.sdc-table-th-checkbox .sdc-table-th-inner--checkbox{justify-content:center}thead th.sdc-table-th-checkbox .sdc-table-th-center{display:flex;align-items:center;justify-content:center;width:100%}thead th.sdc-table-th-checkbox .sdc-table-th-center input{cursor:pointer;margin:0}thead th.sdc-table-th-checkbox .sdc-table-th-center input:disabled{cursor:not-allowed}.sdc-table-paginator{padding:.5rem 0;position:sticky;bottom:0;z-index:1;background:var(--sdc-table-bg-card)}.sdc-table-td-align-left{text-align:left}.sdc-table-td-align-center{text-align:center}.sdc-table-td-align-right{text-align:right}.sdc-table-th-align-left{text-align:left}.sdc-table-th-align-center{text-align:center}.sdc-table-th-align-right{text-align:right}.sdc-table-cell-content--nowrap .sdc-table-text,.sdc-table-cell-content--nowrap .sdc-table-strong-label,.sdc-table-cell-content--nowrap .sdc-table-code-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}@keyframes sdc-mobile-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.sdc-table-mobile-list{display:flex;flex-direction:column;width:100%;border:1px solid var(--sdc-border-strong, #d1d5db);border-radius:.5rem;overflow:hidden}.sdc-table-mobile-card{display:flex;flex-direction:column;background:var(--sdc-formfield-default-bg, #ffffff);border-top:2px solid var(--sdc-border-strong, #d1d5db)}.sdc-table-mobile-card:first-child{border-top:0}.sdc-table-mobile-field{display:grid;grid-template-columns:minmax(0,7.5rem) minmax(0,1fr);gap:.25rem .75rem;align-items:start;padding:.5rem 1rem;border-top:1px solid rgba(0,0,0,.05)}.sdc-table-mobile-field:first-child{border-top:0;padding-top:.75rem}.sdc-table-mobile-field:last-child{padding-bottom:.75rem}.sdc-table-mobile-field--selected{background:#11182706}.sdc-table-mobile-field--full-width{grid-template-columns:1fr;gap:.25rem}.sdc-table-mobile-label-wrap,.sdc-table-mobile-value{min-width:0}.sdc-table-mobile-field--full-width>.sdc-table-mobile-label-wrap{display:none}.sdc-table-mobile-label,.sdc-table-mobile-label--sortable{display:flex;align-items:center;justify-content:flex-start;gap:.25rem;width:100%;margin:0;padding:0;border:0;background:transparent;color:var(--sdc-text-muted, #6b7280);font:inherit;font-size:.6875rem;font-weight:500;line-height:1.6;letter-spacing:.015em;text-align:left}.sdc-table-mobile-label--sortable{cursor:pointer}.sdc-table-mobile-label--sortable:focus-visible{outline:2px solid var(--sdc-tab-primary, #428bca);outline-offset:3px;border-radius:.375rem}.sdc-table-mobile-label--loading{width:5.5rem;height:.625rem;border-radius:999px;animation:sdc-mobile-shimmer 1.8s ease infinite;background:linear-gradient(90deg,#94a3b824,#94a3b842,#94a3b824);background-size:200% 100%}.sdc-table-mobile-skeleton{min-height:1.25rem;border-radius:.25rem;animation:sdc-mobile-shimmer 1.8s ease infinite;background:linear-gradient(90deg,#94a3b81a,#94a3b82e,#94a3b81a);background-size:200% 100%}.sdc-table-mobile-value{display:flex;align-items:flex-start;width:100%}@media (max-width: 768px){.sdc-table-caption__search{width:100%}.sdc-table-paginator{justify-content:center!important;border-top:1px solid var(--sdc-table-border-gray)}.sdc-table-mobile-field--sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.sdc-table-mobile-field--sortable:hover{background:#11182705}}@media (max-width: 540px){.sdc-table-mobile-list{border-radius:.375rem}.sdc-table-mobile-field{grid-template-columns:1fr;gap:.125rem;padding:.4375rem .875rem}.sdc-table-mobile-field:first-child{padding-top:.625rem}.sdc-table-mobile-field:last-child{padding-bottom:.625rem}}.sdc-table-expandable-list{display:flex;flex-direction:column;width:100%;list-style:none;margin:0;padding:0;border:1px solid var(--sdc-border-strong, #d1d5db);border-radius:.5rem;overflow:hidden}.sdc-table-expandable-item{display:flex;flex-direction:column;background:var(--sdc-formfield-default-bg, #ffffff);border-top:1px solid var(--sdc-border-strong, #d1d5db)}.sdc-table-expandable-item:first-child{border-top:0}.sdc-table-expandable-summary{display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;cursor:pointer;-webkit-user-select:none;user-select:none}.sdc-table-expandable-summary--loading{pointer-events:none}.sdc-table-expandable-summary:hover{background:#11182705}.sdc-table-expandable-checkbox{flex:0 0 auto}.sdc-table-expandable-summary-fields{display:flex;flex:1 1 0;flex-wrap:wrap;gap:.125rem 1.5rem;min-width:0}.sdc-table-expandable-summary-field{display:flex;flex-direction:column;min-width:0}.sdc-table-expandable-summary-label{color:var(--sdc-text-muted, #6b7280);font-size:.6875rem;font-weight:500;line-height:1.6;letter-spacing:.015em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-table-expandable-summary-value{display:flex;align-items:center;min-width:0}.sdc-table-expandable-toggle{display:flex;align-items:center;justify-content:center;flex:0 0 auto;width:1.75rem;height:1.75rem;padding:0;border:0;border-radius:50%;background:transparent;color:var(--sdc-text-muted, #6b7280);cursor:pointer;transition:color var(--sdc-table-transition-fast, .15s ease),background var(--sdc-table-transition-fast, .15s ease)}.sdc-table-expandable-toggle:focus-visible{outline:2px solid var(--sdc-tab-primary, #428bca);outline-offset:2px}.sdc-table-expandable-toggle:hover{color:var(--sdc-text-default, #111827);background:#1118270f}.sdc-table-expandable-chevron{display:flex;align-items:center;justify-content:center;font-size:.75rem;transition:transform .2s ease}.sdc-table-expandable-label-wrap,.sdc-table-expandable-value{min-width:0}.sdc-table-expandable-details{padding:.375rem 0;border-top:1px solid rgba(0,0,0,.06);background:#11182704}.sdc-table-expandable-field{display:grid;grid-template-columns:minmax(0,7.5rem) minmax(0,1fr);gap:.25rem .75rem;align-items:start;padding:.375rem 1rem;border-top:1px solid rgba(0,0,0,.04)}.sdc-table-expandable-field--full-width{grid-template-columns:1fr;gap:.25rem}.sdc-table-expandable-field:first-child{border-top:0}.sdc-table-expandable-field--full-width>.sdc-table-expandable-label-wrap{display:none}.sdc-table-expandable-label{display:flex;align-items:center;color:var(--sdc-text-muted, #6b7280);font-size:.6875rem;font-weight:500;line-height:1.6;letter-spacing:.015em}.sdc-table-expandable-value{display:flex;align-items:flex-start;width:100%}.sdc-table-expandable-skeleton-primary{width:55%;max-width:10rem}.sdc-table-expandable-skeleton-secondary{width:35%;max-width:7rem}.sdc-table-expandable-chevron--open{transform:rotate(180deg)}.sdc-table-expandable-item--expanded .sdc-table-expandable-summary{background:#11182706}\n"] }]
|
|
31996
|
+
], encapsulation: ViewEncapsulation.Emulated, changeDetection: ChangeDetectionStrategy.OnPush, template: "<section\n class=\"sdc-table\"\n [class.sdc-table-stack]=\"isMobile()\"\n [class.sdc-table-filtered]=\"!!globalFilter().trim()\"\n [class.sdc-table--loading]=\"isLoading\"\n [class.sdc-table--initial-loading]=\"showInitialLoading()\"\n>\n <sdc-loading-state\n class=\"sdc-table-loading-wrap\"\n [loading]=\"isLoading\"\n [blockWindow]=\"false\"\n [blockDelayMs]=\"0\"\n [indicator]=\"loadingIndicator\"\n >\n <div class=\"sdc-table-shell\" [style.--sdc-table-body-height.px]=\"bodyViewportHeightPx()\">\n @if (showSearch()) {\n <div class=\"sdc-table-caption\">\n <div class=\"sdc-table-caption__search\" [class.sdc-table-caption__search--full-width]=\"searchFullWidth()\">\n <sdc-searchbox\n [disabled]=\"isLoading\"\n [placeholder]=\"searchPlaceholder()\"\n [triggerMode]=\"triggerMode()\"\n (onSearch)=\"onSearchTerm($event)\"\n (onClear)=\"onClearSearch()\"\n [attr.aria-label]=\"'platform.datacore.accessibility_search_field' | translate\"\n />\n </div>\n </div>\n }\n\n @if (!isMobile()) {\n <div\n class=\"sdc-table-scroll\"\n [style.--sdc-table-min-width]=\"isFitLayout() ? '100%' : tableMinWidthPx() + 'px'\"\n >\n <table\n class=\"sdc-table-grid\"\n [class.sdc-table-grid--fit]=\"isFitLayout()\"\n role=\"table\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-rowcount]=\"totalRecords()\"\n [attr.aria-busy]=\"isLoading\"\n >\n <colgroup>\n @for (col of cols; track $index) {\n <col [style.width]=\"colWidthStyle(col)\" />\n }\n </colgroup>\n\n <thead>\n <tr role=\"row\">\n @for (col of cols; track $index) {\n <th\n scope=\"col\"\n role=\"columnheader\"\n [class.sdc-table-th-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-th-currency]=\"col.type === 'currency'\"\n [class.sdc-table-th-button]=\"col.type === 'button'\"\n [class.sdc-table-th-actions]=\"col.type === 'actions'\"\n [class.sdc-table-sortable]=\"canSortColumn(col)\"\n [class.sdc-table-sortable-disabled]=\"isSortableColumn(col) && !canSortColumn(col)\"\n [class.sdc-table-header-disabled]=\"!hasDataRows()\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col, 'header')\"\n [attr.aria-sort]=\"getSortAriaAttribute(col)\"\n [attr.tabindex]=\"hasDataRows() && canSortColumn(col) ? 0 : null\"\n [attr.aria-disabled]=\"!hasDataRows() || (isSortableColumn(col) && !canSortColumn(col)) ? 'true' : null\"\n [attr.aria-label]=\"\n isSortableColumn(col)\n ? (\n (col.header | translate)\n + ' - '\n + ('platform.datacore.accessibility_sortable_column' | translate)\n )\n : (col.header | translate)\n \"\n (click)=\"hasDataRows() && col.field ? toggleSort(col.field, canSortColumn(col)) : null\"\n (keydown.enter)=\"hasDataRows() && col.field ? toggleSort(col.field, canSortColumn(col)) : null\"\n (keydown.space)=\"$event.preventDefault();\n hasDataRows() && col.field ? toggleSort(col.field, canSortColumn(col)) : null\"\n >\n @if (col.type === 'checkbox-selection' && (cellsCfg().checkbox.selectAll ?? true)) {\n <div class=\"sdc-table-th-inner sdc-table-th-inner--checkbox\">\n <span class=\"sdc-table-th-label sr-only\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n <span class=\"sdc-table-th-center\">\n <input\n type=\"checkbox\"\n [id]=\"getSelectAllCheckboxId($index)\"\n [checked]=\"isPageFullySelected()\"\n [indeterminate]=\"isPagePartiallySelected()\"\n [disabled]=\"!hasSelectablePageRows()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleSelectPage(getCheckedValue($event))\"\n (keydown.space)=\"$event.preventDefault(); toggleSelectPage(!isPageFullySelected())\"\n [attr.aria-label]=\"'platform.datacore.accessibility_select_all_rows' | translate\"\n [attr.aria-checked]=\"getPageSelectionAriaChecked()\"\n />\n <label [for]=\"getSelectAllCheckboxId($index)\" class=\"sr-only\">\n {{ 'platform.datacore.accessibility_select_all_rows' | translate }}\n </label>\n </span>\n </div>\n } @else {\n <div class=\"sdc-table-th-inner\" [class.sdc-table-th-inner--sortable]=\"isSortableColumn(col)\">\n <span class=\"sdc-table-th-label\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n\n @if (col.headerTooltip) {\n <sdc-tooltip\n class=\"sdc-table-th-tooltip\"\n [pTooltip]=\"col.headerTooltip\"\n [tooltipPosition]=\"col.headerTooltipPosition ?? 'top'\"\n [tooltipEvent]=\"col.headerTooltipEvent ?? 'hover'\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <i class=\"fas fa-circle-info sdc-table-th-tooltip__icon\" aria-hidden=\"true\"></i>\n </sdc-tooltip>\n }\n\n <span class=\"sdc-table-sort-overlay\" aria-hidden=\"true\">\n <sdc-table-sort-indicator\n [columnField]=\"col.field || null\"\n [columnType]=\"col.type\"\n [sortable]=\"isSortableColumn(col)\"\n [sortField]=\"sortField()\"\n [sortOrder]=\"sortOrder()\"\n ></sdc-table-sort-indicator>\n </span>\n </div>\n }\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex; let r = $index) {\n <tr class=\"sdc-table-initial-loading-row\" role=\"row\" [attr.aria-rowindex]=\"r + 1\" aria-hidden=\"true\">\n @for (col of cols; track $index) {\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-td--initial-loading\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n >\n <div class=\"sdc-table-td-val sdc-table-td-val--initial-loading\"></div>\n </td>\n }\n </tr>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <tr\n role=\"row\"\n [attr.aria-rowindex]=\"r + 1\"\n (click)=\"onRowClicked(row)\"\n (keydown.enter)=\"onRowClicked(row)\"\n >\n @for (col of cols; track $index) {\n <td\n class=\"sdc-table-td sdc-table-tdc\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n [attr.id]=\"col.colId || null\"\n role=\"cell\"\n >\n @if (col.cellTag === 'span') {\n <span class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </span>\n } @else if (col.cellTag === 'i') {\n <i class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </i>\n } @else if (col.cellTag === 'p') {\n <p class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </p>\n } @else {\n <div class=\"sdc-table-td-val\" [ngStyle]=\"col.cellStyle\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n }\n </td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n ></sdc-empty-state>\n }\n </div>\n } @else if (mobileMode() === 'stacked') {\n <div\n class=\"sdc-table-mobile-list\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-busy]=\"isLoading\"\n >\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex; let r = $index) {\n <div class=\"sdc-table-mobile-card sdc-table-mobile-card--loading\" aria-hidden=\"true\">\n @for (col of cols; track $index) {\n <div class=\"sdc-table-mobile-field sdc-table-mobile-field--loading\">\n <div class=\"sdc-table-mobile-label sdc-table-mobile-label--loading\"></div>\n <div class=\"sdc-table-mobile-skeleton\"></div>\n </div>\n }\n </div>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <div class=\"sdc-table-mobile-card\">\n @for (col of cols; track $index) {\n <div\n class=\"sdc-table-mobile-field\"\n [class.sdc-table-mobile-field--full-width]=\"\n col.type === 'button' || col.type === 'actions' || col.type === 'checkbox-selection'\n \"\n [class.sdc-table-mobile-field--selected]=\"sortField() === col.field\"\n [class.sdc-table-mobile-field--sortable]=\"col.field && isSortableColumn(col)\"\n (click)=\"col.field && toggleSort(col.field, isSortableColumn(col))\"\n >\n @if (mobileFieldLabel(col)) {\n <div class=\"sdc-table-mobile-label-wrap\">\n @if (col.field && isSortableColumn(col)) {\n <button\n type=\"button\"\n class=\"sdc-table-mobile-label sdc-table-mobile-label--sortable\"\n [attr.aria-label]=\"\n (mobileFieldLabel(col) | translate)\n + ' - '\n + ('platform.datacore.accessibility_sortable_column' | translate)\n \"\n (click)=\"$event.stopPropagation(); toggleSort(col.field, isSortableColumn(col))\"\n (keydown.enter)=\"toggleSort(col.field, isSortableColumn(col))\"\n (keydown.space)=\"$event.preventDefault(); toggleSort(col.field, isSortableColumn(col))\"\n >\n <span>{{ mobileFieldLabel(col) | translate }}</span>\n <sdc-table-sort-indicator\n [columnField]=\"col.field || null\"\n [columnType]=\"col.type\"\n [sortable]=\"isSortableColumn(col)\"\n [sortField]=\"sortField()\"\n [sortOrder]=\"sortOrder()\"\n ></sdc-table-sort-indicator>\n </button>\n } @else {\n <div class=\"sdc-table-mobile-label\">\n <span>{{ mobileFieldLabel(col) | translate }}</span>\n </div>\n }\n </div>\n }\n\n <div class=\"sdc-table-mobile-value\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n ></sdc-empty-state>\n }\n } @else {\n <ul\n class=\"sdc-table-expandable-list\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-busy]=\"isLoading\"\n >\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex) {\n <li class=\"sdc-table-expandable-item sdc-table-expandable-item--loading\" aria-hidden=\"true\">\n <div class=\"sdc-table-expandable-summary sdc-table-expandable-summary--loading\">\n <div class=\"sdc-table-expandable-summary-fields\">\n <div class=\"sdc-table-mobile-skeleton sdc-table-expandable-skeleton-primary\"></div>\n <div class=\"sdc-table-mobile-skeleton sdc-table-expandable-skeleton-secondary\"></div>\n </div>\n <span class=\"sdc-table-expandable-chevron\" aria-hidden=\"true\">\n <i class=\"fas fa-chevron-down\"></i>\n </span>\n </div>\n </li>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <li\n class=\"sdc-table-expandable-item\"\n [class.sdc-table-expandable-item--expanded]=\"isRowExpanded(r)\"\n >\n <div\n class=\"sdc-table-expandable-summary\"\n (click)=\"toggleExpandRow(r)\"\n (keydown.enter)=\"toggleExpandRow(r)\"\n (keydown.space)=\"$event.preventDefault(); toggleExpandRow(r)\"\n >\n @if (checkboxCol(); as cbCol) {\n <div\n class=\"sdc-table-expandable-checkbox\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"cbCol\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"false\"\n [actionsMenuId]=\"null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, cbCol)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, cbCol, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n }\n <div class=\"sdc-table-expandable-summary-fields\">\n @for (col of summaryCols(); track $index) {\n <div class=\"sdc-table-expandable-summary-field\">\n <span class=\"sdc-table-expandable-summary-label\">{{ mobileFieldLabel(col) | translate }}</span>\n <div class=\"sdc-table-expandable-summary-value\">\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"false\"\n [actionsMenuId]=\"null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n </div>\n }\n </div>\n <button\n type=\"button\"\n class=\"sdc-table-expandable-toggle\"\n [attr.aria-expanded]=\"isRowExpanded(r)\"\n [attr.aria-label]=\"\n isRowExpanded(r)\n ? ('platform.datacore.accessibility_collapse_row' | translate)\n : ('platform.datacore.accessibility_expand_row' | translate)\n \"\n (click)=\"$event.stopPropagation(); toggleExpandRow(r)\"\n (keydown.enter)=\"$event.stopPropagation(); toggleExpandRow(r)\"\n (keydown.space)=\"$event.preventDefault(); $event.stopPropagation(); toggleExpandRow(r)\"\n >\n <span\n class=\"sdc-table-expandable-chevron\"\n [class.sdc-table-expandable-chevron--open]=\"isRowExpanded(r)\"\n aria-hidden=\"true\"\n ><i class=\"fas fa-chevron-down\"></i></span>\n </button>\n </div>\n @if (isRowExpanded(r)) {\n <div class=\"sdc-table-expandable-details\">\n @for (col of cols; track $index) {\n @if (col.type !== 'checkbox-selection') {\n <div\n class=\"sdc-table-expandable-field\"\n [class.sdc-table-expandable-field--full-width]=\"\n col.type === 'button' || col.type === 'actions'\n \"\n >\n @if (col.type !== 'button' && col.type !== 'actions') {\n <div class=\"sdc-table-expandable-label-wrap\">\n <span class=\"sdc-table-expandable-label\">{{ mobileFieldLabel(col) | translate }}</span>\n </div>\n }\n <div class=\"sdc-table-expandable-value\" [attr.id]=\"resolveCellId(col, row)\">\n <sdc-table-cell-content\n [forceLeftAlign]=\"true\"\n [row]=\"row\"\n [col]=\"col\"\n [cellConfigs]=\"cellsCfg()\"\n [resolveValue]=\"resolveValue\"\n [rowCheckboxId]=\"getRowCheckboxId(row)\"\n [rowLabel]=\"getRowCheckboxLabel(row)\"\n [rowSelectionDisabled]=\"isRowSelectionDisabled(row)\"\n [rowSelected]=\"isRowSelected(row)\"\n [actionsMenuOpen]=\"isActionsMenuOpen(row, col)\"\n [actionsMenuId]=\"isActionsMenuOpen(row, col) ? openMenuState()?.menuId ?? null : null\"\n (toggleRow)=\"onToggleRow(row, $event)\"\n (triggerButtonAction)=\"onButtonClick(row, col)\"\n [defaultTextOverflow]=\"defaultTextOverflow()\"\n (toggleActionsMenu)=\"toggleActionsMenu($event.event, row, col, $event.trigger)\"\n ></sdc-table-cell-content>\n </div>\n </div>\n }\n }\n </div>\n }\n </li>\n }\n }\n </ul>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n ></sdc-empty-state>\n }\n }\n\n @if (showPaginator()) {\n <div class=\"sdc-table-paginator\">\n <sdc-paginator\n [first]=\"first()\"\n [rows]=\"rows()\"\n [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"isMobile() ? [] : rowsPerPageOptions()\"\n [showRowsPerPageSelector]=\"showRowsPerPageSelector()\"\n [isMobile]=\"isMobile()\"\n [totalRecordsLabel]=\"totalRecordsLabel()\"\n (pageChange)=\"onPageChange($event)\"\n ></sdc-paginator>\n </div>\n }\n </div>\n </sdc-loading-state>\n</section>\n\n@if (openMenuState(); as menu) {\n <sdc-table-actions-menu\n [items]=\"menu.items\"\n [menuId]=\"menu.menuId\"\n [top]=\"menu.top\"\n [left]=\"menu.left\"\n [width]=\"menu.width\"\n (close)=\"onMenuClose($event)\"\n (select)=\"onPortalActionClick($event)\"\n ></sdc-table-actions-menu>\n}\n", styles: [":host{display:block;width:100%;box-sizing:border-box}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sdc-table{width:100%;box-sizing:border-box;overflow:visible;background:var(--sdc-table-bg-card)}.sdc-table-shell{display:block;--sdc-table-body-height: 220px;overflow:visible}.sdc-table-loading-wrap{display:block;width:100%;overflow:visible}.sdc-table-caption{width:100%;justify-content:flex-end;display:flex;padding:.75rem 0}.sdc-table-caption__search{width:min(100%,22rem)}.sdc-table-caption__search--full-width{width:100%}.sdc-table-scroll{width:100%;overflow-x:auto;overflow-y:visible}.sdc-table-grid{min-width:var(--sdc-table-min-width, 100%);width:100%;border-collapse:collapse;table-layout:auto}.sdc-table-grid--fit{table-layout:fixed}thead th{padding:var(--sdc-table-padding-cell);background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);-webkit-user-select:none;user-select:none;transition:background var(--sdc-table-transition-fast),border var(--sdc-table-transition-fast);min-height:44px;position:relative;overflow:hidden;text-align:left}thead th.sdc-table-sortable{cursor:pointer}thead th.sdc-table-sortable:hover{background:var(--sdc-table-th-hover-bg)}thead th.sdc-table-sortable-disabled,thead th.sdc-table-header-disabled{cursor:default}thead th.sdc-table-sortable-disabled:focus,thead th.sdc-table-sortable-disabled:focus-visible{outline:none;box-shadow:none}thead th.sdc-table-sortable:focus,thead th.sdc-table-sortable:focus-visible{outline:2px solid var(--sdc-tab-primary, #007bff);outline-offset:-2px;box-shadow:inset 0 0 0 3px #007bff33;position:relative;z-index:1}thead th.sdc-table-is-selected{background:var(--sdc-table-th-selected-bg)!important}thead th.sdc-table-is-selected .sdc-table-sort-overlay{right:.5rem}.sdc-table-th-inner{display:flex;align-items:center;gap:var(--sdc-table-gap-th-inner);width:100%;min-width:0;overflow:hidden;text-align:inherit}.sdc-table-sort-overlay{position:absolute;right:0;top:50%;transform:translateY(-50%)}tbody td{padding:.5rem var(--sdc-table-padding-cell);border-bottom:1px solid var(--sdc-table-border-gray);vertical-align:middle;overflow:visible}.sdc-table-td-val{display:flex;align-items:center;width:100%;min-width:0;overflow:hidden}.sdc-table-td-val--initial-loading{min-height:1.5rem}.sdc-table-initial-loading-row{background:var(--sdc-table-bg-card)}.sdc-table-td--initial-loading{height:3.625rem}.sdc-table-th-label{color:#333!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;display:block;flex:1 1 auto;width:100%;text-align:inherit}.sdc-table-th-inner--sortable{padding-right:1.5rem}.sdc-table-th-tooltip{flex-shrink:0;display:inline-flex;align-items:center}.sdc-table-th-tooltip__icon{font-size:.75rem;color:var(--sdc-table-th-tooltip-icon, #767676);cursor:help}.sdc-table-empty-state{display:flex;align-items:center;justify-content:center;min-height:var(--sdc-table-body-height);padding:0}.sdc-table--loading .sdc-table-shell{pointer-events:none;-webkit-user-select:none;user-select:none}.sdc-table--initial-loading .sdc-table-scroll{overflow-x:hidden}thead th.sdc-table-th-checkbox .sdc-table-th-inner--checkbox{justify-content:center}thead th.sdc-table-th-checkbox .sdc-table-th-center{display:flex;align-items:center;justify-content:center;width:100%}thead th.sdc-table-th-checkbox .sdc-table-th-center input{cursor:pointer;margin:0}thead th.sdc-table-th-checkbox .sdc-table-th-center input:disabled{cursor:not-allowed}.sdc-table-paginator{padding:.5rem 0;position:sticky;bottom:0;z-index:1;background:var(--sdc-table-bg-card)}.sdc-table-td-align-left{text-align:left}.sdc-table-td-align-center{text-align:center}.sdc-table-td-align-right{text-align:right}.sdc-table-th-align-left{text-align:left}.sdc-table-th-align-center{text-align:center}.sdc-table-th-align-right{text-align:right}.sdc-table-cell-content--nowrap .sdc-table-text,.sdc-table-cell-content--nowrap .sdc-table-strong-label,.sdc-table-cell-content--nowrap .sdc-table-code-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}@keyframes sdc-mobile-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.sdc-table-mobile-list{display:flex;flex-direction:column;width:100%;border:1px solid var(--sdc-table-border-gray);border-radius:.5rem;overflow:hidden}.sdc-table-mobile-card{display:flex;flex-direction:column;background:var(--sdc-table-bg-card);border-top:2px solid var(--sdc-table-border-gray)}.sdc-table-mobile-card:first-child{border-top:0}.sdc-table-mobile-field{display:grid;grid-template-columns:minmax(0,7.5rem) minmax(0,1fr);gap:.25rem .75rem;align-items:start;padding:.5rem 1rem;border-top:1px solid var(--sdc-table-border-gray)}.sdc-table-mobile-field:first-child{border-top:0;padding-top:.75rem}.sdc-table-mobile-field:last-child{padding-bottom:.75rem}.sdc-table-mobile-field--selected{background:#11182706}.sdc-table-mobile-field--full-width{grid-template-columns:1fr;gap:.25rem}.sdc-table-mobile-label-wrap,.sdc-table-mobile-value{min-width:0}.sdc-table-mobile-field--full-width>.sdc-table-mobile-label-wrap{display:none}.sdc-table-mobile-label,.sdc-table-mobile-label--sortable{display:flex;align-items:center;justify-content:flex-start;gap:.25rem;width:100%;margin:0;padding:0;border:0;background:transparent;color:var(--sdc-text-muted, #6b7280);font:inherit;font-size:.6875rem;font-weight:500;line-height:1.6;letter-spacing:.015em;text-align:left}.sdc-table-mobile-label--sortable{cursor:pointer}.sdc-table-mobile-label--sortable:focus-visible{outline:2px solid var(--sdc-tab-primary, #428bca);outline-offset:3px;border-radius:.375rem}.sdc-table-mobile-label--loading{width:5.5rem;height:.625rem;border-radius:999px;animation:sdc-mobile-shimmer 1.8s ease infinite;background:linear-gradient(90deg,#94a3b824,#94a3b842,#94a3b824);background-size:200% 100%}.sdc-table-mobile-skeleton{min-height:1.25rem;border-radius:.25rem;animation:sdc-mobile-shimmer 1.8s ease infinite;background:linear-gradient(90deg,#94a3b81a,#94a3b82e,#94a3b81a);background-size:200% 100%}.sdc-table-mobile-value{display:flex;align-items:flex-start;width:100%}@media (max-width: 768px){.sdc-table-caption__search{width:100%}.sdc-table-paginator{justify-content:center!important;border-top:1px solid var(--sdc-table-border-gray)}.sdc-table-mobile-field--sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.sdc-table-mobile-field--sortable:hover{background:#11182705}}@media (max-width: 540px){.sdc-table-mobile-list{border-radius:.375rem}.sdc-table-mobile-field{grid-template-columns:1fr;gap:.125rem;padding:.4375rem .875rem}.sdc-table-mobile-field:first-child{padding-top:.625rem}.sdc-table-mobile-field:last-child{padding-bottom:.625rem}}.sdc-table-expandable-list{display:flex;flex-direction:column;width:100%;list-style:none;margin:0;padding:0;border:1px solid var(--sdc-table-border-gray);border-radius:.5rem;overflow:hidden}.sdc-table-expandable-item{display:flex;flex-direction:column;background:var(--sdc-table-bg-card);border-top:1px solid var(--sdc-table-border-gray)}.sdc-table-expandable-item:first-child{border-top:0}.sdc-table-expandable-summary{display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;cursor:pointer;-webkit-user-select:none;user-select:none}.sdc-table-expandable-summary--loading{pointer-events:none}.sdc-table-expandable-summary:hover{background:#11182705}.sdc-table-expandable-checkbox{flex:0 0 auto}.sdc-table-expandable-summary-fields{display:flex;flex:1 1 0;flex-wrap:wrap;gap:.125rem 1.5rem;min-width:0}.sdc-table-expandable-summary-field{display:flex;flex-direction:column;min-width:0}.sdc-table-expandable-summary-label{color:var(--sdc-text-muted, #6b7280);font-size:.6875rem;font-weight:500;line-height:1.6;letter-spacing:.015em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-table-expandable-summary-value{display:flex;align-items:center;min-width:0}.sdc-table-expandable-toggle{display:flex;align-items:center;justify-content:center;flex:0 0 auto;width:1.75rem;height:1.75rem;padding:0;border:0;border-radius:50%;background:transparent;color:var(--sdc-text-muted, #6b7280);cursor:pointer;transition:color var(--sdc-table-transition-fast, .15s ease),background var(--sdc-table-transition-fast, .15s ease)}.sdc-table-expandable-toggle:focus-visible{outline:2px solid var(--sdc-tab-primary, #428bca);outline-offset:2px}.sdc-table-expandable-toggle:hover{color:var(--sdc-text-default, #111827);background:#1118270f}.sdc-table-expandable-chevron{display:flex;align-items:center;justify-content:center;font-size:.75rem;transition:transform .2s ease}.sdc-table-expandable-label-wrap,.sdc-table-expandable-value{min-width:0}.sdc-table-expandable-details{padding:.375rem 0;border-top:1px solid var(--sdc-table-border-gray);background:#11182704}.sdc-table-expandable-field{display:grid;grid-template-columns:minmax(0,7.5rem) minmax(0,1fr);gap:.25rem .75rem;align-items:start;padding:.375rem 1rem;border-top:1px solid rgba(0,0,0,.04)}.sdc-table-expandable-field--full-width{grid-template-columns:1fr;gap:.25rem}.sdc-table-expandable-field:first-child{border-top:0}.sdc-table-expandable-field--full-width>.sdc-table-expandable-label-wrap{display:none}.sdc-table-expandable-label{display:flex;align-items:center;color:var(--sdc-text-muted, #6b7280);font-size:.6875rem;font-weight:500;line-height:1.6;letter-spacing:.015em}.sdc-table-expandable-value{display:flex;align-items:flex-start;width:100%}.sdc-table-expandable-skeleton-primary{width:55%;max-width:10rem}.sdc-table-expandable-skeleton-secondary{width:35%;max-width:7rem}.sdc-table-expandable-chevron--open{transform:rotate(180deg)}.sdc-table-expandable-item--expanded .sdc-table-expandable-summary{background:#11182706}\n"] }]
|
|
31939
31997
|
}], propDecorators: { cols: [{
|
|
31940
31998
|
type: Input,
|
|
31941
31999
|
args: [{ required: true }]
|
|
@@ -31973,6 +32031,129 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
31973
32031
|
args: ['window:scroll']
|
|
31974
32032
|
}] } });
|
|
31975
32033
|
|
|
32034
|
+
const NESTED_TABLE_DEFAULT_GROUP_TOGGLE_ARIA_LABEL = 'platform.datacore.accessibility_nested_table_group_toggle';
|
|
32035
|
+
const NESTED_TABLE_DEFAULT_HINT_ARIA_LABEL = 'platform.datacore.accessibility_nested_table_hint';
|
|
32036
|
+
const NESTED_TABLE_DEFAULT_ROW_LABEL = 'platform.datacore.accessibility_nested_table_row';
|
|
32037
|
+
|
|
32038
|
+
class NestedTableComponent {
|
|
32039
|
+
translate = inject(TranslateService);
|
|
32040
|
+
instanceId = nextSequentialId('sdc-nested-table');
|
|
32041
|
+
groupPathPartsCache = new Map();
|
|
32042
|
+
groupsSignal = signal([]);
|
|
32043
|
+
openKeysSignal = signal(new Set());
|
|
32044
|
+
configSignal = signal({});
|
|
32045
|
+
groupSortField = signal(null);
|
|
32046
|
+
groupSortOrder = signal(0);
|
|
32047
|
+
set groups(value) {
|
|
32048
|
+
const next = value ?? [];
|
|
32049
|
+
this.groupsSignal.set(next);
|
|
32050
|
+
const validKeys = new Set(next.map((entry) => this.groupKey(entry)));
|
|
32051
|
+
this.openKeysSignal.update((current) => {
|
|
32052
|
+
const filtered = new Set([...current].filter((key) => validKeys.has(key)));
|
|
32053
|
+
return filtered.size === current.size ? current : filtered;
|
|
32054
|
+
});
|
|
32055
|
+
}
|
|
32056
|
+
get groups() {
|
|
32057
|
+
return this.groupsSignal();
|
|
32058
|
+
}
|
|
32059
|
+
groupCols = [];
|
|
32060
|
+
itemCols = [];
|
|
32061
|
+
set config(value) {
|
|
32062
|
+
this.configSignal.set(value ?? {});
|
|
32063
|
+
}
|
|
32064
|
+
get config() {
|
|
32065
|
+
return this.configSignal();
|
|
32066
|
+
}
|
|
32067
|
+
loading = false;
|
|
32068
|
+
ariaLabel = '';
|
|
32069
|
+
groupExpanded = new EventEmitter();
|
|
32070
|
+
groupCollapsed = new EventEmitter();
|
|
32071
|
+
itemAction = new EventEmitter();
|
|
32072
|
+
hintAriaLabel = NESTED_TABLE_DEFAULT_HINT_ARIA_LABEL;
|
|
32073
|
+
rowLabel = NESTED_TABLE_DEFAULT_ROW_LABEL;
|
|
32074
|
+
groupToggleAriaLabel = NESTED_TABLE_DEFAULT_GROUP_TOGGLE_ARIA_LABEL;
|
|
32075
|
+
summaryLabel = computed(() => this.configSignal().summaryLabel ?? '');
|
|
32076
|
+
headerHint = computed(() => this.configSignal().headerHint ?? '');
|
|
32077
|
+
groupCellConfigs = computed(() => buildTableCellConfigMap(this.configSignal().groupTableConfig ?? {}));
|
|
32078
|
+
itemTableConfig = computed(() => this.configSignal().itemTableConfig);
|
|
32079
|
+
resolveGroupValue = (row, path) => getNestedValue(row, path, this.groupPathPartsCache);
|
|
32080
|
+
sortedGroups = computed(() => sortTableRows(this.groupsSignal(), this.groupSortField(), this.groupSortOrder(), (entry, path) => this.resolveGroupValue(entry.group, path)));
|
|
32081
|
+
isSortableColumn(col) {
|
|
32082
|
+
return (col.sortable ?? true) && !!col.field;
|
|
32083
|
+
}
|
|
32084
|
+
isActiveSort(col) {
|
|
32085
|
+
return this.groupSortField() === col.field;
|
|
32086
|
+
}
|
|
32087
|
+
toggleGroupSort(col) {
|
|
32088
|
+
if (!this.isSortableColumn(col) || !col.field) {
|
|
32089
|
+
return;
|
|
32090
|
+
}
|
|
32091
|
+
const next = cycleSortState(this.groupSortField(), this.groupSortOrder(), col.field);
|
|
32092
|
+
this.groupSortField.set(next.field);
|
|
32093
|
+
this.groupSortOrder.set(next.order);
|
|
32094
|
+
}
|
|
32095
|
+
groupKey(entry) {
|
|
32096
|
+
return resolveRowSelectionKey(entry.group);
|
|
32097
|
+
}
|
|
32098
|
+
isOpen(entry) {
|
|
32099
|
+
return this.openKeysSignal().has(this.groupKey(entry));
|
|
32100
|
+
}
|
|
32101
|
+
groupContentId(entry) {
|
|
32102
|
+
return `${this.instanceId}-content-${this.groupKey(entry)}`;
|
|
32103
|
+
}
|
|
32104
|
+
sortHintId(col) {
|
|
32105
|
+
return `${this.instanceId}-sort-hint-${col.field}`;
|
|
32106
|
+
}
|
|
32107
|
+
toggleGroup(entry) {
|
|
32108
|
+
const key = this.groupKey(entry);
|
|
32109
|
+
const next = new Set(this.openKeysSignal());
|
|
32110
|
+
if (next.has(key)) {
|
|
32111
|
+
next.delete(key);
|
|
32112
|
+
this.openKeysSignal.set(next);
|
|
32113
|
+
this.groupCollapsed.emit(entry.group);
|
|
32114
|
+
return;
|
|
32115
|
+
}
|
|
32116
|
+
next.add(key);
|
|
32117
|
+
this.openKeysSignal.set(next);
|
|
32118
|
+
this.groupExpanded.emit(entry.group);
|
|
32119
|
+
}
|
|
32120
|
+
resolveGroupToggleAriaLabel(entry) {
|
|
32121
|
+
const action = resolveTranslatableText(this.translate, this.groupToggleAriaLabel);
|
|
32122
|
+
const verbKey = this.isOpen(entry)
|
|
32123
|
+
? 'platform.datacore.accessibility_panel_collapse'
|
|
32124
|
+
: 'platform.datacore.accessibility_panel_expand';
|
|
32125
|
+
const verb = resolveTranslatableText(this.translate, verbKey);
|
|
32126
|
+
return [action, verb].filter(Boolean).join(' - ');
|
|
32127
|
+
}
|
|
32128
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NestedTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
32129
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: NestedTableComponent, isStandalone: true, selector: "sdc-nested-table", inputs: { groups: "groups", groupCols: "groupCols", itemCols: "itemCols", config: "config", loading: "loading", ariaLabel: "ariaLabel" }, outputs: { groupExpanded: "groupExpanded", groupCollapsed: "groupCollapsed", itemAction: "itemAction" }, ngImport: i0, template: "<div class=\"sdc-nested-table\" [attr.aria-label]=\"ariaLabel || null\">\n @if (summaryLabel() || headerHint()) {\n <div class=\"sdc-nested-table__meta\">\n @if (headerHint()) {\n <sdc-tooltip [pTooltip]=\"headerHint() | translate\" [tooltipPosition]=\"'right'\" [tooltipEvent]=\"'both'\">\n <button type=\"button\" class=\"sdc-nested-table__hint\" [attr.aria-label]=\"hintAriaLabel | translate\">\n <i class=\"fas fa-info-circle sdc-nested-table__hint-icon\" aria-hidden=\"true\"></i>\n </button>\n </sdc-tooltip>\n }\n\n @if (summaryLabel()) {\n <span class=\"sdc-nested-table__summary\">{{ summaryLabel() }}</span>\n }\n </div>\n }\n\n <table class=\"sdc-nested-table__groups\">\n <thead>\n <tr>\n <th class=\"sdc-nested-table__toggle-col\" scope=\"col\">\n <span class=\"sr-only\">{{ groupToggleAriaLabel | translate }}</span>\n </th>\n\n @for (col of groupCols; track $index) {\n <th\n class=\"sdc-nested-table__th\"\n [class.sdc-nested-table__th--sortable]=\"isSortableColumn(col)\"\n scope=\"col\"\n [attr.aria-sort]=\"\n isSortableColumn(col)\n ? isActiveSort(col)\n ? (groupSortOrder() === 1 ? 'ascending' : 'descending')\n : 'none'\n : null\n \"\n [attr.tabindex]=\"isSortableColumn(col) ? 0 : null\"\n [attr.aria-describedby]=\"isSortableColumn(col) ? sortHintId(col) : null\"\n (click)=\"toggleGroupSort(col)\"\n (keydown.enter)=\"toggleGroupSort(col)\"\n (keydown.space)=\"$event.preventDefault(); toggleGroupSort(col)\"\n >\n <span class=\"sdc-nested-table__th-label\">{{ col.header | translate }}</span>\n\n @if (isSortableColumn(col)) {\n <span class=\"sr-only\" [id]=\"sortHintId(col)\">{{\n 'platform.datacore.accessibility_sortable_column' | translate\n }}</span>\n }\n\n @if (col.headerTooltip) {\n <sdc-tooltip\n class=\"sdc-nested-table__th-tooltip\"\n [pTooltip]=\"col.headerTooltip | translate\"\n [tooltipPosition]=\"col.headerTooltipPosition ?? 'top'\"\n [tooltipEvent]=\"col.headerTooltipEvent ?? 'hover'\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <i class=\"fas fa-info-circle\" aria-hidden=\"true\"></i>\n </sdc-tooltip>\n }\n\n <sdc-table-sort-indicator\n [columnField]=\"col.field ?? null\"\n [columnType]=\"col.type\"\n [sortField]=\"groupSortField()\"\n [sortOrder]=\"groupSortOrder()\"\n [sortable]=\"isSortableColumn(col)\"\n ></sdc-table-sort-indicator>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @for (entry of sortedGroups(); track groupKey(entry)) {\n <tr class=\"sdc-nested-table__group-row\">\n <td class=\"sdc-nested-table__toggle-col\">\n <button\n type=\"button\"\n class=\"sdc-nested-table__toggle\"\n [attr.aria-expanded]=\"isOpen(entry)\"\n [attr.aria-controls]=\"groupContentId(entry)\"\n [attr.aria-label]=\"resolveGroupToggleAriaLabel(entry)\"\n (click)=\"toggleGroup(entry)\"\n >\n <i class=\"fas\" [class.fa-plus]=\"!isOpen(entry)\" [class.fa-minus]=\"isOpen(entry)\" aria-hidden=\"true\"></i>\n </button>\n </td>\n\n @for (col of groupCols; track $index) {\n <td class=\"sdc-nested-table__td\">\n <sdc-table-cell-content\n [cellConfigs]=\"groupCellConfigs()\"\n [col]=\"col\"\n [resolveValue]=\"resolveGroupValue\"\n [row]=\"entry.group\"\n [rowLabel]=\"rowLabel\"\n ></sdc-table-cell-content>\n </td>\n }\n </tr>\n\n @if (isOpen(entry)) {\n <tr class=\"sdc-nested-table__item-row\">\n <!-- Celula vazia cobrindo a coluna do botao de abrir. E ela que alinha o\n bloco expandido: ele comeca exatamente onde comeca a primeira coluna de\n dados, porque quem decide esse x e o proprio layout da tabela. Uma\n margem fixa nao serviria - a largura declarada da coluna (2.5rem) e so\n um pedido, e o navegador entrega outra medida conforme o conteudo. -->\n <td class=\"sdc-nested-table__item-spacer\"></td>\n <td class=\"sdc-nested-table__item-cell\" [attr.colspan]=\"groupCols.length\" [id]=\"groupContentId(entry)\">\n <!-- O fundo do bloco expandido fica NESTE painel, nao na celula: assim ele\n nasce colado na coluna de dados e termina na borda da tabela. Com o\n fundo na celula ele ia de borda a borda e o bloco parecia uma tabela\n irma, nao uma tabela dentro da outra. -->\n <div class=\"sdc-nested-table__item-panel\">\n <sdc-table\n [cols]=\"itemCols\"\n [data]=\"entry.items\"\n [config]=\"itemTableConfig() ?? {}\"\n [loading]=\"loading\"\n (action)=\"itemAction.emit($event)\"\n ></sdc-table>\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n</div>\n", styles: [":host{display:block;width:100%;--sdc-nested-table-toggle-col-width: 2.5rem}.sr-only{border-width:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}table{width:100%;border-collapse:collapse}.sdc-nested-table__meta{align-items:center;display:flex;gap:.5rem;margin-bottom:.75rem}.sdc-nested-table__hint{align-items:center;background:transparent;border:0;display:inline-flex;padding:0}.sdc-nested-table__hint:focus-visible{outline:var(--sdc-focus-outline, 2px solid #428bca);outline-offset:2px}.sdc-nested-table__hint-icon{font-size:.875rem;color:var(--sdc-table-th-tooltip-icon, #767676);cursor:help}.sdc-nested-table__summary{background:var(--sdc-nested-table-summary-bg, #eef1f4);border-radius:9999px;color:var(--sdc-text-muted, #4b5563);font-size:.75rem;font-weight:600;padding:.2rem .65rem}.sdc-nested-table__toggle-col{width:var(--sdc-nested-table-toggle-col-width)}.sdc-nested-table__th{background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);min-height:44px;padding:var(--sdc-table-padding-cell, .75rem);position:relative;text-align:left;white-space:nowrap}.sdc-nested-table__th--sortable{cursor:pointer;padding-right:1.75rem}.sdc-nested-table__th-label{margin-right:.35rem}.sdc-nested-table__th-tooltip{display:inline-flex;align-items:center;margin-right:.35rem}.sdc-nested-table__th-tooltip i{font-size:.75rem;color:var(--sdc-table-th-tooltip-icon, #767676);cursor:help}.sdc-nested-table__group-row td{border-bottom:1px solid var(--sdc-table-border-gray, #e5e7eb);padding:.5rem var(--sdc-table-padding-cell, .75rem);vertical-align:middle}.sdc-nested-table__toggle{align-items:center;background:transparent;border:1px solid var(--sdc-border-strong, #d1d5db);border-radius:4px;color:var(--sdc-text-default, #111827);cursor:pointer;display:inline-flex;font-size:.75rem;height:1.5rem;justify-content:center;width:1.5rem}.sdc-nested-table__toggle:focus-visible{outline:var(--sdc-focus-outline, 2px solid #428bca);outline-offset:2px}.sdc-nested-table__item-row td{background:transparent;padding:0}.sdc-nested-table__item-panel{background:var(--sdc-nested-table-item-bg, #eaf2fb);border-radius:var(--sdc-nested-table-item-radius, 4px);margin:0 0 var(--sdc-nested-table-item-inset, 1rem);padding:.75rem}.sdc-nested-table__item-cell ::ng-deep .sdc-table-shell{background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: TableComponent, selector: "sdc-table", inputs: ["cols", "data", "selection", "loading", "loadingIndicator", "config", "ariaLabel"], outputs: ["action", "rowClick", "lazyLoad", "selectionChange"] }, { kind: "component", type: TableCellContentComponent, selector: "sdc-table-cell-content", inputs: ["cellConfigs", "col", "resolveValue", "row", "actionsMenuOpen", "actionsMenuId", "defaultTextOverflow", "rowCheckboxId", "rowLabel", "rowSelectionDisabled", "forceLeftAlign", "rowSelected"], outputs: ["toggleActionsMenu", "toggleRow", "triggerButtonAction"] }, { kind: "component", type: TableSortIndicatorComponent, selector: "sdc-table-sort-indicator", inputs: ["columnField", "columnType", "sortField", "sortOrder", "sortable"] }, { kind: "component", type: TooltipComponent, selector: "sdc-tooltip", inputs: ["pTooltip", "tooltipPosition", "tooltipEvent", "fitContent", "tooltipDisabled", "allowHtml"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
32130
|
+
}
|
|
32131
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NestedTableComponent, decorators: [{
|
|
32132
|
+
type: Component,
|
|
32133
|
+
args: [{ selector: 'sdc-nested-table', standalone: true, imports: [TranslateModule, TableComponent, TableCellContentComponent, TableSortIndicatorComponent, TooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"sdc-nested-table\" [attr.aria-label]=\"ariaLabel || null\">\n @if (summaryLabel() || headerHint()) {\n <div class=\"sdc-nested-table__meta\">\n @if (headerHint()) {\n <sdc-tooltip [pTooltip]=\"headerHint() | translate\" [tooltipPosition]=\"'right'\" [tooltipEvent]=\"'both'\">\n <button type=\"button\" class=\"sdc-nested-table__hint\" [attr.aria-label]=\"hintAriaLabel | translate\">\n <i class=\"fas fa-info-circle sdc-nested-table__hint-icon\" aria-hidden=\"true\"></i>\n </button>\n </sdc-tooltip>\n }\n\n @if (summaryLabel()) {\n <span class=\"sdc-nested-table__summary\">{{ summaryLabel() }}</span>\n }\n </div>\n }\n\n <table class=\"sdc-nested-table__groups\">\n <thead>\n <tr>\n <th class=\"sdc-nested-table__toggle-col\" scope=\"col\">\n <span class=\"sr-only\">{{ groupToggleAriaLabel | translate }}</span>\n </th>\n\n @for (col of groupCols; track $index) {\n <th\n class=\"sdc-nested-table__th\"\n [class.sdc-nested-table__th--sortable]=\"isSortableColumn(col)\"\n scope=\"col\"\n [attr.aria-sort]=\"\n isSortableColumn(col)\n ? isActiveSort(col)\n ? (groupSortOrder() === 1 ? 'ascending' : 'descending')\n : 'none'\n : null\n \"\n [attr.tabindex]=\"isSortableColumn(col) ? 0 : null\"\n [attr.aria-describedby]=\"isSortableColumn(col) ? sortHintId(col) : null\"\n (click)=\"toggleGroupSort(col)\"\n (keydown.enter)=\"toggleGroupSort(col)\"\n (keydown.space)=\"$event.preventDefault(); toggleGroupSort(col)\"\n >\n <span class=\"sdc-nested-table__th-label\">{{ col.header | translate }}</span>\n\n @if (isSortableColumn(col)) {\n <span class=\"sr-only\" [id]=\"sortHintId(col)\">{{\n 'platform.datacore.accessibility_sortable_column' | translate\n }}</span>\n }\n\n @if (col.headerTooltip) {\n <sdc-tooltip\n class=\"sdc-nested-table__th-tooltip\"\n [pTooltip]=\"col.headerTooltip | translate\"\n [tooltipPosition]=\"col.headerTooltipPosition ?? 'top'\"\n [tooltipEvent]=\"col.headerTooltipEvent ?? 'hover'\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <i class=\"fas fa-info-circle\" aria-hidden=\"true\"></i>\n </sdc-tooltip>\n }\n\n <sdc-table-sort-indicator\n [columnField]=\"col.field ?? null\"\n [columnType]=\"col.type\"\n [sortField]=\"groupSortField()\"\n [sortOrder]=\"groupSortOrder()\"\n [sortable]=\"isSortableColumn(col)\"\n ></sdc-table-sort-indicator>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @for (entry of sortedGroups(); track groupKey(entry)) {\n <tr class=\"sdc-nested-table__group-row\">\n <td class=\"sdc-nested-table__toggle-col\">\n <button\n type=\"button\"\n class=\"sdc-nested-table__toggle\"\n [attr.aria-expanded]=\"isOpen(entry)\"\n [attr.aria-controls]=\"groupContentId(entry)\"\n [attr.aria-label]=\"resolveGroupToggleAriaLabel(entry)\"\n (click)=\"toggleGroup(entry)\"\n >\n <i class=\"fas\" [class.fa-plus]=\"!isOpen(entry)\" [class.fa-minus]=\"isOpen(entry)\" aria-hidden=\"true\"></i>\n </button>\n </td>\n\n @for (col of groupCols; track $index) {\n <td class=\"sdc-nested-table__td\">\n <sdc-table-cell-content\n [cellConfigs]=\"groupCellConfigs()\"\n [col]=\"col\"\n [resolveValue]=\"resolveGroupValue\"\n [row]=\"entry.group\"\n [rowLabel]=\"rowLabel\"\n ></sdc-table-cell-content>\n </td>\n }\n </tr>\n\n @if (isOpen(entry)) {\n <tr class=\"sdc-nested-table__item-row\">\n <!-- Celula vazia cobrindo a coluna do botao de abrir. E ela que alinha o\n bloco expandido: ele comeca exatamente onde comeca a primeira coluna de\n dados, porque quem decide esse x e o proprio layout da tabela. Uma\n margem fixa nao serviria - a largura declarada da coluna (2.5rem) e so\n um pedido, e o navegador entrega outra medida conforme o conteudo. -->\n <td class=\"sdc-nested-table__item-spacer\"></td>\n <td class=\"sdc-nested-table__item-cell\" [attr.colspan]=\"groupCols.length\" [id]=\"groupContentId(entry)\">\n <!-- O fundo do bloco expandido fica NESTE painel, nao na celula: assim ele\n nasce colado na coluna de dados e termina na borda da tabela. Com o\n fundo na celula ele ia de borda a borda e o bloco parecia uma tabela\n irma, nao uma tabela dentro da outra. -->\n <div class=\"sdc-nested-table__item-panel\">\n <sdc-table\n [cols]=\"itemCols\"\n [data]=\"entry.items\"\n [config]=\"itemTableConfig() ?? {}\"\n [loading]=\"loading\"\n (action)=\"itemAction.emit($event)\"\n ></sdc-table>\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n</div>\n", styles: [":host{display:block;width:100%;--sdc-nested-table-toggle-col-width: 2.5rem}.sr-only{border-width:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}table{width:100%;border-collapse:collapse}.sdc-nested-table__meta{align-items:center;display:flex;gap:.5rem;margin-bottom:.75rem}.sdc-nested-table__hint{align-items:center;background:transparent;border:0;display:inline-flex;padding:0}.sdc-nested-table__hint:focus-visible{outline:var(--sdc-focus-outline, 2px solid #428bca);outline-offset:2px}.sdc-nested-table__hint-icon{font-size:.875rem;color:var(--sdc-table-th-tooltip-icon, #767676);cursor:help}.sdc-nested-table__summary{background:var(--sdc-nested-table-summary-bg, #eef1f4);border-radius:9999px;color:var(--sdc-text-muted, #4b5563);font-size:.75rem;font-weight:600;padding:.2rem .65rem}.sdc-nested-table__toggle-col{width:var(--sdc-nested-table-toggle-col-width)}.sdc-nested-table__th{background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);min-height:44px;padding:var(--sdc-table-padding-cell, .75rem);position:relative;text-align:left;white-space:nowrap}.sdc-nested-table__th--sortable{cursor:pointer;padding-right:1.75rem}.sdc-nested-table__th-label{margin-right:.35rem}.sdc-nested-table__th-tooltip{display:inline-flex;align-items:center;margin-right:.35rem}.sdc-nested-table__th-tooltip i{font-size:.75rem;color:var(--sdc-table-th-tooltip-icon, #767676);cursor:help}.sdc-nested-table__group-row td{border-bottom:1px solid var(--sdc-table-border-gray, #e5e7eb);padding:.5rem var(--sdc-table-padding-cell, .75rem);vertical-align:middle}.sdc-nested-table__toggle{align-items:center;background:transparent;border:1px solid var(--sdc-border-strong, #d1d5db);border-radius:4px;color:var(--sdc-text-default, #111827);cursor:pointer;display:inline-flex;font-size:.75rem;height:1.5rem;justify-content:center;width:1.5rem}.sdc-nested-table__toggle:focus-visible{outline:var(--sdc-focus-outline, 2px solid #428bca);outline-offset:2px}.sdc-nested-table__item-row td{background:transparent;padding:0}.sdc-nested-table__item-panel{background:var(--sdc-nested-table-item-bg, #eaf2fb);border-radius:var(--sdc-nested-table-item-radius, 4px);margin:0 0 var(--sdc-nested-table-item-inset, 1rem);padding:.75rem}.sdc-nested-table__item-cell ::ng-deep .sdc-table-shell{background:transparent}\n"] }]
|
|
32134
|
+
}], propDecorators: { groups: [{
|
|
32135
|
+
type: Input,
|
|
32136
|
+
args: [{ required: true }]
|
|
32137
|
+
}], groupCols: [{
|
|
32138
|
+
type: Input,
|
|
32139
|
+
args: [{ required: true }]
|
|
32140
|
+
}], itemCols: [{
|
|
32141
|
+
type: Input,
|
|
32142
|
+
args: [{ required: true }]
|
|
32143
|
+
}], config: [{
|
|
32144
|
+
type: Input
|
|
32145
|
+
}], loading: [{
|
|
32146
|
+
type: Input
|
|
32147
|
+
}], ariaLabel: [{
|
|
32148
|
+
type: Input
|
|
32149
|
+
}], groupExpanded: [{
|
|
32150
|
+
type: Output
|
|
32151
|
+
}], groupCollapsed: [{
|
|
32152
|
+
type: Output
|
|
32153
|
+
}], itemAction: [{
|
|
32154
|
+
type: Output
|
|
32155
|
+
}] } });
|
|
32156
|
+
|
|
31976
32157
|
const STATS_CARD_DEFAULT_COLOR = '#339966';
|
|
31977
32158
|
const STATS_CARD_DEFAULT_ICON_CLASS = 'fa fa-bar-chart';
|
|
31978
32159
|
const STATS_CARD_ANIMATION_DURATION_MS = 220;
|
|
@@ -35808,6 +35989,7 @@ function provideFeatures() {
|
|
|
35808
35989
|
{ name: 'sdc-tab-item', component: TabItemComponent },
|
|
35809
35990
|
{ name: 'sdc-stats-card', component: StatsCardComponent },
|
|
35810
35991
|
{ name: 'sdc-table', component: TableComponent },
|
|
35992
|
+
{ name: 'sdc-nested-table', component: NestedTableComponent },
|
|
35811
35993
|
{ name: 'sdc-textarea', component: TextareaComponent },
|
|
35812
35994
|
{ name: 'sdc-textbox', component: TextboxComponent },
|
|
35813
35995
|
{ name: 'sdc-tile', component: TileComponent },
|
|
@@ -41166,6 +41348,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
41166
41348
|
}] } });
|
|
41167
41349
|
|
|
41168
41350
|
const DAYS_IN_WEEK = 7;
|
|
41351
|
+
const MONTHS_IN_YEAR = 12;
|
|
41169
41352
|
const YEARS_PER_PAGE = 12;
|
|
41170
41353
|
const HOUR_FORMAT_12_MAX = 12;
|
|
41171
41354
|
const HOUR_FORMAT_24_MAX = 23;
|
|
@@ -41184,6 +41367,12 @@ class DatepickerComponent extends InputsComponent {
|
|
|
41184
41367
|
max = null;
|
|
41185
41368
|
defaultDate = null;
|
|
41186
41369
|
dateFormat = 'dd/MM/yyyy';
|
|
41370
|
+
// Digitacao no campo, desligada por padrao. Ate aqui o <input> so refletia o que
|
|
41371
|
+
// foi clicado no calendario: nao havia handler de (input), entao o que o usuario
|
|
41372
|
+
// digitava nunca chegava ao componente. Ligar por padrao mudaria o
|
|
41373
|
+
// comportamento de telas que ja contam com o campo ser efetivamente so-leitura,
|
|
41374
|
+
// por isso e opt-in.
|
|
41375
|
+
allowTyping = false;
|
|
41187
41376
|
hourFormat = '24';
|
|
41188
41377
|
minuteStep = 5;
|
|
41189
41378
|
showSeconds = false;
|
|
@@ -41216,13 +41405,25 @@ class DatepickerComponent extends InputsComponent {
|
|
|
41216
41405
|
hours = signal(0);
|
|
41217
41406
|
minutes = signal(0);
|
|
41218
41407
|
seconds = signal(0);
|
|
41408
|
+
// O idioma precisa ser um Signal: os nomes de mes e de dia sao `computed()`, e
|
|
41409
|
+
// computed so recalcula quando um Signal que ele LE muda. Ler translate.currentLang
|
|
41410
|
+
// direto deixaria os nomes congelados no idioma do primeiro render - o
|
|
41411
|
+
// markForCheck do onLangChange (ver ngOnInit) redesenha, mas com o valor velho.
|
|
41412
|
+
// Sem getDefaultLang() aqui: nem toda montagem do TranslateService expoe esse
|
|
41413
|
+
// metodo (o mock do proprio spec deste componente nao expoe), e o fallback de
|
|
41414
|
+
// idioma ja esta nos helpers de Intl mais abaixo.
|
|
41415
|
+
currentLang = signal(this.translate.currentLang ?? '');
|
|
41416
|
+
// Texto enquanto o usuario digita. Nao-nulo apenas durante a digitacao: enquanto
|
|
41417
|
+
// existe, tem precedencia sobre displayValue() no campo, senao a formatacao
|
|
41418
|
+
// reescreveria o texto no meio da digitacao a cada ciclo de deteccao.
|
|
41419
|
+
typedText = signal(null);
|
|
41219
41420
|
// Range selection state
|
|
41220
41421
|
rangeStart = signal(null);
|
|
41221
41422
|
rangeEnd = signal(null);
|
|
41222
41423
|
rangeSelecting = signal(false);
|
|
41223
41424
|
// --- Computed ---
|
|
41224
41425
|
weekDayNames = computed(() => {
|
|
41225
|
-
const days =
|
|
41426
|
+
const days = this.localizedWeekDayNames(this.currentLang());
|
|
41226
41427
|
const shifted = [];
|
|
41227
41428
|
for (let i = 0; i < DAYS_IN_WEEK; i++) {
|
|
41228
41429
|
shifted.push(days[(i + this.firstDayOfWeek) % DAYS_IN_WEEK]);
|
|
@@ -41279,7 +41480,7 @@ class DatepickerComponent extends InputsComponent {
|
|
|
41279
41480
|
// NOTE: plain method for the same reason as `calendarDays` above (depends on `this.value`,
|
|
41280
41481
|
// a non-Signal @Input).
|
|
41281
41482
|
calendarMonths() {
|
|
41282
|
-
const monthNames =
|
|
41483
|
+
const monthNames = this.localizedMonthNames(this.currentLang(), 'short');
|
|
41283
41484
|
const viewD = this.viewDate();
|
|
41284
41485
|
return monthNames.map((name, index) => ({
|
|
41285
41486
|
month: index,
|
|
@@ -41318,9 +41519,12 @@ class DatepickerComponent extends InputsComponent {
|
|
|
41318
41519
|
}
|
|
41319
41520
|
return '';
|
|
41320
41521
|
}
|
|
41522
|
+
// O que o campo mostra: o texto em digitacao, quando ha, senao o valor formatado.
|
|
41523
|
+
inputValue() {
|
|
41524
|
+
return this.typedText() ?? this.displayValue();
|
|
41525
|
+
}
|
|
41321
41526
|
viewMonthYearLabel = computed(() => {
|
|
41322
|
-
const monthNames =
|
|
41323
|
-
'July', 'August', 'September', 'October', 'November', 'December'];
|
|
41527
|
+
const monthNames = this.localizedMonthNames(this.currentLang(), 'long');
|
|
41324
41528
|
const viewD = this.viewDate();
|
|
41325
41529
|
if (this.currentView() === 'years') {
|
|
41326
41530
|
const years = this.yearRange();
|
|
@@ -41334,7 +41538,8 @@ class DatepickerComponent extends InputsComponent {
|
|
|
41334
41538
|
// --- Lifecycle ---
|
|
41335
41539
|
ngOnInit() {
|
|
41336
41540
|
this.initializeViewDate();
|
|
41337
|
-
this.subscriptions.add(this.translate.onLangChange.subscribe(() => {
|
|
41541
|
+
this.subscriptions.add(this.translate.onLangChange.subscribe((evento) => {
|
|
41542
|
+
this.currentLang.set(evento.lang);
|
|
41338
41543
|
this.cdr.markForCheck();
|
|
41339
41544
|
}));
|
|
41340
41545
|
}
|
|
@@ -41405,6 +41610,17 @@ class DatepickerComponent extends InputsComponent {
|
|
|
41405
41610
|
}
|
|
41406
41611
|
}
|
|
41407
41612
|
onInputClick() {
|
|
41613
|
+
// Com digitacao ligada, clicar no campo quer dizer "vou escrever", nao "abra o
|
|
41614
|
+
// calendario" - e o painel ainda cobriria o campo enquanto a pessoa digita. Aqui
|
|
41615
|
+
// o calendario passa a ser so do botao ao lado.
|
|
41616
|
+
//
|
|
41617
|
+
// Preso ao allowTyping de proposito, e nao valendo pra todo mundo: abrir ao
|
|
41618
|
+
// clicar e o comportamento que as telas que ja usam o componente esperam
|
|
41619
|
+
// (showOnFocus e true por padrao), e mudar isso sem o opt-in seria quebrar quem
|
|
41620
|
+
// nunca pediu digitacao.
|
|
41621
|
+
if (this.allowTyping) {
|
|
41622
|
+
return;
|
|
41623
|
+
}
|
|
41408
41624
|
if (this.showOnFocus && !this.disabled) {
|
|
41409
41625
|
this.openPanel();
|
|
41410
41626
|
}
|
|
@@ -41845,6 +42061,140 @@ class DatepickerComponent extends InputsComponent {
|
|
|
41845
42061
|
const firstCurrentMonthDay = days.find(d => d.currentMonth) ?? days[0];
|
|
41846
42062
|
return firstCurrentMonthDay ? this.isSameDay(day.date, firstCurrentMonthDay.date) : false;
|
|
41847
42063
|
}
|
|
42064
|
+
onInputTyping(event) {
|
|
42065
|
+
if (!this.allowTyping) {
|
|
42066
|
+
return;
|
|
42067
|
+
}
|
|
42068
|
+
const input = event.target;
|
|
42069
|
+
const text = this.applyDateMask(input, input.value);
|
|
42070
|
+
this.typedText.set(text);
|
|
42071
|
+
const parsed = this.parseTypedDate(text);
|
|
42072
|
+
// So comita data completa e valida. Com o texto pela metade ("18/0") nao ha o
|
|
42073
|
+
// que commitar, e tambem nao se apaga o que ja existia - limpar a cada tecla
|
|
42074
|
+
// faria o calendario piscar durante a digitacao.
|
|
42075
|
+
if (parsed) {
|
|
42076
|
+
this.viewDate.set(new Date(parsed.getFullYear(), parsed.getMonth(), 1));
|
|
42077
|
+
this.commitDateValue(parsed);
|
|
42078
|
+
}
|
|
42079
|
+
}
|
|
42080
|
+
// Insere os separadores enquanto o usuario digita: 01102006 vira 01/10/2006, e
|
|
42081
|
+
// yyyy-MM-dd produz 2006-10-01 a partir dos mesmos digitos. Quem dita a forma e o
|
|
42082
|
+
// proprio dateFormat - nada de "/" escrito a mao aqui.
|
|
42083
|
+
//
|
|
42084
|
+
// Escreve direto no input, e nao so no signal: o texto que o usuario digitou ja
|
|
42085
|
+
// esta no DOM, e sem reescrever o campo ficaria com os digitos crus ate o proximo
|
|
42086
|
+
// ciclo de deteccao. Mexer no DOM tambem obriga a recolocar o cursor, senao ele
|
|
42087
|
+
// pula pro fim a cada tecla - ver o calculo abaixo.
|
|
42088
|
+
applyDateMask(input, raw) {
|
|
42089
|
+
// So no modo 'date': datetime/time/range/month tem outras partes no formato, e
|
|
42090
|
+
// mascarar por este caminho cortaria a hora.
|
|
42091
|
+
if (this.mode !== 'date' || !this.dateFormatOrder()) {
|
|
42092
|
+
return raw;
|
|
42093
|
+
}
|
|
42094
|
+
const caret = input.selectionStart ?? raw.length;
|
|
42095
|
+
const digitsBeforeCaret = raw.slice(0, caret).replace(/\D/g, '').length;
|
|
42096
|
+
const masked = this.maskByDateFormat(raw);
|
|
42097
|
+
if (masked === raw) {
|
|
42098
|
+
return raw;
|
|
42099
|
+
}
|
|
42100
|
+
input.value = masked;
|
|
42101
|
+
// Recoloca o cursor DEPOIS do mesmo digito em que ele estava, contando digitos e
|
|
42102
|
+
// nao posicoes - os separadores entram e saem conforme o texto cresce, entao a
|
|
42103
|
+
// posicao crua nao se mantem entre um estado e outro.
|
|
42104
|
+
let position = 0;
|
|
42105
|
+
let seen = 0;
|
|
42106
|
+
while (position < masked.length && seen < digitsBeforeCaret) {
|
|
42107
|
+
if (/\d/.test(masked[position])) {
|
|
42108
|
+
seen++;
|
|
42109
|
+
}
|
|
42110
|
+
position++;
|
|
42111
|
+
}
|
|
42112
|
+
input.setSelectionRange(position, position);
|
|
42113
|
+
return masked;
|
|
42114
|
+
}
|
|
42115
|
+
// Percorre o dateFormat colocando um digito onde ha d/M/y e o literal onde ha
|
|
42116
|
+
// separador. Para quando os digitos acabam, entao o separador so aparece junto do
|
|
42117
|
+
// digito seguinte - digitar "01" mostra "01", e o "/" chega com o terceiro numero.
|
|
42118
|
+
maskByDateFormat(raw) {
|
|
42119
|
+
const format = this.dateFormat;
|
|
42120
|
+
const maxDigits = (format.match(/[dMy]/g) ?? []).length;
|
|
42121
|
+
const digits = raw.replace(/\D/g, '').slice(0, maxDigits);
|
|
42122
|
+
let masked = '';
|
|
42123
|
+
let index = 0;
|
|
42124
|
+
for (const char of format) {
|
|
42125
|
+
if (index >= digits.length) {
|
|
42126
|
+
break;
|
|
42127
|
+
}
|
|
42128
|
+
masked += /[dMy]/.test(char) ? digits[index++] : char;
|
|
42129
|
+
}
|
|
42130
|
+
return masked;
|
|
42131
|
+
}
|
|
42132
|
+
// Ao sair do campo o texto em digitacao da lugar ao valor formatado. Texto invalido
|
|
42133
|
+
// ou incompleto some: o campo volta ao ultimo valor valido, em vez de deixar na
|
|
42134
|
+
// tela algo que o componente nao reconhece como data.
|
|
42135
|
+
onInputBlur() {
|
|
42136
|
+
this.typedText.set(null);
|
|
42137
|
+
this.cdr.markForCheck();
|
|
42138
|
+
}
|
|
42139
|
+
// Le a data conforme o dateFormat configurado e valida o DOMINIO, nao so o formato:
|
|
42140
|
+
// 32/13/2026 casa com "dd/MM/yyyy" e nao existe. O Date do JS aceita overflow em
|
|
42141
|
+
// silencio (new Date(2026, 12, 32) vira 01/02/2027), entao a verificacao e de ida e
|
|
42142
|
+
// volta: se o dia, o mes ou o ano mudaram, a entrada era invalida.
|
|
42143
|
+
parseTypedDate(text) {
|
|
42144
|
+
const order = this.dateFormatOrder();
|
|
42145
|
+
const numbers = text.match(/\d+/g);
|
|
42146
|
+
if (!order || !numbers || numbers.length < 3) {
|
|
42147
|
+
return null;
|
|
42148
|
+
}
|
|
42149
|
+
// Ano de 2 digitos nao e aceito: "18/06/26" tanto pode ser 1926 quanto 2026, e
|
|
42150
|
+
// adivinhar produz data errada sem o usuario perceber.
|
|
42151
|
+
if (numbers[order.year].length !== 4) {
|
|
42152
|
+
return null;
|
|
42153
|
+
}
|
|
42154
|
+
const day = Number(numbers[order.day]);
|
|
42155
|
+
const month = Number(numbers[order.month]);
|
|
42156
|
+
const year = Number(numbers[order.year]);
|
|
42157
|
+
const parsed = new Date(year, month - 1, day);
|
|
42158
|
+
const roundTripsBack = parsed.getDate() === day && parsed.getMonth() === month - 1 && parsed.getFullYear() === year;
|
|
42159
|
+
return roundTripsBack ? parsed : null;
|
|
42160
|
+
}
|
|
42161
|
+
// Em que posicao dia, mes e ano aparecem no dateFormat configurado - o campo pode
|
|
42162
|
+
// estar como dd/MM/yyyy, MM/dd/yyyy ou yyyy-MM-dd conforme o locale.
|
|
42163
|
+
dateFormatOrder() {
|
|
42164
|
+
const parts = [
|
|
42165
|
+
{ key: 'day', position: this.dateFormat.indexOf('dd') },
|
|
42166
|
+
{ key: 'month', position: this.dateFormat.indexOf('MM') },
|
|
42167
|
+
{ key: 'year', position: this.dateFormat.indexOf('yyyy') }
|
|
42168
|
+
];
|
|
42169
|
+
if (parts.some((part) => part.position < 0)) {
|
|
42170
|
+
return null;
|
|
42171
|
+
}
|
|
42172
|
+
const sorted = [...parts].sort((a, b) => a.position - b.position);
|
|
42173
|
+
return {
|
|
42174
|
+
day: sorted.findIndex((part) => part.key === 'day'),
|
|
42175
|
+
month: sorted.findIndex((part) => part.key === 'month'),
|
|
42176
|
+
year: sorted.findIndex((part) => part.key === 'year')
|
|
42177
|
+
};
|
|
42178
|
+
}
|
|
42179
|
+
// Os nomes vinham fixos em ingles no codigo. Intl resolve pelo idioma ativo sem
|
|
42180
|
+
// precisar de chave de traducao pra cada mes e cada dia - e e o mesmo caminho que
|
|
42181
|
+
// o chat.component.ts ja usa na lib.
|
|
42182
|
+
//
|
|
42183
|
+
// O ano de referencia e arbitrario: so precisa de um domingo conhecido (2023-01-01)
|
|
42184
|
+
// e de um dia 1 de cada mes.
|
|
42185
|
+
localizedWeekDayNames(lang) {
|
|
42186
|
+
const formatador = new Intl.DateTimeFormat(lang || 'pt', { weekday: 'short' });
|
|
42187
|
+
return Array.from({ length: DAYS_IN_WEEK }, (_, day) => this.semPontoFinal(formatador.format(new Date(2023, 0, 1 + day))));
|
|
42188
|
+
}
|
|
42189
|
+
localizedMonthNames(lang, estilo) {
|
|
42190
|
+
const formatador = new Intl.DateTimeFormat(lang || 'pt', { month: estilo });
|
|
42191
|
+
return Array.from({ length: MONTHS_IN_YEAR }, (_, month) => this.semPontoFinal(formatador.format(new Date(2023, month, 1))));
|
|
42192
|
+
}
|
|
42193
|
+
// pt abrevia com ponto ("jan.", "dom."); no cabecalho do calendario o ponto so
|
|
42194
|
+
// ocupa espaco numa coluna que ja e estreita.
|
|
42195
|
+
semPontoFinal(text) {
|
|
42196
|
+
return text.endsWith('.') ? text.slice(0, -1) : text;
|
|
42197
|
+
}
|
|
41848
42198
|
formatDate(date) {
|
|
41849
42199
|
const d = date.getDate().toString().padStart(2, '0');
|
|
41850
42200
|
const m = (date.getMonth() + 1).toString().padStart(2, '0');
|
|
@@ -41875,7 +42225,7 @@ class DatepickerComponent extends InputsComponent {
|
|
|
41875
42225
|
return n.toString().padStart(2, '0');
|
|
41876
42226
|
}
|
|
41877
42227
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatepickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
41878
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DatepickerComponent, isStandalone: true, selector: "sdc-datepicker", inputs: { mode: "mode", selectionMode: "selectionMode", showIcon: "showIcon", icon: "icon", min: "min", max: "max", defaultDate: "defaultDate", dateFormat: "dateFormat", hourFormat: "hourFormat", minuteStep: "minuteStep", showSeconds: "showSeconds", rangeSeparator: "rangeSeparator", showOnFocus: "showOnFocus", readonlyInput: "readonlyInput", firstDayOfWeek: "firstDayOfWeek", showButtonBar: "showButtonBar", showClear: "showClear", disabledDates: "disabledDates", disabledDays: "disabledDays" }, outputs: { selected: "selected", closed: "closed", monthChange: "monthChange", yearChange: "yearChange" }, providers: [
|
|
42228
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DatepickerComponent, isStandalone: true, selector: "sdc-datepicker", inputs: { mode: "mode", selectionMode: "selectionMode", showIcon: "showIcon", icon: "icon", min: "min", max: "max", defaultDate: "defaultDate", dateFormat: "dateFormat", allowTyping: "allowTyping", hourFormat: "hourFormat", minuteStep: "minuteStep", showSeconds: "showSeconds", rangeSeparator: "rangeSeparator", showOnFocus: "showOnFocus", readonlyInput: "readonlyInput", firstDayOfWeek: "firstDayOfWeek", showButtonBar: "showButtonBar", showClear: "showClear", disabledDates: "disabledDates", disabledDays: "disabledDays" }, outputs: { selected: "selected", closed: "closed", monthChange: "monthChange", yearChange: "yearChange" }, providers: [
|
|
41879
42229
|
{
|
|
41880
42230
|
provide: NG_VALUE_ACCESSOR,
|
|
41881
42231
|
useExisting: forwardRef(() => DatepickerComponent),
|
|
@@ -41886,7 +42236,7 @@ class DatepickerComponent extends InputsComponent {
|
|
|
41886
42236
|
useExisting: forwardRef(() => DatepickerComponent),
|
|
41887
42237
|
multi: true
|
|
41888
42238
|
}
|
|
41889
|
-
], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "triggerRef", first: true, predicate: ["triggerRef"], descendants: true }, { propertyName: "panelContentRef", first: true, predicate: ["panelContentRef"], descendants: true }, { propertyName: "dayButtonRefs", predicate: ["dayBtn"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"sdc-datepicker\">\n @if (labelKey()) {\n <div class=\"sdc-datepicker__label-row\">\n <label class=\"sdc-datepicker__label\" [attr.for]=\"inputId\">\n <span class=\"sdc-datepicker__label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n }\n </span>\n </label>\n </div>\n }\n\n <sdc-popover\n [open]=\"panelOpen\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [matchTriggerWidth]=\"false\"\n [restoreFocusOnClose]=\"false\"\n [trapFocus]=\"true\"\n [ariaLabel]=\"'datepicker.calendar'\"\n panelClass=\"sdc-datepicker-popover-panel\"\n (openChange)=\"onPopoverOpenChange($event)\"\n >\n <div sdc-popover-trigger>\n <div\n class=\"sdc-datepicker__control\"\n #triggerRef\n [class.sdc-datepicker__control--invalid]=\"invalid\"\n [class.sdc-datepicker__control--disabled]=\"disabled\"\n [ngStyle]=\"getInputStyle()\"\n >\n <div class=\"sdc-datepicker__value\">\n <input\n #inputRef\n [id]=\"inputId\"\n class=\"sdc-datepicker__input\"\n type=\"text\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonlyInput\"\n [placeholder]=\"placeholder || dateFormat\"\n [value]=\"displayValue()\"\n [attr.aria-label]=\"labelKey() ? (labelKey() | translate) : placeholder\"\n [attr.aria-expanded]=\"panelOpen\"\n [attr.aria-haspopup]=\"'dialog'\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n (click)=\"onInputClick()\"\n (focus)=\"onInputFocus()\"\n (keydown)=\"onKeydown($event)\"\n />\n </div>\n\n <div class=\"sdc-datepicker__actions\">\n @if (showClear && value) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__icon-button sdc-datepicker__icon-button--clear\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'datepicker.clear' | translate\"\n (click)=\"clearValue(); $event.stopPropagation()\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (showIcon) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__icon-button sdc-datepicker__icon-button--toggle\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'datepicker.calendar' | translate\"\n [attr.aria-expanded]=\"panelOpen\"\n (click)=\"togglePanel(); $event.stopPropagation()\"\n >\n <i [class]=\"icon\" class=\"sdc-datepicker__icon\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n\n <div sdc-popover-content>\n <div\n #panelContentRef\n class=\"sdc-datepicker__panel\"\n (keydown)=\"onOverlayKeydown($event)\"\n [attr.aria-label]=\"'datepicker.calendar' | translate\"\n >\n <!-- Navigation Header -->\n @if (mode !== 'time') {\n <div class=\"sdc-datepicker__header\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__nav-btn\"\n [attr.aria-label]=\"'datepicker.prev' | translate\"\n (click)=\"currentView() === 'days' ? prevMonth() : currentView() === 'months' ? prevYear() : prevYearRange()\"\n >\n <i class=\"fas fa-chevron-left\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-datepicker__title-btn\"\n (click)=\"\n currentView() === 'days'\n ? switchToMonthView()\n : currentView() === 'months' ? switchToYearView() : null\n \"\n >\n {{ viewMonthYearLabel() }}\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-datepicker__nav-btn\"\n [attr.aria-label]=\"'datepicker.next' | translate\"\n (click)=\"currentView() === 'days' ? nextMonth() : currentView() === 'months' ? nextYear() : nextYearRange()\"\n >\n <i class=\"fas fa-chevron-right\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n\n <!-- Days View -->\n @if (currentView() === 'days' && mode !== 'time') {\n <table class=\"sdc-datepicker__calendar\">\n <thead>\n <tr class=\"sdc-datepicker__weekdays\">\n @for (dayName of weekDayNames(); track dayName) {\n <th class=\"sdc-datepicker__weekday\" scope=\"col\">\n {{ dayName }}\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"sdc-datepicker__days\" (keydown)=\"onDaysGridKeydown($event)\">\n @for (week of calendarWeeks(); track $index) {\n <tr>\n @for (day of week; track day.date.getTime()) {\n <td>\n <button\n #dayBtn\n type=\"button\"\n class=\"sdc-datepicker__day\"\n [class.sdc-datepicker__day--other-month]=\"!day.currentMonth\"\n [class.sdc-datepicker__day--today]=\"day.today\"\n [class.sdc-datepicker__day--selected]=\"day.selected\"\n [class.sdc-datepicker__day--disabled]=\"day.disabled\"\n [class.sdc-datepicker__day--in-range]=\"day.inRange\"\n [class.sdc-datepicker__day--range-start]=\"day.rangeStart\"\n [class.sdc-datepicker__day--range-end]=\"day.rangeEnd\"\n [disabled]=\"day.disabled\"\n [attr.aria-label]=\"day.date.toLocaleDateString()\"\n [attr.aria-selected]=\"day.selected\"\n [attr.aria-disabled]=\"day.disabled\"\n [attr.tabindex]=\"isDayTabStop(day) ? 0 : -1\"\n (click)=\"selectDay(day)\"\n >\n {{ day.day }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- Months View -->\n @if (currentView() === 'months') {\n <div class=\"sdc-datepicker__months-grid\">\n @for (m of calendarMonths(); track m.month) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__month-cell\"\n [class.sdc-datepicker__month-cell--selected]=\"m.selected\"\n (click)=\"selectMonth(m.month)\"\n >\n {{ m.name }}\n </button>\n }\n </div>\n }\n\n <!-- Years View -->\n @if (currentView() === 'years') {\n <div class=\"sdc-datepicker__years-grid\">\n @for (year of yearRange(); track year) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__year-cell\"\n [class.sdc-datepicker__year-cell--selected]=\"year === viewDate().getFullYear()\"\n (click)=\"selectYear(year)\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n\n <!-- Time Picker -->\n @if (showTimePicker()) {\n <div class=\"sdc-datepicker__time\">\n <div class=\"sdc-datepicker__time-group\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"incrementHours()\"\n [attr.aria-label]=\"'datepicker.incrementHour' | translate\"\n >\n <i class=\"fas fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"sdc-datepicker__time-value\">{{ padTime(hours()) }}</span>\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"decrementHours()\"\n [attr.aria-label]=\"'datepicker.decrementHour' | translate\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <span class=\"sdc-datepicker__time-separator\">:</span>\n\n <div class=\"sdc-datepicker__time-group\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"incrementMinutes()\"\n [attr.aria-label]=\"'datepicker.incrementMinute' | translate\"\n >\n <i class=\"fas fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"sdc-datepicker__time-value\">{{ padTime(minutes()) }}</span>\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"decrementMinutes()\"\n [attr.aria-label]=\"'datepicker.decrementMinute' | translate\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n @if (showSeconds) {\n <span class=\"sdc-datepicker__time-separator\">:</span>\n <div class=\"sdc-datepicker__time-group\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"incrementSeconds()\"\n [attr.aria-label]=\"'datepicker.incrementSecond' | translate\"\n >\n <i class=\"fas fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"sdc-datepicker__time-value\">{{ padTime(seconds()) }}</span>\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"decrementSeconds()\"\n [attr.aria-label]=\"'datepicker.decrementSecond' | translate\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n\n }\n\n <!-- Footer: Today on the left, Clear + Confirm together on the right -->\n @if (showButtonBar || mode === 'datetime' || mode === 'time') {\n <div class=\"sdc-datepicker__button-bar\">\n <div>\n @if (showButtonBar && mode !== 'time') {\n <button\n type=\"button\"\n class=\"sdc-datepicker__bar-btn\"\n (click)=\"selectToday()\"\n >\n {{ 'datepicker.today' | translate }}\n </button>\n }\n </div>\n\n <div class=\"sdc-datepicker__button-bar-end\">\n @if (showButtonBar) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__bar-btn\"\n (click)=\"clearValue()\"\n >\n {{ 'datepicker.clear' | translate }}\n </button>\n }\n @if (mode === 'datetime' || mode === 'time') {\n <button\n type=\"button\"\n class=\"sdc-datepicker__confirm-btn\"\n (click)=\"confirmDateTime()\"\n >\n {{ 'datepicker.confirm' | translate }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </sdc-popover>\n\n @if (messageKey()) {\n <small\n [ngClass]=\"getInvalidMessageClass()\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{ messageKey() | translate }}\n </small>\n }\n</div>\n", styles: [":host{display:block}.sdc-datepicker__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-datepicker__label{display:inline-flex;align-items:center;margin-bottom:0;line-height:1;padding-top:var(--sdc-datepicker-label-py, var(--sdc-form-label-py, 0));padding-bottom:var(--sdc-datepicker-label-py, var(--sdc-form-label-py, 0));min-width:0}.sdc-datepicker__label-text{display:inline-flex;align-items:center}.required-field{margin-left:var(--sdc-datepicker-required-ml, var(--sdc-form-required-ml, .25rem));color:var(--sdc-datepicker-required-color, var(--sdc-error-color, #dc3545));font-weight:400}.sdc-datepicker__control{display:flex;align-items:stretch;min-height:var(--sdc-datepicker-control-height, var(--sdc-formfield-default-height, 38px));border:1px solid var(--sdc-datepicker-border-color, var(--sdc-formfield-default-border, #ced4da));border-radius:var(--sdc-datepicker-border-radius, var(--sdc-formfield-border-radius, 4px));background:var(--sdc-datepicker-bg, var(--sdc-formfield-default-bg, #fff));box-sizing:border-box;cursor:pointer;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.sdc-datepicker__control:hover{border-color:var(--sdc-datepicker-hover-border, var(--sdc-formfield-focus-color, #007bff))}.sdc-datepicker__control:focus-within{border-color:var(--sdc-datepicker-focus-border, var(--sdc-formfield-focus-color, #007bff));box-shadow:var(--sdc-datepicker-focus-shadow, var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14)))}.sdc-datepicker__control--invalid,.sdc-datepicker__control--invalid:hover,.sdc-datepicker__control--invalid:focus-within{border-color:var(--sdc-datepicker-invalid-border, var(--sdc-formfield-invalid-border, #d98888));box-shadow:var(--sdc-datepicker-invalid-shadow, var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16)))}.sdc-datepicker__control--disabled,.sdc-datepicker__control--disabled:hover{background-color:var(--sdc-datepicker-disabled-bg, var(--sdc-formfield-disabled-bg, #e9ecef));border-color:var(--sdc-datepicker-border-color, var(--sdc-formfield-default-border, #ced4da));box-shadow:none;cursor:not-allowed}.sdc-datepicker__value{display:flex;align-items:center;flex:1 1 auto;min-width:0;padding:0 .75rem}.sdc-datepicker__input{width:100%;min-width:0;border:0;background:transparent;box-shadow:none;outline:0;font:inherit;color:inherit;line-height:var(--sdc-datepicker-input-line-height, var(--sdc-formfield-default-line-height, 1.5));padding:0;cursor:pointer}.sdc-datepicker__input::placeholder{color:var(--sdc-datepicker-placeholder-color, var(--sdc-form-placeholder-color, #9ca3af))}.sdc-datepicker__input:disabled{cursor:not-allowed}.sdc-datepicker__actions{display:flex;align-items:stretch;flex:0 0 auto}.sdc-datepicker__icon{font-size:.875rem}.sdc-datepicker__icon-button{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;border:0;background:transparent;color:var(--sdc-button-icon-default, #333333);cursor:pointer}.sdc-datepicker__icon-button:hover:not(:disabled){background:transparent}.sdc-datepicker__icon-button--clear{min-width:2rem;padding:0 .5rem}.sdc-datepicker__icon-button--toggle{min-width:2.5rem;padding:0 .75rem;border-left:1px solid var(--sdc-formfield-default-border, #ced4da)}.sdc-datepicker__panel{background:var(--sdc-datepicker-panel-bg, #fff);border:1px solid var(--sdc-datepicker-panel-border, #e5e7eb);border-radius:var(--sdc-datepicker-panel-radius, 6px);box-shadow:var(--sdc-datepicker-panel-shadow, 0 4px 12px rgba(0, 0, 0, .1));padding:0;width:var(--sdc-datepicker-panel-width, 280px);outline:none;box-sizing:border-box}.sdc-datepicker__header{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-bottom:1px solid var(--sdc-datepicker-separator-color, #e5e7eb)}.sdc-datepicker__nav-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;background:transparent;border-radius:var(--sdc-datepicker-nav-btn-radius, 50%);color:var(--sdc-datepicker-nav-btn-color, #374151);cursor:pointer;transition:background-color .15s ease}.sdc-datepicker__nav-btn:hover{background-color:var(--sdc-datepicker-nav-btn-hover-bg, rgba(0, 0, 0, .06))}.sdc-datepicker__title-btn{border:0;background:transparent;font-weight:600;font-size:var(--sdc-datepicker-title-font-size, .875rem);color:var(--sdc-datepicker-title-color, #111827);cursor:pointer;padding:.25rem .5rem;border-radius:4px;transition:background-color .15s ease}.sdc-datepicker__title-btn:hover{background-color:var(--sdc-datepicker-title-hover-bg, rgba(0, 0, 0, .04))}.sdc-datepicker__calendar{-webkit-user-select:none;user-select:none;padding:0 .5rem .5rem;border-collapse:collapse;border-spacing:0;width:100%}.sdc-datepicker__weekdays{display:grid;grid-template-columns:repeat(7,1fr);padding-top:.5rem}.sdc-datepicker__weekday{display:flex;align-items:center;justify-content:center;height:32px;font-size:var(--sdc-datepicker-weekday-font-size, .75rem);font-weight:600;color:var(--sdc-datepicker-weekday-color, #6b7280);text-transform:uppercase}.sdc-datepicker__days{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--sdc-datepicker-day-gap, 2px)}.sdc-datepicker__days>tr{display:contents}.sdc-datepicker__days td{padding:0}.sdc-datepicker__day{display:flex;align-items:center;justify-content:center;width:var(--sdc-datepicker-day-size, 32px);height:var(--sdc-datepicker-day-size, 32px);margin:0 auto;border:0;border-radius:var(--sdc-datepicker-day-radius, 50%);background:transparent;font-size:var(--sdc-datepicker-day-font-size, .75rem);color:var(--sdc-datepicker-day-color, #111827);cursor:pointer;transition:background-color .12s ease,color .12s ease;position:relative;padding:0}.sdc-datepicker__day:hover:not(:disabled):not(.sdc-datepicker__day--selected){background-color:var(--sdc-datepicker-day-hover-bg, rgba(0, 0, 0, .06))}.sdc-datepicker__day--other-month{color:var(--sdc-datepicker-day-other-month-color, #d1d5db)}.sdc-datepicker__day--today{border:2px solid var(--sdc-datepicker-today-border-color, var(--sdc-tab-primary, #007bff))}.sdc-datepicker__day--selected{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);font-weight:600}.sdc-datepicker__day--selected:hover{background-color:var(--sdc-datepicker-selected-hover-bg, #0056b3)}.sdc-datepicker__day--disabled{opacity:var(--sdc-datepicker-disabled-opacity, .35);cursor:not-allowed}.sdc-datepicker__day--in-range{background-color:var(--sdc-datepicker-range-bg, rgba(0, 123, 255, .1));border-radius:0}.sdc-datepicker__day--range-start{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);border-radius:var(--sdc-datepicker-day-radius, 50%) 0 0 var(--sdc-datepicker-day-radius, 50%)}.sdc-datepicker__day--range-end{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);border-radius:0 var(--sdc-datepicker-day-radius, 50%) var(--sdc-datepicker-day-radius, 50%) 0}.sdc-datepicker__months-grid,.sdc-datepicker__years-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem;padding:.75rem}.sdc-datepicker__month-cell,.sdc-datepicker__year-cell{display:flex;align-items:center;justify-content:center;padding:.625rem .5rem;border:0;border-radius:var(--sdc-datepicker-cell-radius, 6px);background:transparent;font-size:.8125rem;color:var(--sdc-datepicker-cell-color, #374151);cursor:pointer;transition:background-color .12s ease}.sdc-datepicker__month-cell:hover,.sdc-datepicker__year-cell:hover{background-color:var(--sdc-datepicker-cell-hover-bg, rgba(0, 0, 0, .05))}.sdc-datepicker__month-cell--selected,.sdc-datepicker__year-cell--selected{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);font-weight:600}.sdc-datepicker__time{display:flex;align-items:center;justify-content:center;gap:.25rem;padding:.75rem;border-top:1px solid var(--sdc-datepicker-separator-color, #e5e7eb)}.sdc-datepicker__time-group{display:flex;flex-direction:column;align-items:center;gap:.125rem}.sdc-datepicker__time-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:24px;border:0;background:transparent;border-radius:4px;color:var(--sdc-datepicker-time-btn-color, #6b7280);cursor:pointer;transition:background-color .12s ease}.sdc-datepicker__time-btn:hover{background-color:var(--sdc-datepicker-time-btn-hover-bg, rgba(0, 0, 0, .06))}.sdc-datepicker__time-value{font-size:var(--sdc-datepicker-time-font-size, 1.125rem);font-weight:600;color:var(--sdc-datepicker-time-value-color, #111827);min-width:2ch;text-align:center}.sdc-datepicker__time-separator{font-size:1.125rem;font-weight:600;color:var(--sdc-datepicker-time-separator-color, #6b7280);padding:0 .125rem;align-self:center}.sdc-datepicker__confirm-btn{padding:.25rem .875rem;border:0;border-radius:var(--sdc-datepicker-confirm-btn-radius, 4px);background-color:var(--sdc-datepicker-confirm-btn-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-confirm-btn-color, #fff);font-size:.8125rem;font-weight:600;cursor:pointer;transition:background-color .15s ease}.sdc-datepicker__confirm-btn:hover{background-color:var(--sdc-datepicker-confirm-btn-hover-bg, #0056b3)}.sdc-datepicker__button-bar{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-top:1px solid var(--sdc-datepicker-separator-color, #e5e7eb)}.sdc-datepicker__button-bar-end{display:flex;align-items:center;gap:.5rem}.sdc-datepicker__bar-btn{padding:.25rem .75rem;border:0;border-radius:4px;background:transparent;font-size:.8125rem;font-weight:500;color:var(--sdc-datepicker-bar-btn-color, var(--sdc-tab-primary, #007bff));cursor:pointer;transition:background-color .12s ease}.sdc-datepicker__bar-btn:hover{background-color:var(--sdc-datepicker-bar-btn-hover-bg, rgba(0, 123, 255, .08))}.sdc-datepicker__backdrop{background:transparent}.message{display:block;margin-top:.25rem;font-size:var(--sdc-datepicker-message-font-size, .75rem);color:var(--sdc-datepicker-message-color, #6b7280)}.message.invalid{color:var(--sdc-datepicker-message-invalid-color, var(--sdc-error-color, #dc3545))}::ng-deep .sdc-datepicker-popover-panel{overflow:visible!important;max-width:none!important;max-height:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: PopoverComponent, selector: "sdc-popover", inputs: ["open", "disabled", "toggleOnTriggerClick", "closeOnOutsideClick", "closeOnScroll", "closeOnEscape", "trapFocus", "focusOnOpen", "restoreFocusOnClose", "ariaLabel", "appendTo", "zIndex", "offset", "placement", "role", "matchTriggerWidth", "panelWidth", "panelMinWidth", "panelMaxWidth", "panelMaxHeight", "panelClass"], outputs: ["openChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
42239
|
+
], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "triggerRef", first: true, predicate: ["triggerRef"], descendants: true }, { propertyName: "panelContentRef", first: true, predicate: ["panelContentRef"], descendants: true }, { propertyName: "dayButtonRefs", predicate: ["dayBtn"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"sdc-datepicker\">\n @if (labelKey()) {\n <div class=\"sdc-datepicker__label-row\">\n <label class=\"sdc-datepicker__label\" [attr.for]=\"inputId\">\n <span class=\"sdc-datepicker__label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n }\n </span>\n </label>\n </div>\n }\n\n <sdc-popover\n [open]=\"panelOpen\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [matchTriggerWidth]=\"false\"\n [restoreFocusOnClose]=\"false\"\n [trapFocus]=\"true\"\n [ariaLabel]=\"'datepicker.calendar'\"\n panelClass=\"sdc-datepicker-popover-panel\"\n (openChange)=\"onPopoverOpenChange($event)\"\n >\n <div sdc-popover-trigger>\n <div\n class=\"sdc-datepicker__control\"\n #triggerRef\n [class.sdc-datepicker__control--invalid]=\"invalid\"\n [class.sdc-datepicker__control--disabled]=\"disabled\"\n [ngStyle]=\"getInputStyle()\"\n >\n <div class=\"sdc-datepicker__value\">\n <input\n #inputRef\n [id]=\"inputId\"\n class=\"sdc-datepicker__input\"\n type=\"text\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonlyInput && !allowTyping\"\n [placeholder]=\"placeholder || dateFormat\"\n [value]=\"inputValue()\"\n [attr.aria-label]=\"labelKey() ? (labelKey() | translate) : placeholder\"\n [attr.aria-expanded]=\"panelOpen\"\n [attr.aria-haspopup]=\"'dialog'\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n (click)=\"onInputClick()\"\n (focus)=\"onInputFocus()\"\n (input)=\"onInputTyping($event)\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onKeydown($event)\"\n />\n </div>\n\n <div class=\"sdc-datepicker__actions\">\n @if (showClear && value) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__icon-button sdc-datepicker__icon-button--clear\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'datepicker.clear' | translate\"\n (click)=\"clearValue(); $event.stopPropagation()\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (showIcon) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__icon-button sdc-datepicker__icon-button--toggle\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'datepicker.calendar' | translate\"\n [attr.aria-expanded]=\"panelOpen\"\n (click)=\"togglePanel(); $event.stopPropagation()\"\n >\n <i [class]=\"icon\" class=\"sdc-datepicker__icon\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n\n <div sdc-popover-content>\n <div\n #panelContentRef\n class=\"sdc-datepicker__panel\"\n (keydown)=\"onOverlayKeydown($event)\"\n [attr.aria-label]=\"'datepicker.calendar' | translate\"\n >\n <!-- Navigation Header -->\n @if (mode !== 'time') {\n <div class=\"sdc-datepicker__header\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__nav-btn\"\n [attr.aria-label]=\"'datepicker.prev' | translate\"\n (click)=\"currentView() === 'days' ? prevMonth() : currentView() === 'months' ? prevYear() : prevYearRange()\"\n >\n <i class=\"fas fa-chevron-left\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-datepicker__title-btn\"\n (click)=\"\n currentView() === 'days'\n ? switchToMonthView()\n : currentView() === 'months' ? switchToYearView() : null\n \"\n >\n {{ viewMonthYearLabel() }}\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-datepicker__nav-btn\"\n [attr.aria-label]=\"'datepicker.next' | translate\"\n (click)=\"currentView() === 'days' ? nextMonth() : currentView() === 'months' ? nextYear() : nextYearRange()\"\n >\n <i class=\"fas fa-chevron-right\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n\n <!-- Days View -->\n @if (currentView() === 'days' && mode !== 'time') {\n <table class=\"sdc-datepicker__calendar\">\n <thead>\n <tr class=\"sdc-datepicker__weekdays\">\n @for (dayName of weekDayNames(); track dayName) {\n <th class=\"sdc-datepicker__weekday\" scope=\"col\">\n {{ dayName }}\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"sdc-datepicker__days\" (keydown)=\"onDaysGridKeydown($event)\">\n @for (week of calendarWeeks(); track $index) {\n <tr>\n @for (day of week; track day.date.getTime()) {\n <td>\n <button\n #dayBtn\n type=\"button\"\n class=\"sdc-datepicker__day\"\n [class.sdc-datepicker__day--other-month]=\"!day.currentMonth\"\n [class.sdc-datepicker__day--today]=\"day.today\"\n [class.sdc-datepicker__day--selected]=\"day.selected\"\n [class.sdc-datepicker__day--disabled]=\"day.disabled\"\n [class.sdc-datepicker__day--in-range]=\"day.inRange\"\n [class.sdc-datepicker__day--range-start]=\"day.rangeStart\"\n [class.sdc-datepicker__day--range-end]=\"day.rangeEnd\"\n [disabled]=\"day.disabled\"\n [attr.aria-label]=\"day.date.toLocaleDateString()\"\n [attr.aria-selected]=\"day.selected\"\n [attr.aria-disabled]=\"day.disabled\"\n [attr.tabindex]=\"isDayTabStop(day) ? 0 : -1\"\n (click)=\"selectDay(day)\"\n >\n {{ day.day }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- Months View -->\n @if (currentView() === 'months') {\n <div class=\"sdc-datepicker__months-grid\">\n @for (m of calendarMonths(); track m.month) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__month-cell\"\n [class.sdc-datepicker__month-cell--selected]=\"m.selected\"\n (click)=\"selectMonth(m.month)\"\n >\n {{ m.name }}\n </button>\n }\n </div>\n }\n\n <!-- Years View -->\n @if (currentView() === 'years') {\n <div class=\"sdc-datepicker__years-grid\">\n @for (year of yearRange(); track year) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__year-cell\"\n [class.sdc-datepicker__year-cell--selected]=\"year === viewDate().getFullYear()\"\n (click)=\"selectYear(year)\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n\n <!-- Time Picker -->\n @if (showTimePicker()) {\n <div class=\"sdc-datepicker__time\">\n <div class=\"sdc-datepicker__time-group\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"incrementHours()\"\n [attr.aria-label]=\"'datepicker.incrementHour' | translate\"\n >\n <i class=\"fas fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"sdc-datepicker__time-value\">{{ padTime(hours()) }}</span>\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"decrementHours()\"\n [attr.aria-label]=\"'datepicker.decrementHour' | translate\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <span class=\"sdc-datepicker__time-separator\">:</span>\n\n <div class=\"sdc-datepicker__time-group\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"incrementMinutes()\"\n [attr.aria-label]=\"'datepicker.incrementMinute' | translate\"\n >\n <i class=\"fas fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"sdc-datepicker__time-value\">{{ padTime(minutes()) }}</span>\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"decrementMinutes()\"\n [attr.aria-label]=\"'datepicker.decrementMinute' | translate\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n @if (showSeconds) {\n <span class=\"sdc-datepicker__time-separator\">:</span>\n <div class=\"sdc-datepicker__time-group\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"incrementSeconds()\"\n [attr.aria-label]=\"'datepicker.incrementSecond' | translate\"\n >\n <i class=\"fas fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"sdc-datepicker__time-value\">{{ padTime(seconds()) }}</span>\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"decrementSeconds()\"\n [attr.aria-label]=\"'datepicker.decrementSecond' | translate\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n\n }\n\n <!-- Footer: Today on the left, Clear + Confirm together on the right -->\n @if (showButtonBar || mode === 'datetime' || mode === 'time') {\n <div class=\"sdc-datepicker__button-bar\">\n <div>\n @if (showButtonBar && mode !== 'time') {\n <button\n type=\"button\"\n class=\"sdc-datepicker__bar-btn\"\n (click)=\"selectToday()\"\n >\n {{ 'datepicker.today' | translate }}\n </button>\n }\n </div>\n\n <div class=\"sdc-datepicker__button-bar-end\">\n @if (showButtonBar) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__bar-btn\"\n (click)=\"clearValue()\"\n >\n {{ 'datepicker.clear' | translate }}\n </button>\n }\n @if (mode === 'datetime' || mode === 'time') {\n <button\n type=\"button\"\n class=\"sdc-datepicker__confirm-btn\"\n (click)=\"confirmDateTime()\"\n >\n {{ 'datepicker.confirm' | translate }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </sdc-popover>\n\n @if (messageKey()) {\n <small\n [ngClass]=\"getInvalidMessageClass()\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{ messageKey() | translate }}\n </small>\n }\n</div>\n", styles: [":host{display:block}.sdc-datepicker__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-datepicker__label{display:inline-flex;align-items:center;margin-bottom:0;line-height:1;padding-top:var(--sdc-datepicker-label-py, var(--sdc-form-label-py, 0));padding-bottom:var(--sdc-datepicker-label-py, var(--sdc-form-label-py, 0));min-width:0}.sdc-datepicker__label-text{display:inline-flex;align-items:center}.required-field{margin-left:var(--sdc-datepicker-required-ml, var(--sdc-form-required-ml, .25rem));color:var(--sdc-datepicker-required-color, var(--sdc-error-color, #dc3545));font-weight:400}.sdc-datepicker__control{display:flex;align-items:stretch;min-height:var(--sdc-datepicker-control-height, var(--sdc-formfield-default-height, 38px));border:1px solid var(--sdc-datepicker-border-color, var(--sdc-formfield-default-border, #ced4da));border-radius:var(--sdc-datepicker-border-radius, var(--sdc-formfield-border-radius, 4px));background:var(--sdc-datepicker-bg, var(--sdc-formfield-default-bg, #fff));box-sizing:border-box;cursor:pointer;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.sdc-datepicker__control:hover{border-color:var(--sdc-datepicker-hover-border, var(--sdc-formfield-focus-color, #007bff))}.sdc-datepicker__control:focus-within{border-color:var(--sdc-datepicker-focus-border, var(--sdc-formfield-focus-color, #007bff));box-shadow:var(--sdc-datepicker-focus-shadow, var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14)))}.sdc-datepicker__control--invalid,.sdc-datepicker__control--invalid:hover,.sdc-datepicker__control--invalid:focus-within{border-color:var(--sdc-datepicker-invalid-border, var(--sdc-formfield-invalid-border, #d98888));box-shadow:var(--sdc-datepicker-invalid-shadow, var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16)))}.sdc-datepicker__control--disabled,.sdc-datepicker__control--disabled:hover{background-color:var(--sdc-datepicker-disabled-bg, var(--sdc-formfield-disabled-bg, #e9ecef));border-color:var(--sdc-datepicker-border-color, var(--sdc-formfield-default-border, #ced4da));box-shadow:none;cursor:not-allowed}.sdc-datepicker__value{display:flex;align-items:center;flex:1 1 auto;min-width:0;padding:0 .75rem}.sdc-datepicker__input{width:100%;min-width:0;border:0;background:transparent;box-shadow:none;outline:0;font:inherit;color:inherit;line-height:var(--sdc-datepicker-input-line-height, var(--sdc-formfield-default-line-height, 1.5));padding:0;cursor:pointer}.sdc-datepicker__input::placeholder{color:var(--sdc-datepicker-placeholder-color, var(--sdc-form-placeholder-color, #9ca3af))}.sdc-datepicker__input:disabled{cursor:not-allowed}.sdc-datepicker__actions{display:flex;align-items:stretch;flex:0 0 auto}.sdc-datepicker__icon{font-size:.875rem}.sdc-datepicker__icon-button{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;border:0;background:transparent;color:var(--sdc-button-icon-default, #333333);cursor:pointer}.sdc-datepicker__icon-button:hover:not(:disabled){background:transparent}.sdc-datepicker__icon-button--clear{min-width:2rem;padding:0 .5rem}.sdc-datepicker__icon-button--toggle{min-width:2.5rem;padding:0 .75rem;border-left:1px solid var(--sdc-formfield-default-border, #ced4da)}.sdc-datepicker__panel{background:var(--sdc-datepicker-panel-bg, #fff);border:1px solid var(--sdc-datepicker-panel-border, #e5e7eb);border-radius:var(--sdc-datepicker-panel-radius, 6px);box-shadow:var(--sdc-datepicker-panel-shadow, 0 4px 12px rgba(0, 0, 0, .1));padding:0;width:var(--sdc-datepicker-panel-width, 280px);outline:none;box-sizing:border-box}.sdc-datepicker__header{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-bottom:1px solid var(--sdc-datepicker-separator-color, #e5e7eb)}.sdc-datepicker__nav-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;background:transparent;border-radius:var(--sdc-datepicker-nav-btn-radius, 50%);color:var(--sdc-datepicker-nav-btn-color, #374151);cursor:pointer;transition:background-color .15s ease}.sdc-datepicker__nav-btn:hover{background-color:var(--sdc-datepicker-nav-btn-hover-bg, rgba(0, 0, 0, .06))}.sdc-datepicker__title-btn{border:0;background:transparent;font-weight:600;font-size:var(--sdc-datepicker-title-font-size, .875rem);color:var(--sdc-datepicker-title-color, #111827);cursor:pointer;padding:.25rem .5rem;border-radius:4px;transition:background-color .15s ease}.sdc-datepicker__title-btn:hover{background-color:var(--sdc-datepicker-title-hover-bg, rgba(0, 0, 0, .04))}.sdc-datepicker__calendar{-webkit-user-select:none;user-select:none;padding:0 .5rem .5rem;border-collapse:collapse;border-spacing:0;width:100%}.sdc-datepicker__weekdays{display:grid;grid-template-columns:repeat(7,1fr);padding-top:.5rem}.sdc-datepicker__weekday{display:flex;align-items:center;justify-content:center;height:32px;font-size:var(--sdc-datepicker-weekday-font-size, .75rem);font-weight:600;color:var(--sdc-datepicker-weekday-color, #6b7280);text-transform:uppercase}.sdc-datepicker__days{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--sdc-datepicker-day-gap, 2px)}.sdc-datepicker__days>tr{display:contents}.sdc-datepicker__days td{padding:0}.sdc-datepicker__day{display:flex;align-items:center;justify-content:center;width:var(--sdc-datepicker-day-size, 32px);height:var(--sdc-datepicker-day-size, 32px);margin:0 auto;border:0;border-radius:var(--sdc-datepicker-day-radius, 50%);background:transparent;font-size:var(--sdc-datepicker-day-font-size, .75rem);color:var(--sdc-datepicker-day-color, #111827);cursor:pointer;transition:background-color .12s ease,color .12s ease;position:relative;padding:0}.sdc-datepicker__day:hover:not(:disabled):not(.sdc-datepicker__day--selected){background-color:var(--sdc-datepicker-day-hover-bg, rgba(0, 0, 0, .06))}.sdc-datepicker__day--other-month{color:var(--sdc-datepicker-day-other-month-color, #d1d5db)}.sdc-datepicker__day--today{border:2px solid var(--sdc-datepicker-today-border-color, var(--sdc-tab-primary, #007bff))}.sdc-datepicker__day--selected{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);font-weight:600}.sdc-datepicker__day--selected:hover{background-color:var(--sdc-datepicker-selected-hover-bg, #0056b3)}.sdc-datepicker__day--disabled{opacity:var(--sdc-datepicker-disabled-opacity, .35);cursor:not-allowed}.sdc-datepicker__day--in-range{background-color:var(--sdc-datepicker-range-bg, rgba(0, 123, 255, .1));border-radius:0}.sdc-datepicker__day--range-start{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);border-radius:var(--sdc-datepicker-day-radius, 50%) 0 0 var(--sdc-datepicker-day-radius, 50%)}.sdc-datepicker__day--range-end{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);border-radius:0 var(--sdc-datepicker-day-radius, 50%) var(--sdc-datepicker-day-radius, 50%) 0}.sdc-datepicker__months-grid,.sdc-datepicker__years-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem;padding:.75rem}.sdc-datepicker__month-cell,.sdc-datepicker__year-cell{display:flex;align-items:center;justify-content:center;padding:.625rem .5rem;border:0;border-radius:var(--sdc-datepicker-cell-radius, 6px);background:transparent;font-size:.8125rem;color:var(--sdc-datepicker-cell-color, #374151);cursor:pointer;transition:background-color .12s ease}.sdc-datepicker__month-cell:hover,.sdc-datepicker__year-cell:hover{background-color:var(--sdc-datepicker-cell-hover-bg, rgba(0, 0, 0, .05))}.sdc-datepicker__month-cell--selected,.sdc-datepicker__year-cell--selected{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);font-weight:600}.sdc-datepicker__time{display:flex;align-items:center;justify-content:center;gap:.25rem;padding:.75rem;border-top:1px solid var(--sdc-datepicker-separator-color, #e5e7eb)}.sdc-datepicker__time-group{display:flex;flex-direction:column;align-items:center;gap:.125rem}.sdc-datepicker__time-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:24px;border:0;background:transparent;border-radius:4px;color:var(--sdc-datepicker-time-btn-color, #6b7280);cursor:pointer;transition:background-color .12s ease}.sdc-datepicker__time-btn:hover{background-color:var(--sdc-datepicker-time-btn-hover-bg, rgba(0, 0, 0, .06))}.sdc-datepicker__time-value{font-size:var(--sdc-datepicker-time-font-size, 1.125rem);font-weight:600;color:var(--sdc-datepicker-time-value-color, #111827);min-width:2ch;text-align:center}.sdc-datepicker__time-separator{font-size:1.125rem;font-weight:600;color:var(--sdc-datepicker-time-separator-color, #6b7280);padding:0 .125rem;align-self:center}.sdc-datepicker__confirm-btn{padding:.25rem .875rem;border:0;border-radius:var(--sdc-datepicker-confirm-btn-radius, 4px);background-color:var(--sdc-datepicker-confirm-btn-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-confirm-btn-color, #fff);font-size:.8125rem;font-weight:600;cursor:pointer;transition:background-color .15s ease}.sdc-datepicker__confirm-btn:hover{background-color:var(--sdc-datepicker-confirm-btn-hover-bg, #0056b3)}.sdc-datepicker__button-bar{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-top:1px solid var(--sdc-datepicker-separator-color, #e5e7eb)}.sdc-datepicker__button-bar-end{display:flex;align-items:center;gap:.5rem}.sdc-datepicker__bar-btn{padding:.25rem .75rem;border:0;border-radius:4px;background:transparent;font-size:.8125rem;font-weight:500;color:var(--sdc-datepicker-bar-btn-color, var(--sdc-tab-primary, #007bff));cursor:pointer;transition:background-color .12s ease}.sdc-datepicker__bar-btn:hover{background-color:var(--sdc-datepicker-bar-btn-hover-bg, rgba(0, 123, 255, .08))}.sdc-datepicker__backdrop{background:transparent}.message{display:block;margin-top:.25rem;font-size:var(--sdc-datepicker-message-font-size, .75rem);color:var(--sdc-datepicker-message-color, #6b7280)}.message.invalid{color:var(--sdc-datepicker-message-invalid-color, var(--sdc-error-color, #dc3545))}::ng-deep .sdc-datepicker-popover-panel{overflow:visible!important;max-width:none!important;max-height:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: PopoverComponent, selector: "sdc-popover", inputs: ["open", "disabled", "toggleOnTriggerClick", "closeOnOutsideClick", "closeOnScroll", "closeOnEscape", "trapFocus", "focusOnOpen", "restoreFocusOnClose", "ariaLabel", "appendTo", "zIndex", "offset", "placement", "role", "matchTriggerWidth", "panelWidth", "panelMinWidth", "panelMaxWidth", "panelMaxHeight", "panelClass"], outputs: ["openChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
41890
42240
|
}
|
|
41891
42241
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatepickerComponent, decorators: [{
|
|
41892
42242
|
type: Component,
|
|
@@ -41906,7 +42256,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
41906
42256
|
useExisting: forwardRef(() => DatepickerComponent),
|
|
41907
42257
|
multi: true
|
|
41908
42258
|
}
|
|
41909
|
-
], template: "<div class=\"sdc-datepicker\">\n @if (labelKey()) {\n <div class=\"sdc-datepicker__label-row\">\n <label class=\"sdc-datepicker__label\" [attr.for]=\"inputId\">\n <span class=\"sdc-datepicker__label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n }\n </span>\n </label>\n </div>\n }\n\n <sdc-popover\n [open]=\"panelOpen\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [matchTriggerWidth]=\"false\"\n [restoreFocusOnClose]=\"false\"\n [trapFocus]=\"true\"\n [ariaLabel]=\"'datepicker.calendar'\"\n panelClass=\"sdc-datepicker-popover-panel\"\n (openChange)=\"onPopoverOpenChange($event)\"\n >\n <div sdc-popover-trigger>\n <div\n class=\"sdc-datepicker__control\"\n #triggerRef\n [class.sdc-datepicker__control--invalid]=\"invalid\"\n [class.sdc-datepicker__control--disabled]=\"disabled\"\n [ngStyle]=\"getInputStyle()\"\n >\n <div class=\"sdc-datepicker__value\">\n <input\n #inputRef\n [id]=\"inputId\"\n class=\"sdc-datepicker__input\"\n type=\"text\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonlyInput\"\n [placeholder]=\"placeholder || dateFormat\"\n [value]=\"displayValue()\"\n [attr.aria-label]=\"labelKey() ? (labelKey() | translate) : placeholder\"\n [attr.aria-expanded]=\"panelOpen\"\n [attr.aria-haspopup]=\"'dialog'\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n (click)=\"onInputClick()\"\n (focus)=\"onInputFocus()\"\n (keydown)=\"onKeydown($event)\"\n />\n </div>\n\n <div class=\"sdc-datepicker__actions\">\n @if (showClear && value) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__icon-button sdc-datepicker__icon-button--clear\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'datepicker.clear' | translate\"\n (click)=\"clearValue(); $event.stopPropagation()\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (showIcon) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__icon-button sdc-datepicker__icon-button--toggle\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'datepicker.calendar' | translate\"\n [attr.aria-expanded]=\"panelOpen\"\n (click)=\"togglePanel(); $event.stopPropagation()\"\n >\n <i [class]=\"icon\" class=\"sdc-datepicker__icon\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n\n <div sdc-popover-content>\n <div\n #panelContentRef\n class=\"sdc-datepicker__panel\"\n (keydown)=\"onOverlayKeydown($event)\"\n [attr.aria-label]=\"'datepicker.calendar' | translate\"\n >\n <!-- Navigation Header -->\n @if (mode !== 'time') {\n <div class=\"sdc-datepicker__header\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__nav-btn\"\n [attr.aria-label]=\"'datepicker.prev' | translate\"\n (click)=\"currentView() === 'days' ? prevMonth() : currentView() === 'months' ? prevYear() : prevYearRange()\"\n >\n <i class=\"fas fa-chevron-left\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-datepicker__title-btn\"\n (click)=\"\n currentView() === 'days'\n ? switchToMonthView()\n : currentView() === 'months' ? switchToYearView() : null\n \"\n >\n {{ viewMonthYearLabel() }}\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-datepicker__nav-btn\"\n [attr.aria-label]=\"'datepicker.next' | translate\"\n (click)=\"currentView() === 'days' ? nextMonth() : currentView() === 'months' ? nextYear() : nextYearRange()\"\n >\n <i class=\"fas fa-chevron-right\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n\n <!-- Days View -->\n @if (currentView() === 'days' && mode !== 'time') {\n <table class=\"sdc-datepicker__calendar\">\n <thead>\n <tr class=\"sdc-datepicker__weekdays\">\n @for (dayName of weekDayNames(); track dayName) {\n <th class=\"sdc-datepicker__weekday\" scope=\"col\">\n {{ dayName }}\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"sdc-datepicker__days\" (keydown)=\"onDaysGridKeydown($event)\">\n @for (week of calendarWeeks(); track $index) {\n <tr>\n @for (day of week; track day.date.getTime()) {\n <td>\n <button\n #dayBtn\n type=\"button\"\n class=\"sdc-datepicker__day\"\n [class.sdc-datepicker__day--other-month]=\"!day.currentMonth\"\n [class.sdc-datepicker__day--today]=\"day.today\"\n [class.sdc-datepicker__day--selected]=\"day.selected\"\n [class.sdc-datepicker__day--disabled]=\"day.disabled\"\n [class.sdc-datepicker__day--in-range]=\"day.inRange\"\n [class.sdc-datepicker__day--range-start]=\"day.rangeStart\"\n [class.sdc-datepicker__day--range-end]=\"day.rangeEnd\"\n [disabled]=\"day.disabled\"\n [attr.aria-label]=\"day.date.toLocaleDateString()\"\n [attr.aria-selected]=\"day.selected\"\n [attr.aria-disabled]=\"day.disabled\"\n [attr.tabindex]=\"isDayTabStop(day) ? 0 : -1\"\n (click)=\"selectDay(day)\"\n >\n {{ day.day }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- Months View -->\n @if (currentView() === 'months') {\n <div class=\"sdc-datepicker__months-grid\">\n @for (m of calendarMonths(); track m.month) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__month-cell\"\n [class.sdc-datepicker__month-cell--selected]=\"m.selected\"\n (click)=\"selectMonth(m.month)\"\n >\n {{ m.name }}\n </button>\n }\n </div>\n }\n\n <!-- Years View -->\n @if (currentView() === 'years') {\n <div class=\"sdc-datepicker__years-grid\">\n @for (year of yearRange(); track year) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__year-cell\"\n [class.sdc-datepicker__year-cell--selected]=\"year === viewDate().getFullYear()\"\n (click)=\"selectYear(year)\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n\n <!-- Time Picker -->\n @if (showTimePicker()) {\n <div class=\"sdc-datepicker__time\">\n <div class=\"sdc-datepicker__time-group\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"incrementHours()\"\n [attr.aria-label]=\"'datepicker.incrementHour' | translate\"\n >\n <i class=\"fas fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"sdc-datepicker__time-value\">{{ padTime(hours()) }}</span>\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"decrementHours()\"\n [attr.aria-label]=\"'datepicker.decrementHour' | translate\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <span class=\"sdc-datepicker__time-separator\">:</span>\n\n <div class=\"sdc-datepicker__time-group\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"incrementMinutes()\"\n [attr.aria-label]=\"'datepicker.incrementMinute' | translate\"\n >\n <i class=\"fas fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"sdc-datepicker__time-value\">{{ padTime(minutes()) }}</span>\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"decrementMinutes()\"\n [attr.aria-label]=\"'datepicker.decrementMinute' | translate\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n @if (showSeconds) {\n <span class=\"sdc-datepicker__time-separator\">:</span>\n <div class=\"sdc-datepicker__time-group\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"incrementSeconds()\"\n [attr.aria-label]=\"'datepicker.incrementSecond' | translate\"\n >\n <i class=\"fas fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"sdc-datepicker__time-value\">{{ padTime(seconds()) }}</span>\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"decrementSeconds()\"\n [attr.aria-label]=\"'datepicker.decrementSecond' | translate\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n\n }\n\n <!-- Footer: Today on the left, Clear + Confirm together on the right -->\n @if (showButtonBar || mode === 'datetime' || mode === 'time') {\n <div class=\"sdc-datepicker__button-bar\">\n <div>\n @if (showButtonBar && mode !== 'time') {\n <button\n type=\"button\"\n class=\"sdc-datepicker__bar-btn\"\n (click)=\"selectToday()\"\n >\n {{ 'datepicker.today' | translate }}\n </button>\n }\n </div>\n\n <div class=\"sdc-datepicker__button-bar-end\">\n @if (showButtonBar) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__bar-btn\"\n (click)=\"clearValue()\"\n >\n {{ 'datepicker.clear' | translate }}\n </button>\n }\n @if (mode === 'datetime' || mode === 'time') {\n <button\n type=\"button\"\n class=\"sdc-datepicker__confirm-btn\"\n (click)=\"confirmDateTime()\"\n >\n {{ 'datepicker.confirm' | translate }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </sdc-popover>\n\n @if (messageKey()) {\n <small\n [ngClass]=\"getInvalidMessageClass()\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{ messageKey() | translate }}\n </small>\n }\n</div>\n", styles: [":host{display:block}.sdc-datepicker__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-datepicker__label{display:inline-flex;align-items:center;margin-bottom:0;line-height:1;padding-top:var(--sdc-datepicker-label-py, var(--sdc-form-label-py, 0));padding-bottom:var(--sdc-datepicker-label-py, var(--sdc-form-label-py, 0));min-width:0}.sdc-datepicker__label-text{display:inline-flex;align-items:center}.required-field{margin-left:var(--sdc-datepicker-required-ml, var(--sdc-form-required-ml, .25rem));color:var(--sdc-datepicker-required-color, var(--sdc-error-color, #dc3545));font-weight:400}.sdc-datepicker__control{display:flex;align-items:stretch;min-height:var(--sdc-datepicker-control-height, var(--sdc-formfield-default-height, 38px));border:1px solid var(--sdc-datepicker-border-color, var(--sdc-formfield-default-border, #ced4da));border-radius:var(--sdc-datepicker-border-radius, var(--sdc-formfield-border-radius, 4px));background:var(--sdc-datepicker-bg, var(--sdc-formfield-default-bg, #fff));box-sizing:border-box;cursor:pointer;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.sdc-datepicker__control:hover{border-color:var(--sdc-datepicker-hover-border, var(--sdc-formfield-focus-color, #007bff))}.sdc-datepicker__control:focus-within{border-color:var(--sdc-datepicker-focus-border, var(--sdc-formfield-focus-color, #007bff));box-shadow:var(--sdc-datepicker-focus-shadow, var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14)))}.sdc-datepicker__control--invalid,.sdc-datepicker__control--invalid:hover,.sdc-datepicker__control--invalid:focus-within{border-color:var(--sdc-datepicker-invalid-border, var(--sdc-formfield-invalid-border, #d98888));box-shadow:var(--sdc-datepicker-invalid-shadow, var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16)))}.sdc-datepicker__control--disabled,.sdc-datepicker__control--disabled:hover{background-color:var(--sdc-datepicker-disabled-bg, var(--sdc-formfield-disabled-bg, #e9ecef));border-color:var(--sdc-datepicker-border-color, var(--sdc-formfield-default-border, #ced4da));box-shadow:none;cursor:not-allowed}.sdc-datepicker__value{display:flex;align-items:center;flex:1 1 auto;min-width:0;padding:0 .75rem}.sdc-datepicker__input{width:100%;min-width:0;border:0;background:transparent;box-shadow:none;outline:0;font:inherit;color:inherit;line-height:var(--sdc-datepicker-input-line-height, var(--sdc-formfield-default-line-height, 1.5));padding:0;cursor:pointer}.sdc-datepicker__input::placeholder{color:var(--sdc-datepicker-placeholder-color, var(--sdc-form-placeholder-color, #9ca3af))}.sdc-datepicker__input:disabled{cursor:not-allowed}.sdc-datepicker__actions{display:flex;align-items:stretch;flex:0 0 auto}.sdc-datepicker__icon{font-size:.875rem}.sdc-datepicker__icon-button{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;border:0;background:transparent;color:var(--sdc-button-icon-default, #333333);cursor:pointer}.sdc-datepicker__icon-button:hover:not(:disabled){background:transparent}.sdc-datepicker__icon-button--clear{min-width:2rem;padding:0 .5rem}.sdc-datepicker__icon-button--toggle{min-width:2.5rem;padding:0 .75rem;border-left:1px solid var(--sdc-formfield-default-border, #ced4da)}.sdc-datepicker__panel{background:var(--sdc-datepicker-panel-bg, #fff);border:1px solid var(--sdc-datepicker-panel-border, #e5e7eb);border-radius:var(--sdc-datepicker-panel-radius, 6px);box-shadow:var(--sdc-datepicker-panel-shadow, 0 4px 12px rgba(0, 0, 0, .1));padding:0;width:var(--sdc-datepicker-panel-width, 280px);outline:none;box-sizing:border-box}.sdc-datepicker__header{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-bottom:1px solid var(--sdc-datepicker-separator-color, #e5e7eb)}.sdc-datepicker__nav-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;background:transparent;border-radius:var(--sdc-datepicker-nav-btn-radius, 50%);color:var(--sdc-datepicker-nav-btn-color, #374151);cursor:pointer;transition:background-color .15s ease}.sdc-datepicker__nav-btn:hover{background-color:var(--sdc-datepicker-nav-btn-hover-bg, rgba(0, 0, 0, .06))}.sdc-datepicker__title-btn{border:0;background:transparent;font-weight:600;font-size:var(--sdc-datepicker-title-font-size, .875rem);color:var(--sdc-datepicker-title-color, #111827);cursor:pointer;padding:.25rem .5rem;border-radius:4px;transition:background-color .15s ease}.sdc-datepicker__title-btn:hover{background-color:var(--sdc-datepicker-title-hover-bg, rgba(0, 0, 0, .04))}.sdc-datepicker__calendar{-webkit-user-select:none;user-select:none;padding:0 .5rem .5rem;border-collapse:collapse;border-spacing:0;width:100%}.sdc-datepicker__weekdays{display:grid;grid-template-columns:repeat(7,1fr);padding-top:.5rem}.sdc-datepicker__weekday{display:flex;align-items:center;justify-content:center;height:32px;font-size:var(--sdc-datepicker-weekday-font-size, .75rem);font-weight:600;color:var(--sdc-datepicker-weekday-color, #6b7280);text-transform:uppercase}.sdc-datepicker__days{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--sdc-datepicker-day-gap, 2px)}.sdc-datepicker__days>tr{display:contents}.sdc-datepicker__days td{padding:0}.sdc-datepicker__day{display:flex;align-items:center;justify-content:center;width:var(--sdc-datepicker-day-size, 32px);height:var(--sdc-datepicker-day-size, 32px);margin:0 auto;border:0;border-radius:var(--sdc-datepicker-day-radius, 50%);background:transparent;font-size:var(--sdc-datepicker-day-font-size, .75rem);color:var(--sdc-datepicker-day-color, #111827);cursor:pointer;transition:background-color .12s ease,color .12s ease;position:relative;padding:0}.sdc-datepicker__day:hover:not(:disabled):not(.sdc-datepicker__day--selected){background-color:var(--sdc-datepicker-day-hover-bg, rgba(0, 0, 0, .06))}.sdc-datepicker__day--other-month{color:var(--sdc-datepicker-day-other-month-color, #d1d5db)}.sdc-datepicker__day--today{border:2px solid var(--sdc-datepicker-today-border-color, var(--sdc-tab-primary, #007bff))}.sdc-datepicker__day--selected{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);font-weight:600}.sdc-datepicker__day--selected:hover{background-color:var(--sdc-datepicker-selected-hover-bg, #0056b3)}.sdc-datepicker__day--disabled{opacity:var(--sdc-datepicker-disabled-opacity, .35);cursor:not-allowed}.sdc-datepicker__day--in-range{background-color:var(--sdc-datepicker-range-bg, rgba(0, 123, 255, .1));border-radius:0}.sdc-datepicker__day--range-start{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);border-radius:var(--sdc-datepicker-day-radius, 50%) 0 0 var(--sdc-datepicker-day-radius, 50%)}.sdc-datepicker__day--range-end{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);border-radius:0 var(--sdc-datepicker-day-radius, 50%) var(--sdc-datepicker-day-radius, 50%) 0}.sdc-datepicker__months-grid,.sdc-datepicker__years-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem;padding:.75rem}.sdc-datepicker__month-cell,.sdc-datepicker__year-cell{display:flex;align-items:center;justify-content:center;padding:.625rem .5rem;border:0;border-radius:var(--sdc-datepicker-cell-radius, 6px);background:transparent;font-size:.8125rem;color:var(--sdc-datepicker-cell-color, #374151);cursor:pointer;transition:background-color .12s ease}.sdc-datepicker__month-cell:hover,.sdc-datepicker__year-cell:hover{background-color:var(--sdc-datepicker-cell-hover-bg, rgba(0, 0, 0, .05))}.sdc-datepicker__month-cell--selected,.sdc-datepicker__year-cell--selected{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);font-weight:600}.sdc-datepicker__time{display:flex;align-items:center;justify-content:center;gap:.25rem;padding:.75rem;border-top:1px solid var(--sdc-datepicker-separator-color, #e5e7eb)}.sdc-datepicker__time-group{display:flex;flex-direction:column;align-items:center;gap:.125rem}.sdc-datepicker__time-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:24px;border:0;background:transparent;border-radius:4px;color:var(--sdc-datepicker-time-btn-color, #6b7280);cursor:pointer;transition:background-color .12s ease}.sdc-datepicker__time-btn:hover{background-color:var(--sdc-datepicker-time-btn-hover-bg, rgba(0, 0, 0, .06))}.sdc-datepicker__time-value{font-size:var(--sdc-datepicker-time-font-size, 1.125rem);font-weight:600;color:var(--sdc-datepicker-time-value-color, #111827);min-width:2ch;text-align:center}.sdc-datepicker__time-separator{font-size:1.125rem;font-weight:600;color:var(--sdc-datepicker-time-separator-color, #6b7280);padding:0 .125rem;align-self:center}.sdc-datepicker__confirm-btn{padding:.25rem .875rem;border:0;border-radius:var(--sdc-datepicker-confirm-btn-radius, 4px);background-color:var(--sdc-datepicker-confirm-btn-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-confirm-btn-color, #fff);font-size:.8125rem;font-weight:600;cursor:pointer;transition:background-color .15s ease}.sdc-datepicker__confirm-btn:hover{background-color:var(--sdc-datepicker-confirm-btn-hover-bg, #0056b3)}.sdc-datepicker__button-bar{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-top:1px solid var(--sdc-datepicker-separator-color, #e5e7eb)}.sdc-datepicker__button-bar-end{display:flex;align-items:center;gap:.5rem}.sdc-datepicker__bar-btn{padding:.25rem .75rem;border:0;border-radius:4px;background:transparent;font-size:.8125rem;font-weight:500;color:var(--sdc-datepicker-bar-btn-color, var(--sdc-tab-primary, #007bff));cursor:pointer;transition:background-color .12s ease}.sdc-datepicker__bar-btn:hover{background-color:var(--sdc-datepicker-bar-btn-hover-bg, rgba(0, 123, 255, .08))}.sdc-datepicker__backdrop{background:transparent}.message{display:block;margin-top:.25rem;font-size:var(--sdc-datepicker-message-font-size, .75rem);color:var(--sdc-datepicker-message-color, #6b7280)}.message.invalid{color:var(--sdc-datepicker-message-invalid-color, var(--sdc-error-color, #dc3545))}::ng-deep .sdc-datepicker-popover-panel{overflow:visible!important;max-width:none!important;max-height:none!important}\n"] }]
|
|
42259
|
+
], template: "<div class=\"sdc-datepicker\">\n @if (labelKey()) {\n <div class=\"sdc-datepicker__label-row\">\n <label class=\"sdc-datepicker__label\" [attr.for]=\"inputId\">\n <span class=\"sdc-datepicker__label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n }\n </span>\n </label>\n </div>\n }\n\n <sdc-popover\n [open]=\"panelOpen\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [matchTriggerWidth]=\"false\"\n [restoreFocusOnClose]=\"false\"\n [trapFocus]=\"true\"\n [ariaLabel]=\"'datepicker.calendar'\"\n panelClass=\"sdc-datepicker-popover-panel\"\n (openChange)=\"onPopoverOpenChange($event)\"\n >\n <div sdc-popover-trigger>\n <div\n class=\"sdc-datepicker__control\"\n #triggerRef\n [class.sdc-datepicker__control--invalid]=\"invalid\"\n [class.sdc-datepicker__control--disabled]=\"disabled\"\n [ngStyle]=\"getInputStyle()\"\n >\n <div class=\"sdc-datepicker__value\">\n <input\n #inputRef\n [id]=\"inputId\"\n class=\"sdc-datepicker__input\"\n type=\"text\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonlyInput && !allowTyping\"\n [placeholder]=\"placeholder || dateFormat\"\n [value]=\"inputValue()\"\n [attr.aria-label]=\"labelKey() ? (labelKey() | translate) : placeholder\"\n [attr.aria-expanded]=\"panelOpen\"\n [attr.aria-haspopup]=\"'dialog'\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n (click)=\"onInputClick()\"\n (focus)=\"onInputFocus()\"\n (input)=\"onInputTyping($event)\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onKeydown($event)\"\n />\n </div>\n\n <div class=\"sdc-datepicker__actions\">\n @if (showClear && value) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__icon-button sdc-datepicker__icon-button--clear\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'datepicker.clear' | translate\"\n (click)=\"clearValue(); $event.stopPropagation()\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (showIcon) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__icon-button sdc-datepicker__icon-button--toggle\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'datepicker.calendar' | translate\"\n [attr.aria-expanded]=\"panelOpen\"\n (click)=\"togglePanel(); $event.stopPropagation()\"\n >\n <i [class]=\"icon\" class=\"sdc-datepicker__icon\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n\n <div sdc-popover-content>\n <div\n #panelContentRef\n class=\"sdc-datepicker__panel\"\n (keydown)=\"onOverlayKeydown($event)\"\n [attr.aria-label]=\"'datepicker.calendar' | translate\"\n >\n <!-- Navigation Header -->\n @if (mode !== 'time') {\n <div class=\"sdc-datepicker__header\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__nav-btn\"\n [attr.aria-label]=\"'datepicker.prev' | translate\"\n (click)=\"currentView() === 'days' ? prevMonth() : currentView() === 'months' ? prevYear() : prevYearRange()\"\n >\n <i class=\"fas fa-chevron-left\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-datepicker__title-btn\"\n (click)=\"\n currentView() === 'days'\n ? switchToMonthView()\n : currentView() === 'months' ? switchToYearView() : null\n \"\n >\n {{ viewMonthYearLabel() }}\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-datepicker__nav-btn\"\n [attr.aria-label]=\"'datepicker.next' | translate\"\n (click)=\"currentView() === 'days' ? nextMonth() : currentView() === 'months' ? nextYear() : nextYearRange()\"\n >\n <i class=\"fas fa-chevron-right\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n\n <!-- Days View -->\n @if (currentView() === 'days' && mode !== 'time') {\n <table class=\"sdc-datepicker__calendar\">\n <thead>\n <tr class=\"sdc-datepicker__weekdays\">\n @for (dayName of weekDayNames(); track dayName) {\n <th class=\"sdc-datepicker__weekday\" scope=\"col\">\n {{ dayName }}\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"sdc-datepicker__days\" (keydown)=\"onDaysGridKeydown($event)\">\n @for (week of calendarWeeks(); track $index) {\n <tr>\n @for (day of week; track day.date.getTime()) {\n <td>\n <button\n #dayBtn\n type=\"button\"\n class=\"sdc-datepicker__day\"\n [class.sdc-datepicker__day--other-month]=\"!day.currentMonth\"\n [class.sdc-datepicker__day--today]=\"day.today\"\n [class.sdc-datepicker__day--selected]=\"day.selected\"\n [class.sdc-datepicker__day--disabled]=\"day.disabled\"\n [class.sdc-datepicker__day--in-range]=\"day.inRange\"\n [class.sdc-datepicker__day--range-start]=\"day.rangeStart\"\n [class.sdc-datepicker__day--range-end]=\"day.rangeEnd\"\n [disabled]=\"day.disabled\"\n [attr.aria-label]=\"day.date.toLocaleDateString()\"\n [attr.aria-selected]=\"day.selected\"\n [attr.aria-disabled]=\"day.disabled\"\n [attr.tabindex]=\"isDayTabStop(day) ? 0 : -1\"\n (click)=\"selectDay(day)\"\n >\n {{ day.day }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- Months View -->\n @if (currentView() === 'months') {\n <div class=\"sdc-datepicker__months-grid\">\n @for (m of calendarMonths(); track m.month) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__month-cell\"\n [class.sdc-datepicker__month-cell--selected]=\"m.selected\"\n (click)=\"selectMonth(m.month)\"\n >\n {{ m.name }}\n </button>\n }\n </div>\n }\n\n <!-- Years View -->\n @if (currentView() === 'years') {\n <div class=\"sdc-datepicker__years-grid\">\n @for (year of yearRange(); track year) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__year-cell\"\n [class.sdc-datepicker__year-cell--selected]=\"year === viewDate().getFullYear()\"\n (click)=\"selectYear(year)\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n\n <!-- Time Picker -->\n @if (showTimePicker()) {\n <div class=\"sdc-datepicker__time\">\n <div class=\"sdc-datepicker__time-group\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"incrementHours()\"\n [attr.aria-label]=\"'datepicker.incrementHour' | translate\"\n >\n <i class=\"fas fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"sdc-datepicker__time-value\">{{ padTime(hours()) }}</span>\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"decrementHours()\"\n [attr.aria-label]=\"'datepicker.decrementHour' | translate\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <span class=\"sdc-datepicker__time-separator\">:</span>\n\n <div class=\"sdc-datepicker__time-group\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"incrementMinutes()\"\n [attr.aria-label]=\"'datepicker.incrementMinute' | translate\"\n >\n <i class=\"fas fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"sdc-datepicker__time-value\">{{ padTime(minutes()) }}</span>\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"decrementMinutes()\"\n [attr.aria-label]=\"'datepicker.decrementMinute' | translate\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n @if (showSeconds) {\n <span class=\"sdc-datepicker__time-separator\">:</span>\n <div class=\"sdc-datepicker__time-group\">\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"incrementSeconds()\"\n [attr.aria-label]=\"'datepicker.incrementSecond' | translate\"\n >\n <i class=\"fas fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"sdc-datepicker__time-value\">{{ padTime(seconds()) }}</span>\n <button\n type=\"button\"\n class=\"sdc-datepicker__time-btn\"\n (click)=\"decrementSeconds()\"\n [attr.aria-label]=\"'datepicker.decrementSecond' | translate\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n\n }\n\n <!-- Footer: Today on the left, Clear + Confirm together on the right -->\n @if (showButtonBar || mode === 'datetime' || mode === 'time') {\n <div class=\"sdc-datepicker__button-bar\">\n <div>\n @if (showButtonBar && mode !== 'time') {\n <button\n type=\"button\"\n class=\"sdc-datepicker__bar-btn\"\n (click)=\"selectToday()\"\n >\n {{ 'datepicker.today' | translate }}\n </button>\n }\n </div>\n\n <div class=\"sdc-datepicker__button-bar-end\">\n @if (showButtonBar) {\n <button\n type=\"button\"\n class=\"sdc-datepicker__bar-btn\"\n (click)=\"clearValue()\"\n >\n {{ 'datepicker.clear' | translate }}\n </button>\n }\n @if (mode === 'datetime' || mode === 'time') {\n <button\n type=\"button\"\n class=\"sdc-datepicker__confirm-btn\"\n (click)=\"confirmDateTime()\"\n >\n {{ 'datepicker.confirm' | translate }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </sdc-popover>\n\n @if (messageKey()) {\n <small\n [ngClass]=\"getInvalidMessageClass()\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{ messageKey() | translate }}\n </small>\n }\n</div>\n", styles: [":host{display:block}.sdc-datepicker__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-datepicker__label{display:inline-flex;align-items:center;margin-bottom:0;line-height:1;padding-top:var(--sdc-datepicker-label-py, var(--sdc-form-label-py, 0));padding-bottom:var(--sdc-datepicker-label-py, var(--sdc-form-label-py, 0));min-width:0}.sdc-datepicker__label-text{display:inline-flex;align-items:center}.required-field{margin-left:var(--sdc-datepicker-required-ml, var(--sdc-form-required-ml, .25rem));color:var(--sdc-datepicker-required-color, var(--sdc-error-color, #dc3545));font-weight:400}.sdc-datepicker__control{display:flex;align-items:stretch;min-height:var(--sdc-datepicker-control-height, var(--sdc-formfield-default-height, 38px));border:1px solid var(--sdc-datepicker-border-color, var(--sdc-formfield-default-border, #ced4da));border-radius:var(--sdc-datepicker-border-radius, var(--sdc-formfield-border-radius, 4px));background:var(--sdc-datepicker-bg, var(--sdc-formfield-default-bg, #fff));box-sizing:border-box;cursor:pointer;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.sdc-datepicker__control:hover{border-color:var(--sdc-datepicker-hover-border, var(--sdc-formfield-focus-color, #007bff))}.sdc-datepicker__control:focus-within{border-color:var(--sdc-datepicker-focus-border, var(--sdc-formfield-focus-color, #007bff));box-shadow:var(--sdc-datepicker-focus-shadow, var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14)))}.sdc-datepicker__control--invalid,.sdc-datepicker__control--invalid:hover,.sdc-datepicker__control--invalid:focus-within{border-color:var(--sdc-datepicker-invalid-border, var(--sdc-formfield-invalid-border, #d98888));box-shadow:var(--sdc-datepicker-invalid-shadow, var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16)))}.sdc-datepicker__control--disabled,.sdc-datepicker__control--disabled:hover{background-color:var(--sdc-datepicker-disabled-bg, var(--sdc-formfield-disabled-bg, #e9ecef));border-color:var(--sdc-datepicker-border-color, var(--sdc-formfield-default-border, #ced4da));box-shadow:none;cursor:not-allowed}.sdc-datepicker__value{display:flex;align-items:center;flex:1 1 auto;min-width:0;padding:0 .75rem}.sdc-datepicker__input{width:100%;min-width:0;border:0;background:transparent;box-shadow:none;outline:0;font:inherit;color:inherit;line-height:var(--sdc-datepicker-input-line-height, var(--sdc-formfield-default-line-height, 1.5));padding:0;cursor:pointer}.sdc-datepicker__input::placeholder{color:var(--sdc-datepicker-placeholder-color, var(--sdc-form-placeholder-color, #9ca3af))}.sdc-datepicker__input:disabled{cursor:not-allowed}.sdc-datepicker__actions{display:flex;align-items:stretch;flex:0 0 auto}.sdc-datepicker__icon{font-size:.875rem}.sdc-datepicker__icon-button{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;border:0;background:transparent;color:var(--sdc-button-icon-default, #333333);cursor:pointer}.sdc-datepicker__icon-button:hover:not(:disabled){background:transparent}.sdc-datepicker__icon-button--clear{min-width:2rem;padding:0 .5rem}.sdc-datepicker__icon-button--toggle{min-width:2.5rem;padding:0 .75rem;border-left:1px solid var(--sdc-formfield-default-border, #ced4da)}.sdc-datepicker__panel{background:var(--sdc-datepicker-panel-bg, #fff);border:1px solid var(--sdc-datepicker-panel-border, #e5e7eb);border-radius:var(--sdc-datepicker-panel-radius, 6px);box-shadow:var(--sdc-datepicker-panel-shadow, 0 4px 12px rgba(0, 0, 0, .1));padding:0;width:var(--sdc-datepicker-panel-width, 280px);outline:none;box-sizing:border-box}.sdc-datepicker__header{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-bottom:1px solid var(--sdc-datepicker-separator-color, #e5e7eb)}.sdc-datepicker__nav-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;background:transparent;border-radius:var(--sdc-datepicker-nav-btn-radius, 50%);color:var(--sdc-datepicker-nav-btn-color, #374151);cursor:pointer;transition:background-color .15s ease}.sdc-datepicker__nav-btn:hover{background-color:var(--sdc-datepicker-nav-btn-hover-bg, rgba(0, 0, 0, .06))}.sdc-datepicker__title-btn{border:0;background:transparent;font-weight:600;font-size:var(--sdc-datepicker-title-font-size, .875rem);color:var(--sdc-datepicker-title-color, #111827);cursor:pointer;padding:.25rem .5rem;border-radius:4px;transition:background-color .15s ease}.sdc-datepicker__title-btn:hover{background-color:var(--sdc-datepicker-title-hover-bg, rgba(0, 0, 0, .04))}.sdc-datepicker__calendar{-webkit-user-select:none;user-select:none;padding:0 .5rem .5rem;border-collapse:collapse;border-spacing:0;width:100%}.sdc-datepicker__weekdays{display:grid;grid-template-columns:repeat(7,1fr);padding-top:.5rem}.sdc-datepicker__weekday{display:flex;align-items:center;justify-content:center;height:32px;font-size:var(--sdc-datepicker-weekday-font-size, .75rem);font-weight:600;color:var(--sdc-datepicker-weekday-color, #6b7280);text-transform:uppercase}.sdc-datepicker__days{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--sdc-datepicker-day-gap, 2px)}.sdc-datepicker__days>tr{display:contents}.sdc-datepicker__days td{padding:0}.sdc-datepicker__day{display:flex;align-items:center;justify-content:center;width:var(--sdc-datepicker-day-size, 32px);height:var(--sdc-datepicker-day-size, 32px);margin:0 auto;border:0;border-radius:var(--sdc-datepicker-day-radius, 50%);background:transparent;font-size:var(--sdc-datepicker-day-font-size, .75rem);color:var(--sdc-datepicker-day-color, #111827);cursor:pointer;transition:background-color .12s ease,color .12s ease;position:relative;padding:0}.sdc-datepicker__day:hover:not(:disabled):not(.sdc-datepicker__day--selected){background-color:var(--sdc-datepicker-day-hover-bg, rgba(0, 0, 0, .06))}.sdc-datepicker__day--other-month{color:var(--sdc-datepicker-day-other-month-color, #d1d5db)}.sdc-datepicker__day--today{border:2px solid var(--sdc-datepicker-today-border-color, var(--sdc-tab-primary, #007bff))}.sdc-datepicker__day--selected{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);font-weight:600}.sdc-datepicker__day--selected:hover{background-color:var(--sdc-datepicker-selected-hover-bg, #0056b3)}.sdc-datepicker__day--disabled{opacity:var(--sdc-datepicker-disabled-opacity, .35);cursor:not-allowed}.sdc-datepicker__day--in-range{background-color:var(--sdc-datepicker-range-bg, rgba(0, 123, 255, .1));border-radius:0}.sdc-datepicker__day--range-start{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);border-radius:var(--sdc-datepicker-day-radius, 50%) 0 0 var(--sdc-datepicker-day-radius, 50%)}.sdc-datepicker__day--range-end{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);border-radius:0 var(--sdc-datepicker-day-radius, 50%) var(--sdc-datepicker-day-radius, 50%) 0}.sdc-datepicker__months-grid,.sdc-datepicker__years-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem;padding:.75rem}.sdc-datepicker__month-cell,.sdc-datepicker__year-cell{display:flex;align-items:center;justify-content:center;padding:.625rem .5rem;border:0;border-radius:var(--sdc-datepicker-cell-radius, 6px);background:transparent;font-size:.8125rem;color:var(--sdc-datepicker-cell-color, #374151);cursor:pointer;transition:background-color .12s ease}.sdc-datepicker__month-cell:hover,.sdc-datepicker__year-cell:hover{background-color:var(--sdc-datepicker-cell-hover-bg, rgba(0, 0, 0, .05))}.sdc-datepicker__month-cell--selected,.sdc-datepicker__year-cell--selected{background-color:var(--sdc-datepicker-selected-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-selected-color, #fff);font-weight:600}.sdc-datepicker__time{display:flex;align-items:center;justify-content:center;gap:.25rem;padding:.75rem;border-top:1px solid var(--sdc-datepicker-separator-color, #e5e7eb)}.sdc-datepicker__time-group{display:flex;flex-direction:column;align-items:center;gap:.125rem}.sdc-datepicker__time-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:24px;border:0;background:transparent;border-radius:4px;color:var(--sdc-datepicker-time-btn-color, #6b7280);cursor:pointer;transition:background-color .12s ease}.sdc-datepicker__time-btn:hover{background-color:var(--sdc-datepicker-time-btn-hover-bg, rgba(0, 0, 0, .06))}.sdc-datepicker__time-value{font-size:var(--sdc-datepicker-time-font-size, 1.125rem);font-weight:600;color:var(--sdc-datepicker-time-value-color, #111827);min-width:2ch;text-align:center}.sdc-datepicker__time-separator{font-size:1.125rem;font-weight:600;color:var(--sdc-datepicker-time-separator-color, #6b7280);padding:0 .125rem;align-self:center}.sdc-datepicker__confirm-btn{padding:.25rem .875rem;border:0;border-radius:var(--sdc-datepicker-confirm-btn-radius, 4px);background-color:var(--sdc-datepicker-confirm-btn-bg, var(--sdc-tab-primary, #007bff));color:var(--sdc-datepicker-confirm-btn-color, #fff);font-size:.8125rem;font-weight:600;cursor:pointer;transition:background-color .15s ease}.sdc-datepicker__confirm-btn:hover{background-color:var(--sdc-datepicker-confirm-btn-hover-bg, #0056b3)}.sdc-datepicker__button-bar{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-top:1px solid var(--sdc-datepicker-separator-color, #e5e7eb)}.sdc-datepicker__button-bar-end{display:flex;align-items:center;gap:.5rem}.sdc-datepicker__bar-btn{padding:.25rem .75rem;border:0;border-radius:4px;background:transparent;font-size:.8125rem;font-weight:500;color:var(--sdc-datepicker-bar-btn-color, var(--sdc-tab-primary, #007bff));cursor:pointer;transition:background-color .12s ease}.sdc-datepicker__bar-btn:hover{background-color:var(--sdc-datepicker-bar-btn-hover-bg, rgba(0, 123, 255, .08))}.sdc-datepicker__backdrop{background:transparent}.message{display:block;margin-top:.25rem;font-size:var(--sdc-datepicker-message-font-size, .75rem);color:var(--sdc-datepicker-message-color, #6b7280)}.message.invalid{color:var(--sdc-datepicker-message-invalid-color, var(--sdc-error-color, #dc3545))}::ng-deep .sdc-datepicker-popover-panel{overflow:visible!important;max-width:none!important;max-height:none!important}\n"] }]
|
|
41910
42260
|
}], propDecorators: { mode: [{
|
|
41911
42261
|
type: Input
|
|
41912
42262
|
}], selectionMode: [{
|
|
@@ -41923,6 +42273,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
41923
42273
|
type: Input
|
|
41924
42274
|
}], dateFormat: [{
|
|
41925
42275
|
type: Input
|
|
42276
|
+
}], allowTyping: [{
|
|
42277
|
+
type: Input
|
|
41926
42278
|
}], hourFormat: [{
|
|
41927
42279
|
type: Input
|
|
41928
42280
|
}], minuteStep: [{
|
|
@@ -43206,5 +43558,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
43206
43558
|
* Generated bundle index. Do not edit.
|
|
43207
43559
|
*/
|
|
43208
43560
|
|
|
43209
|
-
export { ACCORDION_DEFAULT_ACTION_ARIA_LABEL, ACCORDION_DEFAULT_CACHE, ACCORDION_DEFAULT_INFO_ARIA_LABEL, ACCORDION_DEFAULT_MULTIPLE, ACCORDION_DEFAULT_SWITCH_ARIA_LABEL, ACCORDION_DEFAULT_TOGGLE_ARIA_LABEL, ACCORDION_DEFAULT_VALIDATION_ICON, ACCORDION_DEFAULT_VALIDATION_ICON_COLOR, ALERT_DEFAULT_CLOSE_ARIA_LABEL, ALERT_DEFAULT_SEVERITY, AUTOCOMPLETE_DEFAULT_DELAY, AUTOCOMPLETE_DEFAULT_EMPTY_MESSAGE_KEY, AUTOCOMPLETE_DEFAULT_MIN_LENGTH, AUTOCOMPLETE_DEFAULT_PLACEHOLDER_KEY, AccordionComponent, AccordionItemComponent, AlertComponent, AutocompleteComponent, BADGE_DEFAULT_COLOR, BADGE_DEFAULT_ICON_POSITION, BADGE_DEFAULT_INFO_ARIA_LABEL, BADGE_DEFAULT_TYPE, BIGNUMBER_INPUT_DEFAULT_PRECISION, BIGNUMBER_INPUT_DEFAULT_SCALE, BREADCRUMB_ACTIVE_EXACT_OPTIONS, BREADCRUMB_ACTIVE_SUBSET_OPTIONS, BREADCRUMB_DEFAULT_TARGET_HOME, BREADCRUMB_HOME_ICON_CLASS, BREADCRUMB_INDEX_ZERO, BadgeComponent, BignumberInputComponent, BreadcrumbComponent, ButtonComponent, CALENDAR_MASK_DEFAULT_FORMAT, CARD_COLLAPSE_CATEGORY_ARIA_LABEL_KEY, CARD_COLLAPSE_DESCRIPTION_ARIA_LABEL_KEY, CARD_COLLAPSE_NAME_ARIA_LABEL_KEY, CARD_DEFAULT_CATEGORY_MAX_LENGTH, CARD_DEFAULT_DESCRIPTION_MAX_LENGTH, CARD_DEFAULT_NAME_MAX_LENGTH, CARD_EXPAND_CATEGORY_ARIA_LABEL_KEY, CARD_EXPAND_DESCRIPTION_ARIA_LABEL_KEY, CARD_EXPAND_NAME_ARIA_LABEL_KEY, CARD_LIST_FIRST_PAGE, CARD_LIST_MIN_ROWS, CARD_LIST_MIN_SKELETON_CARDS, CARD_SHOW_LESS_LABEL_KEY, CARD_SURFACE_DEFAULT_BANNER_ALT_KEY, CARD_SURFACE_TEMPLATE_BODY, CARD_SURFACE_TEMPLATE_FOOTER, CARD_SURFACE_TEMPLATE_HEADER, CHIPS_DEFAULT_INPUT_ID_PREFIX, CHIPS_DEFAULT_MAX, CHIPS_DEFAULT_MAX_LENGTH, CHIPS_DEFAULT_MAX_LENGTH_WITHOUT_TOOLTIP, CHIPS_DEFAULT_REMOVE_ARIA_LABEL, CODE_EDITOR_COPY_ERROR_MESSAGE_KEY, CODE_EDITOR_COPY_ERROR_TITLE_KEY, CODE_EDITOR_COPY_SUCCESS_MESSAGE_KEY, CODE_EDITOR_COPY_SUCCESS_TITLE_KEY, CODE_EDITOR_DEFAULT_LANGUAGE, COLLAPSE_LINK_DEFAULT_COLLAPSED_LABEL, COLLAPSE_LINK_DEFAULT_EXPANDED_LABEL, COLOR_PICKER_ACCESSIBLE_LABEL_KEY, COLOR_PICKER_DEFAULT_COLOR, COLOR_PICKER_DEFAULT_PLACEHOLDER, COLOR_PICKER_TRIGGER_LABEL_KEY, COMBOBOX_CLEAR_FIELD_LABEL_KEY, COMBOBOX_DEFAULT_MAX_SELECTED_LABELS, COMBOBOX_DEFAULT_PANEL_MAX_HEIGHT, COMBOBOX_DEFAULT_Z_INDEX, COMBOBOX_EMPTY_TEXT_KEY, COMBOBOX_EMPTY_TITLE_KEY, COMBOBOX_REMOVE_CHIP_LABEL_KEY, COMBOBOX_SELECTED_ITEMS_LABEL_KEY, CONSTANTS, CONTEXT_SELECTOR_DEFAULT_FOOTER_BUTTON_LABEL_KEY, CONTROL_ERRORS_DEFAULT_SHOW_WHEN, COUNTRY_PHONE_PICKER_DEFAULT_COUNTRIES, COUNTRY_PHONE_PICKER_DEFAULT_ORDINATION, CURRENCY_INPUT_DEFAULT_CODE, CURRENCY_SCALE_BY_CODE, CalendarMaskComponent, CardComponent, CardListComponent, CardTemplateDirective, ChatComponent, CheckboxComponent, CheckboxListComponent, ChipsComponent, CodeEditorComponent, CollapseLinkComponent, ColorPickerComponent, ComboboxComponent, ConfirmComponent, ContextSelectorComponent, ControlErrorsComponent, CountryPhonePickerComponent, CurrencyComponent, DEFAULT_CARD_LIST_OPTIONS, DEFAULT_CURRENCY_CODE, DEFAULT_FALSE_BOOLEAN_STRINGS, DEFAULT_HYPERLINK_APPEARANCE, DEFAULT_HYPERLINK_ARIA_LABEL, DEFAULT_HYPERLINK_BUTTON_HOVER_PADDING, DEFAULT_HYPERLINK_BUTTON_HOVER_RADIUS, DEFAULT_HYPERLINK_DISABLED, DEFAULT_HYPERLINK_DOMAIN_FILTER_TOKEN, DEFAULT_HYPERLINK_HOVER_STYLE, DEFAULT_HYPERLINK_HREF, DEFAULT_HYPERLINK_ICON, DEFAULT_HYPERLINK_ICON_POSITION, DEFAULT_HYPERLINK_REL, DEFAULT_HYPERLINK_TARGET, DEFAULT_HYPERLINK_TEXT, DEFAULT_HYPERLINK_UNDERLINE, DEFAULT_LOADING_STATE_BLOCK_DELAY_MS, DEFAULT_LOADING_STATE_FULLSCREEN_Z_INDEX, DEFAULT_LOADING_STATE_ID_PREFIX, DEFAULT_LOADING_STATE_INDICATOR, DEFAULT_LOADING_STATE_UNBLOCK_DELAY_MS, DEFAULT_MODAL_CLOSABLE, DEFAULT_MODAL_FOOTER_BUTTONS, DEFAULT_MODAL_HEADER, DEFAULT_MODAL_HEIGHT, DEFAULT_MODAL_ID_PREFIX, DEFAULT_MODAL_MAXIMIZABLE, DEFAULT_MODAL_MAXIMIZE, DEFAULT_MODAL_RESIZABLE, DEFAULT_MODAL_RESPONSIVE, DEFAULT_MODAL_WIDTH, DEFAULT_MODAL_Z_INDEX, DEFAULT_ROW_CARD_LIST_OPTIONS, DEFAULT_TABLE_OPTIONS, DYNAMIC_VIEW_BUILDER_COMPONENT_SELECTOR, DYNAMIC_VIEW_BUILDER_DEFAULT_CONFIG, DYNAMIC_VIEW_BUILDER_DEFAULT_TABLE_ROWS, DYNAMIC_VIEW_BUILDER_KIND, DYNAMIC_VIEW_BUILDER_SECTION_IDS, DYNAMIC_VIEW_BUILDER_TRANSLATION_PREFIX, DYNAMIC_VIEW_BUILDER_VIEW_MODE, DatepickerComponent, DoubleClickDirective, DynamicFormComponent, DynamicFormFieldDirective, DynamicFormRegistry, VisualSqlEditorComponent as DynamicViewBuilderComponent, EDITABLE_OVERLAY_CANCEL_KEY, EDITABLE_OVERLAY_EDIT_KEY, EDITABLE_OVERLAY_EMPTY_KEY, EDITABLE_OVERLAY_SAVE_KEY, EDITOR_DEFAULT_TOOLBAR_BUTTONS, EMPTY_STATE_DEFAULT_ICON_CLASS, EditableOverlayComponent, EditableOverlayEditorDirective, EditorComponent, EmptyStateComponent, EnumSeverity, FILEUPLOAD_DEFAULT_ACCEPT, FILEUPLOAD_DEFAULT_MAX_SIZE, FILEUPLOAD_IMAGE_TYPES, FileUploadComponent, FiltersComponent, GANTT_BAR_HEIGHT, GANTT_DEFAULT_BAR_COLOR, GANTT_DEFAULT_COLUMN_TITLE_KEY, GANTT_DEFAULT_VIEW_MODE, GANTT_HEADER_HEIGHT, GANTT_ROW_HEIGHT, GanttComponent, GanttSideTableComponent, GridMenuComponent, HELP_POPOVER_CLOSE_ARIA_LABEL_KEY, HELP_POPOVER_DEFAULT_ARIA_LABEL_KEY, HELP_POPOVER_DEFAULT_ARROW_POSITION, HELP_POPOVER_DEFAULT_POSITION, HELP_POPOVER_PANEL_HOST_CLASS, HYPERLINK_COLOR_VAR, HYPERLINK_REL_NOOPENER, HelpPopoverComponent, HyperlinkComponent, INFO_SIGN_DEFAULT_ARIA_LABEL, INFO_SIGN_DEFAULT_ICON_CLASS, INLINE_EDIT_ADD_INFO_KEY, INLINE_EDIT_CANCEL_KEY, INLINE_EDIT_EDIT_KEY, INLINE_EDIT_SAVE_KEY, INPUT_MASK_DEFAULT_AUTO_CLEAR, INPUT_MASK_DEFAULT_CHARACTER_PATTERN, INPUT_MASK_DEFAULT_SLOT_CHAR, INPUT_MASK_DEFAULT_UNMASK, IconPickerComponent, ImageCropperComponent, ImageCropperService, InfiniteScrollDirective, InfoSignComponent, InlineEditComponent, InlineEditField, InlineEditNumberField, InlineEditTextAreaField, InlineEditTextField, InputMaskDirective, InteractiveContentDirective, KANBAN_DRAGGING_KEY, KANBAN_ITEMS_SELECTED_KEY, KanbanComponent, KanbanEventService, KanbanTemplateDirective, LABEL_VALUE_DEFAULT_DATE_FORMAT, LABEL_VALUE_DEFAULT_EMPTY_KEY, LIST_DEFAULT_ACTION_LABEL_KEY, LIST_DEFAULT_PRIORITY, LIST_DEFAULT_SKELETON_ROWS, LIST_MIN_SKELETON_ROWS, LIST_PRIORITY_OPTIONS, LOCALIZED_NUMBER_INPUT_DEFAULT_PRECISION, LabelValueComponent, ListComponent, LoadingStateComponent, LoadingStateDirective, LocalizedNumberInputComponent, LongPressDirective, LookupComponent, MASK_DEFAULT_EMIT_MODE, MASK_DEFAULT_FORMAT, MODALC_DEFAULT_TITLE_KEY, MODAL_BODY_OVERFLOW_HIDDEN, MODAL_BODY_OVERFLOW_PROPERTY, MODAL_ESCAPE_KEY, MODAL_FOCUSABLE_SELECTOR, MODAL_TAB_KEY, MaskComponent, ModalComponent, ModalcComponent, NAVIGATION_BUTTON_NEXT_ARIA_LABEL_KEY, NAVIGATION_BUTTON_OPEN_MENU_ARIA_LABEL_KEY, NAVIGATION_BUTTON_PREVIOUS_ARIA_LABEL_KEY, NUMBER_INPUT_DEFAULT_ALIGNMENT, NUMBER_INPUT_DEFAULT_ALLOW_NEGATIVE, NUMBER_INPUT_DEFAULT_DECIMAL_FALLBACK, NUMBER_INPUT_DEFAULT_GROUP_FALLBACK, NUMBER_INPUT_DEFAULT_PRECISION, NUMBER_INPUT_DEFAULT_SCALE, NUMBER_INPUT_MIN_INTEGER_DIGITS, NUMERIC_DEFAULT_CURRENCY, NUMERIC_DEFAULT_STYLE, NavigationButtonComponent, NumberInputComponent, NumericComponent, NumericPipe, NumericService, OBJECT_CARD_COLLAPSE_TOOLTIP_KEY, OBJECT_CARD_DEFAULT_FIELDS_MIN_WIDTH_PX, OBJECT_CARD_EXPAND_ICON_ESTIMATED_WIDTH_PX, OBJECT_CARD_EXPAND_TOOLTIP_KEY, OBJECT_CARD_FIELD_ID_PREFIX, OBJECT_CARD_ID_PREFIX, OBJECT_CARD_MAIN_DEFAULT_ICON_CLASS, OBJECT_CARD_MAIN_ID_PREFIX, OBJECT_CARD_MOBILE_BREAKPOINT_PX, ObjectCardComponent, ObjectCardFieldComponent, ObjectCardMainComponent, PAGINATOR_DEFAULT_IS_MOBILE, PAGINATOR_DEFAULT_ROWS_OPTIONS, PAGINATOR_DEFAULT_SHOW_ROWS_PER_PAGE_SELECTOR, PAGINATOR_DEFAULT_TOTAL_RECORDS_LABEL, PAGINATOR_DESKTOP_WINDOW_SIZE, PAGINATOR_FIRST_PAGE_INDEX, PAGINATOR_MIN_ROWS, PAGINATOR_MOBILE_WINDOW_SIZE, PASSWORD_STRENGTH_DEFAULT_LEVEL, PASSWORD_STRENGTH_DEFAULT_POSITION, PIN_CODE_FIELD_CHARACTER_ARIA_LABEL_KEY, PIN_CODE_FIELD_DEFAULT_ALPHANUMERIC, PIN_CODE_FIELD_DEFAULT_LENGTH, PIN_CODE_FIELD_DIGIT_ARIA_LABEL_KEY, PIN_CODE_FIELD_GROUP_ARIA_LABEL_KEY, POPOVER_DEFAULT_MAX_HEIGHT, POPOVER_DEFAULT_OFFSET, POPOVER_DEFAULT_PLACEMENT, POPOVER_DEFAULT_Z_INDEX, POPOVER_VIEWPORT_MARGIN, PROGRESSBAR_DEFAULT_ARIA_LABEL, PROGRESSBAR_DEFAULT_COLOR, PROGRESSBAR_DEFAULT_FORMAT_OPTIONS, PROGRESSBAR_DEFAULT_MODE, PROGRESSBAR_MAX_VALUE, PROGRESSBAR_MIN_VALUE, PaginatorComponent, PanelComponent, PasswordStrengthComponent, PicklistComponent, PinCodeFieldComponent, PopoverComponent, ProfilePicturePickerComponent, ProgressbarComponent, RADIO_NAVIGATION_KEYS, RADIO_OPTION_NOT_SELECTED_KEY, RADIO_OPTION_SELECTED_KEY, RATING_SCALE_ARIA_LABEL_KEY, ROW_CARD_LIST_FALLBACK_INITIAL_ROWS, ROW_CARD_LIST_FIRST_PAGE, ROW_CARD_LIST_MIN_SKELETON_ROWS, RadioComponent, RatingScaleComponent, RowCardListComponent, SIDEBAR_COMPACT_WIDTH, SIDEBAR_DEFAULT_HEADER_KEY, SIDEBAR_DEFAULT_WIDTH, SLIDER_DEFAULT_ARIA_LABEL, SLIDER_DEFAULT_MAX, SLIDER_DEFAULT_MIN, SLIDER_DEFAULT_STEP, SPLIT_BUTTON_DEFAULT_MENU_ARIA_LABEL, SPLIT_BUTTON_DEFAULT_PRIORITY, SPLIT_BUTTON_DEFAULT_TOGGLE_ARIA_LABEL, SPOTLIGHT_BACK_LABEL_KEY, SPOTLIGHT_CLOSE_LABEL_KEY, SPOTLIGHT_COMPLETE_LABEL_KEY, SPOTLIGHT_DO_NOT_SHOW_AGAIN_LABEL_KEY, SPOTLIGHT_NEXT_LABEL_KEY, SPOTLIGHT_STEP_COUNTER_LABEL_KEY, SPOTLIGHT_STEP_PROGRESS_LABEL_KEY, SPOTLIGHT_UNDERSTOOD_LABEL_KEY, SQL_HELPER, STAR_RATING_ARIA_LABEL_KEY, STAR_RATING_DEFAULT_MAX, STAR_RATING_STAR_LABEL_KEY, STATS_CARD_ANIMATION_DURATION_MS, STATS_CARD_DEFAULT_COLOR, STATS_CARD_DEFAULT_ICON_CLASS, STEPPER_DEFAULT_ACTIVE_INDEX, SWITCH_DEFAULT_FALSE_LABEL_KEY, SWITCH_DEFAULT_TRUE_LABEL_KEY, ScaffoldComponent, SearchboxComponent, SelectButtonComponent, SidebarComponent, SliderComponent, SpeechRecognitionComponent, SpeechRecognitionService, LoadingStateComponent as SpinnerComponent, SplitButtonComponent, SpotlightComponent, SpotlightStepDirective, SpotlightTourService, StarRatingComponent, StatsCardComponent, StepState, StepperComponent, StepperComponent as StepsComponent, SwitchComponent, TABLE_DEFAULT_LOADING_VERTICAL_PADDING_PX, TABLE_DEFAULT_MIN_LOADING_HEIGHT_PX, TABLE_DEFAULT_ROWS_PER_PAGE, TABLE_DEFAULT_ROW_HEIGHT_PX, TABLE_DEFAULT_ROW_ID_PREVIEW_LENGTH, TABLE_DISABLED_TAG_VALUES, TABLE_EMPTY_CELL_OPTIONS, TABLE_ENABLED_TAG_VALUES, TABLE_HEX_RADIX, TABLE_INDEX_ZERO, TABLE_MENU_GAP_PX, TABLE_RGB_MAX, TABLE_TAG_BACKGROUND_ALPHA, TABLE_TAG_FOREGROUND_DARKEN_AMOUNT, TAB_ACTIVE_SUFFIX_KEY, TAB_DEFAULT_ARIA_LABEL_KEY, TAB_DEFAULT_LABEL_KEY, TEXTAREA_DEFAULT_ROWS, THUMBNAILS_LISTEN_KEY, THUMBNAILS_SELECT_ITEM_KEY, THUMBNAILS_VIEW_KEY, THUMBNAILS_WATCH_KEY, THUMBNAIL_DEFAULT_ACTION_ICON_CLASS, THUMBNAIL_DEFAULT_ICON_CLASS, THUMBNAIL_ID_PREFIX, TIERED_MENU_DEFAULT_TRIGGER_EVENT, TIERED_MENU_MOBILE_BREAKPOINT_PX, TILE_DEFAULT_TAB_INDEX, TILE_SELECT_COLUMNS, TIMELINE_DEFAULT_ACTIVE_INDEX, TIMELINE_DEFAULT_INTERACTIVE, TIMELINE_DEFAULT_ORIENTATION, TIMELINE_DEFAULT_RESPONSIVE, TIMELINE_DEFAULT_SHOW_DESCRIPTIONS, TOKEN_LIST_ID_PREFIX, TOKEN_LIST_REMOVE_ARIA_LABEL_KEY, TOKEN_LIST_REMOVE_ARIA_LABEL_PLACEHOLDER, TabComponent, TabItemComponent, TableComponent, TextToSpeechService, TextareaComponent, TextboxComponent, ThumbnailComponent, ThumbnailsComponent, TieredMenuDirective, TileComponent, TileSelectComponent, TimelineComponent, ToastComponent, ToastService, TokenListComponent, TooltipComponent, TreeComponent, VisualSqlEditorComponent, CONTEXT_SELECTOR_DEFAULT_FOOTER_BUTTON_LABEL_KEY as WORKSPACE_SWITCH_DEFAULT_FOOTER_BUTTON_LABEL_KEY, ContextSelectorComponent as WorkspaceSwitchComponent, applyMaskFormat, buildNumberInputPlaceholder, calculateNumberInputMaxLength, characterLength, clampNumberInputValue, clampRovingIndex, coerceBooleanLike, countNumberInputDigits, createDynamicViewBuilderConfig, createSqlAutoCompletionHadler, disableBodyScroll, enableBodyScroll, extractMaskRaw, filterTextWithRegExp, findNextEnabledIndex, fixComboBoxOverlay, fixDialogMask, flattenTree, focusFirstDescendant, formatNumberInputValue, formatNumericValue, getCurrencySymbol, getDimensionStyles, getFocusableElements, getKeyFilterRegExp, getNumericLocale, humanizeText, isDesktop, isFocusableElement, isMaskComplete, isMobile, isSelectedValue, isTablet, isTextAllowedByRegExp, mockRowCardList, nextSequentialId, normalizeColorPickerValue, normalizeNumberInputValue, normalizeText$1 as normalizeText, parseBooleanAttribute, parseMaskPattern, parseNumberInputValue, provideCore, provideDataCoreLib, provideFeatures, provideGlobalStyles, provideTranslations, range, resolveColorPickerPreviewColor, resolveCurrencyScale, resolveNullableTranslatableText, resolveNumberInputSeparators, resolveTranslatableText, restoreFocus, sanitizeColorPickerInput, sanitizeNumberInputValue, serviceProviders, setSelectedValue, sqlDomainFilterDecorator, sqlFormatterHandler, sqlUppercaseHandler, stableStringify, toInteger, toPositiveInteger, toggleSelectedValue, trapFocusInContainer, truncateCharacters };
|
|
43561
|
+
export { ACCORDION_DEFAULT_ACTION_ARIA_LABEL, ACCORDION_DEFAULT_CACHE, ACCORDION_DEFAULT_INFO_ARIA_LABEL, ACCORDION_DEFAULT_MULTIPLE, ACCORDION_DEFAULT_SWITCH_ARIA_LABEL, ACCORDION_DEFAULT_TOGGLE_ARIA_LABEL, ACCORDION_DEFAULT_VALIDATION_ICON, ACCORDION_DEFAULT_VALIDATION_ICON_COLOR, ALERT_DEFAULT_CLOSE_ARIA_LABEL, ALERT_DEFAULT_SEVERITY, AUTOCOMPLETE_DEFAULT_DELAY, AUTOCOMPLETE_DEFAULT_EMPTY_MESSAGE_KEY, AUTOCOMPLETE_DEFAULT_MIN_LENGTH, AUTOCOMPLETE_DEFAULT_PLACEHOLDER_KEY, AccordionComponent, AccordionItemComponent, AlertComponent, AutocompleteComponent, BADGE_DEFAULT_COLOR, BADGE_DEFAULT_ICON_POSITION, BADGE_DEFAULT_INFO_ARIA_LABEL, BADGE_DEFAULT_TYPE, BIGNUMBER_INPUT_DEFAULT_PRECISION, BIGNUMBER_INPUT_DEFAULT_SCALE, BREADCRUMB_ACTIVE_EXACT_OPTIONS, BREADCRUMB_ACTIVE_SUBSET_OPTIONS, BREADCRUMB_DEFAULT_TARGET_HOME, BREADCRUMB_HOME_ICON_CLASS, BREADCRUMB_INDEX_ZERO, BadgeComponent, BignumberInputComponent, BreadcrumbComponent, ButtonComponent, CALENDAR_MASK_DEFAULT_FORMAT, CARD_COLLAPSE_CATEGORY_ARIA_LABEL_KEY, CARD_COLLAPSE_DESCRIPTION_ARIA_LABEL_KEY, CARD_COLLAPSE_NAME_ARIA_LABEL_KEY, CARD_DEFAULT_CATEGORY_MAX_LENGTH, CARD_DEFAULT_DESCRIPTION_MAX_LENGTH, CARD_DEFAULT_NAME_MAX_LENGTH, CARD_EXPAND_CATEGORY_ARIA_LABEL_KEY, CARD_EXPAND_DESCRIPTION_ARIA_LABEL_KEY, CARD_EXPAND_NAME_ARIA_LABEL_KEY, CARD_LIST_FIRST_PAGE, CARD_LIST_MIN_ROWS, CARD_LIST_MIN_SKELETON_CARDS, CARD_SHOW_LESS_LABEL_KEY, CARD_SURFACE_DEFAULT_BANNER_ALT_KEY, CARD_SURFACE_TEMPLATE_BODY, CARD_SURFACE_TEMPLATE_FOOTER, CARD_SURFACE_TEMPLATE_HEADER, CHIPS_DEFAULT_INPUT_ID_PREFIX, CHIPS_DEFAULT_MAX, CHIPS_DEFAULT_MAX_LENGTH, CHIPS_DEFAULT_MAX_LENGTH_WITHOUT_TOOLTIP, CHIPS_DEFAULT_REMOVE_ARIA_LABEL, CODE_EDITOR_COPY_ERROR_MESSAGE_KEY, CODE_EDITOR_COPY_ERROR_TITLE_KEY, CODE_EDITOR_COPY_SUCCESS_MESSAGE_KEY, CODE_EDITOR_COPY_SUCCESS_TITLE_KEY, CODE_EDITOR_DEFAULT_LANGUAGE, COLLAPSE_LINK_DEFAULT_COLLAPSED_LABEL, COLLAPSE_LINK_DEFAULT_EXPANDED_LABEL, COLOR_PICKER_ACCESSIBLE_LABEL_KEY, COLOR_PICKER_DEFAULT_COLOR, COLOR_PICKER_DEFAULT_PLACEHOLDER, COLOR_PICKER_TRIGGER_LABEL_KEY, COMBOBOX_CLEAR_FIELD_LABEL_KEY, COMBOBOX_DEFAULT_MAX_SELECTED_LABELS, COMBOBOX_DEFAULT_PANEL_MAX_HEIGHT, COMBOBOX_DEFAULT_Z_INDEX, COMBOBOX_EMPTY_TEXT_KEY, COMBOBOX_EMPTY_TITLE_KEY, COMBOBOX_REMOVE_CHIP_LABEL_KEY, COMBOBOX_SELECTED_ITEMS_LABEL_KEY, CONSTANTS, CONTEXT_SELECTOR_DEFAULT_FOOTER_BUTTON_LABEL_KEY, CONTROL_ERRORS_DEFAULT_SHOW_WHEN, COUNTRY_PHONE_PICKER_DEFAULT_COUNTRIES, COUNTRY_PHONE_PICKER_DEFAULT_ORDINATION, CURRENCY_INPUT_DEFAULT_CODE, CURRENCY_SCALE_BY_CODE, CalendarMaskComponent, CardComponent, CardListComponent, CardTemplateDirective, ChatComponent, CheckboxComponent, CheckboxListComponent, ChipsComponent, CodeEditorComponent, CollapseLinkComponent, ColorPickerComponent, ComboboxComponent, ConfirmComponent, ContextSelectorComponent, ControlErrorsComponent, CountryPhonePickerComponent, CurrencyComponent, DEFAULT_CARD_LIST_OPTIONS, DEFAULT_CURRENCY_CODE, DEFAULT_FALSE_BOOLEAN_STRINGS, DEFAULT_HYPERLINK_APPEARANCE, DEFAULT_HYPERLINK_ARIA_LABEL, DEFAULT_HYPERLINK_BUTTON_HOVER_PADDING, DEFAULT_HYPERLINK_BUTTON_HOVER_RADIUS, DEFAULT_HYPERLINK_DISABLED, DEFAULT_HYPERLINK_DOMAIN_FILTER_TOKEN, DEFAULT_HYPERLINK_HOVER_STYLE, DEFAULT_HYPERLINK_HREF, DEFAULT_HYPERLINK_ICON, DEFAULT_HYPERLINK_ICON_POSITION, DEFAULT_HYPERLINK_REL, DEFAULT_HYPERLINK_TARGET, DEFAULT_HYPERLINK_TEXT, DEFAULT_HYPERLINK_UNDERLINE, DEFAULT_LOADING_STATE_BLOCK_DELAY_MS, DEFAULT_LOADING_STATE_FULLSCREEN_Z_INDEX, DEFAULT_LOADING_STATE_ID_PREFIX, DEFAULT_LOADING_STATE_INDICATOR, DEFAULT_LOADING_STATE_UNBLOCK_DELAY_MS, DEFAULT_MODAL_CLOSABLE, DEFAULT_MODAL_FOOTER_BUTTONS, DEFAULT_MODAL_HEADER, DEFAULT_MODAL_HEIGHT, DEFAULT_MODAL_ID_PREFIX, DEFAULT_MODAL_MAXIMIZABLE, DEFAULT_MODAL_MAXIMIZE, DEFAULT_MODAL_RESIZABLE, DEFAULT_MODAL_RESPONSIVE, DEFAULT_MODAL_WIDTH, DEFAULT_MODAL_Z_INDEX, DEFAULT_ROW_CARD_LIST_OPTIONS, DEFAULT_TABLE_OPTIONS, DYNAMIC_VIEW_BUILDER_COMPONENT_SELECTOR, DYNAMIC_VIEW_BUILDER_DEFAULT_CONFIG, DYNAMIC_VIEW_BUILDER_DEFAULT_TABLE_ROWS, DYNAMIC_VIEW_BUILDER_KIND, DYNAMIC_VIEW_BUILDER_SECTION_IDS, DYNAMIC_VIEW_BUILDER_TRANSLATION_PREFIX, DYNAMIC_VIEW_BUILDER_VIEW_MODE, DatepickerComponent, DoubleClickDirective, DynamicFormComponent, DynamicFormFieldDirective, DynamicFormRegistry, VisualSqlEditorComponent as DynamicViewBuilderComponent, EDITABLE_OVERLAY_CANCEL_KEY, EDITABLE_OVERLAY_EDIT_KEY, EDITABLE_OVERLAY_EMPTY_KEY, EDITABLE_OVERLAY_SAVE_KEY, EDITOR_DEFAULT_TOOLBAR_BUTTONS, EMPTY_STATE_DEFAULT_ICON_CLASS, EditableOverlayComponent, EditableOverlayEditorDirective, EditorComponent, EmptyStateComponent, EnumSeverity, FILEUPLOAD_DEFAULT_ACCEPT, FILEUPLOAD_DEFAULT_MAX_SIZE, FILEUPLOAD_IMAGE_TYPES, FileUploadComponent, FiltersComponent, GANTT_BAR_HEIGHT, GANTT_DEFAULT_BAR_COLOR, GANTT_DEFAULT_COLUMN_TITLE_KEY, GANTT_DEFAULT_VIEW_MODE, GANTT_HEADER_HEIGHT, GANTT_ROW_HEIGHT, GanttComponent, GanttSideTableComponent, GridMenuComponent, HELP_POPOVER_CLOSE_ARIA_LABEL_KEY, HELP_POPOVER_DEFAULT_ARIA_LABEL_KEY, HELP_POPOVER_DEFAULT_ARROW_POSITION, HELP_POPOVER_DEFAULT_POSITION, HELP_POPOVER_PANEL_HOST_CLASS, HYPERLINK_COLOR_VAR, HYPERLINK_REL_NOOPENER, HelpPopoverComponent, HyperlinkComponent, INFO_SIGN_DEFAULT_ARIA_LABEL, INFO_SIGN_DEFAULT_ICON_CLASS, INLINE_EDIT_ADD_INFO_KEY, INLINE_EDIT_CANCEL_KEY, INLINE_EDIT_EDIT_KEY, INLINE_EDIT_SAVE_KEY, INPUT_MASK_DEFAULT_AUTO_CLEAR, INPUT_MASK_DEFAULT_CHARACTER_PATTERN, INPUT_MASK_DEFAULT_SLOT_CHAR, INPUT_MASK_DEFAULT_UNMASK, IconPickerComponent, ImageCropperComponent, ImageCropperService, InfiniteScrollDirective, InfoSignComponent, InlineEditComponent, InlineEditField, InlineEditNumberField, InlineEditTextAreaField, InlineEditTextField, InputMaskDirective, InteractiveContentDirective, KANBAN_DRAGGING_KEY, KANBAN_ITEMS_SELECTED_KEY, KanbanComponent, KanbanEventService, KanbanTemplateDirective, LABEL_VALUE_DEFAULT_DATE_FORMAT, LABEL_VALUE_DEFAULT_EMPTY_KEY, LIST_DEFAULT_ACTION_LABEL_KEY, LIST_DEFAULT_PRIORITY, LIST_DEFAULT_SKELETON_ROWS, LIST_MIN_SKELETON_ROWS, LIST_PRIORITY_OPTIONS, LOCALIZED_NUMBER_INPUT_DEFAULT_PRECISION, LabelValueComponent, ListComponent, LoadingStateComponent, LoadingStateDirective, LocalizedNumberInputComponent, LongPressDirective, LookupComponent, MASK_DEFAULT_EMIT_MODE, MASK_DEFAULT_FORMAT, MODALC_DEFAULT_TITLE_KEY, MODAL_BODY_OVERFLOW_HIDDEN, MODAL_BODY_OVERFLOW_PROPERTY, MODAL_ESCAPE_KEY, MODAL_FOCUSABLE_SELECTOR, MODAL_TAB_KEY, MaskComponent, ModalComponent, ModalcComponent, NAVIGATION_BUTTON_NEXT_ARIA_LABEL_KEY, NAVIGATION_BUTTON_OPEN_MENU_ARIA_LABEL_KEY, NAVIGATION_BUTTON_PREVIOUS_ARIA_LABEL_KEY, NUMBER_INPUT_DEFAULT_ALIGNMENT, NUMBER_INPUT_DEFAULT_ALLOW_NEGATIVE, NUMBER_INPUT_DEFAULT_DECIMAL_FALLBACK, NUMBER_INPUT_DEFAULT_GROUP_FALLBACK, NUMBER_INPUT_DEFAULT_PRECISION, NUMBER_INPUT_DEFAULT_SCALE, NUMBER_INPUT_MIN_INTEGER_DIGITS, NUMERIC_DEFAULT_CURRENCY, NUMERIC_DEFAULT_STYLE, NavigationButtonComponent, NestedTableComponent, NumberInputComponent, NumericComponent, NumericPipe, NumericService, OBJECT_CARD_COLLAPSE_TOOLTIP_KEY, OBJECT_CARD_DEFAULT_FIELDS_MIN_WIDTH_PX, OBJECT_CARD_EXPAND_ICON_ESTIMATED_WIDTH_PX, OBJECT_CARD_EXPAND_TOOLTIP_KEY, OBJECT_CARD_FIELD_ID_PREFIX, OBJECT_CARD_ID_PREFIX, OBJECT_CARD_MAIN_DEFAULT_ICON_CLASS, OBJECT_CARD_MAIN_ID_PREFIX, OBJECT_CARD_MOBILE_BREAKPOINT_PX, ObjectCardComponent, ObjectCardFieldComponent, ObjectCardMainComponent, PAGINATOR_DEFAULT_IS_MOBILE, PAGINATOR_DEFAULT_ROWS_OPTIONS, PAGINATOR_DEFAULT_SHOW_ROWS_PER_PAGE_SELECTOR, PAGINATOR_DEFAULT_TOTAL_RECORDS_LABEL, PAGINATOR_DESKTOP_WINDOW_SIZE, PAGINATOR_FIRST_PAGE_INDEX, PAGINATOR_MIN_ROWS, PAGINATOR_MOBILE_WINDOW_SIZE, PASSWORD_STRENGTH_DEFAULT_LEVEL, PASSWORD_STRENGTH_DEFAULT_POSITION, PIN_CODE_FIELD_CHARACTER_ARIA_LABEL_KEY, PIN_CODE_FIELD_DEFAULT_ALPHANUMERIC, PIN_CODE_FIELD_DEFAULT_LENGTH, PIN_CODE_FIELD_DIGIT_ARIA_LABEL_KEY, PIN_CODE_FIELD_GROUP_ARIA_LABEL_KEY, POPOVER_DEFAULT_MAX_HEIGHT, POPOVER_DEFAULT_OFFSET, POPOVER_DEFAULT_PLACEMENT, POPOVER_DEFAULT_Z_INDEX, POPOVER_VIEWPORT_MARGIN, PROGRESSBAR_DEFAULT_ARIA_LABEL, PROGRESSBAR_DEFAULT_COLOR, PROGRESSBAR_DEFAULT_FORMAT_OPTIONS, PROGRESSBAR_DEFAULT_MODE, PROGRESSBAR_MAX_VALUE, PROGRESSBAR_MIN_VALUE, PaginatorComponent, PanelComponent, PasswordStrengthComponent, PicklistComponent, PinCodeFieldComponent, PopoverComponent, ProfilePicturePickerComponent, ProgressbarComponent, RADIO_NAVIGATION_KEYS, RADIO_OPTION_NOT_SELECTED_KEY, RADIO_OPTION_SELECTED_KEY, RATING_SCALE_ARIA_LABEL_KEY, ROW_CARD_LIST_FALLBACK_INITIAL_ROWS, ROW_CARD_LIST_FIRST_PAGE, ROW_CARD_LIST_MIN_SKELETON_ROWS, RadioComponent, RatingScaleComponent, RowCardListComponent, SIDEBAR_COMPACT_WIDTH, SIDEBAR_DEFAULT_HEADER_KEY, SIDEBAR_DEFAULT_WIDTH, SLIDER_DEFAULT_ARIA_LABEL, SLIDER_DEFAULT_MAX, SLIDER_DEFAULT_MIN, SLIDER_DEFAULT_STEP, SPLIT_BUTTON_DEFAULT_MENU_ARIA_LABEL, SPLIT_BUTTON_DEFAULT_PRIORITY, SPLIT_BUTTON_DEFAULT_TOGGLE_ARIA_LABEL, SPOTLIGHT_BACK_LABEL_KEY, SPOTLIGHT_CLOSE_LABEL_KEY, SPOTLIGHT_COMPLETE_LABEL_KEY, SPOTLIGHT_DO_NOT_SHOW_AGAIN_LABEL_KEY, SPOTLIGHT_NEXT_LABEL_KEY, SPOTLIGHT_STEP_COUNTER_LABEL_KEY, SPOTLIGHT_STEP_PROGRESS_LABEL_KEY, SPOTLIGHT_UNDERSTOOD_LABEL_KEY, SQL_HELPER, STAR_RATING_ARIA_LABEL_KEY, STAR_RATING_DEFAULT_MAX, STAR_RATING_STAR_LABEL_KEY, STATS_CARD_ANIMATION_DURATION_MS, STATS_CARD_DEFAULT_COLOR, STATS_CARD_DEFAULT_ICON_CLASS, STEPPER_DEFAULT_ACTIVE_INDEX, SWITCH_DEFAULT_FALSE_LABEL_KEY, SWITCH_DEFAULT_TRUE_LABEL_KEY, ScaffoldComponent, SearchboxComponent, SelectButtonComponent, SidebarComponent, SliderComponent, SpeechRecognitionComponent, SpeechRecognitionService, LoadingStateComponent as SpinnerComponent, SplitButtonComponent, SpotlightComponent, SpotlightStepDirective, SpotlightTourService, StarRatingComponent, StatsCardComponent, StepState, StepperComponent, StepperComponent as StepsComponent, SwitchComponent, TABLE_DEFAULT_LOADING_VERTICAL_PADDING_PX, TABLE_DEFAULT_MIN_LOADING_HEIGHT_PX, TABLE_DEFAULT_ROWS_PER_PAGE, TABLE_DEFAULT_ROW_HEIGHT_PX, TABLE_DEFAULT_ROW_ID_PREVIEW_LENGTH, TABLE_DISABLED_TAG_VALUES, TABLE_EMPTY_CELL_OPTIONS, TABLE_ENABLED_TAG_VALUES, TABLE_HEX_RADIX, TABLE_INDEX_ZERO, TABLE_MENU_GAP_PX, TABLE_RGB_MAX, TABLE_TAG_BACKGROUND_ALPHA, TABLE_TAG_FOREGROUND_DARKEN_AMOUNT, TAB_ACTIVE_SUFFIX_KEY, TAB_DEFAULT_ARIA_LABEL_KEY, TAB_DEFAULT_LABEL_KEY, TEXTAREA_DEFAULT_ROWS, THUMBNAILS_LISTEN_KEY, THUMBNAILS_SELECT_ITEM_KEY, THUMBNAILS_VIEW_KEY, THUMBNAILS_WATCH_KEY, THUMBNAIL_DEFAULT_ACTION_ICON_CLASS, THUMBNAIL_DEFAULT_ICON_CLASS, THUMBNAIL_ID_PREFIX, TIERED_MENU_DEFAULT_TRIGGER_EVENT, TIERED_MENU_MOBILE_BREAKPOINT_PX, TILE_DEFAULT_TAB_INDEX, TILE_SELECT_COLUMNS, TIMELINE_DEFAULT_ACTIVE_INDEX, TIMELINE_DEFAULT_INTERACTIVE, TIMELINE_DEFAULT_ORIENTATION, TIMELINE_DEFAULT_RESPONSIVE, TIMELINE_DEFAULT_SHOW_DESCRIPTIONS, TOKEN_LIST_ID_PREFIX, TOKEN_LIST_REMOVE_ARIA_LABEL_KEY, TOKEN_LIST_REMOVE_ARIA_LABEL_PLACEHOLDER, TabComponent, TabItemComponent, TableComponent, TextToSpeechService, TextareaComponent, TextboxComponent, ThumbnailComponent, ThumbnailsComponent, TieredMenuDirective, TileComponent, TileSelectComponent, TimelineComponent, ToastComponent, ToastService, TokenListComponent, TooltipComponent, TreeComponent, VisualSqlEditorComponent, CONTEXT_SELECTOR_DEFAULT_FOOTER_BUTTON_LABEL_KEY as WORKSPACE_SWITCH_DEFAULT_FOOTER_BUTTON_LABEL_KEY, ContextSelectorComponent as WorkspaceSwitchComponent, applyMaskFormat, buildNumberInputPlaceholder, calculateNumberInputMaxLength, characterLength, clampNumberInputValue, clampRovingIndex, coerceBooleanLike, countNumberInputDigits, createDynamicViewBuilderConfig, createSqlAutoCompletionHadler, disableBodyScroll, enableBodyScroll, extractMaskRaw, filterTextWithRegExp, findNextEnabledIndex, fixComboBoxOverlay, fixDialogMask, flattenTree, focusFirstDescendant, formatNumberInputValue, formatNumericValue, getCurrencySymbol, getDimensionStyles, getFocusableElements, getKeyFilterRegExp, getNumericLocale, humanizeText, isDesktop, isFocusableElement, isMaskComplete, isMobile, isSelectedValue, isTablet, isTextAllowedByRegExp, mockRowCardList, nextSequentialId, normalizeColorPickerValue, normalizeNumberInputValue, normalizeText$1 as normalizeText, parseBooleanAttribute, parseMaskPattern, parseNumberInputValue, provideCore, provideDataCoreLib, provideFeatures, provideGlobalStyles, provideTranslations, range, resolveColorPickerPreviewColor, resolveCurrencyScale, resolveNullableTranslatableText, resolveNumberInputSeparators, resolveTranslatableText, restoreFocus, sanitizeColorPickerInput, sanitizeNumberInputValue, serviceProviders, setSelectedValue, sqlDomainFilterDecorator, sqlFormatterHandler, sqlUppercaseHandler, stableStringify, toInteger, toPositiveInteger, toggleSelectedValue, trapFocusInContainer, truncateCharacters };
|
|
43210
43562
|
//# sourceMappingURL=seniorsistemas-data-seniorx-core.mjs.map
|