@seniorsistemas/data-seniorx-core 2.3.0 → 3.0.0
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/autocomplete.const.d.ts +4 -0
- package/core/constants/context-selector.const.d.ts +1 -0
- package/core/constants/gantt.const.d.ts +7 -0
- package/core/constants/hyperlink.const.d.ts +1 -0
- package/core/constants/inline-edit.const.d.ts +4 -0
- package/core/constants/kanban.const.d.ts +2 -0
- package/core/constants/pin-code-field.const.d.ts +5 -0
- package/core/constants/rating-scale.const.d.ts +1 -0
- package/core/constants/spotlight.const.d.ts +8 -0
- package/core/constants/star-rating.const.d.ts +4 -0
- package/core/constants/stepper.const.d.ts +1 -0
- package/core/constants/tiered-menu.const.d.ts +3 -0
- package/core/types/autocomplete.type.d.ts +9 -0
- package/core/types/chat.type.d.ts +12 -0
- package/core/types/checkbox-list.type.d.ts +12 -0
- package/core/types/gantt.type.d.ts +22 -0
- package/core/types/grid-menu.type.d.ts +13 -0
- package/core/types/hyperlink.type.d.ts +1 -0
- package/core/types/image-cropper.type.d.ts +20 -0
- package/core/types/inline-edit.type.d.ts +26 -0
- package/core/types/kanban.type.d.ts +36 -0
- package/core/types/panel.type.d.ts +16 -0
- package/core/types/profile-picture-picker.type.d.ts +9 -0
- package/core/types/rating-scale.type.d.ts +5 -0
- package/core/types/select-button.type.d.ts +1 -0
- package/core/types/spotlight.type.d.ts +34 -0
- package/core/types/star-rating.type.d.ts +1 -0
- package/core/types/stepper.type.d.ts +20 -0
- package/core/types/table-column.type.d.ts +3 -1
- package/core/types/table-options.type.d.ts +8 -2
- package/core/types/table.type.d.ts +1 -1
- package/core/types/tiered-menu.type.d.ts +16 -0
- package/core/types/tree.type.d.ts +25 -0
- package/core/types/workspace-switch.type.d.ts +6 -0
- package/core/utils/body-scroll.util.d.ts +2 -0
- package/core/utils/roving-focus.util.d.ts +2 -0
- package/core/utils/selection.util.d.ts +3 -0
- package/core/utils/tree.util.d.ts +4 -0
- package/esm2022/core/constants/autocomplete.const.mjs +5 -0
- package/esm2022/core/constants/context-selector.const.mjs +2 -0
- package/esm2022/core/constants/gantt.const.mjs +7 -0
- package/esm2022/core/constants/hyperlink.const.mjs +2 -1
- package/esm2022/core/constants/inline-edit.const.mjs +5 -0
- package/esm2022/core/constants/kanban.const.mjs +3 -0
- package/esm2022/core/constants/pin-code-field.const.mjs +6 -0
- package/esm2022/core/constants/rating-scale.const.mjs +2 -0
- package/esm2022/core/constants/spotlight.const.mjs +9 -0
- package/esm2022/core/constants/star-rating.const.mjs +5 -0
- package/esm2022/core/constants/stepper.const.mjs +2 -0
- package/esm2022/core/constants/table.const.mjs +2 -2
- package/esm2022/core/constants/tiered-menu.const.mjs +4 -0
- package/esm2022/core/types/autocomplete.type.mjs +2 -0
- package/esm2022/core/types/chat.type.mjs +2 -0
- package/esm2022/core/types/checkbox-list.type.mjs +2 -0
- package/esm2022/core/types/gantt.type.mjs +2 -0
- package/esm2022/core/types/grid-menu.type.mjs +2 -0
- package/esm2022/core/types/hyperlink.type.mjs +1 -1
- package/esm2022/core/types/image-cropper.type.mjs +2 -0
- package/esm2022/core/types/inline-edit.type.mjs +2 -0
- package/esm2022/core/types/kanban.type.mjs +2 -0
- package/esm2022/core/types/panel.type.mjs +9 -0
- package/esm2022/core/types/profile-picture-picker.type.mjs +2 -0
- package/esm2022/core/types/rating-scale.type.mjs +2 -0
- package/esm2022/core/types/select-button.type.mjs +1 -1
- package/esm2022/core/types/spotlight.type.mjs +2 -0
- package/esm2022/core/types/star-rating.type.mjs +2 -0
- package/esm2022/core/types/stepper.type.mjs +7 -0
- package/esm2022/core/types/table-column.type.mjs +1 -1
- package/esm2022/core/types/table-options.type.mjs +1 -1
- package/esm2022/core/types/table.type.mjs +1 -1
- package/esm2022/core/types/tiered-menu.type.mjs +2 -0
- package/esm2022/core/types/tree.type.mjs +2 -0
- package/esm2022/core/types/workspace-switch.type.mjs +2 -0
- package/esm2022/core/utils/body-scroll.util.mjs +19 -0
- package/esm2022/core/utils/combobox.util.mjs +3 -2
- package/esm2022/core/utils/roving-focus.util.mjs +20 -0
- package/esm2022/core/utils/selection.util.mjs +13 -0
- package/esm2022/core/utils/string.util.mjs +8 -3
- package/esm2022/core/utils/tree.util.mjs +23 -0
- package/esm2022/features/accordion/accordion.component.mjs +2 -2
- package/esm2022/features/accordion/{accordion-item.component.mjs → components/accordion-item/accordion-item.component.mjs} +7 -7
- package/esm2022/features/autocomplete/autocomplete.component.mjs +501 -0
- package/esm2022/features/autocomplete/components/autocomplete-chip/autocomplete-chip.component.mjs +30 -0
- package/esm2022/features/breadcrumb/breadcrumb.component.mjs +2 -2
- package/esm2022/features/card-list/card/card.component.mjs +63 -99
- package/esm2022/features/chat/chat.component.mjs +126 -0
- package/esm2022/features/checkbox-list/checkbox-list.component.mjs +125 -0
- package/esm2022/features/combobox/combobox.component.mjs +20 -8
- package/esm2022/features/context-selector/context-selector.component.mjs +198 -0
- package/esm2022/features/filters/filters.component.mjs +1 -1
- package/esm2022/features/gantt/components/gantt-side-table/gantt-side-table.component.mjs +17 -0
- package/esm2022/features/gantt/gantt-date.utils.mjs +97 -0
- package/esm2022/features/gantt/gantt.component.mjs +89 -0
- package/esm2022/features/gantt/gantt.engine.mjs +662 -0
- package/esm2022/features/grid-menu/grid-menu.component.mjs +104 -0
- package/esm2022/features/hyperlink/hyperlink.component.mjs +7 -4
- package/esm2022/features/icon-picker/icon-picker.component.mjs +3 -3
- package/esm2022/features/image-cropper/image-cropper.component.mjs +218 -0
- package/esm2022/features/image-cropper/services/image-cropper.service.mjs +50 -0
- package/esm2022/features/infinite-scroll/infinite-scroll.directive.mjs +89 -0
- package/esm2022/features/info-sign/info-sign.component.mjs +3 -3
- package/esm2022/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +38 -0
- package/esm2022/features/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +29 -0
- package/esm2022/features/inline-edit/components/fields/inline-edit-textarea/inline-edit-textarea.component.mjs +29 -0
- package/esm2022/features/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +131 -0
- package/esm2022/features/inline-edit/fields/inline-edit-field.mjs +17 -0
- package/esm2022/features/inline-edit/fields/inline-edit-number-field.mjs +15 -0
- package/esm2022/features/inline-edit/fields/inline-edit-text-field.mjs +11 -0
- package/esm2022/features/inline-edit/fields/inline-edit-textarea-field.mjs +15 -0
- package/esm2022/features/inline-edit/inline-edit.component.mjs +27 -0
- package/esm2022/features/interactive-content/interactive-content.directive.mjs +140 -0
- package/esm2022/features/kanban/components/kanban-column/kanban-column.component.mjs +88 -0
- package/esm2022/features/kanban/components/kanban-item/kanban-item.component.mjs +72 -0
- package/esm2022/features/kanban/components/kanban-item-dragging/kanban-item-dragging.component.mjs +19 -0
- package/esm2022/features/kanban/directives/kanban-template.directive.mjs +22 -0
- package/esm2022/features/kanban/kanban.component.mjs +198 -0
- package/esm2022/features/kanban/services/kanban-event.service.mjs +27 -0
- package/esm2022/features/loading-state/loading-state.component.mjs +3 -62
- package/esm2022/features/mouse-events/directives/double-click.directive.mjs +34 -0
- package/esm2022/features/mouse-events/directives/long-press.directive.mjs +61 -0
- package/esm2022/features/paginator/paginator.component.mjs +8 -3
- package/esm2022/features/panel/panel.component.mjs +43 -11
- package/esm2022/features/pin-code-field/pin-code-field.component.mjs +234 -0
- package/esm2022/features/profile-picture-picker/profile-picture-picker.component.mjs +330 -0
- package/esm2022/features/rating-scale/rating-scale.component.mjs +86 -0
- package/esm2022/features/row-card-list/row-card/row-card.component.mjs +3 -3
- package/esm2022/features/scaffold/scaffold.component.mjs +4 -6
- package/esm2022/features/select-button/select-button.component.mjs +7 -4
- package/esm2022/features/speech-recognition/services/speech-recognition.service.mjs +148 -0
- package/esm2022/features/speech-recognition/services/text-to-speech.service.mjs +88 -0
- package/esm2022/features/speech-recognition/speech-recognition.component.mjs +243 -0
- package/esm2022/features/spotlight/components/spotlight-overlay/spotlight-overlay.component.mjs +521 -0
- package/esm2022/features/spotlight/directives/spotlight-step.directive.mjs +38 -0
- package/esm2022/features/spotlight/services/spotlight-tour.service.mjs +179 -0
- package/esm2022/features/spotlight/spotlight.component.mjs +160 -0
- package/esm2022/features/star-rating/star-rating.component.mjs +95 -0
- package/esm2022/features/stepper/stepper.component.mjs +86 -0
- package/esm2022/features/switch/switch.component.mjs +12 -8
- package/esm2022/features/tab/{tab-item.component.mjs → components/tab-item/tab-item.component.mjs} +1 -1
- package/esm2022/features/tab/tab.component.mjs +4 -4
- package/esm2022/features/table/components/table-cell-content.component.mjs +14 -5
- package/esm2022/features/table/table.component.mjs +220 -29
- package/esm2022/features/table/utils/table-data.util.mjs +71 -8
- package/esm2022/features/table/utils/table-layout.util.mjs +21 -1
- package/esm2022/features/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +367 -0
- package/esm2022/features/tiered-menu/components/tiered-menu-divider/tiered-menu-divider.component.mjs +11 -0
- package/esm2022/features/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +97 -0
- package/esm2022/features/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.mjs +181 -0
- package/esm2022/features/tiered-menu/directives/tiered-menu.directive.mjs +246 -0
- package/esm2022/features/tiered-menu/services/tiered-menu.event.service.mjs +16 -0
- package/esm2022/features/tiered-menu/services/tiered-menu.global.service.mjs +12 -0
- package/esm2022/features/tiered-menu/services/tiered-menu.service.mjs +49 -0
- package/esm2022/features/tree/components/tree-node-item/tree-node-item.component.mjs +169 -0
- package/esm2022/features/tree/tree.component.mjs +211 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-field-modal/visual-sql-editor-field-modal.component.mjs +41 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-filter-modal/visual-sql-editor-filter-modal.component.mjs +38 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-join-modal/visual-sql-editor-join-modal.component.mjs +29 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-sort-modal/visual-sql-editor-sort-modal.component.mjs +29 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-source-modal/visual-sql-editor-source-modal.component.mjs +35 -0
- package/esm2022/features/visual-sql-editor/services/visual-sql-editor-flow.service.mjs +106 -0
- package/esm2022/features/visual-sql-editor/services/visual-sql-editor-state.service.mjs +230 -0
- package/esm2022/features/visual-sql-editor/types/visual-sql-editor.types.mjs +2 -0
- package/esm2022/features/visual-sql-editor/utils/visual-sql-editor-sanitize.util.mjs +72 -0
- package/esm2022/features/visual-sql-editor/utils/visual-sql-editor-sql.util.mjs +281 -0
- package/esm2022/features/visual-sql-editor/utils/visual-sql-editor-text.util.mjs +37 -0
- package/esm2022/features/visual-sql-editor/utils/visual-sql-editor.constants.mjs +89 -0
- package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +172 -630
- package/esm2022/locales/en.json +351 -3
- package/esm2022/locales/es-CO.json +351 -3
- package/esm2022/locales/pt.json +351 -3
- package/esm2022/providers/features.provider.mjs +40 -4
- package/esm2022/public-api.mjs +56 -3
- package/features/accordion/accordion.component.d.ts +1 -1
- package/features/accordion/{accordion-item.component.d.ts → components/accordion-item/accordion-item.component.d.ts} +1 -1
- package/features/autocomplete/autocomplete.component.d.ts +102 -0
- package/features/autocomplete/components/autocomplete-chip/autocomplete-chip.component.d.ts +11 -0
- package/features/card-list/card/card.component.d.ts +14 -34
- package/features/chat/chat.component.d.ts +31 -0
- package/features/checkbox-list/checkbox-list.component.d.ts +26 -0
- package/features/combobox/combobox.component.d.ts +2 -1
- package/features/context-selector/context-selector.component.d.ts +37 -0
- package/features/gantt/components/gantt-side-table/gantt-side-table.component.d.ts +8 -0
- package/features/gantt/gantt-date.utils.d.ts +36 -0
- package/features/gantt/gantt.component.d.ts +24 -0
- package/features/gantt/gantt.engine.d.ts +52 -0
- package/features/grid-menu/grid-menu.component.d.ts +29 -0
- package/features/hyperlink/hyperlink.component.d.ts +2 -1
- package/features/image-cropper/image-cropper.component.d.ts +43 -0
- package/features/image-cropper/services/image-cropper.service.d.ts +13 -0
- package/features/infinite-scroll/infinite-scroll.directive.d.ts +25 -0
- package/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.d.ts +13 -0
- package/features/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.d.ts +13 -0
- package/features/inline-edit/components/fields/inline-edit-textarea/inline-edit-textarea.component.d.ts +13 -0
- package/features/inline-edit/components/inline-edit-item/inline-edit-item.component.d.ts +37 -0
- package/features/inline-edit/fields/inline-edit-field.d.ts +12 -0
- package/features/inline-edit/fields/inline-edit-number-field.d.ts +9 -0
- package/features/inline-edit/fields/inline-edit-text-field.d.ts +7 -0
- package/features/inline-edit/fields/inline-edit-textarea-field.d.ts +9 -0
- package/features/inline-edit/inline-edit.component.d.ts +13 -0
- package/features/interactive-content/interactive-content.directive.d.ts +31 -0
- package/features/kanban/components/kanban-column/kanban-column.component.d.ts +22 -0
- package/features/kanban/components/kanban-item/kanban-item.component.d.ts +23 -0
- package/features/kanban/components/kanban-item-dragging/kanban-item-dragging.component.d.ts +8 -0
- package/features/kanban/directives/kanban-template.directive.d.ts +10 -0
- package/features/kanban/kanban.component.d.ts +32 -0
- package/features/kanban/services/kanban-event.service.d.ts +15 -0
- package/features/loading-state/loading-state.component.d.ts +0 -2
- package/features/mouse-events/directives/double-click.directive.d.ts +11 -0
- package/features/mouse-events/directives/long-press.directive.d.ts +14 -0
- package/features/panel/panel.component.d.ts +12 -3
- package/features/pin-code-field/pin-code-field.component.d.ts +44 -0
- package/features/profile-picture-picker/profile-picture-picker.component.d.ts +77 -0
- package/features/rating-scale/rating-scale.component.d.ts +24 -0
- package/features/select-button/select-button.component.d.ts +2 -1
- package/features/speech-recognition/services/speech-recognition.service.d.ts +29 -0
- package/features/speech-recognition/services/text-to-speech.service.d.ts +24 -0
- package/features/speech-recognition/speech-recognition.component.d.ts +50 -0
- package/features/spotlight/components/spotlight-overlay/spotlight-overlay.component.d.ts +59 -0
- package/features/spotlight/directives/spotlight-step.directive.d.ts +13 -0
- package/features/spotlight/services/spotlight-tour.service.d.ts +46 -0
- package/features/spotlight/spotlight.component.d.ts +59 -0
- package/features/star-rating/star-rating.component.d.ts +26 -0
- package/features/stepper/stepper.component.d.ts +23 -0
- package/features/switch/switch.component.d.ts +2 -1
- package/features/tab/tab.component.d.ts +1 -1
- package/features/table/components/table-cell-content.component.d.ts +4 -3
- package/features/table/table.component.d.ts +40 -5
- package/features/table/utils/table-data.util.d.ts +1 -0
- package/features/table/utils/table-layout.util.d.ts +1 -0
- package/features/tiered-menu/components/tiered-menu/tiered-menu.component.d.ts +49 -0
- package/features/tiered-menu/components/tiered-menu-divider/tiered-menu-divider.component.d.ts +5 -0
- package/features/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.d.ts +19 -0
- package/features/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.d.ts +26 -0
- package/features/tiered-menu/directives/tiered-menu.directive.d.ts +44 -0
- package/features/tiered-menu/services/tiered-menu.event.service.d.ts +13 -0
- package/features/tiered-menu/services/tiered-menu.global.service.d.ts +7 -0
- package/features/tiered-menu/services/tiered-menu.service.d.ts +14 -0
- package/features/tree/components/tree-node-item/tree-node-item.component.d.ts +37 -0
- package/features/tree/tree.component.d.ts +37 -0
- package/features/visual-sql-editor/components/visual-sql-editor-field-modal/visual-sql-editor-field-modal.component.d.ts +18 -0
- package/features/visual-sql-editor/components/visual-sql-editor-filter-modal/visual-sql-editor-filter-modal.component.d.ts +17 -0
- package/features/visual-sql-editor/components/visual-sql-editor-join-modal/visual-sql-editor-join-modal.component.d.ts +13 -0
- package/features/visual-sql-editor/components/visual-sql-editor-sort-modal/visual-sql-editor-sort-modal.component.d.ts +13 -0
- package/features/visual-sql-editor/components/visual-sql-editor-source-modal/visual-sql-editor-source-modal.component.d.ts +15 -0
- package/features/visual-sql-editor/services/visual-sql-editor-flow.service.d.ts +26 -0
- package/features/visual-sql-editor/services/visual-sql-editor-state.service.d.ts +72 -0
- package/features/visual-sql-editor/types/visual-sql-editor.types.d.ts +182 -0
- package/features/visual-sql-editor/utils/visual-sql-editor-sanitize.util.d.ts +14 -0
- package/features/visual-sql-editor/utils/visual-sql-editor-sql.util.d.ts +81 -0
- package/features/visual-sql-editor/utils/visual-sql-editor-text.util.d.ts +15 -0
- package/features/visual-sql-editor/utils/visual-sql-editor.constants.d.ts +36 -0
- package/features/visual-sql-editor/visual-sql-editor.component.d.ts +37 -199
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs +14883 -6353
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
- package/package.json +8 -8
- package/public-api.d.ts +72 -2
- package/src/locales/en.json +353 -15
- package/src/locales/es-CO.json +352 -14
- package/src/locales/pt.json +352 -14
- package/styles/sdc-global-variables.scss +1 -1
- package/styles.css +1 -1
- /package/features/tab/{tab-item.component.d.ts → components/tab-item/tab-item.component.d.ts} +0 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild, ViewChildren, ViewEncapsulation, inject } from '@angular/core';
|
|
3
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
4
|
+
import { CONTEXT_SELECTOR_DEFAULT_FOOTER_BUTTON_LABEL_KEY } from '../../core/constants/context-selector.const';
|
|
5
|
+
import { PopoverComponent } from '../popover/popover.component';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@ngx-translate/core";
|
|
8
|
+
let nextContextSelectorId = 0;
|
|
9
|
+
const CONTEXT_SELECTOR_VIEWPORT_MARGIN = 20;
|
|
10
|
+
export class ContextSelectorComponent {
|
|
11
|
+
static allocateListboxId() {
|
|
12
|
+
const nextId = nextContextSelectorId;
|
|
13
|
+
nextContextSelectorId += 1;
|
|
14
|
+
return `context-selector-list-${nextId}`;
|
|
15
|
+
}
|
|
16
|
+
cdr = inject(ChangeDetectorRef);
|
|
17
|
+
workspaces = [];
|
|
18
|
+
footerButtonLabel = CONTEXT_SELECTOR_DEFAULT_FOOTER_BUTTON_LABEL_KEY;
|
|
19
|
+
showFooterButton = true;
|
|
20
|
+
disabled = false;
|
|
21
|
+
footerButtonClicked = new EventEmitter();
|
|
22
|
+
selected = new EventEmitter();
|
|
23
|
+
listItems;
|
|
24
|
+
listRef;
|
|
25
|
+
listboxId = ContextSelectorComponent.allocateListboxId();
|
|
26
|
+
open = false;
|
|
27
|
+
height = 0;
|
|
28
|
+
selectedItemIndex = 0;
|
|
29
|
+
currentItemIndex = 0;
|
|
30
|
+
get tabindex() {
|
|
31
|
+
return this.disabled ? -1 : 0;
|
|
32
|
+
}
|
|
33
|
+
get selectedWorkspace() {
|
|
34
|
+
return this.workspaces[this.selectedItemIndex] ?? null;
|
|
35
|
+
}
|
|
36
|
+
ngOnChanges(changes) {
|
|
37
|
+
if (changes['workspaces'] || changes['disabled']) {
|
|
38
|
+
this.ensureValidSelection();
|
|
39
|
+
this.cdr.markForCheck();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
onKeydown(event) {
|
|
43
|
+
if (this.disabled || !this.workspaces.length) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
if (this.open) {
|
|
49
|
+
this.selectIndex(this.currentItemIndex);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.toggle();
|
|
53
|
+
}
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (event.key === 'Escape') {
|
|
57
|
+
this.close();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (event.key === 'ArrowDown') {
|
|
61
|
+
event.preventDefault();
|
|
62
|
+
this.openIfNeeded();
|
|
63
|
+
this.moveCurrentIndex(1);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (event.key === 'ArrowUp') {
|
|
67
|
+
event.preventDefault();
|
|
68
|
+
this.openIfNeeded();
|
|
69
|
+
this.moveCurrentIndex(-1);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
toggle() {
|
|
73
|
+
if (this.disabled || !this.workspaces.length) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
this.open = !this.open;
|
|
77
|
+
if (this.open) {
|
|
78
|
+
this.scheduleListMeasurement();
|
|
79
|
+
}
|
|
80
|
+
this.cdr.markForCheck();
|
|
81
|
+
}
|
|
82
|
+
onPopoverOpenChange(open) {
|
|
83
|
+
if (open) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this.close();
|
|
87
|
+
}
|
|
88
|
+
selectIndex(index) {
|
|
89
|
+
const workspace = this.workspaces[index];
|
|
90
|
+
if (!workspace || workspace.disabled) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
this.selectedItemIndex = index;
|
|
94
|
+
this.currentItemIndex = index;
|
|
95
|
+
this.selected.emit(workspace);
|
|
96
|
+
this.close();
|
|
97
|
+
}
|
|
98
|
+
onFooterActionClick() {
|
|
99
|
+
this.close();
|
|
100
|
+
this.footerButtonClicked.emit();
|
|
101
|
+
}
|
|
102
|
+
openIfNeeded() {
|
|
103
|
+
if (this.open) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
this.open = true;
|
|
107
|
+
this.scheduleListMeasurement();
|
|
108
|
+
this.cdr.markForCheck();
|
|
109
|
+
}
|
|
110
|
+
moveCurrentIndex(step) {
|
|
111
|
+
if (!this.workspaces.length) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
let nextIndex = this.currentItemIndex;
|
|
115
|
+
for (const _workspace of this.workspaces) {
|
|
116
|
+
nextIndex = (nextIndex + step + this.workspaces.length) % this.workspaces.length;
|
|
117
|
+
if (!this.workspaces[nextIndex]?.disabled) {
|
|
118
|
+
this.currentItemIndex = nextIndex;
|
|
119
|
+
this.scrollToCurrentItem();
|
|
120
|
+
this.cdr.markForCheck();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
close() {
|
|
126
|
+
if (!this.open) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
this.open = false;
|
|
130
|
+
this.currentItemIndex = this.selectedItemIndex;
|
|
131
|
+
this.cdr.markForCheck();
|
|
132
|
+
}
|
|
133
|
+
ensureValidSelection() {
|
|
134
|
+
if (!this.workspaces.length) {
|
|
135
|
+
this.selectedItemIndex = 0;
|
|
136
|
+
this.currentItemIndex = 0;
|
|
137
|
+
this.open = false;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const nextIndex = this.workspaces.findIndex((workspace) => !workspace.disabled);
|
|
141
|
+
const fallbackIndex = nextIndex >= 0 ? nextIndex : 0;
|
|
142
|
+
if (!this.workspaces[this.selectedItemIndex] || this.workspaces[this.selectedItemIndex].disabled) {
|
|
143
|
+
this.selectedItemIndex = fallbackIndex;
|
|
144
|
+
}
|
|
145
|
+
if (!this.workspaces[this.currentItemIndex] || this.workspaces[this.currentItemIndex].disabled) {
|
|
146
|
+
this.currentItemIndex = this.selectedItemIndex;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
calculateListMaxHeight() {
|
|
150
|
+
const listElement = this.listRef?.nativeElement;
|
|
151
|
+
if (!listElement) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const { top } = listElement.getBoundingClientRect();
|
|
155
|
+
this.height = Math.max(0, window.innerHeight - top - CONTEXT_SELECTOR_VIEWPORT_MARGIN - (this.showFooterButton ? 64 : 0));
|
|
156
|
+
this.cdr.markForCheck();
|
|
157
|
+
}
|
|
158
|
+
scrollToCurrentItem() {
|
|
159
|
+
const currentItem = this.listItems?.toArray()[this.currentItemIndex];
|
|
160
|
+
currentItem?.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
161
|
+
}
|
|
162
|
+
scheduleListMeasurement() {
|
|
163
|
+
queueMicrotask(() => this.calculateListMaxHeight());
|
|
164
|
+
requestAnimationFrame(() => this.calculateListMaxHeight());
|
|
165
|
+
}
|
|
166
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ContextSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
167
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ContextSelectorComponent, isStandalone: true, selector: "sdc-context-selector, sdc-workspace-switch", inputs: { workspaces: "workspaces", footerButtonLabel: "footerButtonLabel", showFooterButton: "showFooterButton", disabled: "disabled" }, outputs: { footerButtonClicked: "footerButtonClicked", selected: "selected" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "attr.tabindex": "this.tabindex" } }, viewQueries: [{ propertyName: "listRef", first: true, predicate: ["listRef"], descendants: true }, { propertyName: "listItems", predicate: ["listItem"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"sdc-context-selector\"\n [class.sdc-context-selector--disabled]=\"disabled\"\n>\n <sdc-popover\n [open]=\"open\"\n appendTo=\"body\"\n [offset]=\"8\"\n [matchTriggerWidth]=\"true\"\n [toggleOnTriggerClick]=\"false\"\n [panelClass]=\"'sdc-context-selector__overlay-panel'\"\n (openChange)=\"onPopoverOpenChange($event)\"\n >\n <button\n sdc-popover-trigger\n type=\"button\"\n class=\"sdc-context-selector__button\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"open ? listboxId : null\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n >\n <span class=\"sdc-context-selector__text\">\n <span class=\"sdc-context-selector__title\">{{ selectedWorkspace?.title }}</span>\n <span class=\"sdc-context-selector__subtitle\">{{ selectedWorkspace?.subtitle }}</span>\n </span>\n\n <span class=\"sdc-context-selector__icons\">\n <i class=\"fas fa-chevron-up\"></i>\n <i class=\"fas fa-chevron-down\"></i>\n </span>\n </button>\n\n <div sdc-popover-content class=\"sdc-context-selector__panel\">\n <ul\n #listRef\n [id]=\"listboxId\"\n class=\"sdc-context-selector__list\"\n [style.max-height.px]=\"height\"\n >\n @for (workspace of workspaces; track workspace.id; let i = $index) {\n <li\n #listItem\n class=\"sdc-context-selector__item\"\n [class.sdc-context-selector__item--focused]=\"i === currentItemIndex && !workspace.disabled\"\n [class.sdc-context-selector__item--disabled]=\"workspace.disabled\"\n (click)=\"selectIndex(i)\"\n (keydown.enter)=\"selectIndex(i)\"\n (keydown.space)=\"selectIndex(i)\"\n [attr.tabindex]=\"workspace.disabled ? -1 : 0\"\n >\n <span class=\"sdc-context-selector__text\">\n <span class=\"sdc-context-selector__title\">{{ workspace.title }}</span>\n <span class=\"sdc-context-selector__subtitle\">{{ workspace.subtitle }}</span>\n </span>\n\n @if (i === selectedItemIndex) {\n <i class=\"fas fa-check sdc-context-selector__active-icon\"></i>\n }\n </li>\n }\n </ul>\n\n @if (showFooterButton) {\n <div class=\"sdc-context-selector__footer\">\n <button\n type=\"button\"\n class=\"sdc-context-selector__footer-button\"\n (click)=\"onFooterActionClick()\"\n >\n <i class=\"fas fa-plus\"></i>\n <span>{{ footerButtonLabel | translate }}</span>\n </button>\n </div>\n }\n </div>\n </sdc-popover>\n</div>\n", styles: [".sdc-context-selector{display:block;width:min(100%,20.25rem);max-width:100%;border:1px solid transparent;border-radius:.25rem}.sdc-context-selector:focus{border-color:#428bca}.sdc-context-selector__button{display:flex;width:100%;align-items:center;justify-content:space-between;border:0;border-radius:.25rem;background:#fff;cursor:pointer;text-align:left}.sdc-context-selector__text{display:flex;flex:1 1 auto;flex-direction:column;padding:.75rem}.sdc-context-selector__title{color:#333;font-size:.875rem;font-weight:700;line-height:1.5;text-transform:uppercase}.sdc-context-selector__subtitle{color:#999;font-size:.75rem;line-height:1.5}.sdc-context-selector__icons{display:flex;flex-direction:column;gap:.125rem;margin:0 .75rem}.sdc-context-selector__panel{overflow:hidden;border-radius:.25rem;background:#fff}.sdc-context-selector__list{margin:0;overflow:auto;padding:.25rem 0 0;list-style:none}.sdc-context-selector__item{display:flex;align-items:center;justify-content:space-between;cursor:pointer}.sdc-context-selector__item:hover:not(.sdc-context-selector__item--disabled),.sdc-context-selector__item--focused{background:#f1f7f8}.sdc-context-selector__item--disabled{cursor:default;opacity:.5}.sdc-context-selector__active-icon{margin:0 .75rem;color:#7892a1;font-size:.75rem}.sdc-context-selector__footer{border-top:1px solid #ccc;padding:.75rem}.sdc-context-selector__footer-button{display:flex;width:100%;align-items:center;justify-content:center;gap:.5rem;padding:.5rem .75rem;border:1px solid #d8d8d8;border-radius:.25rem;background:#fff;cursor:pointer}.sdc-context-selector__footer-button:active{border-color:#428bca}.sdc-context-selector--disabled .sdc-context-selector__button{cursor:default}.sdc-context-selector--disabled .sdc-context-selector__title,.sdc-context-selector--disabled .sdc-context-selector__subtitle,.sdc-context-selector--disabled .sdc-context-selector__icons{color:#ccc}::ng-deep .sdc-popover__panel.sdc-context-selector__overlay-panel{padding:0;overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: PopoverComponent, selector: "sdc-popover", inputs: ["open", "disabled", "toggleOnTriggerClick", "closeOnOutsideClick", "closeOnEscape", "trapFocus", "focusOnOpen", "restoreFocusOnClose", "ariaLabel", "appendTo", "zIndex", "offset", "placement", "role", "matchTriggerWidth", "panelWidth", "panelMinWidth", "panelMaxWidth", "panelMaxHeight", "panelClass"], outputs: ["openChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
168
|
+
}
|
|
169
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ContextSelectorComponent, decorators: [{
|
|
170
|
+
type: Component,
|
|
171
|
+
args: [{ selector: 'sdc-context-selector, sdc-workspace-switch', standalone: true, imports: [CommonModule, TranslateModule, PopoverComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div\n class=\"sdc-context-selector\"\n [class.sdc-context-selector--disabled]=\"disabled\"\n>\n <sdc-popover\n [open]=\"open\"\n appendTo=\"body\"\n [offset]=\"8\"\n [matchTriggerWidth]=\"true\"\n [toggleOnTriggerClick]=\"false\"\n [panelClass]=\"'sdc-context-selector__overlay-panel'\"\n (openChange)=\"onPopoverOpenChange($event)\"\n >\n <button\n sdc-popover-trigger\n type=\"button\"\n class=\"sdc-context-selector__button\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"open ? listboxId : null\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n >\n <span class=\"sdc-context-selector__text\">\n <span class=\"sdc-context-selector__title\">{{ selectedWorkspace?.title }}</span>\n <span class=\"sdc-context-selector__subtitle\">{{ selectedWorkspace?.subtitle }}</span>\n </span>\n\n <span class=\"sdc-context-selector__icons\">\n <i class=\"fas fa-chevron-up\"></i>\n <i class=\"fas fa-chevron-down\"></i>\n </span>\n </button>\n\n <div sdc-popover-content class=\"sdc-context-selector__panel\">\n <ul\n #listRef\n [id]=\"listboxId\"\n class=\"sdc-context-selector__list\"\n [style.max-height.px]=\"height\"\n >\n @for (workspace of workspaces; track workspace.id; let i = $index) {\n <li\n #listItem\n class=\"sdc-context-selector__item\"\n [class.sdc-context-selector__item--focused]=\"i === currentItemIndex && !workspace.disabled\"\n [class.sdc-context-selector__item--disabled]=\"workspace.disabled\"\n (click)=\"selectIndex(i)\"\n (keydown.enter)=\"selectIndex(i)\"\n (keydown.space)=\"selectIndex(i)\"\n [attr.tabindex]=\"workspace.disabled ? -1 : 0\"\n >\n <span class=\"sdc-context-selector__text\">\n <span class=\"sdc-context-selector__title\">{{ workspace.title }}</span>\n <span class=\"sdc-context-selector__subtitle\">{{ workspace.subtitle }}</span>\n </span>\n\n @if (i === selectedItemIndex) {\n <i class=\"fas fa-check sdc-context-selector__active-icon\"></i>\n }\n </li>\n }\n </ul>\n\n @if (showFooterButton) {\n <div class=\"sdc-context-selector__footer\">\n <button\n type=\"button\"\n class=\"sdc-context-selector__footer-button\"\n (click)=\"onFooterActionClick()\"\n >\n <i class=\"fas fa-plus\"></i>\n <span>{{ footerButtonLabel | translate }}</span>\n </button>\n </div>\n }\n </div>\n </sdc-popover>\n</div>\n", styles: [".sdc-context-selector{display:block;width:min(100%,20.25rem);max-width:100%;border:1px solid transparent;border-radius:.25rem}.sdc-context-selector:focus{border-color:#428bca}.sdc-context-selector__button{display:flex;width:100%;align-items:center;justify-content:space-between;border:0;border-radius:.25rem;background:#fff;cursor:pointer;text-align:left}.sdc-context-selector__text{display:flex;flex:1 1 auto;flex-direction:column;padding:.75rem}.sdc-context-selector__title{color:#333;font-size:.875rem;font-weight:700;line-height:1.5;text-transform:uppercase}.sdc-context-selector__subtitle{color:#999;font-size:.75rem;line-height:1.5}.sdc-context-selector__icons{display:flex;flex-direction:column;gap:.125rem;margin:0 .75rem}.sdc-context-selector__panel{overflow:hidden;border-radius:.25rem;background:#fff}.sdc-context-selector__list{margin:0;overflow:auto;padding:.25rem 0 0;list-style:none}.sdc-context-selector__item{display:flex;align-items:center;justify-content:space-between;cursor:pointer}.sdc-context-selector__item:hover:not(.sdc-context-selector__item--disabled),.sdc-context-selector__item--focused{background:#f1f7f8}.sdc-context-selector__item--disabled{cursor:default;opacity:.5}.sdc-context-selector__active-icon{margin:0 .75rem;color:#7892a1;font-size:.75rem}.sdc-context-selector__footer{border-top:1px solid #ccc;padding:.75rem}.sdc-context-selector__footer-button{display:flex;width:100%;align-items:center;justify-content:center;gap:.5rem;padding:.5rem .75rem;border:1px solid #d8d8d8;border-radius:.25rem;background:#fff;cursor:pointer}.sdc-context-selector__footer-button:active{border-color:#428bca}.sdc-context-selector--disabled .sdc-context-selector__button{cursor:default}.sdc-context-selector--disabled .sdc-context-selector__title,.sdc-context-selector--disabled .sdc-context-selector__subtitle,.sdc-context-selector--disabled .sdc-context-selector__icons{color:#ccc}::ng-deep .sdc-popover__panel.sdc-context-selector__overlay-panel{padding:0;overflow:hidden}\n"] }]
|
|
172
|
+
}], propDecorators: { workspaces: [{
|
|
173
|
+
type: Input,
|
|
174
|
+
args: [{ required: true }]
|
|
175
|
+
}], footerButtonLabel: [{
|
|
176
|
+
type: Input
|
|
177
|
+
}], showFooterButton: [{
|
|
178
|
+
type: Input
|
|
179
|
+
}], disabled: [{
|
|
180
|
+
type: Input
|
|
181
|
+
}], footerButtonClicked: [{
|
|
182
|
+
type: Output
|
|
183
|
+
}], selected: [{
|
|
184
|
+
type: Output
|
|
185
|
+
}], listItems: [{
|
|
186
|
+
type: ViewChildren,
|
|
187
|
+
args: ['listItem']
|
|
188
|
+
}], listRef: [{
|
|
189
|
+
type: ViewChild,
|
|
190
|
+
args: ['listRef']
|
|
191
|
+
}], tabindex: [{
|
|
192
|
+
type: HostBinding,
|
|
193
|
+
args: ['attr.tabindex']
|
|
194
|
+
}], onKeydown: [{
|
|
195
|
+
type: HostListener,
|
|
196
|
+
args: ['keydown', ['$event']]
|
|
197
|
+
}] } });
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2NvbnRleHQtc2VsZWN0b3IvY29udGV4dC1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2NvbnRleHQtc2VsZWN0b3IvY29udGV4dC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUdULFlBQVksRUFDWixpQkFBaUIsRUFDakIsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZ0RBQWdELEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUUvRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBRWhFLElBQUkscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO0FBVzVDLE1BQU0sT0FBTyx3QkFBd0I7SUFDM0IsTUFBTSxDQUFDLGlCQUFpQjtRQUM5QixNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQztRQUNyQyxxQkFBcUIsSUFBSSxDQUFDLENBQUM7UUFDM0IsT0FBTyx5QkFBeUIsTUFBTSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVnQixHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFdEIsVUFBVSxHQUFnQixFQUFFLENBQUM7SUFDL0MsaUJB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QUM7UUFDckUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFDcEQscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO3dHQXRNVSx3QkFBd0I7NEZBQXhCLHdCQUF3Qiw4bUJDckNyQyw0cEZBK0VBLHNnRURoRFksWUFBWSw4QkFBRSxlQUFlLDRGQUFFLGdCQUFnQjs7NEZBTTlDLHdCQUF3QjtrQkFUcEMsU0FBUzsrQkFDRSw0Q0FBNEMsY0FDMUMsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxtQkFHekMsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsUUFBUTs4QkFXZCxVQUFVO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUU2QixTQUFTO3NCQUE1QyxZQUFZO3VCQUFDLFVBQVU7Z0JBQ1EsT0FBTztzQkFBdEMsU0FBUzt1QkFBQyxTQUFTO2dCQVNOLFFBQVE7c0JBRHJCLFdBQVc7dUJBQUMsZUFBZTtnQkFpQmxCLFNBQVM7c0JBRGxCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBDT05URVhUX1NFTEVDVE9SX0RFRkFVTFRfRk9PVEVSX0JVVFRPTl9MQUJFTF9LRVkgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnN0YW50cy9jb250ZXh0LXNlbGVjdG9yLmNvbnN0JztcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy93b3Jrc3BhY2Utc3dpdGNoLnR5cGUnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQnO1xuXG5sZXQgbmV4dENvbnRleHRTZWxlY3RvcklkID0gMDtcbmNvbnN0IENPTlRFWFRfU0VMRUNUT1JfVklFV1BPUlRfTUFSR0lOID0gMjA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NkYy1jb250ZXh0LXNlbGVjdG9yLCBzZGMtd29ya3NwYWNlLXN3aXRjaCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgUG9wb3ZlckNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZXh0LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29udGV4dC1zZWxlY3Rvci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWRcbn0pXG5leHBvcnQgY2xhc3MgQ29udGV4dFNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgYWxsb2NhdGVMaXN0Ym94SWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBuZXh0SWQgPSBuZXh0Q29udGV4dFNlbGVjdG9ySWQ7XG4gICAgbmV4dENvbnRleHRTZWxlY3RvcklkICs9IDE7XG4gICAgcmV0dXJuIGBjb250ZXh0LXNlbGVjdG9yLWxpc3QtJHtuZXh0SWR9YDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB3b3Jrc3BhY2VzOiBXb3Jrc3BhY2VbXSA9IFtdO1xuICBASW5wdXQoKSBmb290ZXJCdXR0b25MYWJlbCA9IENPTlRFWFRfU0VMRUNUT1JfREVGQVVMVF9GT09URVJfQlVUVE9OX0xBQkVMX0tFWTtcbiAgQElucHV0KCkgc2hvd0Zvb3RlckJ1dHRvbiA9IHRydWU7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGZvb3RlckJ1dHRvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8V29ya3NwYWNlPigpO1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ2xpc3RJdGVtJykgcHJvdGVjdGVkIGxpc3RJdGVtcz86IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG4gIEBWaWV3Q2hpbGQoJ2xpc3RSZWYnKSBwcm90ZWN0ZWQgbGlzdFJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBsaXN0Ym94SWQgPSBDb250ZXh0U2VsZWN0b3JDb21wb25lbnQuYWxsb2NhdGVMaXN0Ym94SWQoKTtcbiAgcHJvdGVjdGVkIG9wZW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGhlaWdodCA9IDA7XG4gIHByb3RlY3RlZCBzZWxlY3RlZEl0ZW1JbmRleCA9IDA7XG4gIHByb3RlY3RlZCBjdXJyZW50SXRlbUluZGV4ID0gMDtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBwcm90ZWN0ZWQgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6IDA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHNlbGVjdGVkV29ya3NwYWNlKCk6IFdvcmtzcGFjZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLndvcmtzcGFjZXNbdGhpcy5zZWxlY3RlZEl0ZW1JbmRleF0gPz8gbnVsbDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snd29ya3NwYWNlcyddIHx8IGNoYW5nZXNbJ2Rpc2FibGVkJ10pIHtcbiAgICAgIHRoaXMuZW5zdXJlVmFsaWRTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBwcm90ZWN0ZWQgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMud29ya3NwYWNlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0SW5kZXgodGhpcy5jdXJyZW50SXRlbUluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5vcGVuSWZOZWVkZWQoKTtcbiAgICAgIHRoaXMubW92ZUN1cnJlbnRJbmRleCgxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm9wZW5JZk5lZWRlZCgpO1xuICAgICAgdGhpcy5tb3ZlQ3VycmVudEluZGV4KC0xKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLndvcmtzcGFjZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcblxuICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVMaXN0TWVhc3VyZW1lbnQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblBvcG92ZXJPcGVuQ2hhbmdlKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAob3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd29ya3NwYWNlID0gdGhpcy53b3Jrc3BhY2VzW2luZGV4XTtcblxuICAgIGlmICghd29ya3NwYWNlIHx8IHdvcmtzcGFjZS5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmN1cnJlbnRJdGVtSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnNlbGVjdGVkLmVtaXQod29ya3NwYWNlKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Gb290ZXJBY3Rpb25DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy5mb290ZXJCdXR0b25DbGlja2VkLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbklmTmVlZGVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIHRoaXMuc2NoZWR1bGVMaXN0TWVhc3VyZW1lbnQoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZUN1cnJlbnRJbmRleChzdGVwOiAxIHwgLTEpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMud29ya3NwYWNlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbmV4dEluZGV4ID0gdGhpcy5jdXJyZW50SXRlbUluZGV4O1xuXG4gICAgZm9yIChjb25zdCBfd29ya3NwYWNlIG9mIHRoaXMud29ya3NwYWNlcykge1xuICAgICAgbmV4dEluZGV4ID0gKG5leHRJbmRleCArIHN0ZXAgKyB0aGlzLndvcmtzcGFjZXMubGVuZ3RoKSAlIHRoaXMud29ya3NwYWNlcy5sZW5ndGg7XG5cbiAgICAgIGlmICghdGhpcy53b3Jrc3BhY2VzW25leHRJbmRleF0/LmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEl0ZW1JbmRleCA9IG5leHRJbmRleDtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0N1cnJlbnRJdGVtKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuY3VycmVudEl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXg7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVZhbGlkU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IDA7XG4gICAgICB0aGlzLmN1cnJlbnRJdGVtSW5kZXggPSAwO1xuICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEluZGV4ID0gdGhpcy53b3Jrc3BhY2VzLmZpbmRJbmRleCgod29ya3NwYWNlKSA9PiAhd29ya3NwYWNlLmRpc2FibGVkKTtcbiAgICBjb25zdCBmYWxsYmFja0luZGV4ID0gbmV4dEluZGV4ID49IDAgPyBuZXh0SW5kZXggOiAwO1xuXG4gICAgaWYgKCF0aGlzLndvcmtzcGFjZXNbdGhpcy5zZWxlY3RlZEl0ZW1JbmRleF0gfHwgdGhpcy53b3Jrc3BhY2VzW3RoaXMuc2VsZWN0ZWRJdGVtSW5kZXhdLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gZmFsbGJhY2tJbmRleDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMud29ya3NwYWNlc1t0aGlzLmN1cnJlbnRJdGVtSW5kZXhdIHx8IHRoaXMud29ya3NwYWNlc1t0aGlzLmN1cnJlbnRJdGVtSW5kZXhdLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRJdGVtSW5kZXggPSB0aGlzLnNlbGVjdGVkSXRlbUluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlTGlzdE1heEhlaWdodCgpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0RWxlbWVudCA9IHRoaXMubGlzdFJlZj8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghbGlzdEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHRvcCB9ID0gbGlzdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5oZWlnaHQgPSBNYXRoLm1heCgwLCB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0b3AgLSBDT05URVhUX1NFTEVDVE9SX1ZJRVdQT1JUX01BUkdJTiAtICh0aGlzLnNob3dGb290ZXJCdXR0b24gPyA2NCA6IDApKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsVG9DdXJyZW50SXRlbSgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50SXRlbSA9IHRoaXMubGlzdEl0ZW1zPy50b0FycmF5KClbdGhpcy5jdXJyZW50SXRlbUluZGV4XTtcbiAgICBjdXJyZW50SXRlbT8ubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICduZWFyZXN0JyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVMaXN0TWVhc3VyZW1lbnQoKTogdm9pZCB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5jYWxjdWxhdGVMaXN0TWF4SGVpZ2h0KCkpO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmNhbGN1bGF0ZUxpc3RNYXhIZWlnaHQoKSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJzZGMtY29udGV4dC1zZWxlY3RvclwiXG4gIFtjbGFzcy5zZGMtY29udGV4dC1zZWxlY3Rvci0tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuPlxuICA8c2RjLXBvcG92ZXJcbiAgICBbb3Blbl09XCJvcGVuXCJcbiAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgIFtvZmZzZXRdPVwiOFwiXG4gICAgW21hdGNoVHJpZ2dlcldpZHRoXT1cInRydWVcIlxuICAgIFt0b2dnbGVPblRyaWdnZXJDbGlja109XCJmYWxzZVwiXG4gICAgW3BhbmVsQ2xhc3NdPVwiJ3NkYy1jb250ZXh0LXNlbGVjdG9yX19vdmVybGF5LXBhbmVsJ1wiXG4gICAgKG9wZW5DaGFuZ2UpPVwib25Qb3BvdmVyT3BlbkNoYW5nZSgkZXZlbnQpXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIHNkYy1wb3BvdmVyLXRyaWdnZXJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJzZGMtY29udGV4dC1zZWxlY3Rvcl9fYnV0dG9uXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5cIlxuICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJvcGVuID8gbGlzdGJveElkIDogbnVsbFwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbnRleHQtc2VsZWN0b3JfX3RleHRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtY29udGV4dC1zZWxlY3Rvcl9fdGl0bGVcIj57eyBzZWxlY3RlZFdvcmtzcGFjZT8udGl0bGUgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbnRleHQtc2VsZWN0b3JfX3N1YnRpdGxlXCI+e3sgc2VsZWN0ZWRXb3Jrc3BhY2U/LnN1YnRpdGxlIH19PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8c3BhbiBjbGFzcz1cInNkYy1jb250ZXh0LXNlbGVjdG9yX19pY29uc1wiPlxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jaGV2cm9uLXVwXCI+PC9pPlxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jaGV2cm9uLWRvd25cIj48L2k+XG4gICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2IHNkYy1wb3BvdmVyLWNvbnRlbnQgY2xhc3M9XCJzZGMtY29udGV4dC1zZWxlY3Rvcl9fcGFuZWxcIj5cbiAgICAgIDx1bFxuICAgICAgICAjbGlzdFJlZlxuICAgICAgICBbaWRdPVwibGlzdGJveElkXCJcbiAgICAgICAgY2xhc3M9XCJzZGMtY29udGV4dC1zZWxlY3Rvcl9fbGlzdFwiXG4gICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImhlaWdodFwiXG4gICAgICA+XG4gICAgICAgIEBmb3IgKHdvcmtzcGFjZSBvZiB3b3Jrc3BhY2VzOyB0cmFjayB3b3Jrc3BhY2UuaWQ7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDxsaVxuICAgICAgICAgICNsaXN0SXRlbVxuICAgICAgICAgIGNsYXNzPVwic2RjLWNvbnRleHQtc2VsZWN0b3JfX2l0ZW1cIlxuICAgICAgICAgIFtjbGFzcy5zZGMtY29udGV4dC1zZWxlY3Rvcl9faXRlbS0tZm9jdXNlZF09XCJpID09PSBjdXJyZW50SXRlbUluZGV4ICYmICF3b3Jrc3BhY2UuZGlzYWJsZWRcIlxuICAgICAgICAgIFtjbGFzcy5zZGMtY29udGV4dC1zZWxlY3Rvcl9faXRlbS0tZGlzYWJsZWRdPVwid29ya3NwYWNlLmRpc2FibGVkXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SW5kZXgoaSlcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlbGVjdEluZGV4KGkpXCJcbiAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJzZWxlY3RJbmRleChpKVwiXG4gICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwid29ya3NwYWNlLmRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbnRleHQtc2VsZWN0b3JfX3RleHRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbnRleHQtc2VsZWN0b3JfX3RpdGxlXCI+e3sgd29ya3NwYWNlLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtY29udGV4dC1zZWxlY3Rvcl9fc3VidGl0bGVcIj57eyB3b3Jrc3BhY2Uuc3VidGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgQGlmIChpID09PSBzZWxlY3RlZEl0ZW1JbmRleCkge1xuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZWNrIHNkYy1jb250ZXh0LXNlbGVjdG9yX19hY3RpdmUtaWNvblwiPjwvaT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbGk+XG4gICAgICAgIH1cbiAgICAgIDwvdWw+XG5cbiAgICAgIEBpZiAoc2hvd0Zvb3RlckJ1dHRvbikge1xuICAgICAgPGRpdiBjbGFzcz1cInNkYy1jb250ZXh0LXNlbGVjdG9yX19mb290ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic2RjLWNvbnRleHQtc2VsZWN0b3JfX2Zvb3Rlci1idXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJvbkZvb3RlckFjdGlvbkNsaWNrKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1c1wiPjwvaT5cbiAgICAgICAgICA8c3Bhbj57eyBmb290ZXJCdXR0b25MYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9zZGMtcG9wb3Zlcj5cbjwvZGl2PlxuIl19
|
|
@@ -247,7 +247,7 @@ export class FiltersComponent {
|
|
|
247
247
|
return [model];
|
|
248
248
|
}
|
|
249
249
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
250
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FiltersComponent, isStandalone: true, selector: "sdc-filters", inputs: { data: "data", config: "config", loading: "loading", filterColumnClass: "filterColumnClass" }, outputs: { filtered: "filtered" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"grid min-h-10rem\" role=\"search\"\n [attr.aria-label]=\"'platform.datacore.accessibility.filters_section' | translate\">\n @if (config!.search!.show !== false) {\n <div class=\"col-12 md:col-12 lg:col-6 xl:col-4\">\n <sdc-searchbox [disabled]=\"loading\" [label]=\"config!.search!.label || ''\"\n [placeholder]=\"config!.search!.placeholder || ''\" [size]=\"'small'\"\n [triggerMode]=\"config!.search!.triggerMode || 'auto'\" (onSearch)=\"onSearch($event)\" (onClear)=\"onClear()\">\n </sdc-searchbox>\n </div>\n }\n @if (config!.filters!.length) {\n @for (def of config.filters; track def.key) {\n <div class=\"sdc-filters__filter-item\" [ngClass]=\"filterItemColumnClass\" [class.mb-3]=\"isMobile\">\n <sdc-combobox width=\"100%\" [label]=\"def.label || ''\" [disabled]=\"loading\" [placeholder]=\"def.placeholder || ''\"\n [multiple]=\"(def.type ?? 'multiselect') === 'multiselect'\" [options]=\"filterOptionsMap[def.key]\"\n [(ngModel)]=\"selectedValues[def.key]\" (ngModelChange)=\"onComboChange(def.key, $event)\"\n [infoTooltip]=\"def.infoTooltip || ''\"\n [infoTooltipAllowHtml]=\"def.infoTooltipAllowHtml ?? false\"\n [infoTooltipPosition]=\"def.infoTooltipPosition ?? 'right'\"\n [attr.aria-label]=\"\n def.label || \n def.placeholder || \n ('platform.datacore.accessibility.filter_field' | translate)\n \">\n </sdc-combobox>\n </div>\n }\n }\n</section>\n", styles: [".bg-disabled{background-color:var(--p-inputtext-disabled-background)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { 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: ComboboxComponent, selector: "sdc-combobox", inputs: ["multiple", "appendTo", "zIndex", "options", "overrideChipMessage", "maxSelectedLabels", "showClear", "iconSelector", "showIconClass", "infoTooltip", "infoTooltipPosition", "infoTooltipEvent", "infoTooltipAllowHtml"], outputs: ["onSelectedItem", "panelClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
250
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FiltersComponent, isStandalone: true, selector: "sdc-filters", inputs: { data: "data", config: "config", loading: "loading", filterColumnClass: "filterColumnClass" }, outputs: { filtered: "filtered" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"grid min-h-10rem\" role=\"search\"\n [attr.aria-label]=\"'platform.datacore.accessibility.filters_section' | translate\">\n @if (config!.search!.show !== false) {\n <div class=\"col-12 md:col-12 lg:col-6 xl:col-4\">\n <sdc-searchbox [disabled]=\"loading\" [label]=\"config!.search!.label || ''\"\n [placeholder]=\"config!.search!.placeholder || ''\" [size]=\"'small'\"\n [triggerMode]=\"config!.search!.triggerMode || 'auto'\" (onSearch)=\"onSearch($event)\" (onClear)=\"onClear()\">\n </sdc-searchbox>\n </div>\n }\n @if (config!.filters!.length) {\n @for (def of config.filters; track def.key) {\n <div class=\"sdc-filters__filter-item\" [ngClass]=\"filterItemColumnClass\" [class.mb-3]=\"isMobile\">\n <sdc-combobox width=\"100%\" [label]=\"def.label || ''\" [disabled]=\"loading\" [placeholder]=\"def.placeholder || ''\"\n [multiple]=\"(def.type ?? 'multiselect') === 'multiselect'\" [options]=\"filterOptionsMap[def.key]\"\n [(ngModel)]=\"selectedValues[def.key]\" (ngModelChange)=\"onComboChange(def.key, $event)\"\n [infoTooltip]=\"def.infoTooltip || ''\"\n [infoTooltipAllowHtml]=\"def.infoTooltipAllowHtml ?? false\"\n [infoTooltipPosition]=\"def.infoTooltipPosition ?? 'right'\"\n [attr.aria-label]=\"\n def.label || \n def.placeholder || \n ('platform.datacore.accessibility.filter_field' | translate)\n \">\n </sdc-combobox>\n </div>\n }\n }\n</section>\n", styles: [".bg-disabled{background-color:var(--p-inputtext-disabled-background)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { 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: ComboboxComponent, selector: "sdc-combobox", inputs: ["multiple", "appendTo", "zIndex", "options", "overrideChipMessage", "maxSelectedLabels", "showClear", "searchable", "iconSelector", "showIconClass", "infoTooltip", "infoTooltipPosition", "infoTooltipEvent", "infoTooltipAllowHtml"], outputs: ["onSelectedItem", "panelClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
251
251
|
}
|
|
252
252
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FiltersComponent, decorators: [{
|
|
253
253
|
type: Component,
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class GanttSideTableComponent {
|
|
4
|
+
tasks = [];
|
|
5
|
+
columnTitle = '';
|
|
6
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttSideTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GanttSideTableComponent, isStandalone: true, selector: "sdc-gantt-side-table", inputs: { tasks: "tasks", columnTitle: "columnTitle" }, ngImport: i0, template: "<div class=\"sdc-gantt-side-table\">\n <div class=\"sdc-gantt-side-table__header\">{{ columnTitle }}</div>\n\n @for (group of tasks; track group.id) {\n @for (task of group.tasks; track task.id) {\n <div class=\"sdc-gantt-side-table__row\">\n <div class=\"sdc-gantt-side-table__title\" [title]=\"task.name\">{{ task.name }}</div>\n </div>\n }\n }\n</div>\n", styles: [":host{display:block;flex-shrink:0}.sdc-gantt-side-table{border-right:1px solid var(--sdc-gantt-side-table-border, #e0e0e0);display:flex;flex-direction:column;min-width:160px;width:200px}.sdc-gantt-side-table__header{align-items:center;background:var(--sdc-gantt-header-bg, #fff);border-bottom:1px solid var(--sdc-gantt-side-table-border, #e0e0e0);display:flex;font-size:13px;font-weight:600;height:var(--sdc-gantt-row-height, 44px);min-height:calc(var(--sdc-gantt-row-height, 44px) * 2 + 6px);padding:0 12px}.sdc-gantt-side-table__row{align-items:center;border-bottom:1px solid var(--sdc-gantt-side-table-border, #e0e0e0);display:flex;height:var(--sdc-gantt-row-height, 44px);min-height:var(--sdc-gantt-row-height, 44px);padding:0 12px}.sdc-gantt-side-table__row:nth-child(2n){background:var(--sdc-gantt-row-even-bg, #f5f5f5)}.sdc-gantt-side-table__row:nth-child(odd){background:var(--sdc-gantt-row-odd-bg, #fff)}.sdc-gantt-side-table__title{font-size:13px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
8
|
+
}
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttSideTableComponent, decorators: [{
|
|
10
|
+
type: Component,
|
|
11
|
+
args: [{ standalone: true, selector: 'sdc-gantt-side-table', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"sdc-gantt-side-table\">\n <div class=\"sdc-gantt-side-table__header\">{{ columnTitle }}</div>\n\n @for (group of tasks; track group.id) {\n @for (task of group.tasks; track task.id) {\n <div class=\"sdc-gantt-side-table__row\">\n <div class=\"sdc-gantt-side-table__title\" [title]=\"task.name\">{{ task.name }}</div>\n </div>\n }\n }\n</div>\n", styles: [":host{display:block;flex-shrink:0}.sdc-gantt-side-table{border-right:1px solid var(--sdc-gantt-side-table-border, #e0e0e0);display:flex;flex-direction:column;min-width:160px;width:200px}.sdc-gantt-side-table__header{align-items:center;background:var(--sdc-gantt-header-bg, #fff);border-bottom:1px solid var(--sdc-gantt-side-table-border, #e0e0e0);display:flex;font-size:13px;font-weight:600;height:var(--sdc-gantt-row-height, 44px);min-height:calc(var(--sdc-gantt-row-height, 44px) * 2 + 6px);padding:0 12px}.sdc-gantt-side-table__row{align-items:center;border-bottom:1px solid var(--sdc-gantt-side-table-border, #e0e0e0);display:flex;height:var(--sdc-gantt-row-height, 44px);min-height:var(--sdc-gantt-row-height, 44px);padding:0 12px}.sdc-gantt-side-table__row:nth-child(2n){background:var(--sdc-gantt-row-even-bg, #f5f5f5)}.sdc-gantt-side-table__row:nth-child(odd){background:var(--sdc-gantt-row-odd-bg, #fff)}.sdc-gantt-side-table__title{font-size:13px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"] }]
|
|
12
|
+
}], propDecorators: { tasks: [{
|
|
13
|
+
type: Input
|
|
14
|
+
}], columnTitle: [{
|
|
15
|
+
type: Input
|
|
16
|
+
}] } });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtc2lkZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2dhbnR0L2NvbXBvbmVudHMvZ2FudHQtc2lkZS10YWJsZS9nYW50dC1zaWRlLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvZ2FudHQvY29tcG9uZW50cy9nYW50dC1zaWRlLXRhYmxlL2dhbnR0LXNpZGUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBWTdGLE1BQU0sT0FBTyx1QkFBdUI7SUFDekIsS0FBSyxHQUFxQixFQUFFLENBQUM7SUFDN0IsV0FBVyxHQUFHLEVBQUUsQ0FBQzt3R0FGZix1QkFBdUI7NEZBQXZCLHVCQUF1Qix3SUNacEMsZ1lBV0E7OzRGRENhLHVCQUF1QjtrQkFSbkMsU0FBUztpQ0FDSSxJQUFJLFlBQ04sc0JBQXNCLG1CQUdmLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLFFBQVE7OEJBR2hDLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB0eXBlIHsgR2FudHRUYXNrR3JvdXAgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3R5cGVzL2dhbnR0LnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdzZGMtZ2FudHQtc2lkZS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9nYW50dC1zaWRlLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2FudHQtc2lkZS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXG59KVxuZXhwb3J0IGNsYXNzIEdhbnR0U2lkZVRhYmxlQ29tcG9uZW50IHtcbiAgQElucHV0KCkgdGFza3M6IEdhbnR0VGFza0dyb3VwW10gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uVGl0bGUgPSAnJztcbn1cbiIsIjxkaXYgY2xhc3M9XCJzZGMtZ2FudHQtc2lkZS10YWJsZVwiPlxuICA8ZGl2IGNsYXNzPVwic2RjLWdhbnR0LXNpZGUtdGFibGVfX2hlYWRlclwiPnt7IGNvbHVtblRpdGxlIH19PC9kaXY+XG5cbiAgQGZvciAoZ3JvdXAgb2YgdGFza3M7IHRyYWNrIGdyb3VwLmlkKSB7XG4gICAgQGZvciAodGFzayBvZiBncm91cC50YXNrczsgdHJhY2sgdGFzay5pZCkge1xuICAgICAgPGRpdiBjbGFzcz1cInNkYy1nYW50dC1zaWRlLXRhYmxlX19yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1nYW50dC1zaWRlLXRhYmxlX190aXRsZVwiIFt0aXRsZV09XCJ0YXNrLm5hbWVcIj57eyB0YXNrLm5hbWUgfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgfVxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native Date API utilities for the Gantt component.
|
|
3
|
+
* No moment.js dependency.
|
|
4
|
+
*/
|
|
5
|
+
// Time constants (in milliseconds)
|
|
6
|
+
const MS_PER_DAY = 86_400_000;
|
|
7
|
+
const MS_PER_HOUR = 3_600_000;
|
|
8
|
+
// Date/time calculation constants
|
|
9
|
+
const SUNDAY = 0;
|
|
10
|
+
const SATURDAY = 6;
|
|
11
|
+
const MONDAY_OFFSET_FROM_SUNDAY = 1;
|
|
12
|
+
const ISO_WEEK_DAY_OFFSET_FOR_MONDAY = -6;
|
|
13
|
+
const FIRST_DAY_OF_MONTH = 1;
|
|
14
|
+
const PADDED_LENGTH = 2;
|
|
15
|
+
/** Add N days to a date (returns new Date, does not mutate). */
|
|
16
|
+
export function addDays(date, days) {
|
|
17
|
+
const d = new Date(date);
|
|
18
|
+
d.setDate(d.getDate() + days);
|
|
19
|
+
return d;
|
|
20
|
+
}
|
|
21
|
+
/** Add N hours to a date (returns new Date, does not mutate). */
|
|
22
|
+
export function addHours(date, hours) {
|
|
23
|
+
const d = new Date(date);
|
|
24
|
+
d.setHours(d.getHours() + hours);
|
|
25
|
+
return d;
|
|
26
|
+
}
|
|
27
|
+
/** Difference in whole days between two dates (b - a). */
|
|
28
|
+
export function diffDays(a, b) {
|
|
29
|
+
return Math.round((b.getTime() - a.getTime()) / MS_PER_DAY);
|
|
30
|
+
}
|
|
31
|
+
/** Difference in whole hours between two dates (b - a). */
|
|
32
|
+
export function diffHours(a, b) {
|
|
33
|
+
return Math.round((b.getTime() - a.getTime()) / MS_PER_HOUR);
|
|
34
|
+
}
|
|
35
|
+
/** Format a date for display (e.g. "01 jan. 2024"). */
|
|
36
|
+
export function formatDate(date, locale = 'pt-BR') {
|
|
37
|
+
return date.toLocaleDateString(locale, { day: '2-digit', month: 'short', year: 'numeric' });
|
|
38
|
+
}
|
|
39
|
+
/** Format as "dd/MM" for grid header labels. */
|
|
40
|
+
export function formatDayMonth(date) {
|
|
41
|
+
const day = String(date.getDate()).padStart(PADDED_LENGTH, '0');
|
|
42
|
+
const month = String(date.getMonth() + 1).padStart(PADDED_LENGTH, '0');
|
|
43
|
+
return `${day}/${month}`;
|
|
44
|
+
}
|
|
45
|
+
/** Format as abbreviated weekday + day number for week headers. */
|
|
46
|
+
export function formatWeekLabel(date, locale = 'pt-BR') {
|
|
47
|
+
return date.toLocaleDateString(locale, { weekday: 'short', day: '2-digit', month: '2-digit' });
|
|
48
|
+
}
|
|
49
|
+
/** Format as abbreviated month + year for month headers. */
|
|
50
|
+
export function formatMonthLabel(date, locale = 'pt-BR') {
|
|
51
|
+
return date.toLocaleDateString(locale, { month: 'short', year: 'numeric' });
|
|
52
|
+
}
|
|
53
|
+
/** Format as "HH:00" for hour headers. */
|
|
54
|
+
export function formatHourLabel(date) {
|
|
55
|
+
return `${String(date.getHours()).padStart(PADDED_LENGTH, '0')}:00`;
|
|
56
|
+
}
|
|
57
|
+
/** Return a new Date set to midnight (start of day). */
|
|
58
|
+
export function startOfDay(date) {
|
|
59
|
+
const d = new Date(date);
|
|
60
|
+
d.setHours(0, 0, 0, 0);
|
|
61
|
+
return d;
|
|
62
|
+
}
|
|
63
|
+
/** Return a new Date set to the first day of the ISO week that contains `date`. */
|
|
64
|
+
export function startOfWeek(date) {
|
|
65
|
+
const d = new Date(date);
|
|
66
|
+
const day = d.getDay(); // 0=Sun … 6=Sat
|
|
67
|
+
const diff = day === SUNDAY ? ISO_WEEK_DAY_OFFSET_FOR_MONDAY : MONDAY_OFFSET_FROM_SUNDAY - day; // Monday-based week
|
|
68
|
+
d.setDate(d.getDate() + diff);
|
|
69
|
+
d.setHours(0, 0, 0, 0);
|
|
70
|
+
return d;
|
|
71
|
+
}
|
|
72
|
+
/** Return a new Date set to the first day of the month that contains `date`. */
|
|
73
|
+
export function startOfMonth(date) {
|
|
74
|
+
return new Date(date.getFullYear(), date.getMonth(), FIRST_DAY_OF_MONTH, 0, 0, 0, 0);
|
|
75
|
+
}
|
|
76
|
+
/** Return a new Date set to the first hour of the current hour slot. */
|
|
77
|
+
export function startOfHour(date) {
|
|
78
|
+
const d = new Date(date);
|
|
79
|
+
d.setMinutes(0, 0, 0);
|
|
80
|
+
return d;
|
|
81
|
+
}
|
|
82
|
+
/** True if two dates fall on the same calendar day. */
|
|
83
|
+
export function isSameDay(a, b) {
|
|
84
|
+
return (a.getFullYear() === b.getFullYear() &&
|
|
85
|
+
a.getMonth() === b.getMonth() &&
|
|
86
|
+
a.getDate() === b.getDate());
|
|
87
|
+
}
|
|
88
|
+
/** True if the given date is a Saturday or Sunday. */
|
|
89
|
+
export function isWeekend(date) {
|
|
90
|
+
const day = date.getDay();
|
|
91
|
+
return day === SUNDAY || day === SATURDAY;
|
|
92
|
+
}
|
|
93
|
+
/** Clamp `value` between `min` and `max`. */
|
|
94
|
+
export function clamp(value, min, max) {
|
|
95
|
+
return Math.max(min, Math.min(max, value));
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtZGF0ZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvZ2FudHQvZ2FudHQtZGF0ZS51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxtQ0FBbUM7QUFDbkMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQzlCLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUU5QixrQ0FBa0M7QUFDbEMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUNwQyxNQUFNLDhCQUE4QixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUV4QixnRUFBZ0U7QUFDaEUsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFVLEVBQUUsSUFBWTtJQUM5QyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM5QixPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxpRUFBaUU7QUFDakUsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFVLEVBQUUsS0FBYTtJQUNoRCxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUNqQyxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCwwREFBMEQ7QUFDMUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxDQUFPLEVBQUUs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QUFNLFVBQVUsS0FBSyxDQUFDLEtBQWEsRUFBRSxHQUFXLEVBQUUsR0FBVztJQUMzRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTmF0aXZlIERhdGUgQVBJIHV0aWxpdGllcyBmb3IgdGhlIEdhbnR0IGNvbXBvbmVudC5cbiAqIE5vIG1vbWVudC5qcyBkZXBlbmRlbmN5LlxuICovXG5cbi8vIFRpbWUgY29uc3RhbnRzIChpbiBtaWxsaXNlY29uZHMpXG5jb25zdCBNU19QRVJfREFZID0gODZfNDAwXzAwMDtcbmNvbnN0IE1TX1BFUl9IT1VSID0gM182MDBfMDAwO1xuXG4vLyBEYXRlL3RpbWUgY2FsY3VsYXRpb24gY29uc3RhbnRzXG5jb25zdCBTVU5EQVkgPSAwO1xuY29uc3QgU0FUVVJEQVkgPSA2O1xuY29uc3QgTU9OREFZX09GRlNFVF9GUk9NX1NVTkRBWSA9IDE7XG5jb25zdCBJU09fV0VFS19EQVlfT0ZGU0VUX0ZPUl9NT05EQVkgPSAtNjtcbmNvbnN0IEZJUlNUX0RBWV9PRl9NT05USCA9IDE7XG5jb25zdCBQQURERURfTEVOR1RIID0gMjtcblxuLyoqIEFkZCBOIGRheXMgdG8gYSBkYXRlIChyZXR1cm5zIG5ldyBEYXRlLCBkb2VzIG5vdCBtdXRhdGUpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERheXMoZGF0ZTogRGF0ZSwgZGF5czogbnVtYmVyKTogRGF0ZSB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgZC5zZXREYXRlKGQuZ2V0RGF0ZSgpICsgZGF5cyk7XG4gIHJldHVybiBkO1xufVxuXG4vKiogQWRkIE4gaG91cnMgdG8gYSBkYXRlIChyZXR1cm5zIG5ldyBEYXRlLCBkb2VzIG5vdCBtdXRhdGUpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEhvdXJzKGRhdGU6IERhdGUsIGhvdXJzOiBudW1iZXIpOiBEYXRlIHtcbiAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGUpO1xuICBkLnNldEhvdXJzKGQuZ2V0SG91cnMoKSArIGhvdXJzKTtcbiAgcmV0dXJuIGQ7XG59XG5cbi8qKiBEaWZmZXJlbmNlIGluIHdob2xlIGRheXMgYmV0d2VlbiB0d28gZGF0ZXMgKGIgLSBhKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmRGF5cyhhOiBEYXRlLCBiOiBEYXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucm91bmQoKGIuZ2V0VGltZSgpIC0gYS5nZXRUaW1lKCkpIC8gTVNfUEVSX0RBWSk7XG59XG5cbi8qKiBEaWZmZXJlbmNlIGluIHdob2xlIGhvdXJzIGJldHdlZW4gdHdvIGRhdGVzIChiIC0gYSkuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZkhvdXJzKGE6IERhdGUsIGI6IERhdGUpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5yb3VuZCgoYi5nZXRUaW1lKCkgLSBhLmdldFRpbWUoKSkgLyBNU19QRVJfSE9VUik7XG59XG5cbi8qKiBGb3JtYXQgYSBkYXRlIGZvciBkaXNwbGF5IChlLmcuIFwiMDEgamFuLiAyMDI0XCIpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSwgbG9jYWxlID0gJ3B0LUJSJyk6IHN0cmluZyB7XG4gIHJldHVybiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyhsb2NhbGUsIHsgZGF5OiAnMi1kaWdpdCcsIG1vbnRoOiAnc2hvcnQnLCB5ZWFyOiAnbnVtZXJpYycgfSk7XG59XG5cbi8qKiBGb3JtYXQgYXMgXCJkZC9NTVwiIGZvciBncmlkIGhlYWRlciBsYWJlbHMuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGF5TW9udGgoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoUEFEREVEX0xFTkdUSCwgJzAnKTtcbiAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoUEFEREVEX0xFTkdUSCwgJzAnKTtcbiAgcmV0dXJuIGAke2RheX0vJHttb250aH1gO1xufVxuXG4vKiogRm9ybWF0IGFzIGFiYnJldmlhdGVkIHdlZWtkYXkgKyBkYXkgbnVtYmVyIGZvciB3ZWVrIGhlYWRlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0V2Vla0xhYmVsKGRhdGU6IERhdGUsIGxvY2FsZSA9ICdwdC1CUicpOiBzdHJpbmcge1xuICByZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdzaG9ydCcsIGRheTogJzItZGlnaXQnLCBtb250aDogJzItZGlnaXQnIH0pO1xufVxuXG4vKiogRm9ybWF0IGFzIGFiYnJldmlhdGVkIG1vbnRoICsgeWVhciBmb3IgbW9udGggaGVhZGVycy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRNb250aExhYmVsKGRhdGU6IERhdGUsIGxvY2FsZSA9ICdwdC1CUicpOiBzdHJpbmcge1xuICByZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnLCB5ZWFyOiAnbnVtZXJpYycgfSk7XG59XG5cbi8qKiBGb3JtYXQgYXMgXCJISDowMFwiIGZvciBob3VyIGhlYWRlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SG91ckxhYmVsKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7U3RyaW5nKGRhdGUuZ2V0SG91cnMoKSkucGFkU3RhcnQoUEFEREVEX0xFTkdUSCwgJzAnKX06MDBgO1xufVxuXG4vKiogUmV0dXJuIGEgbmV3IERhdGUgc2V0IHRvIG1pZG5pZ2h0IChzdGFydCBvZiBkYXkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZEYXkoZGF0ZTogRGF0ZSk6IERhdGUge1xuICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZSk7XG4gIGQuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkO1xufVxuXG4vKiogUmV0dXJuIGEgbmV3IERhdGUgc2V0IHRvIHRoZSBmaXJzdCBkYXkgb2YgdGhlIElTTyB3ZWVrIHRoYXQgY29udGFpbnMgYGRhdGVgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZXZWVrKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGUpO1xuICBjb25zdCBkYXkgPSBkLmdldERheSgpOyAvLyAwPVN1biDigKYgNj1TYXRcbiAgY29uc3QgZGlmZiA9IGRheSA9PT0gU1VOREFZID8gSVNPX1dFRUtfREFZX09GRlNFVF9GT1JfTU9OREFZIDogTU9OREFZX09GRlNFVF9GUk9NX1NVTkRBWSAtIGRheTsgLy8gTW9uZGF5LWJhc2VkIHdlZWtcbiAgZC5zZXREYXRlKGQuZ2V0RGF0ZSgpICsgZGlmZik7XG4gIGQuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkO1xufVxuXG4vKiogUmV0dXJuIGEgbmV3IERhdGUgc2V0IHRvIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoIHRoYXQgY29udGFpbnMgYGRhdGVgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG4gIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgRklSU1RfREFZX09GX01PTlRILCAwLCAwLCAwLCAwKTtcbn1cblxuLyoqIFJldHVybiBhIG5ldyBEYXRlIHNldCB0byB0aGUgZmlyc3QgaG91ciBvZiB0aGUgY3VycmVudCBob3VyIHNsb3QuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZkhvdXIoZGF0ZTogRGF0ZSk6IERhdGUge1xuICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZSk7XG4gIGQuc2V0TWludXRlcygwLCAwLCAwKTtcbiAgcmV0dXJuIGQ7XG59XG5cbi8qKiBUcnVlIGlmIHR3byBkYXRlcyBmYWxsIG9uIHRoZSBzYW1lIGNhbGVuZGFyIGRheS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhbWVEYXkoYTogRGF0ZSwgYjogRGF0ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGEuZ2V0RnVsbFllYXIoKSA9PT0gYi5nZXRGdWxsWWVhcigpICYmXG4gICAgYS5nZXRNb250aCgpID09PSBiLmdldE1vbnRoKCkgJiZcbiAgICBhLmdldERhdGUoKSA9PT0gYi5nZXREYXRlKClcbiAgKTtcbn1cblxuLyoqIFRydWUgaWYgdGhlIGdpdmVuIGRhdGUgaXMgYSBTYXR1cmRheSBvciBTdW5kYXkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXZWVrZW5kKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXkoKTtcbiAgcmV0dXJuIGRheSA9PT0gU1VOREFZIHx8IGRheSA9PT0gU0FUVVJEQVk7XG59XG5cbi8qKiBDbGFtcCBgdmFsdWVgIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgdmFsdWUpKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { GANTT_DEFAULT_COLUMN_TITLE_KEY, GANTT_DEFAULT_VIEW_MODE } from '../../core/constants/gantt.const';
|
|
3
|
+
import { GanttEngine } from './gantt.engine';
|
|
4
|
+
import { GanttSideTableComponent } from './components/gantt-side-table/gantt-side-table.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class GanttComponent {
|
|
7
|
+
tasks = [];
|
|
8
|
+
viewMode = GANTT_DEFAULT_VIEW_MODE;
|
|
9
|
+
columnTitle = GANTT_DEFAULT_COLUMN_TITLE_KEY;
|
|
10
|
+
showSideTable = true;
|
|
11
|
+
allowMovement = true;
|
|
12
|
+
hasPopup = true;
|
|
13
|
+
fullWidth = false;
|
|
14
|
+
taskClicked = new EventEmitter();
|
|
15
|
+
taskDateChanged = new EventEmitter();
|
|
16
|
+
viewChanged = new EventEmitter();
|
|
17
|
+
ganttSvgRef;
|
|
18
|
+
get isFullWidth() {
|
|
19
|
+
return this.fullWidth;
|
|
20
|
+
}
|
|
21
|
+
engine = null;
|
|
22
|
+
ngAfterViewInit() {
|
|
23
|
+
this.engine = new GanttEngine(this.ganttSvgRef.nativeElement, this.flattenTasks(), {
|
|
24
|
+
viewMode: this.viewMode,
|
|
25
|
+
allowMovement: this.allowMovement,
|
|
26
|
+
hasPopup: this.hasPopup,
|
|
27
|
+
onTaskClick: (task) => this.taskClicked.emit(task),
|
|
28
|
+
onDateChange: (task, start, end) => this.taskDateChanged.emit({ task, start, end }),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
ngOnChanges(changes) {
|
|
32
|
+
if (!this.engine) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (changes['viewMode'] || changes['allowMovement'] || changes['hasPopup']) {
|
|
36
|
+
this.engine.updateOptions({
|
|
37
|
+
allowMovement: this.allowMovement,
|
|
38
|
+
hasPopup: this.hasPopup,
|
|
39
|
+
viewMode: this.viewMode
|
|
40
|
+
});
|
|
41
|
+
if (changes['viewMode']) {
|
|
42
|
+
this.viewChanged.emit(this.viewMode);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (changes['tasks']) {
|
|
46
|
+
this.engine.refresh(this.flattenTasks());
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
ngOnDestroy() {
|
|
50
|
+
this.engine?.destroy();
|
|
51
|
+
this.engine = null;
|
|
52
|
+
}
|
|
53
|
+
flattenTasks() {
|
|
54
|
+
return this.tasks.flatMap((group) => group.tasks);
|
|
55
|
+
}
|
|
56
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
57
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GanttComponent, isStandalone: true, selector: "sdc-gantt", inputs: { tasks: "tasks", viewMode: "viewMode", columnTitle: "columnTitle", showSideTable: "showSideTable", allowMovement: "allowMovement", hasPopup: "hasPopup", fullWidth: "fullWidth" }, outputs: { taskClicked: "taskClicked", taskDateChanged: "taskDateChanged", viewChanged: "viewChanged" }, host: { properties: { "class.sdc-gantt--full-width": "this.isFullWidth" } }, viewQueries: [{ propertyName: "ganttSvgRef", first: true, predicate: ["ganttSvg"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-gantt\">\n @if (showSideTable) {\n <sdc-gantt-side-table\n [tasks]=\"tasks\"\n [columnTitle]=\"columnTitle\">\n </sdc-gantt-side-table>\n }\n\n <div class=\"sdc-gantt__svg-container\">\n <svg #ganttSvg class=\"sdc-gantt__svg\" aria-label=\"Gantt chart\"></svg>\n </div>\n</div>\n", styles: [":host{display:block;overflow:hidden}:host.sdc-gantt--full-width{width:100%}.sdc-gantt{--sdc-gantt-header-bg: #fff;--sdc-gantt-row-even-bg: #f5f5f5;--sdc-gantt-row-odd-bg: #fff;--sdc-gantt-grid-color: #e0e0e0;--sdc-gantt-tick-color: #428bca;--sdc-gantt-bar-default-color: #7892a1;--sdc-gantt-bar-selected-stroke: #212533;--sdc-gantt-today-highlight: rgba(255, 233, 121, .5);--sdc-gantt-weekend-highlight: rgba(184, 194, 204, .5);--sdc-gantt-bar-text: #fff;--sdc-gantt-side-table-border: #e0e0e0;--sdc-gantt-row-height: 44px;display:flex;overflow:auto;width:100%}.sdc-gantt__svg-container{flex:1;overflow:auto}.sdc-gantt__svg{display:block;-webkit-user-select:none;user-select:none}::ng-deep .sdc-gantt-row-bg--even{fill:var(--sdc-gantt-row-even-bg, #f5f5f5)}::ng-deep .sdc-gantt-row-bg--odd{fill:var(--sdc-gantt-row-odd-bg, #fff)}::ng-deep .sdc-gantt-grid-line{stroke:var(--sdc-gantt-grid-color, #e0e0e0);stroke-width:1}::ng-deep .sdc-gantt-header-border{stroke:var(--sdc-gantt-grid-color, #cccccc);stroke-width:2}::ng-deep .sdc-gantt-header-cell{fill:var(--sdc-gantt-header-bg, #fff)}::ng-deep .sdc-gantt-header-label{fill:#333;font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);font-size:11px;font-weight:600;pointer-events:none}::ng-deep .sdc-gantt-today{fill:var(--sdc-gantt-today-highlight, rgba(255, 233, 121, .5));pointer-events:none}::ng-deep .sdc-gantt-weekend{fill:var(--sdc-gantt-weekend-highlight, rgba(184, 194, 204, .5));pointer-events:none}::ng-deep .sdc-gantt-bar{opacity:.9;transition:opacity .15s ease-out}::ng-deep .sdc-gantt-bar:hover{opacity:1}::ng-deep .sdc-gantt-bar-group:hover .sdc-gantt-bar{opacity:1}::ng-deep .sdc-gantt-bar-label{fill:var(--sdc-gantt-bar-text, #fff);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);font-size:11px;pointer-events:none}::ng-deep .sdc-gantt-bar-handle{opacity:0;transition:opacity .15s ease-out}::ng-deep .sdc-gantt-bar-group:hover .sdc-gantt-bar-handle{opacity:1}\n"], dependencies: [{ kind: "component", type: GanttSideTableComponent, selector: "sdc-gantt-side-table", inputs: ["tasks", "columnTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
58
|
+
}
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttComponent, decorators: [{
|
|
60
|
+
type: Component,
|
|
61
|
+
args: [{ standalone: true, imports: [GanttSideTableComponent], selector: 'sdc-gantt', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"sdc-gantt\">\n @if (showSideTable) {\n <sdc-gantt-side-table\n [tasks]=\"tasks\"\n [columnTitle]=\"columnTitle\">\n </sdc-gantt-side-table>\n }\n\n <div class=\"sdc-gantt__svg-container\">\n <svg #ganttSvg class=\"sdc-gantt__svg\" aria-label=\"Gantt chart\"></svg>\n </div>\n</div>\n", styles: [":host{display:block;overflow:hidden}:host.sdc-gantt--full-width{width:100%}.sdc-gantt{--sdc-gantt-header-bg: #fff;--sdc-gantt-row-even-bg: #f5f5f5;--sdc-gantt-row-odd-bg: #fff;--sdc-gantt-grid-color: #e0e0e0;--sdc-gantt-tick-color: #428bca;--sdc-gantt-bar-default-color: #7892a1;--sdc-gantt-bar-selected-stroke: #212533;--sdc-gantt-today-highlight: rgba(255, 233, 121, .5);--sdc-gantt-weekend-highlight: rgba(184, 194, 204, .5);--sdc-gantt-bar-text: #fff;--sdc-gantt-side-table-border: #e0e0e0;--sdc-gantt-row-height: 44px;display:flex;overflow:auto;width:100%}.sdc-gantt__svg-container{flex:1;overflow:auto}.sdc-gantt__svg{display:block;-webkit-user-select:none;user-select:none}::ng-deep .sdc-gantt-row-bg--even{fill:var(--sdc-gantt-row-even-bg, #f5f5f5)}::ng-deep .sdc-gantt-row-bg--odd{fill:var(--sdc-gantt-row-odd-bg, #fff)}::ng-deep .sdc-gantt-grid-line{stroke:var(--sdc-gantt-grid-color, #e0e0e0);stroke-width:1}::ng-deep .sdc-gantt-header-border{stroke:var(--sdc-gantt-grid-color, #cccccc);stroke-width:2}::ng-deep .sdc-gantt-header-cell{fill:var(--sdc-gantt-header-bg, #fff)}::ng-deep .sdc-gantt-header-label{fill:#333;font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);font-size:11px;font-weight:600;pointer-events:none}::ng-deep .sdc-gantt-today{fill:var(--sdc-gantt-today-highlight, rgba(255, 233, 121, .5));pointer-events:none}::ng-deep .sdc-gantt-weekend{fill:var(--sdc-gantt-weekend-highlight, rgba(184, 194, 204, .5));pointer-events:none}::ng-deep .sdc-gantt-bar{opacity:.9;transition:opacity .15s ease-out}::ng-deep .sdc-gantt-bar:hover{opacity:1}::ng-deep .sdc-gantt-bar-group:hover .sdc-gantt-bar{opacity:1}::ng-deep .sdc-gantt-bar-label{fill:var(--sdc-gantt-bar-text, #fff);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);font-size:11px;pointer-events:none}::ng-deep .sdc-gantt-bar-handle{opacity:0;transition:opacity .15s ease-out}::ng-deep .sdc-gantt-bar-group:hover .sdc-gantt-bar-handle{opacity:1}\n"] }]
|
|
62
|
+
}], propDecorators: { tasks: [{
|
|
63
|
+
type: Input
|
|
64
|
+
}], viewMode: [{
|
|
65
|
+
type: Input
|
|
66
|
+
}], columnTitle: [{
|
|
67
|
+
type: Input
|
|
68
|
+
}], showSideTable: [{
|
|
69
|
+
type: Input
|
|
70
|
+
}], allowMovement: [{
|
|
71
|
+
type: Input
|
|
72
|
+
}], hasPopup: [{
|
|
73
|
+
type: Input
|
|
74
|
+
}], fullWidth: [{
|
|
75
|
+
type: Input
|
|
76
|
+
}], taskClicked: [{
|
|
77
|
+
type: Output
|
|
78
|
+
}], taskDateChanged: [{
|
|
79
|
+
type: Output
|
|
80
|
+
}], viewChanged: [{
|
|
81
|
+
type: Output
|
|
82
|
+
}], ganttSvgRef: [{
|
|
83
|
+
type: ViewChild,
|
|
84
|
+
args: ['ganttSvg']
|
|
85
|
+
}], isFullWidth: [{
|
|
86
|
+
type: HostBinding,
|
|
87
|
+
args: ['class.sdc-gantt--full-width']
|
|
88
|
+
}] } });
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9nYW50dC9nYW50dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2dhbnR0L2dhbnR0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBTzNHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7QUFXbkcsTUFBTSxPQUFPLGNBQWM7SUFDaEIsS0FBSyxHQUFxQixFQUFFLENBQUM7SUFDN0IsUUFBUSxHQUFrQix1QkFBdUIsQ0FBQztJQUNsRCxXQUFXLEdBQUcsOEJBQThCLENBQUM7SUFDN0MsYUFBYSxHQUFHLElBQUksQ0FBQztJQUNyQixhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDaEIsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUVqQixXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztJQUM1QyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQTZCLENBQUM7SUFDaEUsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBRW5DLFdBQVcsQ0FBMEI7SUFFNUQsSUFDYyxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRU8sTUFBTSxHQUF1QixJQUFJLENBQUM7SUFFMUMsZUFBZTtRQUNiLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUM5QixJQUFJLENBQUMsWUFBWSxFQUFFLEVBQ25CO1lBQ0UsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbEQsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUNwRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDM0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7Z0JBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDeEIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO3dHQWpFVSxjQUFjOzRGQUFkLGNBQWMscWpCQ25DM0IsaVVBWUEsczlERGdCWSx1QkFBdUI7OzRGQU90QixjQUFjO2tCQVQxQixTQUFTO2lDQUNJLElBQUksV0FDUCxDQUFDLHVCQUF1QixDQUFDLFlBQ3hCLFdBQVcsbUJBR0osdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsUUFBUTs4QkFHaEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVnQixXQUFXO3NCQUFqQyxTQUFTO3VCQUFDLFVBQVU7Z0JBR1AsV0FBVztzQkFEeEIsV0FBVzt1QkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEdBTlRUX0RFRkFVTFRfQ09MVU1OX1RJVExFX0tFWSwgR0FOVFRfREVGQVVMVF9WSUVXX01PREUgfSBmcm9tICcuLi8uLi9jb3JlL2NvbnN0YW50cy9nYW50dC5jb25zdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEdhbnR0VGFzayxcbiAgR2FudHRUYXNrRGF0ZUNoYW5nZWRFdmVudCxcbiAgR2FudHRUYXNrR3JvdXAsXG4gIEdhbnR0Vmlld01vZGUsXG59IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvZ2FudHQudHlwZSc7XG5pbXBvcnQgeyBHYW50dEVuZ2luZSB9IGZyb20gJy4vZ2FudHQuZW5naW5lJztcbmltcG9ydCB7IEdhbnR0U2lkZVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2dhbnR0LXNpZGUtdGFibGUvZ2FudHQtc2lkZS10YWJsZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0dhbnR0U2lkZVRhYmxlQ29tcG9uZW50XSxcbiAgc2VsZWN0b3I6ICdzZGMtZ2FudHQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FudHQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nYW50dC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXG59KVxuZXhwb3J0IGNsYXNzIEdhbnR0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSB0YXNrczogR2FudHRUYXNrR3JvdXBbXSA9IFtdO1xuICBASW5wdXQoKSB2aWV3TW9kZTogR2FudHRWaWV3TW9kZSA9IEdBTlRUX0RFRkFVTFRfVklFV19NT0RFO1xuICBASW5wdXQoKSBjb2x1bW5UaXRsZSA9IEdBTlRUX0RFRkFVTFRfQ09MVU1OX1RJVExFX0tFWTtcbiAgQElucHV0KCkgc2hvd1NpZGVUYWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIGFsbG93TW92ZW1lbnQgPSB0cnVlO1xuICBASW5wdXQoKSBoYXNQb3B1cCA9IHRydWU7XG4gIEBJbnB1dCgpIGZ1bGxXaWR0aCA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSB0YXNrQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRUYXNrPigpO1xuICBAT3V0cHV0KCkgdGFza0RhdGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dFRhc2tEYXRlQ2hhbmdlZEV2ZW50PigpO1xuICBAT3V0cHV0KCkgdmlld0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0Vmlld01vZGU+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZ2FudHRTdmcnKSBnYW50dFN2Z1JlZiE6IEVsZW1lbnRSZWY8U1ZHRWxlbWVudD47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZGMtZ2FudHQtLWZ1bGwtd2lkdGgnKVxuICBwcm90ZWN0ZWQgZ2V0IGlzRnVsbFdpZHRoKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZ1bGxXaWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgZW5naW5lOiBHYW50dEVuZ2luZSB8IG51bGwgPSBudWxsO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVuZ2luZSA9IG5ldyBHYW50dEVuZ2luZShcbiAgICAgIHRoaXMuZ2FudHRTdmdSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgIHRoaXMuZmxhdHRlblRhc2tzKCksXG4gICAgICB7XG4gICAgICAgIHZpZXdNb2RlOiB0aGlzLnZpZXdNb2RlLFxuICAgICAgICBhbGxvd01vdmVtZW50OiB0aGlzLmFsbG93TW92ZW1lbnQsXG4gICAgICAgIGhhc1BvcHVwOiB0aGlzLmhhc1BvcHVwLFxuICAgICAgICBvblRhc2tDbGljazogKHRhc2spID0+IHRoaXMudGFza0NsaWNrZWQuZW1pdCh0YXNrKSxcbiAgICAgICAgb25EYXRlQ2hhbmdlOiAodGFzaywgc3RhcnQsIGVuZCkgPT4gdGhpcy50YXNrRGF0ZUNoYW5nZWQuZW1pdCh7IHRhc2ssIHN0YXJ0LCBlbmQgfSksXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuZ2luZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWyd2aWV3TW9kZSddIHx8IGNoYW5nZXNbJ2FsbG93TW92ZW1lbnQnXSB8fCBjaGFuZ2VzWydoYXNQb3B1cCddKSB7XG4gICAgICB0aGlzLmVuZ2luZS51cGRhdGVPcHRpb25zKHtcbiAgICAgICAgYWxsb3dNb3ZlbWVudDogdGhpcy5hbGxvd01vdmVtZW50LFxuICAgICAgICBoYXNQb3B1cDogdGhpcy5oYXNQb3B1cCxcbiAgICAgICAgdmlld01vZGU6IHRoaXMudmlld01vZGVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoY2hhbmdlc1sndmlld01vZGUnXSkge1xuICAgICAgICB0aGlzLnZpZXdDaGFuZ2VkLmVtaXQodGhpcy52aWV3TW9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3Rhc2tzJ10pIHtcbiAgICAgIHRoaXMuZW5naW5lLnJlZnJlc2godGhpcy5mbGF0dGVuVGFza3MoKSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5lbmdpbmU/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmVuZ2luZSA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGZsYXR0ZW5UYXNrcygpOiBHYW50dFRhc2tbXSB7XG4gICAgcmV0dXJuIHRoaXMudGFza3MuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLnRhc2tzKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNkYy1nYW50dFwiPlxuICBAaWYgKHNob3dTaWRlVGFibGUpIHtcbiAgICA8c2RjLWdhbnR0LXNpZGUtdGFibGVcbiAgICAgIFt0YXNrc109XCJ0YXNrc1wiXG4gICAgICBbY29sdW1uVGl0bGVdPVwiY29sdW1uVGl0bGVcIj5cbiAgICA8L3NkYy1nYW50dC1zaWRlLXRhYmxlPlxuICB9XG5cbiAgPGRpdiBjbGFzcz1cInNkYy1nYW50dF9fc3ZnLWNvbnRhaW5lclwiPlxuICAgIDxzdmcgI2dhbnR0U3ZnIGNsYXNzPVwic2RjLWdhbnR0X19zdmdcIiBhcmlhLWxhYmVsPVwiR2FudHQgY2hhcnRcIj48L3N2Zz5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|