@spartan-ng/brain 0.0.1-alpha.373 → 0.0.1-alpha.379
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/accordion/README.md +3 -0
- package/accordion/index.d.ts +13 -0
- package/accordion/lib/brn-accordion-content.component.d.ts +15 -0
- package/accordion/lib/brn-accordion.directive.d.ts +47 -0
- package/alert-dialog/README.md +3 -0
- package/alert-dialog/index.d.ts +25 -0
- package/alert-dialog/lib/brn-alert-dialog-content.directive.d.ts +6 -0
- package/alert-dialog/lib/brn-alert-dialog-description.directive.d.ts +6 -0
- package/alert-dialog/lib/brn-alert-dialog-overlay.component.d.ts +6 -0
- package/alert-dialog/lib/brn-alert-dialog-title.directive.d.ts +6 -0
- package/alert-dialog/lib/brn-alert-dialog-trigger.directive.d.ts +8 -0
- package/alert-dialog/lib/brn-alert-dialog.component.d.ts +7 -0
- package/avatar/README.md +3 -0
- package/avatar/index.d.ts +17 -0
- package/avatar/lib/brn-avatar.component.d.ts +7 -0
- package/avatar/lib/fallback/brn-avatar-fallback.directive.d.ts +11 -0
- package/avatar/lib/fallback/index.d.ts +1 -0
- package/avatar/lib/image/brn-avatar-image.directive.d.ts +9 -0
- package/avatar/lib/image/index.d.ts +1 -0
- package/avatar/lib/util/hex-color-for.d.ts +1 -0
- package/avatar/lib/util/index.d.ts +3 -0
- package/avatar/lib/util/initials.pipe.d.ts +7 -0
- package/avatar/lib/util/is-bright.d.ts +1 -0
- package/calendar/README.md +3 -0
- package/calendar/index.d.ts +36 -0
- package/calendar/lib/brn-calendar-cell-button.directive.d.ts +59 -0
- package/calendar/lib/brn-calendar-cell.directive.d.ts +5 -0
- package/calendar/lib/brn-calendar-grid.directive.d.ts +7 -0
- package/calendar/lib/brn-calendar-header.directive.d.ts +7 -0
- package/calendar/lib/brn-calendar-next-button.directive.d.ts +13 -0
- package/calendar/lib/brn-calendar-previous-button.directive.d.ts +13 -0
- package/calendar/lib/brn-calendar-week.directive.d.ts +25 -0
- package/calendar/lib/brn-calendar-weekday.directive.d.ts +25 -0
- package/calendar/lib/brn-calendar.directive.d.ts +55 -0
- package/calendar/lib/brn-calendar.token.d.ts +8 -0
- package/calendar/lib/i18n/calendar-i18n.d.ts +17 -0
- package/checkbox/lib/brn-checkbox.component.d.ts +1 -1
- package/collapsible/README.md +3 -0
- package/collapsible/index.d.ts +16 -0
- package/collapsible/lib/brn-collapsible-content.component.d.ts +19 -0
- package/collapsible/lib/brn-collapsible-trigger.directive.d.ts +12 -0
- package/collapsible/lib/brn-collapsible.component.d.ts +11 -0
- package/command/README.md +3 -0
- package/command/index.d.ts +33 -0
- package/command/lib/brn-command-empty.directive.d.ts +6 -0
- package/command/lib/brn-command-group.component.d.ts +6 -0
- package/command/lib/brn-command-input.directive.d.ts +6 -0
- package/command/lib/brn-command-item.directive.d.ts +6 -0
- package/command/lib/brn-command-list.component.d.ts +6 -0
- package/command/lib/brn-command-loader.directive.d.ts +6 -0
- package/command/lib/brn-command-separator.component.d.ts +6 -0
- package/command/lib/brn-command.component.d.ts +6 -0
- package/date-time/README.md +3 -0
- package/date-time/index.d.ts +2 -0
- package/date-time/lib/date-adapter.d.ts +176 -0
- package/date-time/lib/native-date-adapter.d.ts +103 -0
- package/date-time-luxon/README.md +3 -0
- package/date-time-luxon/index.d.ts +1 -0
- package/date-time-luxon/lib/date-adapter.d.ts +29 -0
- package/dialog/README.md +3 -0
- package/dialog/index.d.ts +33 -0
- package/dialog/lib/brn-dialog-close.directive.d.ts +10 -0
- package/dialog/lib/brn-dialog-content.directive.d.ts +12 -0
- package/dialog/lib/brn-dialog-description.directive.d.ts +8 -0
- package/dialog/lib/brn-dialog-options.d.ts +26 -0
- package/dialog/lib/brn-dialog-overlay.component.d.ts +8 -0
- package/dialog/lib/brn-dialog-ref.d.ts +24 -0
- package/dialog/lib/brn-dialog-state.d.ts +1 -0
- package/dialog/lib/brn-dialog-title.directive.d.ts +8 -0
- package/dialog/lib/brn-dialog-trigger.directive.d.ts +16 -0
- package/dialog/lib/brn-dialog-utils.d.ts +1 -0
- package/dialog/lib/brn-dialog.component.d.ts +56 -0
- package/dialog/lib/brn-dialog.service.d.ts +22 -0
- package/esm2022/accordion/index.mjs +31 -0
- package/esm2022/accordion/lib/brn-accordion-content.component.mjs +50 -0
- package/esm2022/accordion/lib/brn-accordion.directive.mjs +180 -0
- package/esm2022/accordion/spartan-ng-brain-accordion.mjs +5 -0
- package/esm2022/alert-dialog/index.mjs +45 -0
- package/esm2022/alert-dialog/lib/brn-alert-dialog-content.directive.mjs +17 -0
- package/esm2022/alert-dialog/lib/brn-alert-dialog-description.directive.mjs +18 -0
- package/esm2022/alert-dialog/lib/brn-alert-dialog-overlay.component.mjs +20 -0
- package/esm2022/alert-dialog/lib/brn-alert-dialog-title.directive.mjs +18 -0
- package/esm2022/alert-dialog/lib/brn-alert-dialog-trigger.directive.mjs +27 -0
- package/esm2022/alert-dialog/lib/brn-alert-dialog.component.mjs +40 -0
- package/esm2022/alert-dialog/spartan-ng-brain-alert-dialog.mjs +5 -0
- package/esm2022/avatar/index.mjs +23 -0
- package/esm2022/avatar/lib/brn-avatar.component.mjs +31 -0
- package/esm2022/avatar/lib/fallback/brn-avatar-fallback.directive.mjs +21 -0
- package/esm2022/avatar/lib/fallback/index.mjs +2 -0
- package/esm2022/avatar/lib/image/brn-avatar-image.directive.mjs +29 -0
- package/esm2022/avatar/lib/image/index.mjs +2 -0
- package/esm2022/avatar/lib/util/hex-color-for.mjs +22 -0
- package/esm2022/avatar/lib/util/index.mjs +4 -0
- package/esm2022/avatar/lib/util/initials.pipe.mjs +27 -0
- package/esm2022/avatar/lib/util/is-bright.mjs +12 -0
- package/esm2022/avatar/spartan-ng-brain-avatar.mjs +5 -0
- package/esm2022/calendar/index.mjs +62 -0
- package/esm2022/calendar/lib/brn-calendar-cell-button.directive.mjs +160 -0
- package/esm2022/calendar/lib/brn-calendar-cell.directive.mjs +17 -0
- package/esm2022/calendar/lib/brn-calendar-grid.directive.mjs +21 -0
- package/esm2022/calendar/lib/brn-calendar-header.directive.mjs +22 -0
- package/esm2022/calendar/lib/brn-calendar-next-button.directive.mjs +42 -0
- package/esm2022/calendar/lib/brn-calendar-previous-button.directive.mjs +42 -0
- package/esm2022/calendar/lib/brn-calendar-week.directive.mjs +64 -0
- package/esm2022/calendar/lib/brn-calendar-weekday.directive.mjs +48 -0
- package/esm2022/calendar/lib/brn-calendar.directive.mjs +154 -0
- package/esm2022/calendar/lib/brn-calendar.token.mjs +12 -0
- package/esm2022/calendar/lib/i18n/calendar-i18n.mjs +33 -0
- package/esm2022/calendar/spartan-ng-brain-calendar.mjs +5 -0
- package/esm2022/checkbox/lib/brn-checkbox.component.mjs +1 -1
- package/esm2022/collapsible/index.mjs +30 -0
- package/esm2022/collapsible/lib/brn-collapsible-content.component.mjs +61 -0
- package/esm2022/collapsible/lib/brn-collapsible-trigger.directive.mjs +35 -0
- package/esm2022/collapsible/lib/brn-collapsible.component.mjs +33 -0
- package/esm2022/collapsible/spartan-ng-brain-collapsible.mjs +5 -0
- package/esm2022/command/index.mjs +64 -0
- package/esm2022/command/lib/brn-command-empty.directive.mjs +29 -0
- package/esm2022/command/lib/brn-command-group.component.mjs +45 -0
- package/esm2022/command/lib/brn-command-input.directive.mjs +29 -0
- package/esm2022/command/lib/brn-command-item.directive.mjs +36 -0
- package/esm2022/command/lib/brn-command-list.component.mjs +35 -0
- package/esm2022/command/lib/brn-command-loader.directive.mjs +29 -0
- package/esm2022/command/lib/brn-command-separator.component.mjs +30 -0
- package/esm2022/command/lib/brn-command.component.mjs +21 -0
- package/esm2022/command/spartan-ng-brain-command.mjs +5 -0
- package/esm2022/date-time/index.mjs +3 -0
- package/esm2022/date-time/lib/date-adapter.mjs +16 -0
- package/esm2022/date-time/lib/native-date-adapter.mjs +155 -0
- package/esm2022/date-time/spartan-ng-brain-date-time.mjs +5 -0
- package/esm2022/date-time-luxon/index.mjs +2 -0
- package/esm2022/date-time-luxon/lib/date-adapter.mjs +85 -0
- package/esm2022/date-time-luxon/spartan-ng-brain-date-time-luxon.mjs +5 -0
- package/esm2022/dialog/index.mjs +55 -0
- package/esm2022/dialog/lib/brn-dialog-close.directive.mjs +29 -0
- package/esm2022/dialog/lib/brn-dialog-content.directive.mjs +41 -0
- package/esm2022/dialog/lib/brn-dialog-description.directive.mjs +25 -0
- package/esm2022/dialog/lib/brn-dialog-options.mjs +19 -0
- package/esm2022/dialog/lib/brn-dialog-overlay.component.mjs +29 -0
- package/esm2022/dialog/lib/brn-dialog-ref.mjs +53 -0
- package/esm2022/dialog/lib/brn-dialog-state.mjs +2 -0
- package/esm2022/dialog/lib/brn-dialog-title.directive.mjs +25 -0
- package/esm2022/dialog/lib/brn-dialog-trigger.directive.mjs +39 -0
- package/esm2022/dialog/lib/brn-dialog-utils.mjs +12 -0
- package/esm2022/dialog/lib/brn-dialog.component.mjs +208 -0
- package/esm2022/dialog/lib/brn-dialog.service.mjs +127 -0
- package/esm2022/dialog/spartan-ng-brain-dialog.mjs +5 -0
- package/esm2022/form-field/index.mjs +2 -0
- package/esm2022/form-field/lib/brn-form-field-control.mjs +14 -0
- package/esm2022/form-field/spartan-ng-brain-form-field.mjs +5 -0
- package/esm2022/forms/index.mjs +4 -0
- package/esm2022/forms/lib/control-value-accessor.mjs +2 -0
- package/esm2022/forms/lib/error-options.mjs +26 -0
- package/esm2022/forms/lib/error-state-tracker.mjs +29 -0
- package/esm2022/forms/spartan-ng-brain-forms.mjs +5 -0
- package/esm2022/hover-card/index.mjs +29 -0
- package/esm2022/hover-card/lib/brn-hover-card-content.service.mjs +205 -0
- package/esm2022/hover-card/lib/brn-hover-card.component.mjs +34 -0
- package/esm2022/hover-card/lib/createHoverObservable.mjs +19 -0
- package/esm2022/hover-card/spartan-ng-brain-hover-card.mjs +5 -0
- package/esm2022/label/index.mjs +17 -0
- package/esm2022/label/lib/brn-label.directive.mjs +49 -0
- package/esm2022/label/spartan-ng-brain-label.mjs +5 -0
- package/esm2022/menu/index.mjs +100 -0
- package/esm2022/menu/lib/brn-context-menu-trigger.directive.mjs +40 -0
- package/esm2022/menu/lib/brn-menu-align.mjs +15 -0
- package/esm2022/menu/lib/brn-menu-bar.directive.mjs +17 -0
- package/esm2022/menu/lib/brn-menu-group.directive.mjs +17 -0
- package/esm2022/menu/lib/brn-menu-item-checkbox.directive.mjs +30 -0
- package/esm2022/menu/lib/brn-menu-item-radio.directive.mjs +30 -0
- package/esm2022/menu/lib/brn-menu-item.directive.mjs +27 -0
- package/esm2022/menu/lib/brn-menu-trigger.directive.mjs +36 -0
- package/esm2022/menu/lib/brn-menu.directive.mjs +50 -0
- package/esm2022/menu/spartan-ng-brain-menu.mjs +5 -0
- package/esm2022/popover/index.mjs +35 -0
- package/esm2022/popover/lib/brn-popover-close.directive.mjs +15 -0
- package/esm2022/popover/lib/brn-popover-content.directive.mjs +17 -0
- package/esm2022/popover/lib/brn-popover-trigger.directive.mjs +37 -0
- package/esm2022/popover/lib/brn-popover.component.mjs +81 -0
- package/esm2022/popover/spartan-ng-brain-popover.mjs +5 -0
- package/esm2022/progress/index.mjs +21 -0
- package/esm2022/progress/lib/brn-progress-indicator.component.mjs +22 -0
- package/esm2022/progress/lib/brn-progress.component.mjs +61 -0
- package/esm2022/progress/lib/brn-progress.token.mjs +9 -0
- package/esm2022/progress/spartan-ng-brain-progress.mjs +5 -0
- package/esm2022/radio-group/index.mjs +20 -0
- package/esm2022/radio-group/lib/brn-radio-group.component.mjs +90 -0
- package/esm2022/radio-group/lib/brn-radio-group.token.mjs +9 -0
- package/esm2022/radio-group/lib/brn-radio.component.mjs +185 -0
- package/esm2022/radio-group/spartan-ng-brain-radio-group.mjs +5 -0
- package/esm2022/select/index.mjs +56 -0
- package/esm2022/select/lib/brn-select-content.component.mjs +204 -0
- package/esm2022/select/lib/brn-select-group.directive.mjs +19 -0
- package/esm2022/select/lib/brn-select-label.directive.mjs +23 -0
- package/esm2022/select/lib/brn-select-option.directive.mjs +65 -0
- package/esm2022/select/lib/brn-select-value.component.mjs +46 -0
- package/esm2022/select/lib/brn-select.component.mjs +358 -0
- package/esm2022/select/lib/brn-select.service.mjs +197 -0
- package/esm2022/select/spartan-ng-brain-select.mjs +5 -0
- package/esm2022/separator/index.mjs +17 -0
- package/esm2022/separator/lib/brn-separator.component.mjs +24 -0
- package/esm2022/separator/spartan-ng-brain-separator.mjs +5 -0
- package/esm2022/sheet/index.mjs +50 -0
- package/esm2022/sheet/lib/brn-sheet-close.directive.mjs +15 -0
- package/esm2022/sheet/lib/brn-sheet-content.directive.mjs +25 -0
- package/esm2022/sheet/lib/brn-sheet-description.directive.mjs +18 -0
- package/esm2022/sheet/lib/brn-sheet-overlay.component.mjs +20 -0
- package/esm2022/sheet/lib/brn-sheet-title.directive.mjs +18 -0
- package/esm2022/sheet/lib/brn-sheet-trigger.directive.mjs +26 -0
- package/esm2022/sheet/lib/brn-sheet.component.mjs +55 -0
- package/esm2022/sheet/spartan-ng-brain-sheet.mjs +5 -0
- package/esm2022/slider/index.mjs +13 -0
- package/esm2022/slider/lib/brn-slider-thumb.directive.mjs +41 -0
- package/esm2022/slider/lib/brn-slider-tick-mark.directive.mjs +37 -0
- package/esm2022/slider/lib/brn-slider-track-active-fill.directive.mjs +29 -0
- package/esm2022/slider/lib/brn-slider-track.directive.mjs +290 -0
- package/esm2022/slider/spartan-ng-brain-slider.mjs +5 -0
- package/esm2022/switch/index.mjs +20 -0
- package/esm2022/switch/lib/brn-switch-thumb.component.mjs +16 -0
- package/esm2022/switch/lib/brn-switch.component.mjs +236 -0
- package/esm2022/switch/spartan-ng-brain-switch.mjs +5 -0
- package/esm2022/table/index.mjs +47 -0
- package/esm2022/table/lib/brn-cell-def.directive.mjs +22 -0
- package/esm2022/table/lib/brn-column-def.component.mjs +82 -0
- package/esm2022/table/lib/brn-column-manager.mjs +61 -0
- package/esm2022/table/lib/brn-footer-def.directive.mjs +22 -0
- package/esm2022/table/lib/brn-header-def.directive.mjs +22 -0
- package/esm2022/table/lib/brn-paginator.directive.mjs +109 -0
- package/esm2022/table/lib/brn-table.component.mjs +169 -0
- package/esm2022/table/spartan-ng-brain-table.mjs +5 -0
- package/esm2022/tabs/index.mjs +32 -0
- package/esm2022/tabs/lib/brn-tabs-list.directive.mjs +65 -0
- package/esm2022/tabs/lib/brn-tabs-paginated-list.directive.mjs +525 -0
- package/esm2022/tabs/lib/brn-tabs-trigger.directive.mjs +134 -0
- package/esm2022/tabs/spartan-ng-brain-tabs.mjs +5 -0
- package/esm2022/toggle/index.mjs +31 -0
- package/esm2022/toggle/lib/brn-toggle-group.component.mjs +159 -0
- package/esm2022/toggle/lib/brn-toggle-group.token.mjs +9 -0
- package/esm2022/toggle/lib/brn-toggle.directive.mjs +65 -0
- package/esm2022/toggle/spartan-ng-brain-toggle.mjs +5 -0
- package/esm2022/tooltip/index.mjs +35 -0
- package/esm2022/tooltip/lib/brn-tooltip-content.component.mjs +228 -0
- package/esm2022/tooltip/lib/brn-tooltip-content.directive.mjs +22 -0
- package/esm2022/tooltip/lib/brn-tooltip-trigger.directive.mjs +689 -0
- package/esm2022/tooltip/lib/brn-tooltip.directive.mjs +15 -0
- package/esm2022/tooltip/spartan-ng-brain-tooltip.mjs +5 -0
- package/fesm2022/spartan-ng-brain-accordion.mjs +259 -0
- package/fesm2022/spartan-ng-brain-accordion.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-alert-dialog.mjs +162 -0
- package/fesm2022/spartan-ng-brain-alert-dialog.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-avatar.mjs +156 -0
- package/fesm2022/spartan-ng-brain-avatar.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-calendar.mjs +629 -0
- package/fesm2022/spartan-ng-brain-calendar.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-checkbox.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-collapsible.mjs +152 -0
- package/fesm2022/spartan-ng-brain-collapsible.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-command.mjs +284 -0
- package/fesm2022/spartan-ng-brain-command.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-date-time-luxon.mjs +92 -0
- package/fesm2022/spartan-ng-brain-date-time-luxon.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-date-time.mjs +177 -0
- package/fesm2022/spartan-ng-brain-date-time.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-dialog.mjs +617 -0
- package/fesm2022/spartan-ng-brain-dialog.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-form-field.mjs +21 -0
- package/fesm2022/spartan-ng-brain-form-field.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-forms.mjs +61 -0
- package/fesm2022/spartan-ng-brain-forms.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-hover-card.mjs +274 -0
- package/fesm2022/spartan-ng-brain-hover-card.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-label.mjs +69 -0
- package/fesm2022/spartan-ng-brain-label.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-menu.mjs +316 -0
- package/fesm2022/spartan-ng-brain-menu.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-popover.mjs +173 -0
- package/fesm2022/spartan-ng-brain-popover.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-progress.mjs +108 -0
- package/fesm2022/spartan-ng-brain-progress.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-radio-group.mjs +299 -0
- package/fesm2022/spartan-ng-brain-radio-group.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-select.mjs +928 -0
- package/fesm2022/spartan-ng-brain-select.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-separator.mjs +44 -0
- package/fesm2022/spartan-ng-brain-separator.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-sheet.mjs +197 -0
- package/fesm2022/spartan-ng-brain-sheet.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-slider.mjs +399 -0
- package/fesm2022/spartan-ng-brain-slider.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-switch.mjs +271 -0
- package/fesm2022/spartan-ng-brain-switch.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-table.mjs +506 -0
- package/fesm2022/spartan-ng-brain-table.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-tabs.mjs +748 -0
- package/fesm2022/spartan-ng-brain-tabs.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-toggle.mjs +260 -0
- package/fesm2022/spartan-ng-brain-toggle.mjs.map +1 -0
- package/fesm2022/spartan-ng-brain-tooltip.mjs +975 -0
- package/fesm2022/spartan-ng-brain-tooltip.mjs.map +1 -0
- package/form-field/README.md +3 -0
- package/form-field/index.d.ts +1 -0
- package/form-field/lib/brn-form-field-control.d.ts +11 -0
- package/forms/README.md +3 -0
- package/forms/index.d.ts +3 -0
- package/forms/lib/control-value-accessor.d.ts +2 -0
- package/forms/lib/error-options.d.ts +14 -0
- package/forms/lib/error-state-tracker.d.ts +15 -0
- package/hover-card/README.md +3 -0
- package/hover-card/index.d.ts +14 -0
- package/hover-card/lib/brn-hover-card-content.service.d.ts +65 -0
- package/hover-card/lib/brn-hover-card.component.d.ts +9 -0
- package/hover-card/lib/createHoverObservable.d.ts +4 -0
- package/label/README.md +3 -0
- package/label/index.d.ts +8 -0
- package/label/lib/brn-label.directive.d.ts +15 -0
- package/menu/README.md +3 -0
- package/menu/index.d.ts +49 -0
- package/menu/lib/brn-context-menu-trigger.directive.d.ts +13 -0
- package/menu/lib/brn-menu-align.d.ts +3 -0
- package/menu/lib/brn-menu-bar.directive.d.ts +6 -0
- package/menu/lib/brn-menu-group.directive.d.ts +6 -0
- package/menu/lib/brn-menu-item-checkbox.directive.d.ts +11 -0
- package/menu/lib/brn-menu-item-radio.directive.d.ts +11 -0
- package/menu/lib/brn-menu-item.directive.d.ts +10 -0
- package/menu/lib/brn-menu-trigger.directive.d.ts +10 -0
- package/menu/lib/brn-menu.directive.d.ts +11 -0
- package/package.json +182 -9
- package/popover/README.md +3 -0
- package/popover/index.d.ts +19 -0
- package/popover/lib/brn-popover-close.directive.d.ts +6 -0
- package/popover/lib/brn-popover-content.directive.d.ts +6 -0
- package/popover/lib/brn-popover-trigger.directive.d.ts +10 -0
- package/popover/lib/brn-popover.component.d.ts +14 -0
- package/progress/README.md +3 -0
- package/progress/index.d.ts +14 -0
- package/progress/lib/brn-progress-indicator.component.d.ts +6 -0
- package/progress/lib/brn-progress.component.d.ts +15 -0
- package/progress/lib/brn-progress.token.d.ts +4 -0
- package/radio-group/README.md +3 -0
- package/radio-group/index.d.ts +13 -0
- package/radio-group/lib/brn-radio-group.component.d.ts +57 -0
- package/radio-group/lib/brn-radio-group.token.d.ts +4 -0
- package/radio-group/lib/brn-radio.component.d.ts +58 -0
- package/select/README.md +3 -0
- package/select/index.d.ts +28 -0
- package/select/lib/brn-select-content.component.d.ts +50 -0
- package/select/lib/brn-select-group.directive.d.ts +6 -0
- package/select/lib/brn-select-label.directive.d.ts +9 -0
- package/select/lib/brn-select-option.directive.d.ts +25 -0
- package/select/lib/brn-select-value.component.d.ts +11 -0
- package/select/lib/brn-select.component.d.ts +82 -0
- package/select/lib/brn-select.service.d.ts +67 -0
- package/separator/README.md +3 -0
- package/separator/index.d.ts +8 -0
- package/separator/lib/brn-separator.component.d.ts +11 -0
- package/sheet/README.md +3 -0
- package/sheet/index.d.ts +28 -0
- package/sheet/lib/brn-sheet-close.directive.d.ts +6 -0
- package/sheet/lib/brn-sheet-content.directive.d.ts +8 -0
- package/sheet/lib/brn-sheet-description.directive.d.ts +6 -0
- package/sheet/lib/brn-sheet-overlay.component.d.ts +6 -0
- package/sheet/lib/brn-sheet-title.directive.d.ts +6 -0
- package/sheet/lib/brn-sheet-trigger.directive.d.ts +9 -0
- package/sheet/lib/brn-sheet.component.d.ts +9 -0
- package/slider/README.md +3 -0
- package/slider/index.d.ts +7 -0
- package/slider/lib/brn-slider-thumb.directive.d.ts +17 -0
- package/slider/lib/brn-slider-tick-mark.directive.d.ts +15 -0
- package/slider/lib/brn-slider-track-active-fill.directive.d.ts +10 -0
- package/slider/lib/brn-slider-track.directive.d.ts +139 -0
- package/switch/README.md +3 -0
- package/switch/index.d.ts +13 -0
- package/switch/lib/brn-switch-thumb.component.d.ts +5 -0
- package/switch/lib/brn-switch.component.d.ts +58 -0
- package/table/README.md +3 -0
- package/table/index.d.ts +26 -0
- package/table/lib/brn-cell-def.directive.d.ts +9 -0
- package/table/lib/brn-column-def.component.d.ts +18 -0
- package/table/lib/brn-column-manager.d.ts +26 -0
- package/table/lib/brn-footer-def.directive.d.ts +9 -0
- package/table/lib/brn-header-def.directive.d.ts +9 -0
- package/table/lib/brn-paginator.directive.d.ts +41 -0
- package/table/lib/brn-table.component.d.ts +37 -0
- package/tabs/README.md +3 -0
- package/tabs/index.d.ts +14 -0
- package/tabs/lib/brn-tabs-list.directive.d.ts +17 -0
- package/tabs/lib/brn-tabs-paginated-list.directive.d.ts +196 -0
- package/tabs/lib/brn-tabs-trigger.directive.d.ts +61 -0
- package/toggle/README.md +3 -0
- package/toggle/index.d.ts +15 -0
- package/toggle/lib/brn-toggle-group.component.d.ts +68 -0
- package/toggle/lib/brn-toggle-group.token.d.ts +4 -0
- package/toggle/lib/brn-toggle.directive.d.ts +25 -0
- package/tooltip/README.md +3 -0
- package/tooltip/index.d.ts +19 -0
- package/tooltip/lib/brn-tooltip-content.component.d.ts +73 -0
- package/tooltip/lib/brn-tooltip-content.directive.d.ts +8 -0
- package/tooltip/lib/brn-tooltip-trigger.directive.d.ts +177 -0
- package/tooltip/lib/brn-tooltip.directive.d.ts +7 -0
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
import { CdkListbox, CdkListboxModule, CdkOption } from '@angular/cdk/listbox';
|
|
2
|
+
import { CdkConnectedOverlay, OverlayModule, } from '@angular/cdk/overlay';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, computed, contentChild, contentChildren, inject, input, output, signal, viewChild, } from '@angular/core';
|
|
4
|
+
import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
5
|
+
import { FormGroupDirective, NgControl, NgForm } from '@angular/forms';
|
|
6
|
+
import { BrnFormFieldControl } from '@spartan-ng/brain/form-field';
|
|
7
|
+
import { ErrorStateMatcher, ErrorStateTracker } from '@spartan-ng/brain/forms';
|
|
8
|
+
import { BrnLabelDirective } from '@spartan-ng/brain/label';
|
|
9
|
+
import { provideExposedSideProviderExisting, provideExposesStateProviderExisting, } from '@spartan-ng/ui-core';
|
|
10
|
+
import { Subject, combineLatest, delay, map, of, switchMap } from 'rxjs';
|
|
11
|
+
import { BrnSelectContentComponent } from './brn-select-content.component';
|
|
12
|
+
import { BrnSelectService } from './brn-select.service';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "@angular/cdk/overlay";
|
|
15
|
+
let nextId = 0;
|
|
16
|
+
export class BrnSelectComponent {
|
|
17
|
+
_selectService = inject(BrnSelectService);
|
|
18
|
+
triggerWidth = this._selectService.triggerWidth;
|
|
19
|
+
multiple = input(false);
|
|
20
|
+
placeholder = input('');
|
|
21
|
+
disabled = input(false);
|
|
22
|
+
dir = input('ltr');
|
|
23
|
+
_disabledFromSetDisabledState = signal(false);
|
|
24
|
+
selectLabel = contentChild(BrnLabelDirective, { descendants: false });
|
|
25
|
+
/** Overlay pane containing the options. */
|
|
26
|
+
selectContent = contentChild.required(BrnSelectContentComponent);
|
|
27
|
+
options = contentChildren(CdkOption, { descendants: true });
|
|
28
|
+
options$ = toObservable(this.options);
|
|
29
|
+
optionsAndIndex$ = this.options$.pipe(map((options, index) => [options, index]));
|
|
30
|
+
/** Overlay pane containing the options. */
|
|
31
|
+
_overlayDir = viewChild(CdkConnectedOverlay);
|
|
32
|
+
openedChange = output();
|
|
33
|
+
closeDelay = input(100);
|
|
34
|
+
isExpanded = this._selectService.isExpanded;
|
|
35
|
+
_delayedExpanded = toSignal(toObservable(this.isExpanded).pipe(switchMap((expanded) => (!expanded ? of(expanded).pipe(delay(this.closeDelay())) : of(expanded))), takeUntilDestroyed()), { initialValue: false });
|
|
36
|
+
state = computed(() => (this.isExpanded() ? 'open' : 'closed'));
|
|
37
|
+
_positionChanges$ = new Subject();
|
|
38
|
+
side = toSignal(this._positionChanges$.pipe(map((change) =>
|
|
39
|
+
// todo: better translation or adjusting hlm to take that into account
|
|
40
|
+
change.connectionPair.originY === 'center'
|
|
41
|
+
? change.connectionPair.originX === 'start'
|
|
42
|
+
? 'left'
|
|
43
|
+
: 'right'
|
|
44
|
+
: change.connectionPair.originY)), { initialValue: 'bottom' });
|
|
45
|
+
backupLabelId = computed(() => this._selectService.labelId());
|
|
46
|
+
labelProvided = signal(false);
|
|
47
|
+
ngControl = inject(NgControl, { optional: true, self: true });
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
49
|
+
_onChange = () => { };
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
51
|
+
_onTouched = () => { };
|
|
52
|
+
_shouldEmitValueChange = signal(false);
|
|
53
|
+
/*
|
|
54
|
+
* This position config ensures that the top "start" corner of the overlay
|
|
55
|
+
* is aligned with with the top "start" of the origin by default (overlapping
|
|
56
|
+
* the trigger completely). If the panel cannot fit below the trigger, it
|
|
57
|
+
* will fall back to a position above the trigger.
|
|
58
|
+
*/
|
|
59
|
+
_positions = [
|
|
60
|
+
{
|
|
61
|
+
originX: 'start',
|
|
62
|
+
originY: 'bottom',
|
|
63
|
+
overlayX: 'start',
|
|
64
|
+
overlayY: 'top',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
originX: 'end',
|
|
68
|
+
originY: 'bottom',
|
|
69
|
+
overlayX: 'end',
|
|
70
|
+
overlayY: 'top',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
originX: 'start',
|
|
74
|
+
originY: 'top',
|
|
75
|
+
overlayX: 'start',
|
|
76
|
+
overlayY: 'bottom',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
originX: 'end',
|
|
80
|
+
originY: 'top',
|
|
81
|
+
overlayX: 'end',
|
|
82
|
+
overlayY: 'bottom',
|
|
83
|
+
},
|
|
84
|
+
];
|
|
85
|
+
errorStateTracker;
|
|
86
|
+
_defaultErrorStateMatcher = inject(ErrorStateMatcher);
|
|
87
|
+
_parentForm = inject(NgForm, { optional: true });
|
|
88
|
+
_parentFormGroup = inject(FormGroupDirective, { optional: true });
|
|
89
|
+
errorState = computed(() => this.errorStateTracker.errorState());
|
|
90
|
+
writeValue$ = new Subject();
|
|
91
|
+
constructor() {
|
|
92
|
+
this._selectService.state.update((state) => ({
|
|
93
|
+
...state,
|
|
94
|
+
multiple: this.multiple,
|
|
95
|
+
placeholder: this.placeholder,
|
|
96
|
+
disabled: this.disabled,
|
|
97
|
+
disabledBySetDisabled: this._disabledFromSetDisabledState,
|
|
98
|
+
dir: this.dir,
|
|
99
|
+
}));
|
|
100
|
+
this.handleOptionChanges();
|
|
101
|
+
this.handleInitialOptionSelect();
|
|
102
|
+
this._selectService.state.update((state) => ({
|
|
103
|
+
...state,
|
|
104
|
+
id: `brn-select-${nextId++}`,
|
|
105
|
+
}));
|
|
106
|
+
if (this.ngControl !== null) {
|
|
107
|
+
this.ngControl.valueAccessor = this;
|
|
108
|
+
}
|
|
109
|
+
// Watch for Listbox Selection Changes to trigger Collapse and Value Change
|
|
110
|
+
this._selectService.listBoxValueChangeEvent$.pipe(takeUntilDestroyed()).subscribe(() => {
|
|
111
|
+
if (!this.multiple()) {
|
|
112
|
+
this.close();
|
|
113
|
+
}
|
|
114
|
+
// we set shouldEmitValueChange to true because we want to propagate the value change
|
|
115
|
+
// as a result of user interaction
|
|
116
|
+
this._shouldEmitValueChange.set(true);
|
|
117
|
+
});
|
|
118
|
+
/**
|
|
119
|
+
* Listening to value changes in order to trigger forms api on change
|
|
120
|
+
* ShouldEmitValueChange simply ensures we only propagate value change when a user makes a selection
|
|
121
|
+
* we don't propagate changes made from outside the component (ex. patch value or initial value from form control)
|
|
122
|
+
*/
|
|
123
|
+
toObservable(this._selectService.value).subscribe((value) => {
|
|
124
|
+
if (this._shouldEmitValueChange()) {
|
|
125
|
+
this._onChange((value ?? null));
|
|
126
|
+
}
|
|
127
|
+
this._shouldEmitValueChange.set(true);
|
|
128
|
+
});
|
|
129
|
+
this.errorStateTracker = new ErrorStateTracker(this._defaultErrorStateMatcher, this.ngControl, this._parentFormGroup, this._parentForm);
|
|
130
|
+
}
|
|
131
|
+
ngAfterContentInit() {
|
|
132
|
+
// Check if Label Directive Provided and pass to service
|
|
133
|
+
const label = this.selectLabel();
|
|
134
|
+
if (label) {
|
|
135
|
+
this.labelProvided.set(true);
|
|
136
|
+
this._selectService.state.update((state) => ({
|
|
137
|
+
...state,
|
|
138
|
+
labelId: label.id(),
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
else if (this.placeholder()) {
|
|
142
|
+
this._selectService.state.update((state) => ({
|
|
143
|
+
...state,
|
|
144
|
+
labelId: `${state.id}--label`,
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
ngDoCheck() {
|
|
149
|
+
this.errorStateTracker.updateErrorState();
|
|
150
|
+
}
|
|
151
|
+
toggle() {
|
|
152
|
+
if (this.isExpanded()) {
|
|
153
|
+
this.close();
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
this.open();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
open() {
|
|
160
|
+
if (!this._canOpen())
|
|
161
|
+
return;
|
|
162
|
+
this._selectService.state.update((state) => ({
|
|
163
|
+
...state,
|
|
164
|
+
isExpanded: true,
|
|
165
|
+
}));
|
|
166
|
+
this.openedChange.emit(true);
|
|
167
|
+
this._moveFocusToCDKList();
|
|
168
|
+
}
|
|
169
|
+
close() {
|
|
170
|
+
if (!this.isExpanded())
|
|
171
|
+
return;
|
|
172
|
+
if (this._selectService.selectTrigger) {
|
|
173
|
+
this._selectService.selectTrigger.focus();
|
|
174
|
+
}
|
|
175
|
+
this.openedChange.emit(false);
|
|
176
|
+
this._selectService.state.update((state) => ({
|
|
177
|
+
...state,
|
|
178
|
+
isExpanded: false,
|
|
179
|
+
}));
|
|
180
|
+
this._onTouched();
|
|
181
|
+
}
|
|
182
|
+
_canOpen() {
|
|
183
|
+
return !this.isExpanded() && !this.disabled() && this.options()?.length > 0;
|
|
184
|
+
}
|
|
185
|
+
_moveFocusToCDKList() {
|
|
186
|
+
setTimeout(() => {
|
|
187
|
+
this.selectContent()?.focusList();
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
writeValue(value) {
|
|
191
|
+
this.writeValue$.next(value);
|
|
192
|
+
}
|
|
193
|
+
registerOnChange(fn) {
|
|
194
|
+
this._onChange = fn;
|
|
195
|
+
}
|
|
196
|
+
registerOnTouched(fn) {
|
|
197
|
+
this._onTouched = fn;
|
|
198
|
+
}
|
|
199
|
+
setDisabledState(isDisabled) {
|
|
200
|
+
this._disabledFromSetDisabledState.set(isDisabled);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Once writeValue is called and options are available we can handle setting the initial options
|
|
204
|
+
* @private
|
|
205
|
+
*/
|
|
206
|
+
handleInitialOptionSelect() {
|
|
207
|
+
// Write value cannot be handled until options are available, so we wait until both are available with a combineLatest
|
|
208
|
+
combineLatest([this.writeValue$, this.options$])
|
|
209
|
+
.pipe(map((values, index) => [...values, index]), takeUntilDestroyed())
|
|
210
|
+
.subscribe(([value, _, index]) => {
|
|
211
|
+
this._shouldEmitValueChange.set(false);
|
|
212
|
+
this._selectService.setInitialSelectedOptions(value);
|
|
213
|
+
// the first time this observable emits a value we are simply setting the initial state
|
|
214
|
+
// this change should not count as changing the state of the select, so we need to mark as pristine
|
|
215
|
+
if (index === 0) {
|
|
216
|
+
this.ngControl?.control?.markAsPristine();
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* When options change, our current selected options may become invalid
|
|
222
|
+
* Here we will automatically update our current selected options so that they are always inline with the possibleOptions
|
|
223
|
+
* @private
|
|
224
|
+
*/
|
|
225
|
+
handleOptionChanges() {
|
|
226
|
+
this.optionsAndIndex$.pipe(takeUntilDestroyed()).subscribe(([options, index]) => {
|
|
227
|
+
if (index > 0) {
|
|
228
|
+
this.handleInvalidOptions(options);
|
|
229
|
+
}
|
|
230
|
+
this.updatePossibleOptions(options);
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Check that our "selectedOptions" are still valid when "possibleOptions" is about to be updated
|
|
235
|
+
*/
|
|
236
|
+
handleInvalidOptions(options) {
|
|
237
|
+
const selectedOptions = this._selectService.selectedOptions();
|
|
238
|
+
const availableOptionSet = new Set(options);
|
|
239
|
+
if (this._selectService.multiple()) {
|
|
240
|
+
const filteredOptions = selectedOptions.filter((o) => availableOptionSet.has(o));
|
|
241
|
+
// only update if there was an actual change
|
|
242
|
+
if (selectedOptions.length !== filteredOptions.length) {
|
|
243
|
+
// update should result in a value change since we are deselecting a value
|
|
244
|
+
this._shouldEmitValueChange.set(true);
|
|
245
|
+
const value = filteredOptions.map((o) => o?.value ?? '');
|
|
246
|
+
this._selectService.state.update((state) => ({
|
|
247
|
+
...state,
|
|
248
|
+
selectedOptions: filteredOptions,
|
|
249
|
+
value: value,
|
|
250
|
+
}));
|
|
251
|
+
this._onChange((value ?? null));
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
const selectedOption = selectedOptions[0] ?? null;
|
|
256
|
+
if (selectedOption !== null && !availableOptionSet.has(selectedOption)) {
|
|
257
|
+
this._shouldEmitValueChange.set(true);
|
|
258
|
+
this._selectService.state.update((state) => ({
|
|
259
|
+
...state,
|
|
260
|
+
selectedOptions: [],
|
|
261
|
+
value: '',
|
|
262
|
+
}));
|
|
263
|
+
this._onChange('');
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Sync the updated options with "possibleOptions" in the select service
|
|
269
|
+
*/
|
|
270
|
+
updatePossibleOptions(options) {
|
|
271
|
+
this._selectService.state.update((state) => ({
|
|
272
|
+
...state,
|
|
273
|
+
possibleOptions: options,
|
|
274
|
+
}));
|
|
275
|
+
}
|
|
276
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
277
|
+
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.5", type: BrnSelectComponent, isStandalone: true, selector: "brn-select, hlm-select", inputs: { multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, closeDelay: { classPropertyName: "closeDelay", publicName: "closeDelay", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openedChange: "openedChange" }, providers: [
|
|
278
|
+
BrnSelectService,
|
|
279
|
+
CdkListbox,
|
|
280
|
+
provideExposedSideProviderExisting((() => BrnSelectComponent)),
|
|
281
|
+
provideExposesStateProviderExisting((() => BrnSelectComponent)),
|
|
282
|
+
{
|
|
283
|
+
provide: BrnFormFieldControl,
|
|
284
|
+
useExisting: BrnSelectComponent,
|
|
285
|
+
},
|
|
286
|
+
], queries: [{ propertyName: "selectLabel", first: true, predicate: BrnLabelDirective, isSignal: true }, { propertyName: "selectContent", first: true, predicate: BrnSelectContentComponent, descendants: true, isSignal: true }, { propertyName: "options", predicate: CdkOption, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
287
|
+
@if (!labelProvided() && placeholder()) {
|
|
288
|
+
<label class="hidden" [attr.id]="backupLabelId()">{{ placeholder() }}</label>
|
|
289
|
+
} @else {
|
|
290
|
+
<ng-content select="label[hlmLabel],label[brnLabel]" />
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
<div cdk-overlay-origin (click)="toggle()" #trigger="cdkOverlayOrigin">
|
|
294
|
+
<ng-content select="hlm-select-trigger,[brnSelectTrigger]" />
|
|
295
|
+
</div>
|
|
296
|
+
<ng-template
|
|
297
|
+
cdk-connected-overlay
|
|
298
|
+
cdkConnectedOverlayLockPosition
|
|
299
|
+
cdkConnectedOverlayHasBackdrop
|
|
300
|
+
cdkConnectedOverlayBackdropClass="cdk-overlay-transparent-backdrop"
|
|
301
|
+
[cdkConnectedOverlayOrigin]="trigger"
|
|
302
|
+
[cdkConnectedOverlayOpen]="_delayedExpanded()"
|
|
303
|
+
[cdkConnectedOverlayPositions]="_positions"
|
|
304
|
+
[cdkConnectedOverlayWidth]="triggerWidth() > 0 ? triggerWidth() : 'auto'"
|
|
305
|
+
(backdropClick)="close()"
|
|
306
|
+
(detach)="close()"
|
|
307
|
+
(positionChange)="_positionChanges$.next($event)"
|
|
308
|
+
>
|
|
309
|
+
<ng-content />
|
|
310
|
+
</ng-template>
|
|
311
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: CdkListboxModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
312
|
+
}
|
|
313
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnSelectComponent, decorators: [{
|
|
314
|
+
type: Component,
|
|
315
|
+
args: [{
|
|
316
|
+
selector: 'brn-select, hlm-select',
|
|
317
|
+
standalone: true,
|
|
318
|
+
imports: [OverlayModule, CdkListboxModule],
|
|
319
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
320
|
+
providers: [
|
|
321
|
+
BrnSelectService,
|
|
322
|
+
CdkListbox,
|
|
323
|
+
provideExposedSideProviderExisting((() => BrnSelectComponent)),
|
|
324
|
+
provideExposesStateProviderExisting((() => BrnSelectComponent)),
|
|
325
|
+
{
|
|
326
|
+
provide: BrnFormFieldControl,
|
|
327
|
+
useExisting: BrnSelectComponent,
|
|
328
|
+
},
|
|
329
|
+
],
|
|
330
|
+
template: `
|
|
331
|
+
@if (!labelProvided() && placeholder()) {
|
|
332
|
+
<label class="hidden" [attr.id]="backupLabelId()">{{ placeholder() }}</label>
|
|
333
|
+
} @else {
|
|
334
|
+
<ng-content select="label[hlmLabel],label[brnLabel]" />
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
<div cdk-overlay-origin (click)="toggle()" #trigger="cdkOverlayOrigin">
|
|
338
|
+
<ng-content select="hlm-select-trigger,[brnSelectTrigger]" />
|
|
339
|
+
</div>
|
|
340
|
+
<ng-template
|
|
341
|
+
cdk-connected-overlay
|
|
342
|
+
cdkConnectedOverlayLockPosition
|
|
343
|
+
cdkConnectedOverlayHasBackdrop
|
|
344
|
+
cdkConnectedOverlayBackdropClass="cdk-overlay-transparent-backdrop"
|
|
345
|
+
[cdkConnectedOverlayOrigin]="trigger"
|
|
346
|
+
[cdkConnectedOverlayOpen]="_delayedExpanded()"
|
|
347
|
+
[cdkConnectedOverlayPositions]="_positions"
|
|
348
|
+
[cdkConnectedOverlayWidth]="triggerWidth() > 0 ? triggerWidth() : 'auto'"
|
|
349
|
+
(backdropClick)="close()"
|
|
350
|
+
(detach)="close()"
|
|
351
|
+
(positionChange)="_positionChanges$.next($event)"
|
|
352
|
+
>
|
|
353
|
+
<ng-content />
|
|
354
|
+
</ng-template>
|
|
355
|
+
`,
|
|
356
|
+
}]
|
|
357
|
+
}], ctorParameters: () => [] });
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3NlbGVjdC9zcmMvbGliL2Jybi1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0UsT0FBTyxFQUNOLG1CQUFtQixFQUduQixhQUFhLEdBQ2IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBRU4sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFHVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGVBQWUsRUFDZixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUE2QixrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFZLGlCQUFpQixFQUFFLGlCQUFpQixFQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUdOLGtDQUFrQyxFQUNsQyxtQ0FBbUMsR0FDbkMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0Us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OzRCQUNDLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcsb0JBQW9CO3lCQUMvQjtxQkFDRDtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5QlQ7aUJBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtMaXN0Ym94LCBDZGtMaXN0Ym94TW9kdWxlLCBDZGtPcHRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvbGlzdGJveCc7XG5pbXBvcnQge1xuXHRDZGtDb25uZWN0ZWRPdmVybGF5LFxuXHR0eXBlIENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSxcblx0dHlwZSBDb25uZWN0ZWRQb3NpdGlvbixcblx0T3ZlcmxheU1vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcblx0QWZ0ZXJDb250ZW50SW5pdCxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0dHlwZSBEb0NoZWNrLFxuXHR0eXBlIFNpZ25hbCxcblx0Y29tcHV0ZWQsXG5cdGNvbnRlbnRDaGlsZCxcblx0Y29udGVudENoaWxkcmVuLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRvdXRwdXQsXG5cdHNpZ25hbCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IHR5cGUgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTmdDb250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCcm5Gb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQHNwYXJ0YW4tbmcvYnJhaW4vZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBDaGFuZ2VGbiwgRXJyb3JTdGF0ZU1hdGNoZXIsIEVycm9yU3RhdGVUcmFja2VyLCBUb3VjaEZuIH0gZnJvbSAnQHNwYXJ0YW4tbmcvYnJhaW4vZm9ybXMnO1xuaW1wb3J0IHsgQnJuTGFiZWxEaXJlY3RpdmUgfSBmcm9tICdAc3BhcnRhbi1uZy9icmFpbi9sYWJlbCc7XG5pbXBvcnQge1xuXHR0eXBlIEV4cG9zZXNTaWRlLFxuXHR0eXBlIEV4cG9zZXNTdGF0ZSxcblx0cHJvdmlkZUV4cG9zZWRTaWRlUHJvdmlkZXJFeGlzdGluZyxcblx0cHJvdmlkZUV4cG9zZXNTdGF0ZVByb3ZpZGVyRXhpc3RpbmcsXG59IGZyb20gJ0BzcGFydGFuLW5nL3VpLWNvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVsYXksIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQnJuU2VsZWN0Q29udGVudENvbXBvbmVudCB9IGZyb20gJy4vYnJuLXNlbGVjdC1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCcm5TZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi9icm4tc2VsZWN0LnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBCcm5SZWFkRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJztcblxubGV0IG5leHRJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2Jybi1zZWxlY3QsIGhsbS1zZWxlY3QnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbT3ZlcmxheU1vZHVsZSwgQ2RrTGlzdGJveE1vZHVsZV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRwcm92aWRlcnM6IFtcblx0XHRCcm5TZWxlY3RTZXJ2aWNlLFxuXHRcdENka0xpc3Rib3gsXG5cdFx0cHJvdmlkZUV4cG9zZWRTaWRlUHJvdmlkZXJFeGlzdGluZygoKSA9PiBCcm5TZWxlY3RDb21wb25lbnQpLFxuXHRcdHByb3ZpZGVFeHBvc2VzU3RhdGVQcm92aWRlckV4aXN0aW5nKCgpID0+IEJyblNlbGVjdENvbXBvbmVudCksXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogQnJuRm9ybUZpZWxkQ29udHJvbCxcblx0XHRcdHVzZUV4aXN0aW5nOiBCcm5TZWxlY3RDb21wb25lbnQsXG5cdFx0fSxcblx0XSxcblx0dGVtcGxhdGU6IGBcblx0XHRAaWYgKCFsYWJlbFByb3ZpZGVkKCkgJiYgcGxhY2Vob2xkZXIoKSkge1xuXHRcdFx0PGxhYmVsIGNsYXNzPVwiaGlkZGVuXCIgW2F0dHIuaWRdPVwiYmFja3VwTGFiZWxJZCgpXCI+e3sgcGxhY2Vob2xkZXIoKSB9fTwvbGFiZWw+XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJsYWJlbFtobG1MYWJlbF0sbGFiZWxbYnJuTGFiZWxdXCIgLz5cblx0XHR9XG5cblx0XHQ8ZGl2IGNkay1vdmVybGF5LW9yaWdpbiAoY2xpY2spPVwidG9nZ2xlKClcIiAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIj5cblx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cImhsbS1zZWxlY3QtdHJpZ2dlcixbYnJuU2VsZWN0VHJpZ2dlcl1cIiAvPlxuXHRcdDwvZGl2PlxuXHRcdDxuZy10ZW1wbGF0ZVxuXHRcdFx0Y2RrLWNvbm5lY3RlZC1vdmVybGF5XG5cdFx0XHRjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uXG5cdFx0XHRjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3Bcblx0XHRcdGNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzPVwiY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BcIlxuXHRcdFx0W2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidHJpZ2dlclwiXG5cdFx0XHRbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwiX2RlbGF5ZWRFeHBhbmRlZCgpXCJcblx0XHRcdFtjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zXT1cIl9wb3NpdGlvbnNcIlxuXHRcdFx0W2Nka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aF09XCJ0cmlnZ2VyV2lkdGgoKSA+IDAgPyB0cmlnZ2VyV2lkdGgoKSA6ICdhdXRvJ1wiXG5cdFx0XHQoYmFja2Ryb3BDbGljayk9XCJjbG9zZSgpXCJcblx0XHRcdChkZXRhY2gpPVwiY2xvc2UoKVwiXG5cdFx0XHQocG9zaXRpb25DaGFuZ2UpPVwiX3Bvc2l0aW9uQ2hhbmdlcyQubmV4dCgkZXZlbnQpXCJcblx0XHQ+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdGAsXG59KVxuZXhwb3J0IGNsYXNzIEJyblNlbGVjdENvbXBvbmVudDxUID0gdW5rbm93bj5cblx0aW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCwgRG9DaGVjaywgRXhwb3Nlc1NpZGUsIEV4cG9zZXNTdGF0ZSwgQnJuRm9ybUZpZWxkQ29udHJvbFxue1xuXHRwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RTZXJ2aWNlID0gaW5qZWN0KEJyblNlbGVjdFNlcnZpY2UpO1xuXG5cdHB1YmxpYyByZWFkb25seSB0cmlnZ2VyV2lkdGggPSB0aGlzLl9zZWxlY3RTZXJ2aWNlLnRyaWdnZXJXaWR0aDtcblxuXHRwdWJsaWMgcmVhZG9ubHkgbXVsdGlwbGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHB1YmxpYyByZWFkb25seSBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oJycpO1xuXHRwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHB1YmxpYyByZWFkb25seSBkaXIgPSBpbnB1dDxCcm5SZWFkRGlyZWN0aW9uPignbHRyJyk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2Rpc2FibGVkRnJvbVNldERpc2FibGVkU3RhdGUgPSBzaWduYWwoZmFsc2UpO1xuXG5cdHByb3RlY3RlZCBzZWxlY3RMYWJlbCA9IGNvbnRlbnRDaGlsZChCcm5MYWJlbERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogZmFsc2UgfSk7XG5cdC8qKiBPdmVybGF5IHBhbmUgY29udGFpbmluZyB0aGUgb3B0aW9ucy4gKi9cblx0cHJvdGVjdGVkIHNlbGVjdENvbnRlbnQgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoQnJuU2VsZWN0Q29udGVudENvbXBvbmVudCk7XG5cblx0cHJvdGVjdGVkIG9wdGlvbnMgPSBjb250ZW50Q2hpbGRyZW4oQ2RrT3B0aW9uLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pO1xuXHRwcm90ZWN0ZWQgb3B0aW9ucyQgPSB0b09ic2VydmFibGUodGhpcy5vcHRpb25zKTtcblx0cHJvdGVjdGVkIG9wdGlvbnNBbmRJbmRleCQgPSB0aGlzLm9wdGlvbnMkLnBpcGUobWFwKChvcHRpb25zLCBpbmRleCkgPT4gW29wdGlvbnMsIGluZGV4XSBhcyBjb25zdCkpO1xuXG5cdC8qKiBPdmVybGF5IHBhbmUgY29udGFpbmluZyB0aGUgb3B0aW9ucy4gKi9cblx0cHJvdGVjdGVkIF9vdmVybGF5RGlyID0gdmlld0NoaWxkKENka0Nvbm5lY3RlZE92ZXJsYXkpO1xuXG5cdHB1YmxpYyByZWFkb25seSBvcGVuZWRDaGFuZ2UgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgY2xvc2VEZWxheSA9IGlucHV0PG51bWJlcj4oMTAwKTtcblx0cHVibGljIHJlYWRvbmx5IGlzRXhwYW5kZWQgPSB0aGlzLl9zZWxlY3RTZXJ2aWNlLmlzRXhwYW5kZWQ7XG5cdHByb3RlY3RlZCByZWFkb25seSBfZGVsYXllZEV4cGFuZGVkID0gdG9TaWduYWwoXG5cdFx0dG9PYnNlcnZhYmxlKHRoaXMuaXNFeHBhbmRlZCkucGlwZShcblx0XHRcdHN3aXRjaE1hcCgoZXhwYW5kZWQpID0+ICghZXhwYW5kZWQgPyBvZihleHBhbmRlZCkucGlwZShkZWxheSh0aGlzLmNsb3NlRGVsYXkoKSkpIDogb2YoZXhwYW5kZWQpKSksXG5cdFx0XHR0YWtlVW50aWxEZXN0cm95ZWQoKSxcblx0XHQpLFxuXHRcdHsgaW5pdGlhbFZhbHVlOiBmYWxzZSB9LFxuXHQpO1xuXHRwdWJsaWMgcmVhZG9ubHkgc3RhdGUgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5pc0V4cGFuZGVkKCkgPyAnb3BlbicgOiAnY2xvc2VkJykpO1xuXG5cdHByb3RlY3RlZCByZWFkb25seSBfcG9zaXRpb25DaGFuZ2VzJCA9IG5ldyBTdWJqZWN0PENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZT4oKTtcblx0cHVibGljIHJlYWRvbmx5IHNpZGU6IFNpZ25hbDwndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0Jz4gPSB0b1NpZ25hbChcblx0XHR0aGlzLl9wb3NpdGlvbkNoYW5nZXMkLnBpcGUoXG5cdFx0XHRtYXA8Q29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlLCAndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0Jz4oKGNoYW5nZSkgPT5cblx0XHRcdFx0Ly8gdG9kbzogYmV0dGVyIHRyYW5zbGF0aW9uIG9yIGFkanVzdGluZyBobG0gdG8gdGFrZSB0aGF0IGludG8gYWNjb3VudFxuXHRcdFx0XHRjaGFuZ2UuY29ubmVjdGlvblBhaXIub3JpZ2luWSA9PT0gJ2NlbnRlcidcblx0XHRcdFx0XHQ/IGNoYW5nZS5jb25uZWN0aW9uUGFpci5vcmlnaW5YID09PSAnc3RhcnQnXG5cdFx0XHRcdFx0XHQ/ICdsZWZ0J1xuXHRcdFx0XHRcdFx0OiAncmlnaHQnXG5cdFx0XHRcdFx0OiBjaGFuZ2UuY29ubmVjdGlvblBhaXIub3JpZ2luWSxcblx0XHRcdCksXG5cdFx0KSxcblx0XHR7IGluaXRpYWxWYWx1ZTogJ2JvdHRvbScgfSxcblx0KTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgYmFja3VwTGFiZWxJZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3NlbGVjdFNlcnZpY2UubGFiZWxJZCgpKTtcblx0cHVibGljIHJlYWRvbmx5IGxhYmVsUHJvdmlkZWQgPSBzaWduYWwoZmFsc2UpO1xuXG5cdHB1YmxpYyByZWFkb25seSBuZ0NvbnRyb2wgPSBpbmplY3QoTmdDb250cm9sLCB7IG9wdGlvbmFsOiB0cnVlLCBzZWxmOiB0cnVlIH0pO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cblx0cHJpdmF0ZSBfb25DaGFuZ2U6IENoYW5nZUZuPFQ+ID0gKCkgPT4ge307XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cblx0cHJpdmF0ZSBfb25Ub3VjaGVkOiBUb3VjaEZuID0gKCkgPT4ge307XG5cblx0cHJpdmF0ZSByZWFkb25seSBfc2hvdWxkRW1pdFZhbHVlQ2hhbmdlID0gc2lnbmFsKGZhbHNlKTtcblxuXHQvKlxuXHQgKiBUaGlzIHBvc2l0aW9uIGNvbmZpZyBlbnN1cmVzIHRoYXQgdGhlIHRvcCBcInN0YXJ0XCIgY29ybmVyIG9mIHRoZSBvdmVybGF5XG5cdCAqIGlzIGFsaWduZWQgd2l0aCB3aXRoIHRoZSB0b3AgXCJzdGFydFwiIG9mIHRoZSBvcmlnaW4gYnkgZGVmYXVsdCAob3ZlcmxhcHBpbmdcblx0ICogdGhlIHRyaWdnZXIgY29tcGxldGVseSkuIElmIHRoZSBwYW5lbCBjYW5ub3QgZml0IGJlbG93IHRoZSB0cmlnZ2VyLCBpdFxuXHQgKiB3aWxsIGZhbGwgYmFjayB0byBhIHBvc2l0aW9uIGFib3ZlIHRoZSB0cmlnZ2VyLlxuXHQgKi9cblx0cHJvdGVjdGVkIF9wb3NpdGlvbnM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbXG5cdFx0e1xuXHRcdFx0b3JpZ2luWDogJ3N0YXJ0Jyxcblx0XHRcdG9yaWdpblk6ICdib3R0b20nLFxuXHRcdFx0b3ZlcmxheVg6ICdzdGFydCcsXG5cdFx0XHRvdmVybGF5WTogJ3RvcCcsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRvcmlnaW5YOiAnZW5kJyxcblx0XHRcdG9yaWdpblk6ICdib3R0b20nLFxuXHRcdFx0b3ZlcmxheVg6ICdlbmQnLFxuXHRcdFx0b3ZlcmxheVk6ICd0b3AnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0b3JpZ2luWDogJ3N0YXJ0Jyxcblx0XHRcdG9yaWdpblk6ICd0b3AnLFxuXHRcdFx0b3ZlcmxheVg6ICdzdGFydCcsXG5cdFx0XHRvdmVybGF5WTogJ2JvdHRvbScsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRvcmlnaW5YOiAnZW5kJyxcblx0XHRcdG9yaWdpblk6ICd0b3AnLFxuXHRcdFx0b3ZlcmxheVg6ICdlbmQnLFxuXHRcdFx0b3ZlcmxheVk6ICdib3R0b20nLFxuXHRcdH0sXG5cdF07XG5cblx0cHVibGljIGVycm9yU3RhdGVUcmFja2VyOiBFcnJvclN0YXRlVHJhY2tlcjtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIgPSBpbmplY3QoRXJyb3JTdGF0ZU1hdGNoZXIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnRGb3JtID0gaW5qZWN0KE5nRm9ybSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblx0cHJpdmF0ZSByZWFkb25seSBfcGFyZW50Rm9ybUdyb3VwID0gaW5qZWN0KEZvcm1Hcm91cERpcmVjdGl2ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuXHRwdWJsaWMgZXJyb3JTdGF0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZXJyb3JTdGF0ZVRyYWNrZXIuZXJyb3JTdGF0ZSgpKTtcblxuXHRwdWJsaWMgd3JpdGVWYWx1ZSQgPSBuZXcgU3ViamVjdDxUPigpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdC4uLnN0YXRlLFxuXHRcdFx0bXVsdGlwbGU6IHRoaXMubXVsdGlwbGUsXG5cdFx0XHRwbGFjZWhvbGRlcjogdGhpcy5wbGFjZWhvbGRlcixcblx0XHRcdGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuXHRcdFx0ZGlzYWJsZWRCeVNldERpc2FibGVkOiB0aGlzLl9kaXNhYmxlZEZyb21TZXREaXNhYmxlZFN0YXRlLFxuXHRcdFx0ZGlyOiB0aGlzLmRpcixcblx0XHR9KSk7XG5cdFx0dGhpcy5oYW5kbGVPcHRpb25DaGFuZ2VzKCk7XG5cdFx0dGhpcy5oYW5kbGVJbml0aWFsT3B0aW9uU2VsZWN0KCk7XG5cblx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLnN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHQuLi5zdGF0ZSxcblx0XHRcdGlkOiBgYnJuLXNlbGVjdC0ke25leHRJZCsrfWAsXG5cdFx0fSkpO1xuXHRcdGlmICh0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gV2F0Y2ggZm9yIExpc3Rib3ggU2VsZWN0aW9uIENoYW5nZXMgdG8gdHJpZ2dlciBDb2xsYXBzZSBhbmQgVmFsdWUgQ2hhbmdlXG5cdFx0dGhpcy5fc2VsZWN0U2VydmljZS5saXN0Qm94VmFsdWVDaGFuZ2VFdmVudCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdGlmICghdGhpcy5tdWx0aXBsZSgpKSB7XG5cdFx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gd2Ugc2V0IHNob3VsZEVtaXRWYWx1ZUNoYW5nZSB0byB0cnVlIGJlY2F1c2Ugd2Ugd2FudCB0byBwcm9wYWdhdGUgdGhlIHZhbHVlIGNoYW5nZVxuXHRcdFx0Ly8gYXMgYSByZXN1bHQgb2YgdXNlciBpbnRlcmFjdGlvblxuXHRcdFx0dGhpcy5fc2hvdWxkRW1pdFZhbHVlQ2hhbmdlLnNldCh0cnVlKTtcblx0XHR9KTtcblxuXHRcdC8qKlxuXHRcdCAqIExpc3RlbmluZyB0byB2YWx1ZSBjaGFuZ2VzIGluIG9yZGVyIHRvIHRyaWdnZXIgZm9ybXMgYXBpIG9uIGNoYW5nZVxuXHRcdCAqIFNob3VsZEVtaXRWYWx1ZUNoYW5nZSBzaW1wbHkgZW5zdXJlcyB3ZSBvbmx5IHByb3BhZ2F0ZSB2YWx1ZSBjaGFuZ2Ugd2hlbiBhIHVzZXIgbWFrZXMgYSBzZWxlY3Rpb25cblx0XHQgKiB3ZSBkb24ndCBwcm9wYWdhdGUgY2hhbmdlcyBtYWRlIGZyb20gb3V0c2lkZSB0aGUgY29tcG9uZW50IChleC4gcGF0Y2ggdmFsdWUgb3IgaW5pdGlhbCB2YWx1ZSBmcm9tIGZvcm0gY29udHJvbClcblx0XHQgKi9cblx0XHR0b09ic2VydmFibGUodGhpcy5fc2VsZWN0U2VydmljZS52YWx1ZSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX3Nob3VsZEVtaXRWYWx1ZUNoYW5nZSgpKSB7XG5cdFx0XHRcdHRoaXMuX29uQ2hhbmdlKCh2YWx1ZSA/PyBudWxsKSBhcyBUKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3Nob3VsZEVtaXRWYWx1ZUNoYW5nZS5zZXQodHJ1ZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmVycm9yU3RhdGVUcmFja2VyID0gbmV3IEVycm9yU3RhdGVUcmFja2VyKFxuXHRcdFx0dGhpcy5fZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyLFxuXHRcdFx0dGhpcy5uZ0NvbnRyb2wsXG5cdFx0XHR0aGlzLl9wYXJlbnRGb3JtR3JvdXAsXG5cdFx0XHR0aGlzLl9wYXJlbnRGb3JtLFxuXHRcdCk7XG5cdH1cblxuXHRwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuXHRcdC8vIENoZWNrIGlmIExhYmVsIERpcmVjdGl2ZSBQcm92aWRlZCBhbmQgcGFzcyB0byBzZXJ2aWNlXG5cdFx0Y29uc3QgbGFiZWwgPSB0aGlzLnNlbGVjdExhYmVsKCk7XG5cdFx0aWYgKGxhYmVsKSB7XG5cdFx0XHR0aGlzLmxhYmVsUHJvdmlkZWQuc2V0KHRydWUpO1xuXHRcdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0XHQuLi5zdGF0ZSxcblx0XHRcdFx0bGFiZWxJZDogbGFiZWwuaWQoKSxcblx0XHRcdH0pKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMucGxhY2Vob2xkZXIoKSkge1xuXHRcdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0XHQuLi5zdGF0ZSxcblx0XHRcdFx0bGFiZWxJZDogYCR7c3RhdGUuaWR9LS1sYWJlbGAsXG5cdFx0XHR9KSk7XG5cdFx0fVxuXHR9XG5cblx0bmdEb0NoZWNrKCkge1xuXHRcdHRoaXMuZXJyb3JTdGF0ZVRyYWNrZXIudXBkYXRlRXJyb3JTdGF0ZSgpO1xuXHR9XG5cblx0cHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5pc0V4cGFuZGVkKCkpIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIG9wZW4oKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLl9jYW5PcGVuKCkpIHJldHVybjtcblx0XHR0aGlzLl9zZWxlY3RTZXJ2aWNlLnN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG5cdFx0XHQuLi5zdGF0ZSxcblx0XHRcdGlzRXhwYW5kZWQ6IHRydWUsXG5cdFx0fSkpO1xuXHRcdHRoaXMub3BlbmVkQ2hhbmdlLmVtaXQodHJ1ZSk7XG5cdFx0dGhpcy5fbW92ZUZvY3VzVG9DREtMaXN0KCk7XG5cdH1cblxuXHRwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmlzRXhwYW5kZWQoKSkgcmV0dXJuO1xuXG5cdFx0aWYgKHRoaXMuX3NlbGVjdFNlcnZpY2Uuc2VsZWN0VHJpZ2dlcikge1xuXHRcdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zZWxlY3RUcmlnZ2VyLmZvY3VzKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5vcGVuZWRDaGFuZ2UuZW1pdChmYWxzZSk7XG5cdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRpc0V4cGFuZGVkOiBmYWxzZSxcblx0XHR9KSk7XG5cdFx0dGhpcy5fb25Ub3VjaGVkKCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgX2Nhbk9wZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICF0aGlzLmlzRXhwYW5kZWQoKSAmJiAhdGhpcy5kaXNhYmxlZCgpICYmIHRoaXMub3B0aW9ucygpPy5sZW5ndGggPiAwO1xuXHR9XG5cblx0cHJpdmF0ZSBfbW92ZUZvY3VzVG9DREtMaXN0KCk6IHZvaWQge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5zZWxlY3RDb250ZW50KCk/LmZvY3VzTGlzdCgpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIHdyaXRlVmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcblx0XHR0aGlzLndyaXRlVmFsdWUkLm5leHQodmFsdWUpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IENoYW5nZUZuPFQ+KTogdm9pZCB7XG5cdFx0dGhpcy5fb25DaGFuZ2UgPSBmbjtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogVG91Y2hGbik6IHZvaWQge1xuXHRcdHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuXHR9XG5cblx0cHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXMuX2Rpc2FibGVkRnJvbVNldERpc2FibGVkU3RhdGUuc2V0KGlzRGlzYWJsZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE9uY2Ugd3JpdGVWYWx1ZSBpcyBjYWxsZWQgYW5kIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3ZSBjYW4gaGFuZGxlIHNldHRpbmcgdGhlIGluaXRpYWwgb3B0aW9uc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVJbml0aWFsT3B0aW9uU2VsZWN0KCkge1xuXHRcdC8vIFdyaXRlIHZhbHVlIGNhbm5vdCBiZSBoYW5kbGVkIHVudGlsIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgc28gd2Ugd2FpdCB1bnRpbCBib3RoIGFyZSBhdmFpbGFibGUgd2l0aCBhIGNvbWJpbmVMYXRlc3Rcblx0XHRjb21iaW5lTGF0ZXN0KFt0aGlzLndyaXRlVmFsdWUkLCB0aGlzLm9wdGlvbnMkXSlcblx0XHRcdC5waXBlKFxuXHRcdFx0XHRtYXAoKHZhbHVlcywgaW5kZXgpID0+IFsuLi52YWx1ZXMsIGluZGV4XSksXG5cdFx0XHRcdHRha2VVbnRpbERlc3Ryb3llZCgpLFxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgoW3ZhbHVlLCBfLCBpbmRleF0pID0+IHtcblx0XHRcdFx0dGhpcy5fc2hvdWxkRW1pdFZhbHVlQ2hhbmdlLnNldChmYWxzZSk7XG5cdFx0XHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc2V0SW5pdGlhbFNlbGVjdGVkT3B0aW9ucyh2YWx1ZSk7XG5cdFx0XHRcdC8vIHRoZSBmaXJzdCB0aW1lIHRoaXMgb2JzZXJ2YWJsZSBlbWl0cyBhIHZhbHVlIHdlIGFyZSBzaW1wbHkgc2V0dGluZyB0aGUgaW5pdGlhbCBzdGF0ZVxuXHRcdFx0XHQvLyB0aGlzIGNoYW5nZSBzaG91bGQgbm90IGNvdW50IGFzIGNoYW5naW5nIHRoZSBzdGF0ZSBvZiB0aGUgc2VsZWN0LCBzbyB3ZSBuZWVkIHRvIG1hcmsgYXMgcHJpc3RpbmVcblx0XHRcdFx0aWYgKGluZGV4ID09PSAwKSB7XG5cdFx0XHRcdFx0dGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/Lm1hcmtBc1ByaXN0aW5lKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZW4gb3B0aW9ucyBjaGFuZ2UsIG91ciBjdXJyZW50IHNlbGVjdGVkIG9wdGlvbnMgbWF5IGJlY29tZSBpbnZhbGlkXG5cdCAqIEhlcmUgd2Ugd2lsbCBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBvdXIgY3VycmVudCBzZWxlY3RlZCBvcHRpb25zIHNvIHRoYXQgdGhleSBhcmUgYWx3YXlzIGlubGluZSB3aXRoIHRoZSBwb3NzaWJsZU9wdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgaGFuZGxlT3B0aW9uQ2hhbmdlcygpIHtcblx0XHR0aGlzLm9wdGlvbnNBbmRJbmRleCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChbb3B0aW9ucywgaW5kZXhdKSA9PiB7XG5cdFx0XHRpZiAoaW5kZXggPiAwKSB7XG5cdFx0XHRcdHRoaXMuaGFuZGxlSW52YWxpZE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnVwZGF0ZVBvc3NpYmxlT3B0aW9ucyhvcHRpb25zKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayB0aGF0IG91ciBcInNlbGVjdGVkT3B0aW9uc1wiIGFyZSBzdGlsbCB2YWxpZCB3aGVuIFwicG9zc2libGVPcHRpb25zXCIgaXMgYWJvdXQgdG8gYmUgdXBkYXRlZFxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVJbnZhbGlkT3B0aW9ucyhvcHRpb25zOiByZWFkb25seSBDZGtPcHRpb25bXSkge1xuXHRcdGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IHRoaXMuX3NlbGVjdFNlcnZpY2Uuc2VsZWN0ZWRPcHRpb25zKCk7XG5cdFx0Y29uc3QgYXZhaWxhYmxlT3B0aW9uU2V0ID0gbmV3IFNldDxDZGtPcHRpb24gfCBudWxsPihvcHRpb25zKTtcblx0XHRpZiAodGhpcy5fc2VsZWN0U2VydmljZS5tdWx0aXBsZSgpKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSBzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKChvKSA9PiBhdmFpbGFibGVPcHRpb25TZXQuaGFzKG8pKTtcblx0XHRcdC8vIG9ubHkgdXBkYXRlIGlmIHRoZXJlIHdhcyBhbiBhY3R1YWwgY2hhbmdlXG5cdFx0XHRpZiAoc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAhPT0gZmlsdGVyZWRPcHRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHQvLyB1cGRhdGUgc2hvdWxkIHJlc3VsdCBpbiBhIHZhbHVlIGNoYW5nZSBzaW5jZSB3ZSBhcmUgZGVzZWxlY3RpbmcgYSB2YWx1ZVxuXHRcdFx0XHR0aGlzLl9zaG91bGRFbWl0VmFsdWVDaGFuZ2Uuc2V0KHRydWUpO1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGZpbHRlcmVkT3B0aW9ucy5tYXAoKG8pID0+IChvPy52YWx1ZSBhcyBzdHJpbmcpID8/ICcnKTtcblx0XHRcdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0XHRcdC4uLnN0YXRlLFxuXHRcdFx0XHRcdHNlbGVjdGVkT3B0aW9uczogZmlsdGVyZWRPcHRpb25zLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHR0aGlzLl9vbkNoYW5nZSgodmFsdWUgPz8gbnVsbCkgYXMgVCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gc2VsZWN0ZWRPcHRpb25zWzBdID8/IG51bGw7XG5cdFx0XHRpZiAoc2VsZWN0ZWRPcHRpb24gIT09IG51bGwgJiYgIWF2YWlsYWJsZU9wdGlvblNldC5oYXMoc2VsZWN0ZWRPcHRpb24pKSB7XG5cdFx0XHRcdHRoaXMuX3Nob3VsZEVtaXRWYWx1ZUNoYW5nZS5zZXQodHJ1ZSk7XG5cdFx0XHRcdHRoaXMuX3NlbGVjdFNlcnZpY2Uuc3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcblx0XHRcdFx0XHQuLi5zdGF0ZSxcblx0XHRcdFx0XHRzZWxlY3RlZE9wdGlvbnM6IFtdLFxuXHRcdFx0XHRcdHZhbHVlOiAnJyxcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHR0aGlzLl9vbkNoYW5nZSgnJyBhcyBUKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU3luYyB0aGUgdXBkYXRlZCBvcHRpb25zIHdpdGggXCJwb3NzaWJsZU9wdGlvbnNcIiBpbiB0aGUgc2VsZWN0IHNlcnZpY2Vcblx0ICovXG5cdHByaXZhdGUgdXBkYXRlUG9zc2libGVPcHRpb25zKG9wdGlvbnM6IHJlYWRvbmx5IENka09wdGlvbltdKSB7XG5cdFx0dGhpcy5fc2VsZWN0U2VydmljZS5zdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuXHRcdFx0Li4uc3RhdGUsXG5cdFx0XHRwb3NzaWJsZU9wdGlvbnM6IG9wdGlvbnMgYXMgQ2RrT3B0aW9uW10sXG5cdFx0fSkpO1xuXHR9XG59XG4iXX0=
|