@seniorsistemas/angular-components 19.9.7 → 19.9.8-develop-5d2dfb27
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/card/lib/card/card.component.d.ts +6 -2
- package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +0 -1
- package/datepicker/README.md +6 -2
- package/datepicker/lib/datepicker/date-segment-input.d.ts +7 -1
- package/datepicker/lib/datepicker/datepicker.component.d.ts +137 -3
- package/dialog/lib/src/dialog/services/dialog.service.d.ts +2 -0
- package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +3 -3
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +8 -3
- package/esm2022/autocomplete/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.mjs +4 -3
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.mjs +4 -2
- package/esm2022/button/lib/button/button.component.mjs +3 -3
- package/esm2022/card/lib/card/card.component.mjs +13 -5
- package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +3 -3
- package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +3 -3
- package/esm2022/chips/lib/chips/chips/chips.component.mjs +3 -3
- package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/sds-light-style.mjs +3 -2
- package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +3 -3
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +14 -9
- package/esm2022/datepicker/lib/datepicker/date-segment-input.mjs +19 -2
- package/esm2022/datepicker/lib/datepicker/datepicker.component.mjs +405 -38
- package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +3 -3
- package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +13 -1
- package/esm2022/drawer/lib/drawer/drawer.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +6 -4
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +3 -3
- package/esm2022/editor/lib/editor/editor.component.mjs +3 -3
- package/esm2022/editor/lib/editor/toolbar-button/editor-toolbar-button.component.mjs +3 -3
- package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +3 -3
- package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +3 -3
- package/esm2022/gantt/lib/gantt/components/gantt/bar.mjs +2 -1
- package/esm2022/gantt/lib/gantt/gantt.component.mjs +3 -3
- package/esm2022/global-search/lib/global-search/global-search.component.mjs +16 -25
- package/esm2022/grid-menu/lib/grid-menu/components/grid-menu-item/grid-menu-item.component.mjs +3 -3
- package/esm2022/input-text/lib/input-text/input-text.directive.mjs +3 -3
- package/esm2022/lib/locale/fallback.mjs +40 -13
- package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +3 -3
- package/esm2022/object-card/lib/object-card/object-card.component.mjs +3 -3
- package/esm2022/paginator/lib/paginator/paginator.component.mjs +3 -3
- package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +3 -3
- package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +4 -10
- package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +3 -3
- package/esm2022/select/lib/select/select.component.mjs +3 -3
- package/esm2022/select-button/lib/select-button/components/select-button-item/select-button-item.component.mjs +3 -3
- package/esm2022/shared/lib/accessibility/datepicker-no-period-tab.directive.mjs +6 -6
- package/esm2022/side-sheet/lib/side-sheet/side-sheet.component.mjs +3 -3
- package/esm2022/slider/lib/slider/slider.component.mjs +67 -65
- package/esm2022/slider/lib/slider/slider.module.mjs +2 -2
- package/esm2022/split-button/lib/split-button/split-button.component.mjs +3 -3
- package/esm2022/star-rating/star-rating/star-rating.component.mjs +3 -3
- package/esm2022/stepper/lib/stepper/stepper.component.mjs +3 -3
- package/esm2022/switch/lib/switch/switch.component.mjs +5 -19
- package/esm2022/tabs/lib/tabs/tabs.component.mjs +3 -3
- package/esm2022/text-area/lib/text-area/text-area.component.mjs +3 -3
- package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +10 -3
- package/esm2022/thumbnails/lib/thumbnails/components/thumbnail-item/thumbnail-item.component.mjs +3 -3
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +3 -3
- package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.global.service.mjs +4 -3
- package/esm2022/tile/lib/tile/tile.component.mjs +3 -3
- package/esm2022/tree/lib/tree/components/tree-node-item/tree-node-item.component.mjs +20 -3
- package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +10 -5
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +5 -3
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-button.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-card.mjs +12 -4
- package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-chips.mjs +4 -4
- package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +2 -1
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +13 -8
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-datepicker.mjs +422 -38
- package/fesm2022/seniorsistemas-angular-components-datepicker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dialog.mjs +14 -2
- package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +13 -12
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editor.mjs +4 -4
- package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs +3 -2
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +14 -23
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-input-text.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-input-text.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +3 -9
- package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-shared.mjs +5 -5
- package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slider.mjs +67 -65
- package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-stepper.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-switch.mjs +4 -18
- package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +9 -2
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +5 -4
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tile.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tree.mjs +20 -3
- package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components.mjs +39 -12
- package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
- package/global-search/lib/global-search/global-search.component.d.ts +7 -3
- package/package.json +1 -1
- package/radio-button/lib/radio-button/radio-button.component.d.ts +0 -1
- package/slider/lib/slider/slider.component.d.ts +25 -7
- package/styles.css +5 -0
- package/switch/lib/switch/switch.component.d.ts +0 -2
- package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +1 -0
- package/tree/lib/tree/components/tree-node-item/tree-node-item.component.d.ts +4 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ChangeDetectorRef, input, EventEmitter,
|
|
2
|
+
import { inject, ChangeDetectorRef, ElementRef, input, EventEmitter, Component, Input, Output, ViewChild, NgModule } from '@angular/core';
|
|
3
3
|
import { LoadingStateDirective } from '@seniorsistemas/angular-components/loading-state';
|
|
4
4
|
import { trigger, transition, style, animate, query, stagger } from '@angular/animations';
|
|
5
5
|
import * as i1 from '@angular/forms';
|
|
@@ -10,6 +10,7 @@ import { InputTextDirective } from '@seniorsistemas/angular-components/input-tex
|
|
|
10
10
|
class TreeNodeItemComponent {
|
|
11
11
|
cdr = inject(ChangeDetectorRef);
|
|
12
12
|
translateService = inject(TranslateService);
|
|
13
|
+
elementRef = inject(ElementRef);
|
|
13
14
|
ariaLevel = input(0);
|
|
14
15
|
showCheckbox = input(false);
|
|
15
16
|
treeNodeItem;
|
|
@@ -37,6 +38,22 @@ class TreeNodeItemComponent {
|
|
|
37
38
|
this.toggleExpanded(this.treeNodeItem);
|
|
38
39
|
}
|
|
39
40
|
}
|
|
41
|
+
focusNextNode(event) {
|
|
42
|
+
this.moveFocus(event, 1);
|
|
43
|
+
}
|
|
44
|
+
focusPreviousNode(event) {
|
|
45
|
+
this.moveFocus(event, -1);
|
|
46
|
+
}
|
|
47
|
+
moveFocus(event, offset) {
|
|
48
|
+
const root = this.elementRef.nativeElement.closest('.tree') || document;
|
|
49
|
+
const items = Array.from(root.querySelectorAll('.tree-node-item'));
|
|
50
|
+
const currentIndex = items.indexOf(document.activeElement);
|
|
51
|
+
if (currentIndex === -1) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
event.preventDefault();
|
|
55
|
+
items[currentIndex + offset]?.focus();
|
|
56
|
+
}
|
|
40
57
|
onCheckboxEnter(node) {
|
|
41
58
|
const newState = node.checked === true ? false : true;
|
|
42
59
|
node.checked = newState;
|
|
@@ -102,7 +119,7 @@ class TreeNodeItemComponent {
|
|
|
102
119
|
this.treeNodeEdit.emit(payload);
|
|
103
120
|
}
|
|
104
121
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TreeNodeItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
105
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TreeNodeItemComponent, isStandalone: true, selector: "s-tree-node-item", inputs: { ariaLevel: { classPropertyName: "ariaLevel", publicName: "ariaLevel", isSignal: true, isRequired: false, transformFunction: null }, showCheckbox: { classPropertyName: "showCheckbox", publicName: "showCheckbox", isSignal: true, isRequired: false, transformFunction: null }, treeNodeItem: { classPropertyName: "treeNodeItem", publicName: "treeNodeItem", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { treeNodeItemClicked: "treeNodeItemClicked", treeNodeEdit: "treeNodeEdit", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if (treeNodeItem) {\n <div\n class=\"tree-node-item\"\n role=\"treeitem\"\n [class.tree-node-item-selected]=\"treeNodeItem.checked\"\n [class.selectable]=\"hasChildren\"\n [attr.aria-expanded]=\"hasChildren ? treeNodeItem.isExpanded : null\"\n [attr.aria-selected]=\"treeNodeItem.checked === true\"\n [attr.aria-label]=\"treeNodeItem.label\"\n [attr.aria-level]=\"ariaLevel()\"\n tabindex=\"0\"\n (keydown.enter)=\"handleTreeNodeItemClick($event)\"\n (keydown.arrowRight)=\"expandNode()\"\n (keydown.arrowLeft)=\"collapseNode()\"\n >\n @if (hasChildren || treeNodeItem.leaf === true) {\n <div\n class=\"arrow\"\n (click)=\"toggleExpanded(treeNodeItem)\"\n >\n @if (!treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.collapsedIcon || 'fas fa-chevron-right'\"></i>\n }\n @if (treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.expandedIcon || 'fas fa-chevron-down'\"></i>\n }\n </div>\n }\n\n <div\n class=\"tree-node-item-text\"\n (click)=\"handleTreeNodeItemClick($event)\"\n >\n @if (treeNodeItem.icon || treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-icon\">\n @if (treeNodeItem.icon && !treeNodeItem.isEditing) {\n <i [class]=\"treeNodeItem.icon\"></i>\n }\n @if (treeNodeItem.isEditing) {\n <i\n class=\"fas fa-edit edit\"\n (click)=\"saveEdit($event)\"\n ></i>\n }\n </span>\n }\n\n @if (showCheckbox() && !treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"treeNodeItem.checked === true\"\n [indeterminate]=\"treeNodeItem.checked === null\"\n [attr.aria-checked]=\"treeNodeItem.checked === null ? 'mixed' : treeNodeItem.checked\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"checkbox\"\n tabindex=\"0\"\n (keydown.enter)=\"onCheckboxEnter(treeNodeItem)\"\n />\n </span>\n }\n\n <span class=\"tree-node-item-text-label\">\n @if (treeNodeItem.isEditing) {\n <input\n #input\n type=\"text\"\n sInputText\n class=\"tree-node-item-text-input\"\n [(ngModel)]=\"treeNodeItem.editNewValue\"\n (keydown.enter)=\"saveEdit($event)\"\n (keydown.escape)=\"cancelEdit($event)\"\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Editar nome do item\"\n aria-live=\"polite\"\n />\n } @else if (!treeNodeItem.isEditing) {\n {{ treeNodeItem.label }}\n }\n </span>\n\n @if (editable) {\n <span class=\"tree-node-item-text-editable\">\n <i\n class=\"fas fa-pencil-alt\"\n (click)=\"toggleEditing($event)\"\n aria-label=\"Editar item\"\n tabindex=\"0\"\n ></i>\n </span>\n }\n </div>\n </div>\n}\n\n@if (hasChildren && treeNodeItem.isExpanded) {\n <div\n @fadeExpand\n class=\"child\"\n role=\"group\"\n @childrenAnimation\n >\n @for (child of treeNodeItem.children; track $index) {\n <s-tree-node-item\n [showCheckbox]=\"showCheckbox()\"\n [treeNodeItem]=\"child\"\n [ariaLevel]=\"ariaLevel() + 1\"\n (treeNodeItemClicked)=\"handleTreeNodeItemClicked($event)\"\n (treeNodeEdit)=\"treeNodeEditChildEvent($event)\"\n (nodeExpanded)=\"nodeExpanded.emit($event)\"\n (nodeCollapsed)=\"nodeCollapsed.emit($event)\"\n class=\"child-item\"\n />\n }\n </div>\n}\n\n", styles: [".tree-node-item{width:100%;display:flex;cursor:pointer}.tree-node-item .arrow{padding:3px 9px;display:flex;align-items:center;justify-content:center}.tree-node-item-text{flex:1;display:flex;padding:3px 0;align-items:center}.tree-node-item-text:hover{background:#f1f7f8}.tree-node-item-text-icon{display:flex;align-items:center;justify-content:center;padding-right:9px}.tree-node-item-text-icon .edit{color:#428bca}.tree-node-item-text-label{color:#212533;font-family:Open Sans;font-size:14px;font-style:normal;font-weight:400;line-height:150%;display:flex;flex:1}.tree-node-item-text-checkbox{padding-right:9px;display:flex}.tree-node-item-text-checkbox input[type=checkbox]{accent-color:#428bca;width:14px;height:14px}.tree-node-item-text-editable{display:flex;align-items:center;justify-content:flex-end}.tree-node-item-text-editable i{padding:9px}.tree-node-item-text-input{flex:1}.tree-node-item.selectable .tree-node-item-text-label{font-family:Open Sans;font-size:14px;font-style:normal;font-weight:700}.tree-node-item.selectable *{cursor:pointer}.tree-node-item-selected .tree-node-item-text{background:#d5e8ec}.child{overflow:hidden;padding-left:2.2em;display:flex;flex-direction:column;gap:5px}.child-item:first-child{padding-top:5px}\n"], dependencies: [{ kind: "component", type: TreeNodeItemComponent, selector: "s-tree-node-item", inputs: ["ariaLevel", "showCheckbox", "treeNodeItem"], outputs: ["treeNodeItemClicked", "treeNodeEdit", "nodeExpanded", "nodeCollapsed"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: InputTextDirective, selector: "input[sInputText]" }], animations: [
|
|
122
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TreeNodeItemComponent, isStandalone: true, selector: "s-tree-node-item", inputs: { ariaLevel: { classPropertyName: "ariaLevel", publicName: "ariaLevel", isSignal: true, isRequired: false, transformFunction: null }, showCheckbox: { classPropertyName: "showCheckbox", publicName: "showCheckbox", isSignal: true, isRequired: false, transformFunction: null }, treeNodeItem: { classPropertyName: "treeNodeItem", publicName: "treeNodeItem", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { treeNodeItemClicked: "treeNodeItemClicked", treeNodeEdit: "treeNodeEdit", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if (treeNodeItem) {\n <div\n class=\"tree-node-item\"\n role=\"treeitem\"\n [class.tree-node-item-selected]=\"treeNodeItem.checked\"\n [class.selectable]=\"hasChildren\"\n [attr.aria-expanded]=\"hasChildren ? treeNodeItem.isExpanded : null\"\n [attr.aria-selected]=\"treeNodeItem.checked === true\"\n [attr.aria-label]=\"treeNodeItem.label\"\n [attr.aria-level]=\"ariaLevel()\"\n tabindex=\"0\"\n (keydown.enter)=\"handleTreeNodeItemClick($event)\"\n (keydown.arrowRight)=\"expandNode()\"\n (keydown.arrowLeft)=\"collapseNode()\"\n (keydown.arrowDown)=\"focusNextNode($event)\"\n (keydown.arrowUp)=\"focusPreviousNode($event)\"\n >\n @if (hasChildren || treeNodeItem.leaf === true) {\n <div\n class=\"arrow\"\n (click)=\"toggleExpanded(treeNodeItem)\"\n >\n @if (!treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.collapsedIcon || 'fas fa-chevron-right'\"></i>\n }\n @if (treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.expandedIcon || 'fas fa-chevron-down'\"></i>\n }\n </div>\n }\n\n <div\n class=\"tree-node-item-text\"\n (click)=\"handleTreeNodeItemClick($event)\"\n >\n @if (treeNodeItem.icon || treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-icon\">\n @if (treeNodeItem.icon && !treeNodeItem.isEditing) {\n <i [class]=\"treeNodeItem.icon\"></i>\n }\n @if (treeNodeItem.isEditing) {\n <i\n class=\"fas fa-edit edit\"\n (click)=\"saveEdit($event)\"\n ></i>\n }\n </span>\n }\n\n @if (showCheckbox() && !treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"treeNodeItem.checked === true\"\n [indeterminate]=\"treeNodeItem.checked === null\"\n [attr.aria-checked]=\"treeNodeItem.checked === null ? 'mixed' : treeNodeItem.checked\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"checkbox\"\n tabindex=\"0\"\n (keydown.enter)=\"onCheckboxEnter(treeNodeItem)\"\n />\n </span>\n }\n\n <span class=\"tree-node-item-text-label\">\n @if (treeNodeItem.isEditing) {\n <input\n #input\n type=\"text\"\n sInputText\n class=\"tree-node-item-text-input\"\n [(ngModel)]=\"treeNodeItem.editNewValue\"\n (keydown.enter)=\"saveEdit($event)\"\n (keydown.escape)=\"cancelEdit($event)\"\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Editar nome do item\"\n aria-live=\"polite\"\n />\n } @else if (!treeNodeItem.isEditing) {\n {{ treeNodeItem.label }}\n }\n </span>\n\n @if (editable) {\n <span class=\"tree-node-item-text-editable\">\n <i\n class=\"fas fa-pencil-alt\"\n (click)=\"toggleEditing($event)\"\n aria-label=\"Editar item\"\n tabindex=\"0\"\n ></i>\n </span>\n }\n </div>\n </div>\n}\n\n@if (hasChildren && treeNodeItem.isExpanded) {\n <div\n @fadeExpand\n class=\"child\"\n role=\"group\"\n @childrenAnimation\n >\n @for (child of treeNodeItem.children; track $index) {\n <s-tree-node-item\n [showCheckbox]=\"showCheckbox()\"\n [treeNodeItem]=\"child\"\n [ariaLevel]=\"ariaLevel() + 1\"\n (treeNodeItemClicked)=\"handleTreeNodeItemClicked($event)\"\n (treeNodeEdit)=\"treeNodeEditChildEvent($event)\"\n (nodeExpanded)=\"nodeExpanded.emit($event)\"\n (nodeCollapsed)=\"nodeCollapsed.emit($event)\"\n class=\"child-item\"\n />\n }\n </div>\n}\n\n", styles: [".tree-node-item{width:100%;display:flex;cursor:pointer}.tree-node-item:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.tree-node-item .arrow{padding:3px 9px;display:flex;align-items:center;justify-content:center}.tree-node-item-text{flex:1;display:flex;padding:3px 0;align-items:center}.tree-node-item-text:hover{background:#f1f7f8}.tree-node-item-text-icon{display:flex;align-items:center;justify-content:center;padding-right:9px}.tree-node-item-text-icon .edit{color:#428bca}.tree-node-item-text-label{color:#212533;font-family:Open Sans;font-size:14px;font-style:normal;font-weight:400;line-height:150%;display:flex;flex:1}.tree-node-item-text-checkbox{padding-right:9px;display:flex}.tree-node-item-text-checkbox input[type=checkbox]{accent-color:#428bca;width:14px;height:14px}.tree-node-item-text-checkbox input[type=checkbox]:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.tree-node-item-text-editable{display:flex;align-items:center;justify-content:flex-end}.tree-node-item-text-editable i{padding:9px;border-radius:50%}.tree-node-item-text-editable i:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.tree-node-item-text-input{flex:1}.tree-node-item.selectable .tree-node-item-text-label{font-family:Open Sans;font-size:14px;font-style:normal;font-weight:700}.tree-node-item.selectable *{cursor:pointer}.tree-node-item-selected .tree-node-item-text{background:#d5e8ec}.child{overflow:hidden;padding-left:2.2em;padding-right:5px;display:flex;flex-direction:column;gap:5px}.child-item:first-child{padding-top:5px}.child-item:last-child{padding-bottom:5px}\n"], dependencies: [{ kind: "component", type: TreeNodeItemComponent, selector: "s-tree-node-item", inputs: ["ariaLevel", "showCheckbox", "treeNodeItem"], outputs: ["treeNodeItemClicked", "treeNodeEdit", "nodeExpanded", "nodeCollapsed"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: InputTextDirective, selector: "input[sInputText]" }], animations: [
|
|
106
123
|
trigger('fadeExpand', [
|
|
107
124
|
transition(':enter', [
|
|
108
125
|
style({ height: '0px', opacity: 0, overflow: 'hidden' }),
|
|
@@ -138,7 +155,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
138
155
|
], { optional: true }),
|
|
139
156
|
]),
|
|
140
157
|
]),
|
|
141
|
-
], standalone: true, imports: [FormsModule, InputTextDirective], template: "@if (treeNodeItem) {\n <div\n class=\"tree-node-item\"\n role=\"treeitem\"\n [class.tree-node-item-selected]=\"treeNodeItem.checked\"\n [class.selectable]=\"hasChildren\"\n [attr.aria-expanded]=\"hasChildren ? treeNodeItem.isExpanded : null\"\n [attr.aria-selected]=\"treeNodeItem.checked === true\"\n [attr.aria-label]=\"treeNodeItem.label\"\n [attr.aria-level]=\"ariaLevel()\"\n tabindex=\"0\"\n (keydown.enter)=\"handleTreeNodeItemClick($event)\"\n (keydown.arrowRight)=\"expandNode()\"\n (keydown.arrowLeft)=\"collapseNode()\"\n >\n @if (hasChildren || treeNodeItem.leaf === true) {\n <div\n class=\"arrow\"\n (click)=\"toggleExpanded(treeNodeItem)\"\n >\n @if (!treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.collapsedIcon || 'fas fa-chevron-right'\"></i>\n }\n @if (treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.expandedIcon || 'fas fa-chevron-down'\"></i>\n }\n </div>\n }\n\n <div\n class=\"tree-node-item-text\"\n (click)=\"handleTreeNodeItemClick($event)\"\n >\n @if (treeNodeItem.icon || treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-icon\">\n @if (treeNodeItem.icon && !treeNodeItem.isEditing) {\n <i [class]=\"treeNodeItem.icon\"></i>\n }\n @if (treeNodeItem.isEditing) {\n <i\n class=\"fas fa-edit edit\"\n (click)=\"saveEdit($event)\"\n ></i>\n }\n </span>\n }\n\n @if (showCheckbox() && !treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"treeNodeItem.checked === true\"\n [indeterminate]=\"treeNodeItem.checked === null\"\n [attr.aria-checked]=\"treeNodeItem.checked === null ? 'mixed' : treeNodeItem.checked\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"checkbox\"\n tabindex=\"0\"\n (keydown.enter)=\"onCheckboxEnter(treeNodeItem)\"\n />\n </span>\n }\n\n <span class=\"tree-node-item-text-label\">\n @if (treeNodeItem.isEditing) {\n <input\n #input\n type=\"text\"\n sInputText\n class=\"tree-node-item-text-input\"\n [(ngModel)]=\"treeNodeItem.editNewValue\"\n (keydown.enter)=\"saveEdit($event)\"\n (keydown.escape)=\"cancelEdit($event)\"\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Editar nome do item\"\n aria-live=\"polite\"\n />\n } @else if (!treeNodeItem.isEditing) {\n {{ treeNodeItem.label }}\n }\n </span>\n\n @if (editable) {\n <span class=\"tree-node-item-text-editable\">\n <i\n class=\"fas fa-pencil-alt\"\n (click)=\"toggleEditing($event)\"\n aria-label=\"Editar item\"\n tabindex=\"0\"\n ></i>\n </span>\n }\n </div>\n </div>\n}\n\n@if (hasChildren && treeNodeItem.isExpanded) {\n <div\n @fadeExpand\n class=\"child\"\n role=\"group\"\n @childrenAnimation\n >\n @for (child of treeNodeItem.children; track $index) {\n <s-tree-node-item\n [showCheckbox]=\"showCheckbox()\"\n [treeNodeItem]=\"child\"\n [ariaLevel]=\"ariaLevel() + 1\"\n (treeNodeItemClicked)=\"handleTreeNodeItemClicked($event)\"\n (treeNodeEdit)=\"treeNodeEditChildEvent($event)\"\n (nodeExpanded)=\"nodeExpanded.emit($event)\"\n (nodeCollapsed)=\"nodeCollapsed.emit($event)\"\n class=\"child-item\"\n />\n }\n </div>\n}\n\n", styles: [".tree-node-item{width:100%;display:flex;cursor:pointer}.tree-node-item .arrow{padding:3px 9px;display:flex;align-items:center;justify-content:center}.tree-node-item-text{flex:1;display:flex;padding:3px 0;align-items:center}.tree-node-item-text:hover{background:#f1f7f8}.tree-node-item-text-icon{display:flex;align-items:center;justify-content:center;padding-right:9px}.tree-node-item-text-icon .edit{color:#428bca}.tree-node-item-text-label{color:#212533;font-family:Open Sans;font-size:14px;font-style:normal;font-weight:400;line-height:150%;display:flex;flex:1}.tree-node-item-text-checkbox{padding-right:9px;display:flex}.tree-node-item-text-checkbox input[type=checkbox]{accent-color:#428bca;width:14px;height:14px}.tree-node-item-text-editable{display:flex;align-items:center;justify-content:flex-end}.tree-node-item-text-editable i{padding:9px}.tree-node-item-text-input{flex:1}.tree-node-item.selectable .tree-node-item-text-label{font-family:Open Sans;font-size:14px;font-style:normal;font-weight:700}.tree-node-item.selectable *{cursor:pointer}.tree-node-item-selected .tree-node-item-text{background:#d5e8ec}.child{overflow:hidden;padding-left:2.2em;display:flex;flex-direction:column;gap:5px}.child-item:first-child{padding-top:5px}\n"] }]
|
|
158
|
+
], standalone: true, imports: [FormsModule, InputTextDirective], template: "@if (treeNodeItem) {\n <div\n class=\"tree-node-item\"\n role=\"treeitem\"\n [class.tree-node-item-selected]=\"treeNodeItem.checked\"\n [class.selectable]=\"hasChildren\"\n [attr.aria-expanded]=\"hasChildren ? treeNodeItem.isExpanded : null\"\n [attr.aria-selected]=\"treeNodeItem.checked === true\"\n [attr.aria-label]=\"treeNodeItem.label\"\n [attr.aria-level]=\"ariaLevel()\"\n tabindex=\"0\"\n (keydown.enter)=\"handleTreeNodeItemClick($event)\"\n (keydown.arrowRight)=\"expandNode()\"\n (keydown.arrowLeft)=\"collapseNode()\"\n (keydown.arrowDown)=\"focusNextNode($event)\"\n (keydown.arrowUp)=\"focusPreviousNode($event)\"\n >\n @if (hasChildren || treeNodeItem.leaf === true) {\n <div\n class=\"arrow\"\n (click)=\"toggleExpanded(treeNodeItem)\"\n >\n @if (!treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.collapsedIcon || 'fas fa-chevron-right'\"></i>\n }\n @if (treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.expandedIcon || 'fas fa-chevron-down'\"></i>\n }\n </div>\n }\n\n <div\n class=\"tree-node-item-text\"\n (click)=\"handleTreeNodeItemClick($event)\"\n >\n @if (treeNodeItem.icon || treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-icon\">\n @if (treeNodeItem.icon && !treeNodeItem.isEditing) {\n <i [class]=\"treeNodeItem.icon\"></i>\n }\n @if (treeNodeItem.isEditing) {\n <i\n class=\"fas fa-edit edit\"\n (click)=\"saveEdit($event)\"\n ></i>\n }\n </span>\n }\n\n @if (showCheckbox() && !treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"treeNodeItem.checked === true\"\n [indeterminate]=\"treeNodeItem.checked === null\"\n [attr.aria-checked]=\"treeNodeItem.checked === null ? 'mixed' : treeNodeItem.checked\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"checkbox\"\n tabindex=\"0\"\n (keydown.enter)=\"onCheckboxEnter(treeNodeItem)\"\n />\n </span>\n }\n\n <span class=\"tree-node-item-text-label\">\n @if (treeNodeItem.isEditing) {\n <input\n #input\n type=\"text\"\n sInputText\n class=\"tree-node-item-text-input\"\n [(ngModel)]=\"treeNodeItem.editNewValue\"\n (keydown.enter)=\"saveEdit($event)\"\n (keydown.escape)=\"cancelEdit($event)\"\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Editar nome do item\"\n aria-live=\"polite\"\n />\n } @else if (!treeNodeItem.isEditing) {\n {{ treeNodeItem.label }}\n }\n </span>\n\n @if (editable) {\n <span class=\"tree-node-item-text-editable\">\n <i\n class=\"fas fa-pencil-alt\"\n (click)=\"toggleEditing($event)\"\n aria-label=\"Editar item\"\n tabindex=\"0\"\n ></i>\n </span>\n }\n </div>\n </div>\n}\n\n@if (hasChildren && treeNodeItem.isExpanded) {\n <div\n @fadeExpand\n class=\"child\"\n role=\"group\"\n @childrenAnimation\n >\n @for (child of treeNodeItem.children; track $index) {\n <s-tree-node-item\n [showCheckbox]=\"showCheckbox()\"\n [treeNodeItem]=\"child\"\n [ariaLevel]=\"ariaLevel() + 1\"\n (treeNodeItemClicked)=\"handleTreeNodeItemClicked($event)\"\n (treeNodeEdit)=\"treeNodeEditChildEvent($event)\"\n (nodeExpanded)=\"nodeExpanded.emit($event)\"\n (nodeCollapsed)=\"nodeCollapsed.emit($event)\"\n class=\"child-item\"\n />\n }\n </div>\n}\n\n", styles: [".tree-node-item{width:100%;display:flex;cursor:pointer}.tree-node-item:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.tree-node-item .arrow{padding:3px 9px;display:flex;align-items:center;justify-content:center}.tree-node-item-text{flex:1;display:flex;padding:3px 0;align-items:center}.tree-node-item-text:hover{background:#f1f7f8}.tree-node-item-text-icon{display:flex;align-items:center;justify-content:center;padding-right:9px}.tree-node-item-text-icon .edit{color:#428bca}.tree-node-item-text-label{color:#212533;font-family:Open Sans;font-size:14px;font-style:normal;font-weight:400;line-height:150%;display:flex;flex:1}.tree-node-item-text-checkbox{padding-right:9px;display:flex}.tree-node-item-text-checkbox input[type=checkbox]{accent-color:#428bca;width:14px;height:14px}.tree-node-item-text-checkbox input[type=checkbox]:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.tree-node-item-text-editable{display:flex;align-items:center;justify-content:flex-end}.tree-node-item-text-editable i{padding:9px;border-radius:50%}.tree-node-item-text-editable i:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.tree-node-item-text-input{flex:1}.tree-node-item.selectable .tree-node-item-text-label{font-family:Open Sans;font-size:14px;font-style:normal;font-weight:700}.tree-node-item.selectable *{cursor:pointer}.tree-node-item-selected .tree-node-item-text{background:#d5e8ec}.child{overflow:hidden;padding-left:2.2em;padding-right:5px;display:flex;flex-direction:column;gap:5px}.child-item:first-child{padding-top:5px}.child-item:last-child{padding-bottom:5px}\n"] }]
|
|
142
159
|
}], propDecorators: { treeNodeItem: [{
|
|
143
160
|
type: Input
|
|
144
161
|
}], treeNodeItemClicked: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-tree.mjs","sources":["../../projects/angular-components/tree/src/lib/tree/components/tree-node-item/tree-node-item.component.ts","../../projects/angular-components/tree/src/lib/tree/components/tree-node-item/tree-node-item.component.html","../../projects/angular-components/tree/src/lib/tree/tree.component.ts","../../projects/angular-components/tree/src/lib/tree/tree.component.html","../../projects/angular-components/tree/src/lib/tree/tree.module.ts","../../projects/angular-components/tree/src/seniorsistemas-angular-components-tree.ts"],"sourcesContent":["import { animate, query, stagger, style, transition, trigger } from '@angular/animations';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild,\r\n input,\r\n inject,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { InternalTreeNodeItem, TreeNodeEdit } from '../../Models/tree.models';\r\nimport { InputTextDirective } from '@seniorsistemas/angular-components/input-text';\r\n\r\n@Component({\r\n selector: 's-tree-node-item',\r\n templateUrl: './tree-node-item.component.html',\r\n styleUrls: ['./tree-node-item.component.scss'],\r\n animations: [\r\n trigger('fadeExpand', [\r\n transition(':enter', [\r\n style({ height: '0px', opacity: 0, overflow: 'hidden' }),\r\n animate('200ms ease-out', style({ height: '*', opacity: 1 })),\r\n ]),\r\n transition(':leave', [animate('150ms ease-in', style({ height: '0px', opacity: 0 }))]),\r\n ]),\r\n trigger('childrenAnimation', [\r\n transition(':enter', [\r\n query(\r\n ':enter',\r\n [\r\n style({ opacity: 0, transform: 'translateY(-10px)' }),\r\n stagger(60, [animate('200ms ease-out', style({ opacity: 1, transform: 'translateY(0)' }))]),\r\n ],\r\n { optional: true },\r\n ),\r\n ]),\r\n ]),\r\n ],\r\n standalone: true,\r\n imports: [FormsModule, InputTextDirective],\r\n})\r\nexport class TreeNodeItemComponent {\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n private readonly translateService = inject(TranslateService);\r\n\r\n readonly ariaLevel = input(0);\r\n readonly showCheckbox = input(false);\r\n @Input() treeNodeItem!: InternalTreeNodeItem;\r\n @Output() treeNodeItemClicked = new EventEmitter<{ item: InternalTreeNodeItem; event: Event }>();\r\n @Output() treeNodeEdit = new EventEmitter<TreeNodeEdit>();\r\n @Output() nodeExpanded = new EventEmitter<InternalTreeNodeItem>();\r\n @Output() nodeCollapsed = new EventEmitter<InternalTreeNodeItem>();\r\n\r\n @ViewChild('input', { read: ElementRef }) input!: ElementRef<HTMLInputElement>;\r\n\r\n get hasChildren(): boolean {\r\n return !!(this.treeNodeItem?.children && this.treeNodeItem.children.length > 0);\r\n }\r\n\r\n get editable() {\r\n return this.treeNodeItem?.editable || false;\r\n }\r\n\r\n get ariaLabel() {\r\n return `${this.translateService.instant('platform.angular_components.select')} ${this.treeNodeItem.label}`;\r\n }\r\n\r\n expandNode() {\r\n if (this.hasChildren && !this.treeNodeItem.isExpanded) {\r\n this.toggleExpanded(this.treeNodeItem);\r\n }\r\n }\r\n\r\n collapseNode() {\r\n if (this.hasChildren && this.treeNodeItem.isExpanded) {\r\n this.toggleExpanded(this.treeNodeItem);\r\n }\r\n }\r\n\r\n onCheckboxEnter(node: InternalTreeNodeItem) {\r\n const newState = node.checked === true ? false : true;\r\n node.checked = newState;\r\n this.treeNodeItemClicked.emit({ item: node, event: new KeyboardEvent('keydown', { key: 'Enter' }) });\r\n }\r\n\r\n handleTreeNodeItemClick(event: Event, treeNodeItem?: InternalTreeNodeItem) {\r\n const item = treeNodeItem || this.treeNodeItem;\r\n this.treeNodeItemClicked.emit({ item, event });\r\n }\r\n\r\n handleTreeNodeItemClicked({ event, item }: { event: Event; item: InternalTreeNodeItem }) {\r\n if (item.isEditing) {\r\n return;\r\n }\r\n this.handleTreeNodeItemClick(event, item);\r\n }\r\n\r\n toggleExpanded(treeNodeItem: InternalTreeNodeItem) {\r\n treeNodeItem.isExpanded = !treeNodeItem.isExpanded;\r\n if (treeNodeItem.isExpanded) {\r\n this.nodeExpanded.emit(treeNodeItem);\r\n } else {\r\n this.nodeCollapsed.emit(treeNodeItem);\r\n }\r\n }\r\n\r\n toggleEditing($event: Event) {\r\n $event.stopPropagation();\r\n this.treeNodeItem.isEditing = !this.treeNodeItem.isEditing;\r\n this.cdr.detectChanges();\r\n if (this.treeNodeItem.isEditing) {\r\n this.treeNodeItem.editNewValue = this.treeNodeItem.label;\r\n const input = this.input?.nativeElement;\r\n input?.focus();\r\n }\r\n }\r\n\r\n cancelEdit($event: Event) {\r\n $event.stopPropagation();\r\n this.treeNodeItem.isEditing = false;\r\n this.treeNodeItem.editNewValue = '';\r\n this.treeNodeItem.editPreviousValue = '';\r\n this.cdr.detectChanges();\r\n }\r\n\r\n saveEdit($event: Event) {\r\n $event.stopPropagation();\r\n this.treeNodeItem.isEditing = false;\r\n if (!this.treeNodeItem.editNewValue) {\r\n return;\r\n }\r\n\r\n this.treeNodeItem.editPreviousValue = this.treeNodeItem.label;\r\n this.treeNodeItem.label = this.treeNodeItem.editNewValue;\r\n\r\n const revertAction = () => {\r\n this.treeNodeItem.label = this.treeNodeItem.editPreviousValue as string;\r\n this.treeNodeItem.isEditing = false;\r\n this.cdr.detectChanges();\r\n };\r\n this.treeNodeEdit.emit({\r\n revertAction,\r\n item: this.treeNodeItem,\r\n newValue: this.treeNodeItem.editNewValue,\r\n previousValue: this.treeNodeItem.editPreviousValue,\r\n });\r\n }\r\n\r\n treeNodeEditChildEvent(payload: TreeNodeEdit) {\r\n this.treeNodeEdit.emit(payload);\r\n }\r\n}\r\n","@if (treeNodeItem) {\n <div\n class=\"tree-node-item\"\n role=\"treeitem\"\n [class.tree-node-item-selected]=\"treeNodeItem.checked\"\n [class.selectable]=\"hasChildren\"\n [attr.aria-expanded]=\"hasChildren ? treeNodeItem.isExpanded : null\"\n [attr.aria-selected]=\"treeNodeItem.checked === true\"\n [attr.aria-label]=\"treeNodeItem.label\"\n [attr.aria-level]=\"ariaLevel()\"\n tabindex=\"0\"\n (keydown.enter)=\"handleTreeNodeItemClick($event)\"\n (keydown.arrowRight)=\"expandNode()\"\n (keydown.arrowLeft)=\"collapseNode()\"\n >\n @if (hasChildren || treeNodeItem.leaf === true) {\n <div\n class=\"arrow\"\n (click)=\"toggleExpanded(treeNodeItem)\"\n >\n @if (!treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.collapsedIcon || 'fas fa-chevron-right'\"></i>\n }\n @if (treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.expandedIcon || 'fas fa-chevron-down'\"></i>\n }\n </div>\n }\n\n <div\n class=\"tree-node-item-text\"\n (click)=\"handleTreeNodeItemClick($event)\"\n >\n @if (treeNodeItem.icon || treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-icon\">\n @if (treeNodeItem.icon && !treeNodeItem.isEditing) {\n <i [class]=\"treeNodeItem.icon\"></i>\n }\n @if (treeNodeItem.isEditing) {\n <i\n class=\"fas fa-edit edit\"\n (click)=\"saveEdit($event)\"\n ></i>\n }\n </span>\n }\n\n @if (showCheckbox() && !treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"treeNodeItem.checked === true\"\n [indeterminate]=\"treeNodeItem.checked === null\"\n [attr.aria-checked]=\"treeNodeItem.checked === null ? 'mixed' : treeNodeItem.checked\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"checkbox\"\n tabindex=\"0\"\n (keydown.enter)=\"onCheckboxEnter(treeNodeItem)\"\n />\n </span>\n }\n\n <span class=\"tree-node-item-text-label\">\n @if (treeNodeItem.isEditing) {\n <input\n #input\n type=\"text\"\n sInputText\n class=\"tree-node-item-text-input\"\n [(ngModel)]=\"treeNodeItem.editNewValue\"\n (keydown.enter)=\"saveEdit($event)\"\n (keydown.escape)=\"cancelEdit($event)\"\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Editar nome do item\"\n aria-live=\"polite\"\n />\n } @else if (!treeNodeItem.isEditing) {\n {{ treeNodeItem.label }}\n }\n </span>\n\n @if (editable) {\n <span class=\"tree-node-item-text-editable\">\n <i\n class=\"fas fa-pencil-alt\"\n (click)=\"toggleEditing($event)\"\n aria-label=\"Editar item\"\n tabindex=\"0\"\n ></i>\n </span>\n }\n </div>\n </div>\n}\n\n@if (hasChildren && treeNodeItem.isExpanded) {\n <div\n @fadeExpand\n class=\"child\"\n role=\"group\"\n @childrenAnimation\n >\n @for (child of treeNodeItem.children; track $index) {\n <s-tree-node-item\n [showCheckbox]=\"showCheckbox()\"\n [treeNodeItem]=\"child\"\n [ariaLevel]=\"ariaLevel() + 1\"\n (treeNodeItemClicked)=\"handleTreeNodeItemClicked($event)\"\n (treeNodeEdit)=\"treeNodeEditChildEvent($event)\"\n (nodeExpanded)=\"nodeExpanded.emit($event)\"\n (nodeCollapsed)=\"nodeCollapsed.emit($event)\"\n class=\"child-item\"\n />\n }\n </div>\n}\n\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\n\r\nimport { InternalTreeNodeItem, TreeNodeEdit, TreeNodeItem } from './Models/tree.models';\r\nimport { LoadingStateDirective } from '@seniorsistemas/angular-components/loading-state';\r\nimport { TreeNodeItemComponent } from './components/tree-node-item/tree-node-item.component';\r\n\r\n/**\r\n * @description Componente de árvore hierárquica com suporte a seleção única ou múltipla,\r\n * checkboxes, noós expansíveis e edição inline de rótulos. Gerencia o estado interno\r\n * dos nós e emite eventos na seleção, expansão, colapso e edição.\r\n *\r\n * @example\r\n * ```html\r\n * <s-tree\r\n * [treeData]=\"nos\"\r\n * selectionMode=\"multiple\"\r\n * [showCheckbox]=\"true\"\r\n * (selectedChange)=\"onSelecaoMudou($event)\" />\r\n * ```\r\n *\r\n * @category Data\r\n */\r\n@Component({\r\n selector: 's-tree',\r\n templateUrl: './tree.component.html',\r\n styleUrls: ['./tree.component.scss'],\r\n standalone: true,\r\n imports: [LoadingStateDirective, TreeNodeItemComponent],\r\n})\r\nexport class TreeComponent implements OnChanges {\r\n /** @description Lista de nós raíz da árvore. @default [] */\r\n @Input()\r\n public treeData: TreeNodeItem[] = [];\r\n\r\n private _selected: TreeNodeItem[] = [];\r\n /** @description Nó(s) selecionado(s). Suporta array ou item único dependendo de `selectionMode`. @default [] */\r\n @Input()\r\n public get selected(): TreeNodeItem[] {\r\n return this._selected;\r\n }\r\n public set selected(value: TreeNodeItem[] | TreeNodeItem | undefined) {\r\n if (!value) {\r\n value = [];\r\n }\r\n if (!Array.isArray(value)) {\r\n value = [value];\r\n }\r\n this._selected = value;\r\n }\r\n\r\n /** @description Exibe indicador de carregamento nos nós. @default false */\r\n @Input()\r\n public loading = false;\r\n\r\n /** @description Modo de seleção: `'single'` ou `'multiple'`. @default 'single' */\r\n @Input()\r\n public selectionMode: 'single' | 'multiple' = 'single';\r\n\r\n /** @description Exibe checkboxes nos nós para seleção visual. @default false */\r\n @Input()\r\n public showCheckbox = false;\r\n\r\n /** @description Expão todos os nós inicialmente. @default false */\r\n @Input()\r\n public allExpanded = false;\r\n\r\n /** @description Emitido quando a seleção muda, com o(s) nó(s) selecionado(s). */\r\n @Output()\r\n public selectedChange: EventEmitter<TreeNodeItem[] | TreeNodeItem> = new EventEmitter();\r\n\r\n /** @description Emitido quando o usuário clica em um nó da árvore. */\r\n @Output()\r\n public treeNodeItemClicked: EventEmitter<TreeNodeItem> = new EventEmitter();\r\n\r\n /** @description Emitido após uma edição inline de rótulo de nó. */\r\n @Output()\r\n public treeNodeEdit: EventEmitter<TreeNodeEdit> = new EventEmitter();\r\n\r\n /** @description Emitido quando um nó é expandido pelo usuário. */\r\n @Output()\r\n public nodeExpanded: EventEmitter<TreeNodeItem> = new EventEmitter();\r\n\r\n /** @description Emitido quando um nó é colapsado pelo usuário. */\r\n @Output()\r\n public nodeCollapsed: EventEmitter<TreeNodeItem> = new EventEmitter();\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n this.onChanges(changes);\r\n }\r\n\r\n public onTreeNodeItemClicked({ item }: { item: InternalTreeNodeItem }) {\r\n this.treeNodeItemClicked.emit(parseInternalTreeNodeItem(item));\r\n this.toggleChecked(item);\r\n }\r\n\r\n public onTreeNodeEdit(payload: TreeNodeEdit) {\r\n const { revertAction, item, newValue, previousValue } = payload;\r\n this.treeNodeEdit.emit({\r\n revertAction,\r\n item: parseInternalTreeNodeItem(item),\r\n newValue,\r\n previousValue,\r\n });\r\n }\r\n\r\n public onNodeExpanded(item: InternalTreeNodeItem) {\r\n this.nodeExpanded.emit(parseInternalTreeNodeItem(item));\r\n }\r\n\r\n public onNodeCollapsed(item: InternalTreeNodeItem) {\r\n this.nodeCollapsed.emit(parseInternalTreeNodeItem(item));\r\n }\r\n\r\n private toggleChecked(treeNodeItem: TreeNodeItem) {\r\n const elementCheckState = !treeNodeItem.checked;\r\n if (!this.multiple) {\r\n flattenTree(this.treeData).forEach((x) => (x.checked = false));\r\n this.selected = [treeNodeItem];\r\n }\r\n treeNodeItem.checked = elementCheckState;\r\n if (this.multiple) {\r\n this.checkTreeDataChildren(treeNodeItem);\r\n }\r\n this.setSelected();\r\n }\r\n\r\n private checkTreeDataChildren(selectedTreeNode: TreeNodeItem) {\r\n const parentChecked = selectedTreeNode.checked;\r\n if (selectedTreeNode.children) {\r\n selectedTreeNode.children.forEach((item) => {\r\n const childrens = flattenTree(item.children || []);\r\n item.checked = parentChecked;\r\n childrens.forEach((child) => (child.checked = parentChecked));\r\n });\r\n }\r\n\r\n const getNodeChildrenSummary = (node: TreeNodeItem) => {\r\n const children = node.children ?? [];\r\n const allChildrenChecked = children.every((y) => y.checked === true);\r\n const someChildrenChecked = children.some((y) => y.checked === true || y.checked === null);\r\n const allChildrenUnchecked = children.every((y) => y.checked === false || y.checked === undefined);\r\n return { allChildrenChecked, someChildrenChecked, allChildrenUnchecked };\r\n };\r\n const updateCheckedStateRecursively = (node: TreeNodeItem): void => {\r\n if (!node.children?.length) return;\r\n\r\n node.children.forEach(updateCheckedStateRecursively);\r\n\r\n const { allChildrenChecked, someChildrenChecked, allChildrenUnchecked } = getNodeChildrenSummary(node);\r\n if (allChildrenChecked) {\r\n node.checked = true;\r\n } else if (someChildrenChecked) {\r\n node.checked = null;\r\n } else if (allChildrenUnchecked) {\r\n node.checked = false;\r\n }\r\n };\r\n this.treeData.forEach(updateCheckedStateRecursively);\r\n }\r\n\r\n private setSelected() {\r\n const selected = this.selectedElements;\r\n this.selected = [...selected];\r\n this.selectedChange.emit(selected);\r\n }\r\n\r\n private onChanges(changes: SimpleChanges) {\r\n const allExpandedChanges = changes['allExpanded'];\r\n const _checkIsFirstChangeWithValue = (value: Extract<keyof TreeComponent, 'selected' | 'treeData'>) => {\r\n if (!changes[value]) {\r\n return;\r\n }\r\n return (\r\n (!changes[value].previousValue || changes[value].previousValue.length === 0) &&\r\n changes[value].currentValue?.length > 0\r\n );\r\n };\r\n\r\n if (_checkIsFirstChangeWithValue('selected')) {\r\n this.syncSelectedChanges();\r\n }\r\n\r\n if (_checkIsFirstChangeWithValue('treeData')) {\r\n const isAllExpanded = this.allExpanded;\r\n if (isAllExpanded) {\r\n this.expandAll();\r\n }\r\n }\r\n\r\n if (allExpandedChanges) {\r\n if (this.allExpanded) {\r\n this.expandAll();\r\n } else {\r\n this.collapseAll();\r\n }\r\n }\r\n }\r\n\r\n private syncSelectedChanges() {\r\n const treeFlatten = flattenTree(this.treeData);\r\n this.selected.forEach((selectedItem) => {\r\n const item = treeFlatten.find((item) => item.id === selectedItem.id);\r\n if (item) {\r\n item.checked = true;\r\n }\r\n if (item && item.children && this.multiple) {\r\n item.children.forEach((child) => {\r\n child.checked = true;\r\n const existChildInSelectedList = this.selected.some((item) => item.id === child.id);\r\n if (!existChildInSelectedList) {\r\n this.selected.push(child);\r\n }\r\n });\r\n }\r\n });\r\n const selectedElements = this.selectedElements;\r\n const selectedElementsNotInSelectedList = selectedElements.filter(\r\n (x) => !this.selected.some((y) => y.id === x.id),\r\n );\r\n selectedElementsNotInSelectedList.forEach((item) => {\r\n this.checkTreeDataChildren(item);\r\n });\r\n this.setSelected();\r\n }\r\n\r\n private collapseAll() {\r\n const flatten = flattenTree(this.treeData);\r\n flatten.forEach((item) => {\r\n item.isExpanded = false;\r\n });\r\n }\r\n\r\n private expandAll() {\r\n const flatten = flattenTree(this.treeData);\r\n flatten.forEach((item) => {\r\n item.isExpanded = true;\r\n });\r\n }\r\n\r\n private get selectedElements() {\r\n return flattenTree(this.treeData)\r\n .filter((x) => x.checked)\r\n .filter((x) => x.leaf !== true && !x.children?.length);\r\n }\r\n\r\n private get multiple() {\r\n return this.selectionMode === 'multiple';\r\n }\r\n}\r\n\r\nconst flattenTree = <T = any>(tree: TreeNodeItem<T>[]): TreeNodeItem<T>[] => {\r\n const result: TreeNodeItem<T>[] = [];\r\n\r\n function traverse(nodes: TreeNodeItem<T>[]) {\r\n for (const node of nodes) {\r\n result.push(node);\r\n if (node.children && node.children.length) {\r\n traverse(node.children);\r\n }\r\n }\r\n }\r\n\r\n traverse(tree);\r\n return result;\r\n};\r\n\r\nconst parseInternalTreeNodeItem = <T = any>(internalTreeNodeItem: InternalTreeNodeItem<T>): TreeNodeItem<T> => {\r\n const { id, label, icon, checked, isExpanded, payload, editable, children } = internalTreeNodeItem;\r\n const object = {\r\n id,\r\n label,\r\n icon,\r\n checked,\r\n isExpanded,\r\n payload,\r\n editable,\r\n _children: children?.map(parseInternalTreeNodeItem),\r\n get children() {\r\n return this._children;\r\n },\r\n set children(value) {\r\n this._children = value;\r\n internalTreeNodeItem.children = value;\r\n },\r\n };\r\n Object.defineProperty(object, '_children', {\r\n enumerable: false,\r\n });\r\n return object as TreeNodeItem<T>;\r\n};\r\n","<div class=\"tree\" *sLoadingState=\"loading\">\n @for(item of treeData; track $index) {\n <s-tree-node-item\n [showCheckbox]=\"showCheckbox\"\n [treeNodeItem]=\"item\"\n (nodeExpanded)=\"onNodeExpanded($event)\"\n (nodeCollapsed)=\"onNodeCollapsed($event)\"\n (treeNodeEdit)=\"onTreeNodeEdit($event)\"\n (treeNodeItemClicked)=\"onTreeNodeItemClicked($event)\">\n </s-tree-node-item>\n\n }\n</div>\n","import { NgModule } from '@angular/core';\r\n\r\nimport { TreeComponent } from './tree.component';\r\n\r\n@NgModule({\r\n imports: [TreeComponent],\r\n exports: [TreeComponent],\r\n})\r\nexport class TreeModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-tree.mjs","sources":["../../projects/angular-components/tree/src/lib/tree/components/tree-node-item/tree-node-item.component.ts","../../projects/angular-components/tree/src/lib/tree/components/tree-node-item/tree-node-item.component.html","../../projects/angular-components/tree/src/lib/tree/tree.component.ts","../../projects/angular-components/tree/src/lib/tree/tree.component.html","../../projects/angular-components/tree/src/lib/tree/tree.module.ts","../../projects/angular-components/tree/src/seniorsistemas-angular-components-tree.ts"],"sourcesContent":["import { animate, query, stagger, style, transition, trigger } from '@angular/animations';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild,\r\n input,\r\n inject,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { InternalTreeNodeItem, TreeNodeEdit } from '../../Models/tree.models';\r\nimport { InputTextDirective } from '@seniorsistemas/angular-components/input-text';\r\n\r\n@Component({\r\n selector: 's-tree-node-item',\r\n templateUrl: './tree-node-item.component.html',\r\n styleUrls: ['./tree-node-item.component.scss'],\r\n animations: [\r\n trigger('fadeExpand', [\r\n transition(':enter', [\r\n style({ height: '0px', opacity: 0, overflow: 'hidden' }),\r\n animate('200ms ease-out', style({ height: '*', opacity: 1 })),\r\n ]),\r\n transition(':leave', [animate('150ms ease-in', style({ height: '0px', opacity: 0 }))]),\r\n ]),\r\n trigger('childrenAnimation', [\r\n transition(':enter', [\r\n query(\r\n ':enter',\r\n [\r\n style({ opacity: 0, transform: 'translateY(-10px)' }),\r\n stagger(60, [animate('200ms ease-out', style({ opacity: 1, transform: 'translateY(0)' }))]),\r\n ],\r\n { optional: true },\r\n ),\r\n ]),\r\n ]),\r\n ],\r\n standalone: true,\r\n imports: [FormsModule, InputTextDirective],\r\n})\r\nexport class TreeNodeItemComponent {\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n private readonly translateService = inject(TranslateService);\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n readonly ariaLevel = input(0);\r\n readonly showCheckbox = input(false);\r\n @Input() treeNodeItem!: InternalTreeNodeItem;\r\n @Output() treeNodeItemClicked = new EventEmitter<{ item: InternalTreeNodeItem; event: Event }>();\r\n @Output() treeNodeEdit = new EventEmitter<TreeNodeEdit>();\r\n @Output() nodeExpanded = new EventEmitter<InternalTreeNodeItem>();\r\n @Output() nodeCollapsed = new EventEmitter<InternalTreeNodeItem>();\r\n\r\n @ViewChild('input', { read: ElementRef }) input!: ElementRef<HTMLInputElement>;\r\n\r\n get hasChildren(): boolean {\r\n return !!(this.treeNodeItem?.children && this.treeNodeItem.children.length > 0);\r\n }\r\n\r\n get editable() {\r\n return this.treeNodeItem?.editable || false;\r\n }\r\n\r\n get ariaLabel() {\r\n return `${this.translateService.instant('platform.angular_components.select')} ${this.treeNodeItem.label}`;\r\n }\r\n\r\n expandNode() {\r\n if (this.hasChildren && !this.treeNodeItem.isExpanded) {\r\n this.toggleExpanded(this.treeNodeItem);\r\n }\r\n }\r\n\r\n collapseNode() {\r\n if (this.hasChildren && this.treeNodeItem.isExpanded) {\r\n this.toggleExpanded(this.treeNodeItem);\r\n }\r\n }\r\n\r\n focusNextNode(event: Event) {\r\n this.moveFocus(event, 1);\r\n }\r\n\r\n focusPreviousNode(event: Event) {\r\n this.moveFocus(event, -1);\r\n }\r\n\r\n private moveFocus(event: Event, offset: number) {\r\n const root = this.elementRef.nativeElement.closest<HTMLElement>('.tree') || document;\r\n const items = Array.from(root.querySelectorAll<HTMLElement>('.tree-node-item'));\r\n const currentIndex = items.indexOf(document.activeElement as HTMLElement);\r\n if (currentIndex === -1) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n items[currentIndex + offset]?.focus();\r\n }\r\n\r\n onCheckboxEnter(node: InternalTreeNodeItem) {\r\n const newState = node.checked === true ? false : true;\r\n node.checked = newState;\r\n this.treeNodeItemClicked.emit({ item: node, event: new KeyboardEvent('keydown', { key: 'Enter' }) });\r\n }\r\n\r\n handleTreeNodeItemClick(event: Event, treeNodeItem?: InternalTreeNodeItem) {\r\n const item = treeNodeItem || this.treeNodeItem;\r\n this.treeNodeItemClicked.emit({ item, event });\r\n }\r\n\r\n handleTreeNodeItemClicked({ event, item }: { event: Event; item: InternalTreeNodeItem }) {\r\n if (item.isEditing) {\r\n return;\r\n }\r\n this.handleTreeNodeItemClick(event, item);\r\n }\r\n\r\n toggleExpanded(treeNodeItem: InternalTreeNodeItem) {\r\n treeNodeItem.isExpanded = !treeNodeItem.isExpanded;\r\n if (treeNodeItem.isExpanded) {\r\n this.nodeExpanded.emit(treeNodeItem);\r\n } else {\r\n this.nodeCollapsed.emit(treeNodeItem);\r\n }\r\n }\r\n\r\n toggleEditing($event: Event) {\r\n $event.stopPropagation();\r\n this.treeNodeItem.isEditing = !this.treeNodeItem.isEditing;\r\n this.cdr.detectChanges();\r\n if (this.treeNodeItem.isEditing) {\r\n this.treeNodeItem.editNewValue = this.treeNodeItem.label;\r\n const input = this.input?.nativeElement;\r\n input?.focus();\r\n }\r\n }\r\n\r\n cancelEdit($event: Event) {\r\n $event.stopPropagation();\r\n this.treeNodeItem.isEditing = false;\r\n this.treeNodeItem.editNewValue = '';\r\n this.treeNodeItem.editPreviousValue = '';\r\n this.cdr.detectChanges();\r\n }\r\n\r\n saveEdit($event: Event) {\r\n $event.stopPropagation();\r\n this.treeNodeItem.isEditing = false;\r\n if (!this.treeNodeItem.editNewValue) {\r\n return;\r\n }\r\n\r\n this.treeNodeItem.editPreviousValue = this.treeNodeItem.label;\r\n this.treeNodeItem.label = this.treeNodeItem.editNewValue;\r\n\r\n const revertAction = () => {\r\n this.treeNodeItem.label = this.treeNodeItem.editPreviousValue as string;\r\n this.treeNodeItem.isEditing = false;\r\n this.cdr.detectChanges();\r\n };\r\n this.treeNodeEdit.emit({\r\n revertAction,\r\n item: this.treeNodeItem,\r\n newValue: this.treeNodeItem.editNewValue,\r\n previousValue: this.treeNodeItem.editPreviousValue,\r\n });\r\n }\r\n\r\n treeNodeEditChildEvent(payload: TreeNodeEdit) {\r\n this.treeNodeEdit.emit(payload);\r\n }\r\n}\r\n","@if (treeNodeItem) {\n <div\n class=\"tree-node-item\"\n role=\"treeitem\"\n [class.tree-node-item-selected]=\"treeNodeItem.checked\"\n [class.selectable]=\"hasChildren\"\n [attr.aria-expanded]=\"hasChildren ? treeNodeItem.isExpanded : null\"\n [attr.aria-selected]=\"treeNodeItem.checked === true\"\n [attr.aria-label]=\"treeNodeItem.label\"\n [attr.aria-level]=\"ariaLevel()\"\n tabindex=\"0\"\n (keydown.enter)=\"handleTreeNodeItemClick($event)\"\n (keydown.arrowRight)=\"expandNode()\"\n (keydown.arrowLeft)=\"collapseNode()\"\n (keydown.arrowDown)=\"focusNextNode($event)\"\n (keydown.arrowUp)=\"focusPreviousNode($event)\"\n >\n @if (hasChildren || treeNodeItem.leaf === true) {\n <div\n class=\"arrow\"\n (click)=\"toggleExpanded(treeNodeItem)\"\n >\n @if (!treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.collapsedIcon || 'fas fa-chevron-right'\"></i>\n }\n @if (treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.expandedIcon || 'fas fa-chevron-down'\"></i>\n }\n </div>\n }\n\n <div\n class=\"tree-node-item-text\"\n (click)=\"handleTreeNodeItemClick($event)\"\n >\n @if (treeNodeItem.icon || treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-icon\">\n @if (treeNodeItem.icon && !treeNodeItem.isEditing) {\n <i [class]=\"treeNodeItem.icon\"></i>\n }\n @if (treeNodeItem.isEditing) {\n <i\n class=\"fas fa-edit edit\"\n (click)=\"saveEdit($event)\"\n ></i>\n }\n </span>\n }\n\n @if (showCheckbox() && !treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"treeNodeItem.checked === true\"\n [indeterminate]=\"treeNodeItem.checked === null\"\n [attr.aria-checked]=\"treeNodeItem.checked === null ? 'mixed' : treeNodeItem.checked\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"checkbox\"\n tabindex=\"0\"\n (keydown.enter)=\"onCheckboxEnter(treeNodeItem)\"\n />\n </span>\n }\n\n <span class=\"tree-node-item-text-label\">\n @if (treeNodeItem.isEditing) {\n <input\n #input\n type=\"text\"\n sInputText\n class=\"tree-node-item-text-input\"\n [(ngModel)]=\"treeNodeItem.editNewValue\"\n (keydown.enter)=\"saveEdit($event)\"\n (keydown.escape)=\"cancelEdit($event)\"\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Editar nome do item\"\n aria-live=\"polite\"\n />\n } @else if (!treeNodeItem.isEditing) {\n {{ treeNodeItem.label }}\n }\n </span>\n\n @if (editable) {\n <span class=\"tree-node-item-text-editable\">\n <i\n class=\"fas fa-pencil-alt\"\n (click)=\"toggleEditing($event)\"\n aria-label=\"Editar item\"\n tabindex=\"0\"\n ></i>\n </span>\n }\n </div>\n </div>\n}\n\n@if (hasChildren && treeNodeItem.isExpanded) {\n <div\n @fadeExpand\n class=\"child\"\n role=\"group\"\n @childrenAnimation\n >\n @for (child of treeNodeItem.children; track $index) {\n <s-tree-node-item\n [showCheckbox]=\"showCheckbox()\"\n [treeNodeItem]=\"child\"\n [ariaLevel]=\"ariaLevel() + 1\"\n (treeNodeItemClicked)=\"handleTreeNodeItemClicked($event)\"\n (treeNodeEdit)=\"treeNodeEditChildEvent($event)\"\n (nodeExpanded)=\"nodeExpanded.emit($event)\"\n (nodeCollapsed)=\"nodeCollapsed.emit($event)\"\n class=\"child-item\"\n />\n }\n </div>\n}\n\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\n\r\nimport { InternalTreeNodeItem, TreeNodeEdit, TreeNodeItem } from './Models/tree.models';\r\nimport { LoadingStateDirective } from '@seniorsistemas/angular-components/loading-state';\r\nimport { TreeNodeItemComponent } from './components/tree-node-item/tree-node-item.component';\r\n\r\n/**\r\n * @description Componente de árvore hierárquica com suporte a seleção única ou múltipla,\r\n * checkboxes, noós expansíveis e edição inline de rótulos. Gerencia o estado interno\r\n * dos nós e emite eventos na seleção, expansão, colapso e edição.\r\n *\r\n * @example\r\n * ```html\r\n * <s-tree\r\n * [treeData]=\"nos\"\r\n * selectionMode=\"multiple\"\r\n * [showCheckbox]=\"true\"\r\n * (selectedChange)=\"onSelecaoMudou($event)\" />\r\n * ```\r\n *\r\n * @category Data\r\n */\r\n@Component({\r\n selector: 's-tree',\r\n templateUrl: './tree.component.html',\r\n styleUrls: ['./tree.component.scss'],\r\n standalone: true,\r\n imports: [LoadingStateDirective, TreeNodeItemComponent],\r\n})\r\nexport class TreeComponent implements OnChanges {\r\n /** @description Lista de nós raíz da árvore. @default [] */\r\n @Input()\r\n public treeData: TreeNodeItem[] = [];\r\n\r\n private _selected: TreeNodeItem[] = [];\r\n /** @description Nó(s) selecionado(s). Suporta array ou item único dependendo de `selectionMode`. @default [] */\r\n @Input()\r\n public get selected(): TreeNodeItem[] {\r\n return this._selected;\r\n }\r\n public set selected(value: TreeNodeItem[] | TreeNodeItem | undefined) {\r\n if (!value) {\r\n value = [];\r\n }\r\n if (!Array.isArray(value)) {\r\n value = [value];\r\n }\r\n this._selected = value;\r\n }\r\n\r\n /** @description Exibe indicador de carregamento nos nós. @default false */\r\n @Input()\r\n public loading = false;\r\n\r\n /** @description Modo de seleção: `'single'` ou `'multiple'`. @default 'single' */\r\n @Input()\r\n public selectionMode: 'single' | 'multiple' = 'single';\r\n\r\n /** @description Exibe checkboxes nos nós para seleção visual. @default false */\r\n @Input()\r\n public showCheckbox = false;\r\n\r\n /** @description Expão todos os nós inicialmente. @default false */\r\n @Input()\r\n public allExpanded = false;\r\n\r\n /** @description Emitido quando a seleção muda, com o(s) nó(s) selecionado(s). */\r\n @Output()\r\n public selectedChange: EventEmitter<TreeNodeItem[] | TreeNodeItem> = new EventEmitter();\r\n\r\n /** @description Emitido quando o usuário clica em um nó da árvore. */\r\n @Output()\r\n public treeNodeItemClicked: EventEmitter<TreeNodeItem> = new EventEmitter();\r\n\r\n /** @description Emitido após uma edição inline de rótulo de nó. */\r\n @Output()\r\n public treeNodeEdit: EventEmitter<TreeNodeEdit> = new EventEmitter();\r\n\r\n /** @description Emitido quando um nó é expandido pelo usuário. */\r\n @Output()\r\n public nodeExpanded: EventEmitter<TreeNodeItem> = new EventEmitter();\r\n\r\n /** @description Emitido quando um nó é colapsado pelo usuário. */\r\n @Output()\r\n public nodeCollapsed: EventEmitter<TreeNodeItem> = new EventEmitter();\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n this.onChanges(changes);\r\n }\r\n\r\n public onTreeNodeItemClicked({ item }: { item: InternalTreeNodeItem }) {\r\n this.treeNodeItemClicked.emit(parseInternalTreeNodeItem(item));\r\n this.toggleChecked(item);\r\n }\r\n\r\n public onTreeNodeEdit(payload: TreeNodeEdit) {\r\n const { revertAction, item, newValue, previousValue } = payload;\r\n this.treeNodeEdit.emit({\r\n revertAction,\r\n item: parseInternalTreeNodeItem(item),\r\n newValue,\r\n previousValue,\r\n });\r\n }\r\n\r\n public onNodeExpanded(item: InternalTreeNodeItem) {\r\n this.nodeExpanded.emit(parseInternalTreeNodeItem(item));\r\n }\r\n\r\n public onNodeCollapsed(item: InternalTreeNodeItem) {\r\n this.nodeCollapsed.emit(parseInternalTreeNodeItem(item));\r\n }\r\n\r\n private toggleChecked(treeNodeItem: TreeNodeItem) {\r\n const elementCheckState = !treeNodeItem.checked;\r\n if (!this.multiple) {\r\n flattenTree(this.treeData).forEach((x) => (x.checked = false));\r\n this.selected = [treeNodeItem];\r\n }\r\n treeNodeItem.checked = elementCheckState;\r\n if (this.multiple) {\r\n this.checkTreeDataChildren(treeNodeItem);\r\n }\r\n this.setSelected();\r\n }\r\n\r\n private checkTreeDataChildren(selectedTreeNode: TreeNodeItem) {\r\n const parentChecked = selectedTreeNode.checked;\r\n if (selectedTreeNode.children) {\r\n selectedTreeNode.children.forEach((item) => {\r\n const childrens = flattenTree(item.children || []);\r\n item.checked = parentChecked;\r\n childrens.forEach((child) => (child.checked = parentChecked));\r\n });\r\n }\r\n\r\n const getNodeChildrenSummary = (node: TreeNodeItem) => {\r\n const children = node.children ?? [];\r\n const allChildrenChecked = children.every((y) => y.checked === true);\r\n const someChildrenChecked = children.some((y) => y.checked === true || y.checked === null);\r\n const allChildrenUnchecked = children.every((y) => y.checked === false || y.checked === undefined);\r\n return { allChildrenChecked, someChildrenChecked, allChildrenUnchecked };\r\n };\r\n const updateCheckedStateRecursively = (node: TreeNodeItem): void => {\r\n if (!node.children?.length) return;\r\n\r\n node.children.forEach(updateCheckedStateRecursively);\r\n\r\n const { allChildrenChecked, someChildrenChecked, allChildrenUnchecked } = getNodeChildrenSummary(node);\r\n if (allChildrenChecked) {\r\n node.checked = true;\r\n } else if (someChildrenChecked) {\r\n node.checked = null;\r\n } else if (allChildrenUnchecked) {\r\n node.checked = false;\r\n }\r\n };\r\n this.treeData.forEach(updateCheckedStateRecursively);\r\n }\r\n\r\n private setSelected() {\r\n const selected = this.selectedElements;\r\n this.selected = [...selected];\r\n this.selectedChange.emit(selected);\r\n }\r\n\r\n private onChanges(changes: SimpleChanges) {\r\n const allExpandedChanges = changes['allExpanded'];\r\n const _checkIsFirstChangeWithValue = (value: Extract<keyof TreeComponent, 'selected' | 'treeData'>) => {\r\n if (!changes[value]) {\r\n return;\r\n }\r\n return (\r\n (!changes[value].previousValue || changes[value].previousValue.length === 0) &&\r\n changes[value].currentValue?.length > 0\r\n );\r\n };\r\n\r\n if (_checkIsFirstChangeWithValue('selected')) {\r\n this.syncSelectedChanges();\r\n }\r\n\r\n if (_checkIsFirstChangeWithValue('treeData')) {\r\n const isAllExpanded = this.allExpanded;\r\n if (isAllExpanded) {\r\n this.expandAll();\r\n }\r\n }\r\n\r\n if (allExpandedChanges) {\r\n if (this.allExpanded) {\r\n this.expandAll();\r\n } else {\r\n this.collapseAll();\r\n }\r\n }\r\n }\r\n\r\n private syncSelectedChanges() {\r\n const treeFlatten = flattenTree(this.treeData);\r\n this.selected.forEach((selectedItem) => {\r\n const item = treeFlatten.find((item) => item.id === selectedItem.id);\r\n if (item) {\r\n item.checked = true;\r\n }\r\n if (item && item.children && this.multiple) {\r\n item.children.forEach((child) => {\r\n child.checked = true;\r\n const existChildInSelectedList = this.selected.some((item) => item.id === child.id);\r\n if (!existChildInSelectedList) {\r\n this.selected.push(child);\r\n }\r\n });\r\n }\r\n });\r\n const selectedElements = this.selectedElements;\r\n const selectedElementsNotInSelectedList = selectedElements.filter(\r\n (x) => !this.selected.some((y) => y.id === x.id),\r\n );\r\n selectedElementsNotInSelectedList.forEach((item) => {\r\n this.checkTreeDataChildren(item);\r\n });\r\n this.setSelected();\r\n }\r\n\r\n private collapseAll() {\r\n const flatten = flattenTree(this.treeData);\r\n flatten.forEach((item) => {\r\n item.isExpanded = false;\r\n });\r\n }\r\n\r\n private expandAll() {\r\n const flatten = flattenTree(this.treeData);\r\n flatten.forEach((item) => {\r\n item.isExpanded = true;\r\n });\r\n }\r\n\r\n private get selectedElements() {\r\n return flattenTree(this.treeData)\r\n .filter((x) => x.checked)\r\n .filter((x) => x.leaf !== true && !x.children?.length);\r\n }\r\n\r\n private get multiple() {\r\n return this.selectionMode === 'multiple';\r\n }\r\n}\r\n\r\nconst flattenTree = <T = any>(tree: TreeNodeItem<T>[]): TreeNodeItem<T>[] => {\r\n const result: TreeNodeItem<T>[] = [];\r\n\r\n function traverse(nodes: TreeNodeItem<T>[]) {\r\n for (const node of nodes) {\r\n result.push(node);\r\n if (node.children && node.children.length) {\r\n traverse(node.children);\r\n }\r\n }\r\n }\r\n\r\n traverse(tree);\r\n return result;\r\n};\r\n\r\nconst parseInternalTreeNodeItem = <T = any>(internalTreeNodeItem: InternalTreeNodeItem<T>): TreeNodeItem<T> => {\r\n const { id, label, icon, checked, isExpanded, payload, editable, children } = internalTreeNodeItem;\r\n const object = {\r\n id,\r\n label,\r\n icon,\r\n checked,\r\n isExpanded,\r\n payload,\r\n editable,\r\n _children: children?.map(parseInternalTreeNodeItem),\r\n get children() {\r\n return this._children;\r\n },\r\n set children(value) {\r\n this._children = value;\r\n internalTreeNodeItem.children = value;\r\n },\r\n };\r\n Object.defineProperty(object, '_children', {\r\n enumerable: false,\r\n });\r\n return object as TreeNodeItem<T>;\r\n};\r\n","<div class=\"tree\" *sLoadingState=\"loading\">\n @for(item of treeData; track $index) {\n <s-tree-node-item\n [showCheckbox]=\"showCheckbox\"\n [treeNodeItem]=\"item\"\n (nodeExpanded)=\"onNodeExpanded($event)\"\n (nodeCollapsed)=\"onNodeCollapsed($event)\"\n (treeNodeEdit)=\"onTreeNodeEdit($event)\"\n (treeNodeItemClicked)=\"onTreeNodeItemClicked($event)\">\n </s-tree-node-item>\n\n }\n</div>\n","import { NgModule } from '@angular/core';\r\n\r\nimport { TreeComponent } from './tree.component';\r\n\r\n@NgModule({\r\n imports: [TreeComponent],\r\n exports: [TreeComponent],\r\n})\r\nexport class TreeModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -146,11 +146,11 @@ class WorkspaceSwitchComponent {
|
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WorkspaceSwitchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
149
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: WorkspaceSwitchComponent, isStandalone: true, selector: "s-workspace-switch", inputs: { workspaces: "workspaces", footerButtonLabel: "footerButtonLabel", showFooterButton: "showFooterButton", disabled: "disabled" }, outputs: { footerButtonClicked: "footerButtonClicked", selected: "selected" }, host: { listeners: { "document:click": "onClickout($event)", "keydown": "onKeydown($event)" }, properties: { "attr.tabindex": "this.tabindex" } }, viewQueries: [{ propertyName: "listItems", predicate: ["listItem"], descendants: true }], ngImport: i0, template: "<div\r\n class=\"workspace-switch\"\r\n [ngClass]=\"{ 'workspace-switch--disabled': disabled }\"\r\n (blur)=\"buttonOnBlur()\"\r\n>\r\n <div\r\n class=\"button\"\r\n (click)=\"open = !open\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspaces[selectedItemIndex].title }}</span>\r\n <span class=\"subtitle\">{{ workspaces[selectedItemIndex].subtitle }}</span>\r\n </div>\r\n <div class=\"icons\">\r\n <span class=\"fas fa-chevron-up\"></span>\r\n <span class=\"fas fa-chevron-down\"></span>\r\n </div>\r\n </div>\r\n @if (!disabled && open) {\r\n <div class=\"drop-panel\">\r\n <ul\r\n id=\"workspace-list\"\r\n class=\"workspace-list\"\r\n [ngStyle]=\"{ 'max-height': height + 'px' }\"\r\n >\r\n @for (workspace of workspaces; track workspace.id; let i = $index) {\r\n <li\r\n #listItem\r\n class=\"workspace\"\r\n [ngClass]=\"{\r\n 'workspace--focused': i === currentItemIndex && !workspace.disabled,\r\n 'workspace--disabled': workspace.disabled,\r\n }\"\r\n (click)=\"onSelectItem(workspace)\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspace.title }}</span>\r\n <span class=\"subtitle\">{{ workspace.subtitle }}</span>\r\n </div>\r\n @if (i === selectedItemIndex) {\r\n <span class=\"active-icon fas fa-check\"></span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n @if (showFooterButton) {\r\n <div class=\"footer\">\r\n <div\r\n class=\"footer__button\"\r\n (click)=\"onFooterButtonClick()\"\r\n >\r\n <span class=\"footer__button__icon fas fa-plus\"></span>\r\n <span class=\"footer__button__title\">{{ footerButtonLabel }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".workspace-switch{border-radius:4px;border:1px solid transparent;width:324px}.workspace-switch .button{align-items:center;background-color:#fff;border:none;border-radius:3px;cursor:pointer;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none;width:100%}.workspace-switch .button .icons{display:flex;flex-direction:column;justify-content:space-between;margin:0 12px}.workspace-switch .drop-panel{background-color:#fff;border-radius:4px;box-shadow:0 1px 5px #00000040;cursor:pointer;margin:20px 0;padding-top:4px;position:absolute;width:324px}.workspace-switch .drop-panel .workspace-list{list-style:none;overflow:auto;padding:0}.workspace-switch .drop-panel .workspace-list .workspace{align-items:center;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none}.workspace-switch .drop-panel .workspace-list .workspace .active-icon{color:#7892a1;font-size:12px;margin:0 12px}.workspace-switch .drop-panel .workspace-list .workspace--focused{background-color:#f1f7f8}.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .title,.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .subtitle{color:#c1c1cc}.workspace-switch .drop-panel .workspace-list .workspace:hover:not(.workspace--disabled){background-color:#f1f7f8}.workspace-switch .drop-panel .footer{border-top:1px solid #ccc;padding:12px}.workspace-switch .drop-panel .footer .footer__button{align-items:center;border:1px solid #d8d8d8;border-radius:4px;padding:8px 12px;-webkit-user-select:none;user-select:none;display:flex;justify-content:center}.workspace-switch .drop-panel .footer .footer__button .footer__button__icon{color:#333;margin-right:8px}.workspace-switch .drop-panel .footer .footer__button:active{border:1px solid #428bca}.workspace-switch .item{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-between;padding:12px}.workspace-switch .item .title{color:#333;font-family:Open Sans,sans-serif;font-size:14px;font-weight:700;line-height:150%;text-transform:uppercase}.workspace-switch .item .subtitle{color:#999;font-family:Open Sans,sans-serif;font-size:12px;font-weight:400;line-height:150%}.workspace-switch
|
|
149
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: WorkspaceSwitchComponent, isStandalone: true, selector: "s-workspace-switch", inputs: { workspaces: "workspaces", footerButtonLabel: "footerButtonLabel", showFooterButton: "showFooterButton", disabled: "disabled" }, outputs: { footerButtonClicked: "footerButtonClicked", selected: "selected" }, host: { listeners: { "document:click": "onClickout($event)", "keydown": "onKeydown($event)" }, properties: { "attr.tabindex": "this.tabindex" } }, viewQueries: [{ propertyName: "listItems", predicate: ["listItem"], descendants: true }], ngImport: i0, template: "<div\r\n class=\"workspace-switch\"\r\n [ngClass]=\"{ 'workspace-switch--disabled': disabled }\"\r\n (blur)=\"buttonOnBlur()\"\r\n>\r\n <div\r\n class=\"button\"\r\n (click)=\"open = !open\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspaces[selectedItemIndex].title }}</span>\r\n <span class=\"subtitle\">{{ workspaces[selectedItemIndex].subtitle }}</span>\r\n </div>\r\n <div class=\"icons\">\r\n <span class=\"fas fa-chevron-up\"></span>\r\n <span class=\"fas fa-chevron-down\"></span>\r\n </div>\r\n </div>\r\n @if (!disabled && open) {\r\n <div class=\"drop-panel\">\r\n <ul\r\n id=\"workspace-list\"\r\n class=\"workspace-list\"\r\n [ngStyle]=\"{ 'max-height': height + 'px' }\"\r\n >\r\n @for (workspace of workspaces; track workspace.id; let i = $index) {\r\n <li\r\n #listItem\r\n class=\"workspace\"\r\n [ngClass]=\"{\r\n 'workspace--focused': i === currentItemIndex && !workspace.disabled,\r\n 'workspace--disabled': workspace.disabled,\r\n }\"\r\n (click)=\"onSelectItem(workspace)\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspace.title }}</span>\r\n <span class=\"subtitle\">{{ workspace.subtitle }}</span>\r\n </div>\r\n @if (i === selectedItemIndex) {\r\n <span class=\"active-icon fas fa-check\"></span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n @if (showFooterButton) {\r\n <div class=\"footer\">\r\n <div\r\n class=\"footer__button\"\r\n (click)=\"onFooterButtonClick()\"\r\n >\r\n <span class=\"footer__button__icon fas fa-plus\"></span>\r\n <span class=\"footer__button__title\">{{ footerButtonLabel }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:inline-block}:host(:focus-visible){border-radius:4px;outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.workspace-switch{border-radius:4px;border:1px solid transparent;width:324px}.workspace-switch .button{align-items:center;background-color:#fff;border:none;border-radius:3px;cursor:pointer;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none;width:100%}.workspace-switch .button .icons{display:flex;flex-direction:column;justify-content:space-between;margin:0 12px}.workspace-switch .drop-panel{background-color:#fff;border-radius:4px;box-shadow:0 1px 5px #00000040;cursor:pointer;margin:20px 0;padding-top:4px;position:absolute;width:324px}.workspace-switch .drop-panel .workspace-list{list-style:none;overflow:auto;padding:0}.workspace-switch .drop-panel .workspace-list .workspace{align-items:center;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none}.workspace-switch .drop-panel .workspace-list .workspace .active-icon{color:#7892a1;font-size:12px;margin:0 12px}.workspace-switch .drop-panel .workspace-list .workspace--focused{background-color:#f1f7f8}.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .title,.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .subtitle{color:#c1c1cc}.workspace-switch .drop-panel .workspace-list .workspace:hover:not(.workspace--disabled){background-color:#f1f7f8}.workspace-switch .drop-panel .footer{border-top:1px solid #ccc;padding:12px}.workspace-switch .drop-panel .footer .footer__button{align-items:center;border:1px solid #d8d8d8;border-radius:4px;padding:8px 12px;-webkit-user-select:none;user-select:none;display:flex;justify-content:center}.workspace-switch .drop-panel .footer .footer__button .footer__button__icon{color:#333;margin-right:8px}.workspace-switch .drop-panel .footer .footer__button:active{border:1px solid #428bca}.workspace-switch .item{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-between;padding:12px}.workspace-switch .item .title{color:#333;font-family:Open Sans,sans-serif;font-size:14px;font-weight:700;line-height:150%;text-transform:uppercase}.workspace-switch .item .subtitle{color:#999;font-family:Open Sans,sans-serif;font-size:12px;font-weight:400;line-height:150%}.workspace-switch--disabled .button{cursor:default}.workspace-switch--disabled .button .icons,.workspace-switch--disabled .item .title,.workspace-switch--disabled .item .subtitle{color:#ccc}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
150
150
|
}
|
|
151
151
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WorkspaceSwitchComponent, decorators: [{
|
|
152
152
|
type: Component,
|
|
153
|
-
args: [{ selector: 's-workspace-switch', standalone: true, imports: [NgClass, NgStyle], template: "<div\r\n class=\"workspace-switch\"\r\n [ngClass]=\"{ 'workspace-switch--disabled': disabled }\"\r\n (blur)=\"buttonOnBlur()\"\r\n>\r\n <div\r\n class=\"button\"\r\n (click)=\"open = !open\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspaces[selectedItemIndex].title }}</span>\r\n <span class=\"subtitle\">{{ workspaces[selectedItemIndex].subtitle }}</span>\r\n </div>\r\n <div class=\"icons\">\r\n <span class=\"fas fa-chevron-up\"></span>\r\n <span class=\"fas fa-chevron-down\"></span>\r\n </div>\r\n </div>\r\n @if (!disabled && open) {\r\n <div class=\"drop-panel\">\r\n <ul\r\n id=\"workspace-list\"\r\n class=\"workspace-list\"\r\n [ngStyle]=\"{ 'max-height': height + 'px' }\"\r\n >\r\n @for (workspace of workspaces; track workspace.id; let i = $index) {\r\n <li\r\n #listItem\r\n class=\"workspace\"\r\n [ngClass]=\"{\r\n 'workspace--focused': i === currentItemIndex && !workspace.disabled,\r\n 'workspace--disabled': workspace.disabled,\r\n }\"\r\n (click)=\"onSelectItem(workspace)\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspace.title }}</span>\r\n <span class=\"subtitle\">{{ workspace.subtitle }}</span>\r\n </div>\r\n @if (i === selectedItemIndex) {\r\n <span class=\"active-icon fas fa-check\"></span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n @if (showFooterButton) {\r\n <div class=\"footer\">\r\n <div\r\n class=\"footer__button\"\r\n (click)=\"onFooterButtonClick()\"\r\n >\r\n <span class=\"footer__button__icon fas fa-plus\"></span>\r\n <span class=\"footer__button__title\">{{ footerButtonLabel }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".workspace-switch{border-radius:4px;border:1px solid transparent;width:324px}.workspace-switch .button{align-items:center;background-color:#fff;border:none;border-radius:3px;cursor:pointer;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none;width:100%}.workspace-switch .button .icons{display:flex;flex-direction:column;justify-content:space-between;margin:0 12px}.workspace-switch .drop-panel{background-color:#fff;border-radius:4px;box-shadow:0 1px 5px #00000040;cursor:pointer;margin:20px 0;padding-top:4px;position:absolute;width:324px}.workspace-switch .drop-panel .workspace-list{list-style:none;overflow:auto;padding:0}.workspace-switch .drop-panel .workspace-list .workspace{align-items:center;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none}.workspace-switch .drop-panel .workspace-list .workspace .active-icon{color:#7892a1;font-size:12px;margin:0 12px}.workspace-switch .drop-panel .workspace-list .workspace--focused{background-color:#f1f7f8}.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .title,.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .subtitle{color:#c1c1cc}.workspace-switch .drop-panel .workspace-list .workspace:hover:not(.workspace--disabled){background-color:#f1f7f8}.workspace-switch .drop-panel .footer{border-top:1px solid #ccc;padding:12px}.workspace-switch .drop-panel .footer .footer__button{align-items:center;border:1px solid #d8d8d8;border-radius:4px;padding:8px 12px;-webkit-user-select:none;user-select:none;display:flex;justify-content:center}.workspace-switch .drop-panel .footer .footer__button .footer__button__icon{color:#333;margin-right:8px}.workspace-switch .drop-panel .footer .footer__button:active{border:1px solid #428bca}.workspace-switch .item{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-between;padding:12px}.workspace-switch .item .title{color:#333;font-family:Open Sans,sans-serif;font-size:14px;font-weight:700;line-height:150%;text-transform:uppercase}.workspace-switch .item .subtitle{color:#999;font-family:Open Sans,sans-serif;font-size:12px;font-weight:400;line-height:150%}.workspace-switch
|
|
153
|
+
args: [{ selector: 's-workspace-switch', standalone: true, imports: [NgClass, NgStyle], template: "<div\r\n class=\"workspace-switch\"\r\n [ngClass]=\"{ 'workspace-switch--disabled': disabled }\"\r\n (blur)=\"buttonOnBlur()\"\r\n>\r\n <div\r\n class=\"button\"\r\n (click)=\"open = !open\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspaces[selectedItemIndex].title }}</span>\r\n <span class=\"subtitle\">{{ workspaces[selectedItemIndex].subtitle }}</span>\r\n </div>\r\n <div class=\"icons\">\r\n <span class=\"fas fa-chevron-up\"></span>\r\n <span class=\"fas fa-chevron-down\"></span>\r\n </div>\r\n </div>\r\n @if (!disabled && open) {\r\n <div class=\"drop-panel\">\r\n <ul\r\n id=\"workspace-list\"\r\n class=\"workspace-list\"\r\n [ngStyle]=\"{ 'max-height': height + 'px' }\"\r\n >\r\n @for (workspace of workspaces; track workspace.id; let i = $index) {\r\n <li\r\n #listItem\r\n class=\"workspace\"\r\n [ngClass]=\"{\r\n 'workspace--focused': i === currentItemIndex && !workspace.disabled,\r\n 'workspace--disabled': workspace.disabled,\r\n }\"\r\n (click)=\"onSelectItem(workspace)\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspace.title }}</span>\r\n <span class=\"subtitle\">{{ workspace.subtitle }}</span>\r\n </div>\r\n @if (i === selectedItemIndex) {\r\n <span class=\"active-icon fas fa-check\"></span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n @if (showFooterButton) {\r\n <div class=\"footer\">\r\n <div\r\n class=\"footer__button\"\r\n (click)=\"onFooterButtonClick()\"\r\n >\r\n <span class=\"footer__button__icon fas fa-plus\"></span>\r\n <span class=\"footer__button__title\">{{ footerButtonLabel }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:inline-block}:host(:focus-visible){border-radius:4px;outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.workspace-switch{border-radius:4px;border:1px solid transparent;width:324px}.workspace-switch .button{align-items:center;background-color:#fff;border:none;border-radius:3px;cursor:pointer;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none;width:100%}.workspace-switch .button .icons{display:flex;flex-direction:column;justify-content:space-between;margin:0 12px}.workspace-switch .drop-panel{background-color:#fff;border-radius:4px;box-shadow:0 1px 5px #00000040;cursor:pointer;margin:20px 0;padding-top:4px;position:absolute;width:324px}.workspace-switch .drop-panel .workspace-list{list-style:none;overflow:auto;padding:0}.workspace-switch .drop-panel .workspace-list .workspace{align-items:center;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none}.workspace-switch .drop-panel .workspace-list .workspace .active-icon{color:#7892a1;font-size:12px;margin:0 12px}.workspace-switch .drop-panel .workspace-list .workspace--focused{background-color:#f1f7f8}.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .title,.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .subtitle{color:#c1c1cc}.workspace-switch .drop-panel .workspace-list .workspace:hover:not(.workspace--disabled){background-color:#f1f7f8}.workspace-switch .drop-panel .footer{border-top:1px solid #ccc;padding:12px}.workspace-switch .drop-panel .footer .footer__button{align-items:center;border:1px solid #d8d8d8;border-radius:4px;padding:8px 12px;-webkit-user-select:none;user-select:none;display:flex;justify-content:center}.workspace-switch .drop-panel .footer .footer__button .footer__button__icon{color:#333;margin-right:8px}.workspace-switch .drop-panel .footer .footer__button:active{border:1px solid #428bca}.workspace-switch .item{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-between;padding:12px}.workspace-switch .item .title{color:#333;font-family:Open Sans,sans-serif;font-size:14px;font-weight:700;line-height:150%;text-transform:uppercase}.workspace-switch .item .subtitle{color:#999;font-family:Open Sans,sans-serif;font-size:12px;font-weight:400;line-height:150%}.workspace-switch--disabled .button{cursor:default}.workspace-switch--disabled .button .icons,.workspace-switch--disabled .item .title,.workspace-switch--disabled .item .subtitle{color:#ccc}\n"] }]
|
|
154
154
|
}], propDecorators: { workspaces: [{
|
|
155
155
|
type: Input,
|
|
156
156
|
args: [{ required: true }]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-workspace-switch.mjs","sources":["../../projects/angular-components/workspace-switch/src/lib/workspace-switch/workspace-switch.component.ts","../../projects/angular-components/workspace-switch/src/lib/workspace-switch/workspace-switch.component.html","../../projects/angular-components/workspace-switch/src/lib/workspace-switch/workspace-switch.module.ts","../../projects/angular-components/workspace-switch/src/seniorsistemas-angular-components-workspace-switch.ts"],"sourcesContent":["import { NgClass, NgStyle } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n ViewChildren,\r\n inject,\r\n} from '@angular/core';\r\n\r\nimport { Workspace } from './models/workspace';\r\n\r\n/**\r\n * @description Componente de seleção de workspace exibe um dropdown com a lista de espaços de trabalho\r\n * disponíveis, permitindo ao usuário alternar entre eles. Suporta navegação por teclado\r\n * (setas, Enter, Escape), estado desabilitado e um botão de ação customizável no rodapé.\r\n *\r\n * @example\r\n * ```html\r\n * <s-workspace-switch\r\n * [workspaces]=\"workspaces\"\r\n * footerButtonLabel=\"Criar workspace\"\r\n * (selected)=\"onWorkspaceSelect($event)\"\r\n * (footerButtonClicked)=\"onCreate()\"\r\n * />\r\n * ```\r\n *\r\n * @category Navegação\r\n */\r\n@Component({\r\n selector: 's-workspace-switch',\r\n templateUrl: './workspace-switch.component.html',\r\n styleUrls: ['./workspace-switch.component.scss'],\r\n standalone: true,\r\n imports: [NgClass, NgStyle],\r\n})\r\nexport class WorkspaceSwitchComponent implements OnInit {\r\n private readonly eRef = inject(ElementRef);\r\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n /**\r\n * @description Lista de workspaces disponíveis para seleção. Campo obrigatório.\r\n * Cada item deve implementar a interface `Workspace`.\r\n * Lança um erro em runtime se a lista estiver vazia.\r\n */\r\n @Input({ required: true })\r\n public workspaces: Workspace[] = [];\r\n\r\n /**\r\n * @description Rótulo exibido no botão de ação localizado no rodapé do dropdown.\r\n *\r\n * @default 'Adicionar'\r\n */\r\n @Input()\r\n public footerButtonLabel = 'Adicionar';\r\n\r\n /**\r\n * @description Controla a visibilidade do botão de ação no rodapé do dropdown.\r\n * Quando `false`, o botão não é renderizado.\r\n *\r\n * @default true\r\n */\r\n @Input()\r\n public showFooterButton = true;\r\n\r\n /**\r\n * @description Quando `true`, o componente fica desabilitado: não abre o dropdown,\r\n * não emite eventos e fica inacessível via teclado (`tabindex = -1`).\r\n *\r\n * @default false\r\n */\r\n @Input()\r\n public disabled = false;\r\n\r\n /**\r\n * @description Emitido quando o usuário clica no botão de ação do rodapé do dropdown.\r\n */\r\n @Output()\r\n public footerButtonClicked = new EventEmitter();\r\n\r\n /**\r\n * @description Emitido quando o usuário seleciona um workspace da lista.\r\n * Retorna o objeto `Workspace` selecionado.\r\n */\r\n @Output()\r\n public selected: EventEmitter<Workspace> = new EventEmitter();\r\n\r\n @ViewChildren('listItem')\r\n public listItems: QueryList<ElementRef> | null = null;\r\n\r\n public get open() {\r\n return this._open;\r\n }\r\n\r\n public set open(open: boolean) {\r\n this._open = open;\r\n this.changeDetectorRef.detectChanges();\r\n\r\n if (open) {\r\n this._calculateListMaxHeight();\r\n }\r\n }\r\n\r\n public height = 0;\r\n public selectedItemIndex = 0;\r\n public currentItemIndex = 0;\r\n\r\n private _open = false;\r\n\r\n @HostBinding('attr.tabindex')\r\n public tabindex = 0;\r\n\r\n @HostListener('document:click', ['$event'])\r\n public onClickout(event: MouseEvent): void {\r\n if (!this.eRef.nativeElement.contains(event.target)) {\r\n this.open = false;\r\n }\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n public onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n if (this.open) {\r\n const workspace = this.workspaces[this.selectedItemIndex];\r\n\r\n if (workspace.disabled) {\r\n return;\r\n }\r\n\r\n this.selectedItemIndex = this.currentItemIndex;\r\n this.selected.emit(this.workspaces[this.selectedItemIndex]);\r\n }\r\n this.open = !this.open;\r\n } else if (event.key === 'Escape') {\r\n this.open = false;\r\n } else if (event.key === 'ArrowDown') {\r\n if (this.currentItemIndex < this.workspaces.length - 1) {\r\n this.currentItemIndex++;\r\n this._scrollToCurrentItem();\r\n }\r\n } else if (event.key === 'ArrowUp') {\r\n if (this.currentItemIndex > 0) {\r\n this.currentItemIndex--;\r\n this._scrollToCurrentItem();\r\n }\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n if (this.disabled) {\r\n this.tabindex = -1;\r\n }\r\n }\r\n\r\n public validations(): void {\r\n if (!this.workspaces.length) {\r\n throw new Error('Workspaces list is empty.');\r\n }\r\n }\r\n\r\n public buttonOnBlur(): void {\r\n this.open = false;\r\n this.currentItemIndex = this.selectedItemIndex;\r\n }\r\n\r\n public onSelectItem(workspace: Workspace): void {\r\n if (workspace.disabled) {\r\n return;\r\n }\r\n\r\n this.open = false;\r\n this.selectedItemIndex = this.workspaces.indexOf(workspace);\r\n this.currentItemIndex = this.selectedItemIndex;\r\n this.selected.emit(workspace);\r\n }\r\n\r\n public onFooterButtonClick(): void {\r\n this.open = false;\r\n this.footerButtonClicked.emit();\r\n }\r\n\r\n private _calculateListMaxHeight(): void {\r\n const workspaceListRef = this.eRef.nativeElement.querySelector('#workspace-list');\r\n const { top } = workspaceListRef.getBoundingClientRect();\r\n\r\n this.height = window.innerHeight - top - 20 - (this.showFooterButton ? 64 : 0);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n private _scrollToCurrentItem(): void {\r\n const currentItem = this.listItems?.toArray()[this.currentItemIndex];\r\n if (currentItem) {\r\n currentItem.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"workspace-switch\"\r\n [ngClass]=\"{ 'workspace-switch--disabled': disabled }\"\r\n (blur)=\"buttonOnBlur()\"\r\n>\r\n <div\r\n class=\"button\"\r\n (click)=\"open = !open\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspaces[selectedItemIndex].title }}</span>\r\n <span class=\"subtitle\">{{ workspaces[selectedItemIndex].subtitle }}</span>\r\n </div>\r\n <div class=\"icons\">\r\n <span class=\"fas fa-chevron-up\"></span>\r\n <span class=\"fas fa-chevron-down\"></span>\r\n </div>\r\n </div>\r\n @if (!disabled && open) {\r\n <div class=\"drop-panel\">\r\n <ul\r\n id=\"workspace-list\"\r\n class=\"workspace-list\"\r\n [ngStyle]=\"{ 'max-height': height + 'px' }\"\r\n >\r\n @for (workspace of workspaces; track workspace.id; let i = $index) {\r\n <li\r\n #listItem\r\n class=\"workspace\"\r\n [ngClass]=\"{\r\n 'workspace--focused': i === currentItemIndex && !workspace.disabled,\r\n 'workspace--disabled': workspace.disabled,\r\n }\"\r\n (click)=\"onSelectItem(workspace)\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspace.title }}</span>\r\n <span class=\"subtitle\">{{ workspace.subtitle }}</span>\r\n </div>\r\n @if (i === selectedItemIndex) {\r\n <span class=\"active-icon fas fa-check\"></span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n @if (showFooterButton) {\r\n <div class=\"footer\">\r\n <div\r\n class=\"footer__button\"\r\n (click)=\"onFooterButtonClick()\"\r\n >\r\n <span class=\"footer__button__icon fas fa-plus\"></span>\r\n <span class=\"footer__button__title\">{{ footerButtonLabel }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { WorkspaceSwitchComponent } from './workspace-switch.component';\r\n\r\n@NgModule({\r\n imports: [WorkspaceSwitchComponent],\r\n exports: [WorkspaceSwitchComponent],\r\n})\r\nexport class WorkspaceSwitchModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-workspace-switch.mjs","sources":["../../projects/angular-components/workspace-switch/src/lib/workspace-switch/workspace-switch.component.ts","../../projects/angular-components/workspace-switch/src/lib/workspace-switch/workspace-switch.component.html","../../projects/angular-components/workspace-switch/src/lib/workspace-switch/workspace-switch.module.ts","../../projects/angular-components/workspace-switch/src/seniorsistemas-angular-components-workspace-switch.ts"],"sourcesContent":["import { NgClass, NgStyle } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n ViewChildren,\r\n inject,\r\n} from '@angular/core';\r\n\r\nimport { Workspace } from './models/workspace';\r\n\r\n/**\r\n * @description Componente de seleção de workspace exibe um dropdown com a lista de espaços de trabalho\r\n * disponíveis, permitindo ao usuário alternar entre eles. Suporta navegação por teclado\r\n * (setas, Enter, Escape), estado desabilitado e um botão de ação customizável no rodapé.\r\n *\r\n * @example\r\n * ```html\r\n * <s-workspace-switch\r\n * [workspaces]=\"workspaces\"\r\n * footerButtonLabel=\"Criar workspace\"\r\n * (selected)=\"onWorkspaceSelect($event)\"\r\n * (footerButtonClicked)=\"onCreate()\"\r\n * />\r\n * ```\r\n *\r\n * @category Navegação\r\n */\r\n@Component({\r\n selector: 's-workspace-switch',\r\n templateUrl: './workspace-switch.component.html',\r\n styleUrls: ['./workspace-switch.component.scss'],\r\n standalone: true,\r\n imports: [NgClass, NgStyle],\r\n})\r\nexport class WorkspaceSwitchComponent implements OnInit {\r\n private readonly eRef = inject(ElementRef);\r\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n /**\r\n * @description Lista de workspaces disponíveis para seleção. Campo obrigatório.\r\n * Cada item deve implementar a interface `Workspace`.\r\n * Lança um erro em runtime se a lista estiver vazia.\r\n */\r\n @Input({ required: true })\r\n public workspaces: Workspace[] = [];\r\n\r\n /**\r\n * @description Rótulo exibido no botão de ação localizado no rodapé do dropdown.\r\n *\r\n * @default 'Adicionar'\r\n */\r\n @Input()\r\n public footerButtonLabel = 'Adicionar';\r\n\r\n /**\r\n * @description Controla a visibilidade do botão de ação no rodapé do dropdown.\r\n * Quando `false`, o botão não é renderizado.\r\n *\r\n * @default true\r\n */\r\n @Input()\r\n public showFooterButton = true;\r\n\r\n /**\r\n * @description Quando `true`, o componente fica desabilitado: não abre o dropdown,\r\n * não emite eventos e fica inacessível via teclado (`tabindex = -1`).\r\n *\r\n * @default false\r\n */\r\n @Input()\r\n public disabled = false;\r\n\r\n /**\r\n * @description Emitido quando o usuário clica no botão de ação do rodapé do dropdown.\r\n */\r\n @Output()\r\n public footerButtonClicked = new EventEmitter();\r\n\r\n /**\r\n * @description Emitido quando o usuário seleciona um workspace da lista.\r\n * Retorna o objeto `Workspace` selecionado.\r\n */\r\n @Output()\r\n public selected: EventEmitter<Workspace> = new EventEmitter();\r\n\r\n @ViewChildren('listItem')\r\n public listItems: QueryList<ElementRef> | null = null;\r\n\r\n public get open() {\r\n return this._open;\r\n }\r\n\r\n public set open(open: boolean) {\r\n this._open = open;\r\n this.changeDetectorRef.detectChanges();\r\n\r\n if (open) {\r\n this._calculateListMaxHeight();\r\n }\r\n }\r\n\r\n public height = 0;\r\n public selectedItemIndex = 0;\r\n public currentItemIndex = 0;\r\n\r\n private _open = false;\r\n\r\n @HostBinding('attr.tabindex')\r\n public tabindex = 0;\r\n\r\n @HostListener('document:click', ['$event'])\r\n public onClickout(event: MouseEvent): void {\r\n if (!this.eRef.nativeElement.contains(event.target)) {\r\n this.open = false;\r\n }\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n public onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n if (this.open) {\r\n const workspace = this.workspaces[this.selectedItemIndex];\r\n\r\n if (workspace.disabled) {\r\n return;\r\n }\r\n\r\n this.selectedItemIndex = this.currentItemIndex;\r\n this.selected.emit(this.workspaces[this.selectedItemIndex]);\r\n }\r\n this.open = !this.open;\r\n } else if (event.key === 'Escape') {\r\n this.open = false;\r\n } else if (event.key === 'ArrowDown') {\r\n if (this.currentItemIndex < this.workspaces.length - 1) {\r\n this.currentItemIndex++;\r\n this._scrollToCurrentItem();\r\n }\r\n } else if (event.key === 'ArrowUp') {\r\n if (this.currentItemIndex > 0) {\r\n this.currentItemIndex--;\r\n this._scrollToCurrentItem();\r\n }\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n if (this.disabled) {\r\n this.tabindex = -1;\r\n }\r\n }\r\n\r\n public validations(): void {\r\n if (!this.workspaces.length) {\r\n throw new Error('Workspaces list is empty.');\r\n }\r\n }\r\n\r\n public buttonOnBlur(): void {\r\n this.open = false;\r\n this.currentItemIndex = this.selectedItemIndex;\r\n }\r\n\r\n public onSelectItem(workspace: Workspace): void {\r\n if (workspace.disabled) {\r\n return;\r\n }\r\n\r\n this.open = false;\r\n this.selectedItemIndex = this.workspaces.indexOf(workspace);\r\n this.currentItemIndex = this.selectedItemIndex;\r\n this.selected.emit(workspace);\r\n }\r\n\r\n public onFooterButtonClick(): void {\r\n this.open = false;\r\n this.footerButtonClicked.emit();\r\n }\r\n\r\n private _calculateListMaxHeight(): void {\r\n const workspaceListRef = this.eRef.nativeElement.querySelector('#workspace-list');\r\n const { top } = workspaceListRef.getBoundingClientRect();\r\n\r\n this.height = window.innerHeight - top - 20 - (this.showFooterButton ? 64 : 0);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n private _scrollToCurrentItem(): void {\r\n const currentItem = this.listItems?.toArray()[this.currentItemIndex];\r\n if (currentItem) {\r\n currentItem.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"workspace-switch\"\r\n [ngClass]=\"{ 'workspace-switch--disabled': disabled }\"\r\n (blur)=\"buttonOnBlur()\"\r\n>\r\n <div\r\n class=\"button\"\r\n (click)=\"open = !open\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspaces[selectedItemIndex].title }}</span>\r\n <span class=\"subtitle\">{{ workspaces[selectedItemIndex].subtitle }}</span>\r\n </div>\r\n <div class=\"icons\">\r\n <span class=\"fas fa-chevron-up\"></span>\r\n <span class=\"fas fa-chevron-down\"></span>\r\n </div>\r\n </div>\r\n @if (!disabled && open) {\r\n <div class=\"drop-panel\">\r\n <ul\r\n id=\"workspace-list\"\r\n class=\"workspace-list\"\r\n [ngStyle]=\"{ 'max-height': height + 'px' }\"\r\n >\r\n @for (workspace of workspaces; track workspace.id; let i = $index) {\r\n <li\r\n #listItem\r\n class=\"workspace\"\r\n [ngClass]=\"{\r\n 'workspace--focused': i === currentItemIndex && !workspace.disabled,\r\n 'workspace--disabled': workspace.disabled,\r\n }\"\r\n (click)=\"onSelectItem(workspace)\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspace.title }}</span>\r\n <span class=\"subtitle\">{{ workspace.subtitle }}</span>\r\n </div>\r\n @if (i === selectedItemIndex) {\r\n <span class=\"active-icon fas fa-check\"></span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n @if (showFooterButton) {\r\n <div class=\"footer\">\r\n <div\r\n class=\"footer__button\"\r\n (click)=\"onFooterButtonClick()\"\r\n >\r\n <span class=\"footer__button__icon fas fa-plus\"></span>\r\n <span class=\"footer__button__title\">{{ footerButtonLabel }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { WorkspaceSwitchComponent } from './workspace-switch.component';\r\n\r\n@NgModule({\r\n imports: [WorkspaceSwitchComponent],\r\n exports: [WorkspaceSwitchComponent],\r\n})\r\nexport class WorkspaceSwitchModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -386,28 +386,39 @@ const fallback = {
|
|
|
386
386
|
"platform.angular_components.editor_content_area": "Área de edição de texto",
|
|
387
387
|
"platform.angular_components.editor_background_color": "Cor de fundo",
|
|
388
388
|
"platform.angular_components.datepicker_today": "Hoje",
|
|
389
|
+
"platform.angular_components.datepicker_open": "Abrir calendário",
|
|
389
390
|
"platform.angular_components.datepicker_clear": "Limpar",
|
|
390
391
|
"platform.angular_components.datepicker_confirm": "Confirmar",
|
|
391
|
-
"platform.angular_components.datepicker_prev_month": "Mês anterior",
|
|
392
|
-
"platform.angular_components.datepicker_next_month": "Próximo mês",
|
|
393
|
-
"platform.angular_components.datepicker_prev_year": "Ano anterior",
|
|
394
|
-
"platform.angular_components.datepicker_next_year": "Próximo ano",
|
|
392
|
+
"platform.angular_components.datepicker_prev_month": "Mês anterior, {{month}}",
|
|
393
|
+
"platform.angular_components.datepicker_next_month": "Próximo mês, {{month}}",
|
|
394
|
+
"platform.angular_components.datepicker_prev_year": "Ano anterior, {{year}}",
|
|
395
|
+
"platform.angular_components.datepicker_next_year": "Próximo ano, {{year}}",
|
|
396
|
+
"platform.angular_components.datepicker_prev_decade": "Década anterior, {{startYear}} a {{endYear}}",
|
|
397
|
+
"platform.angular_components.datepicker_next_decade": "Próxima década, {{startYear}} a {{endYear}}",
|
|
395
398
|
"platform.angular_components.datepicker_select_month_year": "Selecionar mês e ano",
|
|
399
|
+
"platform.angular_components.datepicker_select_year": "Selecionar ano",
|
|
396
400
|
"platform.angular_components.datepicker_select_month": "Selecionar mês",
|
|
397
401
|
"platform.angular_components.datepicker_back_to_calendar": "Voltar ao calendário",
|
|
398
402
|
"platform.angular_components.datepicker_select_date": "Selecionar data",
|
|
399
403
|
"platform.angular_components.datepicker_select_range": "Selecionar intervalo de datas",
|
|
404
|
+
"platform.angular_components.datepicker_select_range_end": "Selecionar data final. Data inicial: {{date}}.",
|
|
400
405
|
"platform.angular_components.datepicker_select_time": "Selecionar hora",
|
|
401
406
|
"platform.angular_components.datepicker_hour": "Hora",
|
|
402
407
|
"platform.angular_components.datepicker_minute": "Minuto",
|
|
403
408
|
"platform.angular_components.datepicker_second": "Segundo",
|
|
404
|
-
"platform.angular_components.datepicker_increment_hour": "Aumentar hora",
|
|
405
|
-
"platform.angular_components.datepicker_decrement_hour": "Diminuir hora",
|
|
406
|
-
"platform.angular_components.datepicker_increment_minute": "Aumentar minuto",
|
|
407
|
-
"platform.angular_components.datepicker_decrement_minute": "Diminuir minuto",
|
|
408
|
-
"platform.angular_components.datepicker_increment_second": "Aumentar segundo",
|
|
409
|
-
"platform.angular_components.datepicker_decrement_second": "Diminuir segundo",
|
|
410
|
-
"platform.angular_components.datepicker_toggle_meridiem": "Alternar
|
|
409
|
+
"platform.angular_components.datepicker_increment_hour": "Aumentar hora, {{time}}",
|
|
410
|
+
"platform.angular_components.datepicker_decrement_hour": "Diminuir hora, {{time}}",
|
|
411
|
+
"platform.angular_components.datepicker_increment_minute": "Aumentar minuto, {{time}}",
|
|
412
|
+
"platform.angular_components.datepicker_decrement_minute": "Diminuir minuto, {{time}}",
|
|
413
|
+
"platform.angular_components.datepicker_increment_second": "Aumentar segundo, {{time}}",
|
|
414
|
+
"platform.angular_components.datepicker_decrement_second": "Diminuir segundo, {{time}}",
|
|
415
|
+
"platform.angular_components.datepicker_toggle_meridiem": "Alternar para {{meridiem}}",
|
|
416
|
+
"platform.angular_components.datepicker_segment_day": "Dia",
|
|
417
|
+
"platform.angular_components.datepicker_segment_month": "Mês",
|
|
418
|
+
"platform.angular_components.datepicker_segment_year": "Ano",
|
|
419
|
+
"platform.angular_components.datepicker_segment_ampm": "Período",
|
|
420
|
+
"platform.angular_components.datepicker_segment_empty": "vazio",
|
|
421
|
+
"platform.angular_components.datepicker_no_value_selected": "Nenhum valor selecionado",
|
|
411
422
|
"platform.angular_components.datepicker_day_sun": "Dom",
|
|
412
423
|
"platform.angular_components.datepicker_day_mon": "Seg",
|
|
413
424
|
"platform.angular_components.datepicker_day_tue": "Ter",
|
|
@@ -434,8 +445,24 @@ const fallback = {
|
|
|
434
445
|
"platform.angular_components.datepicker_placeholder_range": "dd/mm/aaaa — dd/mm/aaaa",
|
|
435
446
|
"platform.angular_components.datepicker_placeholder_year": "aaaa",
|
|
436
447
|
"platform.angular_components.datepicker_calendar_label": "Calendário de {{month}} {{year}}",
|
|
448
|
+
"platform.angular_components.datepicker_calendar_label_multiple": "{{month}} de {{year}}, seleção múltipla. Pressione Enter ou Espaço para selecionar ou desmarcar uma data.",
|
|
449
|
+
"platform.angular_components.datepicker_calendar_label_range": "{{month}} {{year}}, seleção de intervalo de datas. Escolha a data inicial.",
|
|
450
|
+
"platform.angular_components.datepicker_calendar_label_range_pending": "{{month}} {{year}}, seleção de intervalo de datas. Data inicial selecionada. Escolha a data final.",
|
|
451
|
+
"platform.angular_components.datepicker_date_selected": "{{date}}, selecionado",
|
|
452
|
+
"platform.angular_components.datepicker_date_deselected": "{{date}}, desmarcado",
|
|
453
|
+
"platform.angular_components.datepicker_range_start": "início do intervalo",
|
|
454
|
+
"platform.angular_components.datepicker_range_end": "fim do intervalo",
|
|
455
|
+
"platform.angular_components.datepicker_range_in_range": "dentro do intervalo selecionado",
|
|
456
|
+
"platform.angular_components.datepicker_range_start_end": "início e fim do intervalo",
|
|
457
|
+
"platform.angular_components.datepicker_range_start_selected": "Data inicial {{date}} selecionada. Escolha a data final.",
|
|
458
|
+
"platform.angular_components.datepicker_range_selected": "Intervalo selecionado: {{start}} até {{end}}.",
|
|
459
|
+
"platform.angular_components.datepicker_range_cleared": "Intervalo de datas limpo.",
|
|
460
|
+
"platform.angular_components.datepicker_range_selection_cancelled": "Seleção de intervalo cancelada. Escolha uma nova data inicial.",
|
|
437
461
|
"platform.angular_components.panel_toggle": "Alternar {{ header }}",
|
|
438
|
-
"platform.angular_components.switch_toggle": "Chave de alternância"
|
|
462
|
+
"platform.angular_components.switch_toggle": "Chave de alternância",
|
|
463
|
+
"platform.angular_components.slider_value": "Valor do slider",
|
|
464
|
+
"platform.angular_components.slider_min_value": "Valor mínimo",
|
|
465
|
+
"platform.angular_components.slider_max_value": "Valor máximo"
|
|
439
466
|
};
|
|
440
467
|
|
|
441
468
|
/**
|