@spartan-ng/brain 0.0.1-alpha.563 → 0.0.1-alpha.565
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/index.d.ts +125 -10
- package/alert-dialog/index.d.ts +40 -13
- package/autocomplete/index.d.ts +113 -15
- package/avatar/index.d.ts +40 -8
- package/button/index.d.ts +15 -3
- package/calendar/index.d.ts +465 -29
- package/checkbox/index.d.ts +156 -3
- package/collapsible/index.d.ts +70 -8
- package/command/index.d.ts +147 -16
- package/core/index.d.ts +153 -11
- package/date-time/index.d.ts +321 -3
- package/date-time-luxon/index.d.ts +32 -1
- package/dialog/index.d.ts +225 -21
- package/fesm2022/spartan-ng-brain-accordion.mjs +12 -12
- package/fesm2022/spartan-ng-brain-accordion.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-alert-dialog.mjs +18 -18
- package/fesm2022/spartan-ng-brain-alert-dialog.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-autocomplete.mjs +18 -18
- package/fesm2022/spartan-ng-brain-autocomplete.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-avatar.mjs +12 -12
- package/fesm2022/spartan-ng-brain-avatar.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-button.mjs +3 -3
- package/fesm2022/spartan-ng-brain-button.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-calendar.mjs +42 -42
- package/fesm2022/spartan-ng-brain-calendar.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-checkbox.mjs +5 -5
- package/fesm2022/spartan-ng-brain-checkbox.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-collapsible.mjs +9 -9
- package/fesm2022/spartan-ng-brain-collapsible.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-command.mjs +29 -34
- package/fesm2022/spartan-ng-brain-command.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-core.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-date-time-luxon.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-date-time.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-dialog.mjs +24 -24
- package/fesm2022/spartan-ng-brain-dialog.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-form-field.mjs +3 -3
- package/fesm2022/spartan-ng-brain-form-field.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-forms.mjs +6 -6
- package/fesm2022/spartan-ng-brain-forms.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-hover-card.mjs +12 -12
- package/fesm2022/spartan-ng-brain-hover-card.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-input-otp.mjs +6 -6
- package/fesm2022/spartan-ng-brain-input-otp.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-label.mjs +3 -3
- package/fesm2022/spartan-ng-brain-label.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-menu.mjs +24 -24
- package/fesm2022/spartan-ng-brain-menu.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-navigation-menu.mjs +21 -21
- package/fesm2022/spartan-ng-brain-navigation-menu.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-popover.mjs +12 -12
- package/fesm2022/spartan-ng-brain-popover.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-progress.mjs +6 -6
- package/fesm2022/spartan-ng-brain-progress.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-radio-group.mjs +6 -6
- package/fesm2022/spartan-ng-brain-radio-group.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-resizable.mjs +10 -11
- package/fesm2022/spartan-ng-brain-resizable.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-select.mjs +33 -33
- package/fesm2022/spartan-ng-brain-select.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-separator.mjs +3 -3
- package/fesm2022/spartan-ng-brain-separator.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-sheet.mjs +21 -21
- package/fesm2022/spartan-ng-brain-sheet.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-slider.mjs +17 -17
- package/fesm2022/spartan-ng-brain-slider.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-switch.mjs +8 -8
- package/fesm2022/spartan-ng-brain-switch.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-tabs.mjs +15 -15
- package/fesm2022/spartan-ng-brain-tabs.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-toggle-group.mjs +6 -6
- package/fesm2022/spartan-ng-brain-toggle-group.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-toggle.mjs +3 -3
- package/fesm2022/spartan-ng-brain-toggle.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-tooltip.mjs +14 -14
- package/fesm2022/spartan-ng-brain-tooltip.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain.mjs.map +1 -1
- package/form-field/index.d.ts +14 -1
- package/forms/index.d.ts +35 -3
- package/hover-card/index.d.ts +86 -5
- package/index.d.ts +2 -2
- package/input-otp/index.d.ts +82 -5
- package/label/index.d.ts +20 -3
- package/menu/index.d.ts +79 -17
- package/navigation-menu/index.d.ts +185 -13
- package/package.json +9 -9
- package/popover/index.d.ts +39 -9
- package/progress/index.d.ts +39 -6
- package/radio-group/index.d.ts +124 -6
- package/resizable/index.d.ts +103 -3
- package/select/index.d.ts +217 -21
- package/separator/index.d.ts +27 -4
- package/sheet/index.d.ts +51 -15
- package/slider/index.d.ts +100 -12
- package/switch/index.d.ts +141 -5
- package/tabs/index.d.ts +276 -10
- package/toggle/index.d.ts +30 -3
- package/toggle-group/index.d.ts +108 -6
- package/tooltip/index.d.ts +261 -10
- package/accordion/lib/brn-accordion-content.d.ts +0 -20
- package/accordion/lib/brn-accordion-item.d.ts +0 -28
- package/accordion/lib/brn-accordion-token.d.ts +0 -19
- package/accordion/lib/brn-accordion-trigger.d.ts +0 -16
- package/accordion/lib/brn-accordion.d.ts +0 -39
- package/alert-dialog/lib/brn-alert-dialog-content.d.ts +0 -6
- package/alert-dialog/lib/brn-alert-dialog-description.d.ts +0 -6
- package/alert-dialog/lib/brn-alert-dialog-overlay.d.ts +0 -6
- package/alert-dialog/lib/brn-alert-dialog-title.d.ts +0 -6
- package/alert-dialog/lib/brn-alert-dialog-trigger.d.ts +0 -10
- package/alert-dialog/lib/brn-alert-dialog.d.ts +0 -7
- package/autocomplete/lib/brn-autocomplete-empty.d.ts +0 -11
- package/autocomplete/lib/brn-autocomplete-group.d.ts +0 -8
- package/autocomplete/lib/brn-autocomplete-item.d.ts +0 -32
- package/autocomplete/lib/brn-autocomplete-item.token.d.ts +0 -4
- package/autocomplete/lib/brn-autocomplete-list.d.ts +0 -8
- package/autocomplete/lib/brn-autocomplete-search-input.d.ts +0 -13
- package/autocomplete/lib/brn-autocomplete.d.ts +0 -30
- package/autocomplete/lib/brn-autocomplete.token.d.ts +0 -5
- package/avatar/lib/brn-avatar.d.ts +0 -7
- package/avatar/lib/fallback/brn-avatar-fallback.d.ts +0 -9
- package/avatar/lib/fallback/index.d.ts +0 -1
- package/avatar/lib/image/brn-avatar-image.d.ts +0 -9
- package/avatar/lib/image/index.d.ts +0 -1
- package/avatar/lib/util/hex-color-for.d.ts +0 -1
- package/avatar/lib/util/index.d.ts +0 -3
- package/avatar/lib/util/initials.pipe.d.ts +0 -7
- package/avatar/lib/util/is-bright.d.ts +0 -1
- package/button/lib/brn-button.d.ts +0 -10
- package/calendar/lib/brn-calendar-cell-button.d.ts +0 -62
- package/calendar/lib/brn-calendar-cell.d.ts +0 -5
- package/calendar/lib/brn-calendar-grid.d.ts +0 -7
- package/calendar/lib/brn-calendar-header.d.ts +0 -7
- package/calendar/lib/brn-calendar-month-select.d.ts +0 -17
- package/calendar/lib/brn-calendar-next-button.d.ts +0 -13
- package/calendar/lib/brn-calendar-previous-button.d.ts +0 -13
- package/calendar/lib/brn-calendar-week.d.ts +0 -25
- package/calendar/lib/brn-calendar-weekday.d.ts +0 -28
- package/calendar/lib/brn-calendar-year-select.d.ts +0 -16
- package/calendar/lib/brn-calendar.d.ts +0 -74
- package/calendar/lib/brn-calendar.token.d.ts +0 -22
- package/calendar/lib/i18n/calendar-i18n.d.ts +0 -32
- package/calendar/lib/mode/brn-calendar-multiple.d.ts +0 -77
- package/calendar/lib/mode/brn-calendar-range.d.ts +0 -79
- package/checkbox/lib/brn-checkbox.d.ts +0 -151
- package/collapsible/lib/brn-collapsible-content.d.ts +0 -15
- package/collapsible/lib/brn-collapsible-token.d.ts +0 -16
- package/collapsible/lib/brn-collapsible-trigger.d.ts +0 -9
- package/collapsible/lib/brn-collapsible.d.ts +0 -24
- package/command/lib/brn-command-empty.d.ts +0 -11
- package/command/lib/brn-command-group.d.ts +0 -12
- package/command/lib/brn-command-item.d.ts +0 -42
- package/command/lib/brn-command-item.token.d.ts +0 -4
- package/command/lib/brn-command-list.d.ts +0 -8
- package/command/lib/brn-command-search-input.d.ts +0 -24
- package/command/lib/brn-command-search-input.token.d.ts +0 -4
- package/command/lib/brn-command.d.ts +0 -29
- package/command/lib/brn-command.token.d.ts +0 -11
- package/core/helpers/computed-previous.d.ts +0 -36
- package/core/helpers/create-hover-observable.d.ts +0 -7
- package/core/helpers/create-injection-token.d.ts +0 -20
- package/core/helpers/custom-element-class-settable.d.ts +0 -12
- package/core/helpers/debounced-signal.d.ts +0 -9
- package/core/helpers/dev-mode.d.ts +0 -5
- package/core/helpers/exposes-side.d.ts +0 -13
- package/core/helpers/exposes-state.d.ts +0 -13
- package/core/helpers/measure-dimensions.d.ts +0 -5
- package/core/helpers/table-classes-settable.d.ts +0 -16
- package/core/helpers/wait-for-element-animations.d.ts +0 -5
- package/core/helpers/zone-free.d.ts +0 -10
- package/date-time/lib/date-adapter.d.ts +0 -186
- package/date-time/lib/native-date-adapter.d.ts +0 -103
- package/date-time/lib/utc-date-adapter.d.ts +0 -28
- package/date-time-luxon/lib/date-adapter.d.ts +0 -29
- package/dialog/lib/brn-dialog-close.d.ts +0 -8
- package/dialog/lib/brn-dialog-content.d.ts +0 -12
- package/dialog/lib/brn-dialog-description.d.ts +0 -8
- package/dialog/lib/brn-dialog-options.d.ts +0 -26
- package/dialog/lib/brn-dialog-overlay.d.ts +0 -9
- package/dialog/lib/brn-dialog-ref.d.ts +0 -24
- package/dialog/lib/brn-dialog-state.d.ts +0 -1
- package/dialog/lib/brn-dialog-title.d.ts +0 -8
- package/dialog/lib/brn-dialog-token.d.ts +0 -29
- package/dialog/lib/brn-dialog-trigger.d.ts +0 -18
- package/dialog/lib/brn-dialog-utils.d.ts +0 -1
- package/dialog/lib/brn-dialog.d.ts +0 -61
- package/dialog/lib/brn-dialog.service.d.ts +0 -23
- package/form-field/lib/brn-form-field-control.d.ts +0 -11
- package/forms/lib/control-value-accessor.d.ts +0 -2
- package/forms/lib/error-options.d.ts +0 -14
- package/forms/lib/error-state-tracker.d.ts +0 -15
- package/hover-card/lib/brn-hover-card-content.service.d.ts +0 -72
- package/hover-card/lib/brn-hover-card.d.ts +0 -9
- package/input-otp/lib/brn-input-otp-slot.d.ts +0 -15
- package/input-otp/lib/brn-input-otp.d.ts +0 -61
- package/input-otp/lib/brn-input-otp.token.d.ts +0 -5
- package/label/lib/brn-label.d.ts +0 -15
- package/menu/lib/brn-context-menu-trigger.d.ts +0 -14
- package/menu/lib/brn-menu-align.d.ts +0 -4
- package/menu/lib/brn-menu-bar.d.ts +0 -6
- package/menu/lib/brn-menu-group.d.ts +0 -6
- package/menu/lib/brn-menu-item-checkbox.d.ts +0 -11
- package/menu/lib/brn-menu-item-radio.d.ts +0 -11
- package/menu/lib/brn-menu-item.d.ts +0 -10
- package/menu/lib/brn-menu-trigger.d.ts +0 -11
- package/menu/lib/brn-menu.d.ts +0 -11
- package/navigation-menu/lib/brn-navigation-menu-content.d.ts +0 -22
- package/navigation-menu/lib/brn-navigation-menu-content.service.d.ts +0 -44
- package/navigation-menu/lib/brn-navigation-menu-item-focusable.token.d.ts +0 -4
- package/navigation-menu/lib/brn-navigation-menu-item.d.ts +0 -23
- package/navigation-menu/lib/brn-navigation-menu-item.token.d.ts +0 -5
- package/navigation-menu/lib/brn-navigation-menu-link.d.ts +0 -22
- package/navigation-menu/lib/brn-navigation-menu-list.d.ts +0 -7
- package/navigation-menu/lib/brn-navigation-menu-trigger.d.ts +0 -44
- package/navigation-menu/lib/brn-navigation-menu.d.ts +0 -61
- package/navigation-menu/lib/brn-navigation-menu.token.d.ts +0 -5
- package/navigation-menu/lib/brn-parent-nav-menu.token.d.ts +0 -8
- package/popover/lib/brn-popover-close.d.ts +0 -6
- package/popover/lib/brn-popover-content.d.ts +0 -6
- package/popover/lib/brn-popover-trigger.d.ts +0 -10
- package/popover/lib/brn-popover.d.ts +0 -15
- package/progress/lib/brn-progress-indicator.d.ts +0 -6
- package/progress/lib/brn-progress.d.ts +0 -24
- package/progress/lib/brn-progress.token.d.ts +0 -4
- package/radio-group/lib/brn-radio-group.d.ts +0 -59
- package/radio-group/lib/brn-radio-group.token.d.ts +0 -4
- package/radio-group/lib/brn-radio.d.ts +0 -58
- package/resizable/lib/brn-resizable-group.d.ts +0 -37
- package/resizable/lib/brn-resizable-handle.d.ts +0 -26
- package/resizable/lib/brn-resizable-panel.d.ts +0 -39
- package/select/lib/brn-select-content.d.ts +0 -48
- package/select/lib/brn-select-content.token.d.ts +0 -4
- package/select/lib/brn-select-group.d.ts +0 -6
- package/select/lib/brn-select-label.d.ts +0 -9
- package/select/lib/brn-select-option.d.ts +0 -25
- package/select/lib/brn-select-placeholder.d.ts +0 -8
- package/select/lib/brn-select-trigger.d.ts +0 -24
- package/select/lib/brn-select-value-template.d.ts +0 -11
- package/select/lib/brn-select-value.d.ts +0 -18
- package/select/lib/brn-select.d.ts +0 -69
- package/select/lib/brn-select.token.d.ts +0 -4
- package/separator/lib/brn-separator.d.ts +0 -14
- package/separator/lib/brn-separator.token.d.ts +0 -7
- package/sheet/lib/brn-sheet-close.d.ts +0 -6
- package/sheet/lib/brn-sheet-content.d.ts +0 -8
- package/sheet/lib/brn-sheet-description.d.ts +0 -6
- package/sheet/lib/brn-sheet-overlay.d.ts +0 -6
- package/sheet/lib/brn-sheet-title.d.ts +0 -6
- package/sheet/lib/brn-sheet-trigger.d.ts +0 -10
- package/sheet/lib/brn-sheet.d.ts +0 -10
- package/slider/lib/brn-slider-range.d.ts +0 -7
- package/slider/lib/brn-slider-thumb.d.ts +0 -24
- package/slider/lib/brn-slider-tick.d.ts +0 -12
- package/slider/lib/brn-slider-track.d.ts +0 -12
- package/slider/lib/brn-slider-track.token.d.ts +0 -5
- package/slider/lib/brn-slider.d.ts +0 -39
- package/slider/lib/brn-slider.token.d.ts +0 -4
- package/switch/lib/brn-switch-thumb.d.ts +0 -5
- package/switch/lib/brn-switch.d.ts +0 -131
- package/tabs/lib/brn-tabs-content.d.ts +0 -15
- package/tabs/lib/brn-tabs-list.d.ts +0 -17
- package/tabs/lib/brn-tabs-paginated-list.d.ts +0 -196
- package/tabs/lib/brn-tabs-trigger.d.ts +0 -21
- package/tabs/lib/brn-tabs.d.ts +0 -38
- package/toggle/lib/brn-toggle.d.ts +0 -25
- package/toggle-group/lib/brn-toggle-group.d.ts +0 -68
- package/toggle-group/lib/brn-toggle-group.token.d.ts +0 -4
- package/toggle-group/lib/brn-toggle-item.d.ts +0 -31
- package/tooltip/lib/brn-tooltip-content-template.d.ts +0 -8
- package/tooltip/lib/brn-tooltip-content.d.ts +0 -73
- package/tooltip/lib/brn-tooltip-trigger.d.ts +0 -141
- package/tooltip/lib/brn-tooltip.d.ts +0 -7
- package/tooltip/lib/brn-tooltip.token.d.ts +0 -28
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spartan-ng-brain-tabs.mjs","sources":["../../../../libs/brain/tabs/src/lib/brn-tabs.ts","../../../../libs/brain/tabs/src/lib/brn-tabs-content.ts","../../../../libs/brain/tabs/src/lib/brn-tabs-trigger.ts","../../../../libs/brain/tabs/src/lib/brn-tabs-list.ts","../../../../libs/brain/tabs/src/lib/brn-tabs-paginated-list.ts","../../../../libs/brain/tabs/src/index.ts","../../../../libs/brain/tabs/src/spartan-ng-brain-tabs.ts"],"sourcesContent":["import { Directive, input, model, output, signal } from '@angular/core';\nimport type { BrnTabsContent } from './brn-tabs-content';\nimport type { BrnTabsTrigger } from './brn-tabs-trigger';\n\nexport type BrnTabsOrientation = 'horizontal' | 'vertical';\nexport type BrnTabsDirection = 'ltr' | 'rtl';\nexport type BrnActivationMode = 'automatic' | 'manual';\nexport type TabEntry = { trigger: BrnTabsTrigger; content: BrnTabsContent };\n\n@Directive({\n\tselector: '[brnTabs]',\n\texportAs: 'brnTabs',\n\thost: {\n\t\t'[attr.data-orientation]': 'orientation()',\n\t\t'[attr.dir]': 'direction()',\n\t},\n})\nexport class BrnTabs {\n\tpublic readonly orientation = input<BrnTabsOrientation>('horizontal');\n\t/** internal **/\n\tpublic $orientation = this.orientation;\n\n\tpublic readonly direction = input<BrnTabsDirection>('ltr');\n\t/** internal **/\n\tpublic $direction = this.direction;\n\n\tpublic readonly activeTab = model<string | undefined>(undefined, { alias: 'brnTabs' });\n\t/** internal **/\n\tpublic $activeTab = this.activeTab.asReadonly();\n\n\tpublic readonly activationMode = input<BrnActivationMode>('automatic');\n\t/** internal **/\n\tpublic $activationMode = this.activationMode;\n\n\tpublic readonly tabActivated = output<string>();\n\n\tprivate readonly _tabs = signal<{ [key: string]: TabEntry }>({});\n\tpublic readonly $tabs = this._tabs.asReadonly();\n\n\tpublic registerTrigger(key: string, trigger: BrnTabsTrigger) {\n\t\tthis.updateEntry(key, { trigger });\n\t}\n\n\tpublic registerContent(key: string, content: BrnTabsContent) {\n\t\tthis.updateEntry(key, { content });\n\t}\n\n\tpublic unregisterTrigger(key: string) {\n\t\tthis.updateEntry(key, { trigger: undefined });\n\t\tif (this.activeTab() === key) {\n\t\t\tthis.activeTab.set(undefined);\n\t\t}\n\t}\n\n\tpublic unregisterContent(key: string): void {\n\t\tthis.updateEntry(key, { content: undefined });\n\t}\n\n\tprivate updateEntry(key: string, patch: Partial<TabEntry>) {\n\t\tthis._tabs.update((tabs) => {\n\t\t\tconst existing = tabs[key] ?? {};\n\t\t\tconst merged = { ...existing, ...patch };\n\t\t\tconst entryEmpty = !merged.trigger && !merged.content;\n\t\t\tif (entryEmpty) {\n\t\t\t\tconst { [key]: removed, ...rest } = tabs;\n\t\t\t\treturn rest;\n\t\t\t}\n\t\t\treturn { ...tabs, [key]: merged };\n\t\t});\n\t}\n\n\temitTabActivated(key: string) {\n\t\tthis.tabActivated.emit(key);\n\t}\n\n\tsetActiveTab(key: string) {\n\t\tthis.activeTab.set(key);\n\t}\n}\n","import { computed, Directive, effect, ElementRef, inject, input, type OnDestroy, untracked } from '@angular/core';\nimport { BrnTabs } from './brn-tabs';\n\n@Directive({\n\tselector: '[brnTabsContent]',\n\texportAs: 'brnTabsContent',\n\thost: {\n\t\trole: 'tabpanel',\n\t\ttabindex: '0',\n\t\t'[id]': '_contentId()',\n\t\t'[attr.aria-labelledby]': '_labelId()',\n\t\t'[hidden]': '_isSelected() === false',\n\t},\n})\nexport class BrnTabsContent implements OnDestroy {\n\tprivate readonly _root = inject(BrnTabs);\n\tprivate readonly _elementRef = inject(ElementRef);\n\n\tpublic readonly contentFor = input.required<string>({ alias: 'brnTabsContent' });\n\tprotected readonly _isSelected = computed(() => this._root.$activeTab() === this.contentFor());\n\tprotected readonly _contentId = computed(() => `brn-tabs-content-${this.contentFor()}`);\n\tprotected readonly _labelId = computed(() => `brn-tabs-label-${this.contentFor()}`);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst contentFor = this.contentFor();\n\t\t\tuntracked(() => this._root.registerContent(contentFor, this));\n\t\t});\n\t}\n\n\tpublic focus() {\n\t\tthis._elementRef.nativeElement.focus();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._root.unregisterContent(this.contentFor());\n\t}\n}\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport {\n\tDirective,\n\tElementRef,\n\ttype OnDestroy,\n\tbooleanAttribute,\n\tcomputed,\n\teffect,\n\tinject,\n\tinput,\n\tuntracked,\n} from '@angular/core';\nimport { BrnTabs } from './brn-tabs';\n\n@Directive({\n\tselector: 'button[brnTabsTrigger]',\n\texportAs: 'brnTabsTrigger',\n\thost: {\n\t\t'[id]': '_labelId()',\n\t\ttype: 'button',\n\t\trole: 'tab',\n\t\t'[tabindex]': '_disabled() ? -1 : (selected() ? 0 : -1)',\n\t\t'[attr.aria-selected]': 'selected()',\n\t\t'[attr.aria-controls]': '_contentId()',\n\t\t'[attr.aria-disabled]': '_disabled()',\n\t\t'[attr.data-state]': \"selected() ? 'active' : 'inactive'\",\n\t\t'[attr.data-orientation]': '_orientation()',\n\t\t'[attr.data-disabled]': \"_disabled() ? '' : undefined\",\n\t\t'[attr.disabled]': \"_disabled() ? '' : undefined\",\n\t\t'(click)': 'activate()',\n\t},\n})\nexport class BrnTabsTrigger implements OnDestroy {\n\tpublic readonly elementRef = inject(ElementRef);\n\n\tprivate readonly _root = inject(BrnTabs);\n\n\tprotected readonly _orientation = this._root.$orientation;\n\n\tpublic readonly triggerFor = input.required<string>({ alias: 'brnTabsTrigger' });\n\tpublic readonly selected = computed(() => this._root.$activeTab() === this.triggerFor());\n\tprotected readonly _contentId = computed(() => `brn-tabs-content-${this.triggerFor()}`);\n\tprotected readonly _labelId = computed(() => `brn-tabs-label-${this.triggerFor()}`);\n\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\tpublic readonly _disabled = input<boolean, BooleanInput>(false, {\n\t\talias: 'disabled',\n\t\ttransform: booleanAttribute,\n\t});\n\n\tpublic get disabled(): boolean {\n\t\treturn this._disabled();\n\t}\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst triggerFor = this.triggerFor();\n\t\t\tuntracked(() => this._root.registerTrigger(triggerFor, this));\n\t\t});\n\t}\n\n\tpublic focus() {\n\t\tthis.elementRef.nativeElement.focus();\n\t\tif (this._root.$activationMode() === 'automatic') {\n\t\t\tthis.activate();\n\t\t}\n\t}\n\n\tpublic activate() {\n\t\tif (!this.triggerFor()) return;\n\t\tthis._root.setActiveTab(this.triggerFor());\n\t\tthis._root.emitTabActivated(this.triggerFor());\n\t}\n\n\tpublic get key(): string | undefined {\n\t\treturn this.triggerFor();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._root.unregisterTrigger(this.triggerFor());\n\t}\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { type AfterContentInit, Directive, ElementRef, contentChildren, inject } from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { BrnTabs } from './brn-tabs';\nimport { BrnTabsTrigger } from './brn-tabs-trigger';\n\n@Directive({\n\tselector: '[brnTabsList]',\n\texportAs: 'brnTabsList',\n\thost: {\n\t\trole: 'tablist',\n\t\t'[attr.aria-orientation]': '_orientation()',\n\t\t'[attr.data-orientation]': '_orientation()',\n\t},\n})\nexport class BrnTabsList implements AfterContentInit {\n\tprivate readonly _root = inject(BrnTabs);\n\n\tprotected readonly _orientation = this._root.$orientation;\n\tprivate readonly _direction = this._root.$direction;\n\tprivate readonly _activeTab = this._root.$activeTab;\n\tprivate readonly _tabs = this._root.$tabs;\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate readonly _keyDownListener = fromEvent(this._elementRef.nativeElement, 'keydown');\n\n\tprivate _keyManager?: FocusKeyManager<BrnTabsTrigger>;\n\n\tpublic readonly triggers = contentChildren(BrnTabsTrigger, { descendants: true });\n\n\tpublic ngAfterContentInit() {\n\t\tthis._keyManager = new FocusKeyManager<BrnTabsTrigger>(this.triggers())\n\t\t\t.withHorizontalOrientation(this._direction())\n\t\t\t.withHomeAndEnd()\n\t\t\t.withPageUpDown()\n\t\t\t.withWrap();\n\n\t\t// needed because by default the index is set to -1, which means first interaction is skipped\n\t\tthis._keyDownListener.pipe(take(1)).subscribe(() => {\n\t\t\tconst currentTabKey = this._activeTab();\n\t\t\tconst tabs = this._tabs();\n\t\t\tlet activeIndex = 0;\n\t\t\tif (currentTabKey) {\n\t\t\t\tconst currentTab = tabs[currentTabKey];\n\t\t\t\tif (currentTab) {\n\t\t\t\t\tactiveIndex = this.triggers().indexOf(currentTab.trigger);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._keyManager?.setActiveItem(activeIndex);\n\t\t});\n\n\t\tthis._keyDownListener.subscribe((event) => {\n\t\t\tif ('key' in event) {\n\t\t\t\tif (this._orientation() === 'horizontal') {\n\t\t\t\t\tif (event.key === 'ArrowUp' || event.key === 'ArrowDown') return;\n\t\t\t\t}\n\t\t\t\tif (this._orientation() === 'vertical') {\n\t\t\t\t\tif (event.key === 'ArrowLeft' || event.key === 'ArrowRight') return;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._keyManager?.onKeydown(event as KeyboardEvent);\n\t\t});\n\t}\n}\n","/**\n * We are building on shoulders of giants here and adapt the implementation provided by the incredible Angular\n * team: https://github.com/angular/components/blob/main/src/material/tabs/paginated-tab-header.ts\n * Check them out! Give them a try! Leave a star! Their work is incredible!\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { FocusKeyManager, type FocusableOption } from '@angular/cdk/a11y';\nimport { type Direction, Directionality } from '@angular/cdk/bidi';\nimport { ENTER, SPACE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { Platform, normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport {\n\tANIMATION_MODULE_TYPE,\n\ttype AfterContentChecked,\n\ttype AfterContentInit,\n\ttype AfterViewInit,\n\tChangeDetectorRef,\n\tDirective,\n\tElementRef,\n\tInjector,\n\tNgZone,\n\ttype OnDestroy,\n\ttype Signal,\n\tafterNextRender,\n\tbooleanAttribute,\n\tcomputed,\n\teffect,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n} from '@angular/core';\nimport { EMPTY, Observable, type Observer, Subject, fromEvent, merge, of as observableOf, timer } from 'rxjs';\nimport { debounceTime, filter, skip, startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport { BrnTabs } from './brn-tabs';\n\n/** Config used to bind passive event listeners */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({\n\tpassive: true,\n}) as EventListenerOptions;\n\n/**\n * The directions that scrolling can go in when the header's tabs exceed the header width. 'After'\n * will scroll the header towards the end of the tabs list and 'before' will scroll towards the\n * beginning of the list.\n */\nexport type ScrollDirection = 'after' | 'before';\n\n/**\n * Amount of milliseconds to wait before starting to scroll the header automatically.\n * Set a little conservatively in order to handle fake events dispatched on touch devices.\n */\nconst HEADER_SCROLL_DELAY = 650;\n\n/**\n * Interval in milliseconds at which to scroll the header\n * while the user is holding their pointer.\n */\nconst HEADER_SCROLL_INTERVAL = 100;\n\n/** Item inside a paginated tab header. */\nexport type BrnPaginatedTabHeaderItem = FocusableOption & { elementRef: ElementRef };\n\n/**\n * Base class for a tab header that supported pagination.\n * @docs-private\n */\n@Directive()\nexport abstract class BrnTabsPaginatedList implements AfterContentChecked, AfterContentInit, AfterViewInit, OnDestroy {\n\tpublic abstract items: Signal<ReadonlyArray<BrnPaginatedTabHeaderItem>>;\n\tpublic abstract itemsChanges: Observable<ReadonlyArray<BrnPaginatedTabHeaderItem>>;\n\tpublic abstract tabListContainer: Signal<ElementRef<HTMLElement>>;\n\tpublic abstract tabList: Signal<ElementRef<HTMLElement>>;\n\tpublic abstract tabListInner: Signal<ElementRef<HTMLElement>>;\n\tpublic abstract nextPaginator: Signal<ElementRef<HTMLElement>>;\n\tpublic abstract previousPaginator: Signal<ElementRef<HTMLElement>>;\n\n\t/** The distance in pixels that the tab labels should be translated to the left. */\n\tprivate _scrollDistance = 0;\n\n\t/** Whether the header should scroll to the selected index after the view has been checked. */\n\tprivate _selectedIndexChanged = false;\n\n\tprivate readonly _root = inject(BrnTabs);\n\tprivate readonly _activeTab = this._root.$activeTab;\n\tprivate readonly _tabs = this._root.$tabs;\n\n\t/** Emits when the component is destroyed. */\n\tprotected readonly _destroyed = new Subject<void>();\n\n\t/** Whether the controls for pagination should be displayed */\n\tpublic readonly showPaginationControls = signal(false);\n\n\t/** Whether the tab list can be scrolled more towards the end of the tab label list. */\n\tpublic disableScrollAfter = true;\n\n\t/** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\n\tpublic disableScrollBefore = true;\n\n\t/**\n\t * The number of tab labels that are displayed on the header. When this changes, the header\n\t * should re-evaluate the scroll position.\n\t */\n\tprivate _tabLabelCount!: number;\n\n\t/** Whether the scroll distance has changed and should be applied after the view is checked. */\n\tprivate _scrollDistanceChanged!: boolean;\n\n\t/** Used to manage focus between the tabs. */\n\tprivate _keyManager!: FocusKeyManager<BrnPaginatedTabHeaderItem>;\n\n\t/** Cached text content of the header. */\n\tprivate _currentTextContent!: string;\n\n\t/** Stream that will stop the automated scrolling. */\n\tprivate readonly _stopScrolling = new Subject<void>();\n\n\t/**\n\t * Whether pagination should be disabled. This can be used to avoid unnecessary\n\t * layout recalculations if it's known that pagination won't be required.\n\t */\n\tpublic readonly disablePagination = input(false, { transform: booleanAttribute });\n\n\t/** The index of the active tab. */\n\tprivate readonly _selectedIndex = computed(() => {\n\t\tconst currentTabKey = this._activeTab();\n\t\tconst tabs = this._tabs();\n\n\t\tlet activeIndex = 0;\n\t\tif (currentTabKey && this.items()) {\n\t\t\tconst currentTab = tabs[currentTabKey];\n\t\t\tif (currentTab) {\n\t\t\t\tactiveIndex = this.items().indexOf(currentTab.trigger);\n\t\t\t}\n\t\t}\n\n\t\treturn activeIndex;\n\t});\n\n\t/** Event emitted when the option is selected. */\n\tpublic readonly selectFocusedIndex = output<number>();\n\n\t/** Event emitted when a label is focused. */\n\tpublic readonly indexFocused = output<number>();\n\n\tprivate readonly _sharedResizeObserver = inject(SharedResizeObserver);\n\n\tprivate readonly _injector = inject(Injector);\n\n\tprotected _elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n\tprotected _changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n\tprivate readonly _viewportRuler: ViewportRuler = inject(ViewportRuler);\n\tprivate readonly _dir = inject(Directionality, { optional: true });\n\tprivate readonly _ngZone: NgZone = inject(NgZone);\n\tprivate readonly _platform: Platform = inject(Platform);\n\tpublic readonly animationMode = inject(ANIMATION_MODULE_TYPE, { optional: true });\n\n\tconstructor() {\n\t\t// Bind the `mouseleave` event on the outside since it doesn't change anything in the view.\n\t\tthis._ngZone.runOutsideAngular(() => {\n\t\t\tfromEvent(this._elementRef.nativeElement, 'mouseleave')\n\t\t\t\t.pipe(takeUntil(this._destroyed))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tthis._stopInterval();\n\t\t\t\t});\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst selectedIndex = this._selectedIndex();\n\n\t\t\tif (selectedIndex !== 0) {\n\t\t\t\tthis._selectedIndexChanged = true;\n\t\t\t\tif (this._keyManager) {\n\t\t\t\t\tthis._keyManager.updateActiveItem(selectedIndex);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/** Called when the user has selected an item via the keyboard. */\n\tprotected abstract _itemSelected(event: KeyboardEvent): void;\n\n\tngAfterViewInit() {\n\t\t// We need to handle these events manually, because we want to bind passive event listeners.\n\t\tfromEvent(this.previousPaginator().nativeElement, 'touchstart', passiveEventListenerOptions)\n\t\t\t.pipe(takeUntil(this._destroyed))\n\t\t\t.subscribe(() => {\n\t\t\t\tthis._handlePaginatorPress('before');\n\t\t\t});\n\n\t\tfromEvent(this.nextPaginator().nativeElement, 'touchstart', passiveEventListenerOptions)\n\t\t\t.pipe(takeUntil(this._destroyed))\n\t\t\t.subscribe(() => {\n\t\t\t\tthis._handlePaginatorPress('after');\n\t\t\t});\n\t}\n\n\tngAfterContentInit() {\n\t\tconst dirChange = this._dir ? this._dir.change : observableOf('ltr');\n\t\t// We need to debounce resize events because the alignment logic is expensive.\n\t\t// If someone animates the width of tabs, we don't want to realign on every animation frame.\n\t\t// Once we haven't seen any more resize events in the last 32ms (~2 animaion frames) we can\n\t\t// re-align.\n\t\tconst resize = this._sharedResizeObserver\n\t\t\t.observe(this._elementRef.nativeElement)\n\t\t\t.pipe(debounceTime(32), takeUntil(this._destroyed));\n\t\t// Note: We do not actually need to watch these events for proper functioning of the tabs,\n\t\t// the resize events above should capture any viewport resize that we care about. However,\n\t\t// removing this is fairly breaking for screenshot tests, so we're leaving it here for now.\n\t\tconst viewportResize = this._viewportRuler.change(150).pipe(takeUntil(this._destroyed));\n\n\t\tconst realign = () => {\n\t\t\tthis.updatePagination();\n\t\t};\n\n\t\tthis._keyManager = new FocusKeyManager<BrnPaginatedTabHeaderItem>(this.items())\n\t\t\t.withHorizontalOrientation(this._getLayoutDirection())\n\t\t\t.withHomeAndEnd()\n\t\t\t.withWrap()\n\t\t\t// Allow focus to land on disabled tabs, as per https://w3c.github.io/aria-practices/#kbd_disabled_controls\n\t\t\t.skipPredicate(() => false);\n\n\t\tthis._keyManager.updateActiveItem(this._selectedIndex());\n\n\t\t// Note: We do not need to realign after the first render for proper functioning of the tabs\n\t\t// the resize events above should fire when we first start observing the element. However,\n\t\t// removing this is fairly breaking for screenshot tests, so we're leaving it here for now.\n\t\tafterNextRender(realign, { injector: this._injector });\n\n\t\t// On dir change or resize, realign the ink bar and update the orientation of\n\t\t// the key manager if the direction has changed.\n\t\tmerge(dirChange, viewportResize, resize, this.itemsChanges, this._itemsResized())\n\t\t\t.pipe(takeUntil(this._destroyed))\n\t\t\t.subscribe(() => {\n\t\t\t\t// We need to defer this to give the browser some time to recalculate\n\t\t\t\t// the element dimensions. The call has to be wrapped in `NgZone.run`,\n\t\t\t\t// because the viewport change handler runs outside of Angular.\n\t\t\t\tthis._ngZone.run(() => {\n\t\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\t\t// Clamp the scroll distance, because it can change with the number of tabs.\n\t\t\t\t\t\tthis._scrollDistance = Math.max(0, Math.min(this._getMaxScrollDistance(), this._scrollDistance));\n\t\t\t\t\t\trealign();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tthis._keyManager.withHorizontalOrientation(this._getLayoutDirection());\n\t\t\t});\n\n\t\t// If there is a change in the focus key manager we need to emit the `indexFocused`\n\t\t// event in order to provide a public event that notifies about focus changes. Also we realign\n\t\t// the tabs container by scrolling the new focused tab into the visible section.\n\t\tthis._keyManager.change.subscribe((newFocusIndex) => {\n\t\t\tthis.indexFocused.emit(newFocusIndex);\n\t\t\tthis._setTabFocus(newFocusIndex);\n\t\t});\n\t}\n\n\t/** Sends any changes that could affect the layout of the items. */\n\tprivate _itemsResized(): Observable<ResizeObserverEntry[]> {\n\t\tif (typeof ResizeObserver !== 'function') {\n\t\t\treturn EMPTY;\n\t\t}\n\n\t\treturn this.itemsChanges.pipe(\n\t\t\tstartWith(this.items()),\n\t\t\tswitchMap(\n\t\t\t\t(tabItems: ReadonlyArray<BrnPaginatedTabHeaderItem>) =>\n\t\t\t\t\tnew Observable((observer: Observer<ResizeObserverEntry[]>) =>\n\t\t\t\t\t\tthis._ngZone.runOutsideAngular(() => {\n\t\t\t\t\t\t\tconst resizeObserver = new ResizeObserver((entries) => observer.next(entries));\n\t\t\t\t\t\t\tfor (const tabItem of tabItems) {\n\t\t\t\t\t\t\t\tresizeObserver.observe(tabItem.elementRef.nativeElement);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn () => {\n\t\t\t\t\t\t\t\tresizeObserver.disconnect();\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t),\n\t\t\t// Skip the first emit since the resize observer emits when an item\n\t\t\t// is observed for new items when the tab is already inserted\n\t\t\tskip(1),\n\t\t\t// Skip emissions where all the elements are invisible since we don't want\n\t\t\t// the header to try and re-render with invalid measurements. See #25574.\n\t\t\tfilter((entries) => entries.some((e) => e.contentRect.width > 0 && e.contentRect.height > 0)),\n\t\t);\n\t}\n\n\tngAfterContentChecked(): void {\n\t\t// If the number of tab labels have changed, check if scrolling should be enabled\n\t\tif (this._tabLabelCount !== this.items().length) {\n\t\t\tthis.updatePagination();\n\t\t\tthis._tabLabelCount = this.items().length;\n\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t}\n\n\t\t// If the selected index has changed, scroll to the label and check if the scrolling controls\n\t\t// should be disabled.\n\t\tif (this._selectedIndexChanged) {\n\t\t\tthis._scrollToLabel(this._selectedIndex());\n\t\t\tthis._checkScrollingControls();\n\t\t\tthis._selectedIndexChanged = false;\n\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t}\n\n\t\t// If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n\t\t// then translate the header to reflect this.\n\t\tif (this._scrollDistanceChanged) {\n\t\t\tthis._updateTabScrollPosition();\n\t\t\tthis._scrollDistanceChanged = false;\n\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t}\n\t}\n\n\tngOnDestroy() {\n\t\tthis._keyManager?.destroy();\n\t\tthis._destroyed.next();\n\t\tthis._destroyed.complete();\n\t\tthis._stopScrolling.complete();\n\t}\n\n\t/** Handles keyboard events on the header. */\n\t_handleKeydown(event: KeyboardEvent) {\n\t\t// We don't handle any key bindings with a modifier key.\n\t\tif (hasModifierKey(event)) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (event.keyCode) {\n\t\t\tcase ENTER:\n\t\t\tcase SPACE:\n\t\t\t\tif (this.focusIndex !== this._selectedIndex()) {\n\t\t\t\t\tconst item = this.items()[this.focusIndex];\n\n\t\t\t\t\tif (item && !item.disabled) {\n\t\t\t\t\t\tthis.selectFocusedIndex.emit(this.focusIndex);\n\t\t\t\t\t\tthis._itemSelected(event);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis._keyManager.onKeydown(event);\n\t\t}\n\t}\n\n\t/**\n\t * Callback for when the MutationObserver detects that the content has changed.\n\t */\n\t_onContentChanges() {\n\t\tconst textContent = this._elementRef.nativeElement.textContent;\n\n\t\t// We need to diff the text content of the header, because the MutationObserver callback\n\t\t// will fire even if the text content didn't change which is inefficient and is prone\n\t\t// to infinite loops if a poorly constructed expression is passed in (see #14249).\n\t\tif (textContent !== this._currentTextContent) {\n\t\t\tthis._currentTextContent = textContent || '';\n\n\t\t\t// The content observer runs outside the `NgZone` by default, which\n\t\t\t// means that we need to bring the callback back in ourselves.\n\t\t\tthis._ngZone.run(() => {\n\t\t\t\tthis.updatePagination();\n\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Updates the view whether pagination should be enabled or not.\n\t *\n\t * WARNING: Calling this method can be very costly in terms of performance. It should be called\n\t * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\n\t * page.\n\t */\n\tupdatePagination() {\n\t\tthis._checkPaginationEnabled();\n\t\tthis._checkScrollingControls();\n\t\tthis._updateTabScrollPosition();\n\t}\n\n\t/** Tracks which element has focus; used for keyboard navigation */\n\tpublic get focusIndex(): number {\n\t\treturn this._keyManager ? (this._keyManager.activeItemIndex ?? 0) : 0;\n\t}\n\n\t/** When the focus index is set, we must manually send focus to the correct label */\n\tpublic set focusIndex(value: number) {\n\t\tif (!this._isValidIndex(value) || this.focusIndex === value || !this._keyManager) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._keyManager.setActiveItem(value);\n\t}\n\n\t/**\n\t * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is\n\t * providing a valid index and return true.\n\t */\n\t_isValidIndex(index: number): boolean {\n\t\treturn this.items() ? !!this.items()[index] : true;\n\t}\n\n\t/**\n\t * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n\t * scrolling is enabled.\n\t */\n\t_setTabFocus(tabIndex: number) {\n\t\tif (this.showPaginationControls()) {\n\t\t\tthis._scrollToLabel(tabIndex);\n\t\t}\n\n\t\tif (this.items()?.length) {\n\t\t\tthis.items()[tabIndex].focus();\n\n\t\t\t// Do not let the browser manage scrolling to focus the element, this will be handled\n\t\t\t// by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n\t\t\t// should be the full width minus the offset width.\n\t\t\tconst containerEl = this.tabListContainer().nativeElement;\n\t\t\tconst dir = this._getLayoutDirection();\n\n\t\t\tif (dir === 'ltr') {\n\t\t\t\tcontainerEl.scrollLeft = 0;\n\t\t\t} else {\n\t\t\t\tcontainerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** The layout direction of the containing app. */\n\t_getLayoutDirection(): Direction {\n\t\treturn this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n\t}\n\n\t/** Performs the CSS transformation on the tab list that will cause the list to scroll. */\n\t_updateTabScrollPosition() {\n\t\tif (this.disablePagination()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst scrollDistance = this.scrollDistance;\n\t\tconst translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n\n\t\t// Don't use `translate3d` here because we don't want to create a new layer. A new layer\n\t\t// seems to cause flickering and overflow in Internet Explorer. For example, the ink bar\n\t\t// and ripples will exceed the boundaries of the visible tab bar.\n\t\t// See: https://github.com/angular/components/issues/10276\n\t\t// We round the `transform` here, because transforms with sub-pixel precision cause some\n\t\t// browsers to blur the content of the element.\n\t\tthis.tabList().nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`;\n\n\t\t// Setting the `transform` on IE will change the scroll offset of the parent, causing the\n\t\t// position to be thrown off in some cases. We have to reset it ourselves to ensure that\n\t\t// it doesn't get thrown off. Note that we scope it only to IE and Edge, because messing\n\t\t// with the scroll position throws off Chrome 71+ in RTL mode (see #14689).\n\t\tif (this._platform.TRIDENT || this._platform.EDGE) {\n\t\t\tthis.tabListContainer().nativeElement.scrollLeft = 0;\n\t\t}\n\t}\n\n\t/** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\n\tpublic get scrollDistance(): number {\n\t\treturn this._scrollDistance;\n\t}\n\tpublic set scrollDistance(value: number) {\n\t\tthis._scrollTo(value);\n\t}\n\n\t/**\n\t * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n\t * the end of the list, respectively). The distance to scroll is computed to be a third of the\n\t * length of the tab list view window.\n\t *\n\t * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n\t * should be called sparingly.\n\t */\n\t_scrollHeader(direction: ScrollDirection) {\n\t\tconst viewLength = this.tabListContainer().nativeElement.offsetWidth;\n\n\t\t// Move the scroll distance one-third the length of the tab list's viewport.\n\t\tconst scrollAmount = ((direction === 'before' ? -1 : 1) * viewLength) / 3;\n\n\t\treturn this._scrollTo(this._scrollDistance + scrollAmount);\n\t}\n\n\t/** Handles click events on the pagination arrows. */\n\t_handlePaginatorClick(direction: ScrollDirection) {\n\t\tthis._stopInterval();\n\t\tthis._scrollHeader(direction);\n\t}\n\n\t/**\n\t * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n\t *\n\t * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n\t * should be called sparingly.\n\t */\n\t_scrollToLabel(labelIndex: number) {\n\t\tif (this.disablePagination()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst selectedLabel = this.items() ? this.items()[labelIndex] : null;\n\n\t\tif (!selectedLabel) {\n\t\t\treturn;\n\t\t}\n\n\t\t// The view length is the visible width of the tab labels.\n\t\tconst viewLength = this.tabListContainer().nativeElement.offsetWidth;\n\t\tconst { offsetLeft, offsetWidth } = selectedLabel.elementRef.nativeElement;\n\n\t\tlet labelBeforePos: number;\n\t\tlet labelAfterPos: number;\n\t\tif (this._getLayoutDirection() === 'ltr') {\n\t\t\tlabelBeforePos = offsetLeft;\n\t\t\tlabelAfterPos = labelBeforePos + offsetWidth;\n\t\t} else {\n\t\t\tlabelAfterPos = this.tabListInner().nativeElement.offsetWidth - offsetLeft;\n\t\t\tlabelBeforePos = labelAfterPos - offsetWidth;\n\t\t}\n\n\t\tconst beforeVisiblePos = this.scrollDistance;\n\t\tconst afterVisiblePos = this.scrollDistance + viewLength;\n\n\t\tif (labelBeforePos < beforeVisiblePos) {\n\t\t\t// Scroll header to move label to the before direction\n\t\t\tthis.scrollDistance -= beforeVisiblePos - labelBeforePos;\n\t\t} else if (labelAfterPos > afterVisiblePos) {\n\t\t\t// Scroll header to move label to the after direction\n\t\t\tthis.scrollDistance += Math.min(labelAfterPos - afterVisiblePos, labelBeforePos - beforeVisiblePos);\n\t\t}\n\t}\n\n\t/**\n\t * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n\t * tab list is wider than the size of the header container, then the pagination controls should\n\t * be shown.\n\t *\n\t * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n\t * should be called sparingly.\n\t */\n\t_checkPaginationEnabled() {\n\t\tif (this.disablePagination()) {\n\t\t\tthis.showPaginationControls.set(false);\n\t\t} else {\n\t\t\tconst isEnabled = this.tabListInner().nativeElement.scrollWidth > this._elementRef.nativeElement.offsetWidth;\n\n\t\t\tif (!isEnabled) {\n\t\t\t\tthis.scrollDistance = 0;\n\t\t\t}\n\n\t\t\tif (isEnabled !== this.showPaginationControls()) {\n\t\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t\t}\n\n\t\t\tthis.showPaginationControls.set(isEnabled);\n\t\t}\n\t}\n\n\t/**\n\t * Evaluate whether the before and after controls should be enabled or disabled.\n\t * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n\t * before button. If the header is at the end of the list (scroll distance is equal to the\n\t * maximum distance we can scroll), then disable the after button.\n\t *\n\t * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n\t * should be called sparingly.\n\t */\n\t_checkScrollingControls() {\n\t\tif (this.disablePagination()) {\n\t\t\tthis.disableScrollAfter = this.disableScrollBefore = true;\n\t\t} else {\n\t\t\t// Check if the pagination arrows should be activated.\n\t\t\tthis.disableScrollBefore = this.scrollDistance === 0;\n\t\t\tthis.disableScrollAfter = this.scrollDistance === this._getMaxScrollDistance();\n\t\t\tthis._changeDetectorRef.markForCheck();\n\t\t}\n\t}\n\n\t/**\n\t * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n\t * is equal to the difference in width between the tab list container and tab header container.\n\t *\n\t * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n\t * should be called sparingly.\n\t */\n\t_getMaxScrollDistance(): number {\n\t\tconst lengthOfTabList = this.tabListInner().nativeElement.scrollWidth;\n\t\tconst viewLength = this.tabListContainer().nativeElement.offsetWidth;\n\t\treturn lengthOfTabList - viewLength || 0;\n\t}\n\n\t/** Stops the currently-running paginator interval. */\n\t_stopInterval() {\n\t\tthis._stopScrolling.next();\n\t}\n\n\t/**\n\t * Handles the user pressing down on one of the paginators.\n\t * Starts scrolling the header after a certain amount of time.\n\t * @param direction In which direction the paginator should be scrolled.\n\t */\n\t_handlePaginatorPress(direction: ScrollDirection, mouseEvent?: MouseEvent) {\n\t\t// Don't start auto scrolling for right mouse button clicks. Note that we shouldn't have to\n\t\t// null check the `button`, but we do it so we don't break tests that use fake events.\n\t\tif (mouseEvent && mouseEvent.button !== null && mouseEvent.button !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Avoid overlapping timers.\n\t\tthis._stopInterval();\n\n\t\t// Start a timer after the delay and keep firing based on the interval.\n\t\ttimer(HEADER_SCROLL_DELAY, HEADER_SCROLL_INTERVAL)\n\t\t\t// Keep the timer going until something tells it to stop or the component is destroyed.\n\t\t\t.pipe(takeUntil(merge(this._stopScrolling, this._destroyed)))\n\t\t\t.subscribe(() => {\n\t\t\t\tconst { maxScrollDistance, distance } = this._scrollHeader(direction);\n\n\t\t\t\t// Stop the timer if we've reached the start or the end.\n\t\t\t\tif (distance === 0 || distance >= maxScrollDistance) {\n\t\t\t\t\tthis._stopInterval();\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t/**\n\t * Scrolls the header to a given position.\n\t * @param position Position to which to scroll.\n\t * @returns Information on the current scroll distance and the maximum.\n\t */\n\tprivate _scrollTo(position: number) {\n\t\tif (this.disablePagination()) {\n\t\t\treturn { maxScrollDistance: 0, distance: 0 };\n\t\t}\n\n\t\tconst maxScrollDistance = this._getMaxScrollDistance();\n\t\tthis._scrollDistance = Math.max(0, Math.min(maxScrollDistance, position));\n\n\t\t// Mark that the scroll distance has changed so that after the view is checked, the CSS\n\t\t// transformation can move the header.\n\t\tthis._scrollDistanceChanged = true;\n\t\tthis._checkScrollingControls();\n\n\t\treturn { maxScrollDistance, distance: this._scrollDistance };\n\t}\n}\n","import { BrnTabs } from './lib/brn-tabs';\nimport { BrnTabsContent } from './lib/brn-tabs-content';\nimport { BrnTabsList } from './lib/brn-tabs-list';\nimport { BrnTabsTrigger } from './lib/brn-tabs-trigger';\n\nexport * from './lib/brn-tabs';\nexport * from './lib/brn-tabs-content';\nexport * from './lib/brn-tabs-list';\nexport * from './lib/brn-tabs-paginated-list';\nexport * from './lib/brn-tabs-trigger';\n\nexport const BrnTabsImports = [BrnTabs, BrnTabsList, BrnTabsTrigger, BrnTabsContent] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableOf"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spartan-ng-brain-tabs.mjs","sources":["../tmp-esm2022/tabs/lib/brn-tabs.js","../tmp-esm2022/tabs/lib/brn-tabs-content.js","../tmp-esm2022/tabs/lib/brn-tabs-trigger.js","../tmp-esm2022/tabs/lib/brn-tabs-list.js","../tmp-esm2022/tabs/lib/brn-tabs-paginated-list.js","../tmp-esm2022/tabs/index.js","../tmp-esm2022/tabs/spartan-ng-brain-tabs.js"],"sourcesContent":["import { Directive, input, model, output, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class BrnTabs {\n orientation = input('horizontal');\n /** internal **/\n $orientation = this.orientation;\n direction = input('ltr');\n /** internal **/\n $direction = this.direction;\n activeTab = model(undefined, { alias: 'brnTabs' });\n /** internal **/\n $activeTab = this.activeTab.asReadonly();\n activationMode = input('automatic');\n /** internal **/\n $activationMode = this.activationMode;\n tabActivated = output();\n _tabs = signal({});\n $tabs = this._tabs.asReadonly();\n registerTrigger(key, trigger) {\n this.updateEntry(key, { trigger });\n }\n registerContent(key, content) {\n this.updateEntry(key, { content });\n }\n unregisterTrigger(key) {\n this.updateEntry(key, { trigger: undefined });\n if (this.activeTab() === key) {\n this.activeTab.set(undefined);\n }\n }\n unregisterContent(key) {\n this.updateEntry(key, { content: undefined });\n }\n updateEntry(key, patch) {\n this._tabs.update((tabs) => {\n const existing = tabs[key] ?? {};\n const merged = { ...existing, ...patch };\n const entryEmpty = !merged.trigger && !merged.content;\n if (entryEmpty) {\n const { [key]: removed, ...rest } = tabs;\n return rest;\n }\n return { ...tabs, [key]: merged };\n });\n }\n emitTabActivated(key) {\n this.tabActivated.emit(key);\n }\n setActiveTab(key) {\n this.activeTab.set(key);\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabs, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTabs, isStandalone: true, selector: \"[brnTabs]\", inputs: { orientation: { classPropertyName: \"orientation\", publicName: \"orientation\", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: \"direction\", publicName: \"direction\", isSignal: true, isRequired: false, transformFunction: null }, activeTab: { classPropertyName: \"activeTab\", publicName: \"brnTabs\", isSignal: true, isRequired: false, transformFunction: null }, activationMode: { classPropertyName: \"activationMode\", publicName: \"activationMode\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeTab: \"brnTabsChange\", tabActivated: \"tabActivated\" }, host: { properties: { \"attr.data-orientation\": \"orientation()\", \"attr.dir\": \"direction()\" } }, exportAs: [\"brnTabs\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabs, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTabs]',\n exportAs: 'brnTabs',\n host: {\n '[attr.data-orientation]': 'orientation()',\n '[attr.dir]': 'direction()',\n },\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3RhYnMvc3JjL2xpYi9icm4tdGFicy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFpQnhFLE1BQU0sT0FBTyxPQUFPO0lBQ0gsV0FBVyxHQUFHLEtBQUssQ0FBcUIsWUFBWSxDQUFDLENBQUM7SUFDdEUsZ0JBQWdCO0lBQ1QsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7SUFFdkIsU0FBUyxHQUFHLEtBQUssQ0FBbUIsS0FBSyxDQUFDLENBQUM7SUFDM0QsZ0JBQWdCO0lBQ1QsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFFbkIsU0FBUyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDdkYsZ0JBQWdCO0lBQ1QsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFaEMsY0FBYyxHQUFHLEtBQUssQ0FBb0IsV0FBVyxDQUFDLENBQUM7SUFDdkUsZ0JBQWdCO0lBQ1QsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7SUFFN0IsWUFBWSxHQUFHLE1BQU0sRUFBVSxDQUFDO0lBRS9CLEtBQUssR0FBRyxNQUFNLENBQThCLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBRXpDLGVBQWUsQ0FBQyxHQUFXLEVBQUUsT0FBdUI7UUFDMUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxlQUFlLENBQUMsR0FBVyxFQUFFLE9BQXVCO1FBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0saUJBQWlCLENBQUMsR0FBVztRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDRixDQUFDO0lBRU0saUJBQWlCLENBQUMsR0FBVztRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxXQUFXLENBQUMsR0FBVyxFQUFFLEtBQXdCO1FBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDekMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUN0RCxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ3pDLE9BQU8sSUFBSSxDQUFDO1lBQ2IsQ0FBQztZQUNELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVc7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFXO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7MEhBNURXLE9BQU87OEdBQVAsT0FBTzs7MkZBQVAsT0FBTztrQkFSbkIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLElBQUksRUFBRTt3QkFDTCx5QkFBeUIsRUFBRSxlQUFlO3dCQUMxQyxZQUFZLEVBQUUsYUFBYTtxQkFDM0I7aUJBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGlucHV0LCBtb2RlbCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQnJuVGFic0NvbnRlbnQgfSBmcm9tICcuL2Jybi10YWJzLWNvbnRlbnQnO1xuaW1wb3J0IHR5cGUgeyBCcm5UYWJzVHJpZ2dlciB9IGZyb20gJy4vYnJuLXRhYnMtdHJpZ2dlcic7XG5cbmV4cG9ydCB0eXBlIEJyblRhYnNPcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG5leHBvcnQgdHlwZSBCcm5UYWJzRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJztcbmV4cG9ydCB0eXBlIEJybkFjdGl2YXRpb25Nb2RlID0gJ2F1dG9tYXRpYycgfCAnbWFudWFsJztcbmV4cG9ydCB0eXBlIFRhYkVudHJ5ID0geyB0cmlnZ2VyOiBCcm5UYWJzVHJpZ2dlcjsgY29udGVudDogQnJuVGFic0NvbnRlbnQgfTtcblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnW2JyblRhYnNdJyxcblx0ZXhwb3J0QXM6ICdicm5UYWJzJyxcblx0aG9zdDoge1xuXHRcdCdbYXR0ci5kYXRhLW9yaWVudGF0aW9uXSc6ICdvcmllbnRhdGlvbigpJyxcblx0XHQnW2F0dHIuZGlyXSc6ICdkaXJlY3Rpb24oKScsXG5cdH0sXG59KVxuZXhwb3J0IGNsYXNzIEJyblRhYnMge1xuXHRwdWJsaWMgcmVhZG9ubHkgb3JpZW50YXRpb24gPSBpbnB1dDxCcm5UYWJzT3JpZW50YXRpb24+KCdob3Jpem9udGFsJyk7XG5cdC8qKiBpbnRlcm5hbCAqKi9cblx0cHVibGljICRvcmllbnRhdGlvbiA9IHRoaXMub3JpZW50YXRpb247XG5cblx0cHVibGljIHJlYWRvbmx5IGRpcmVjdGlvbiA9IGlucHV0PEJyblRhYnNEaXJlY3Rpb24+KCdsdHInKTtcblx0LyoqIGludGVybmFsICoqL1xuXHRwdWJsaWMgJGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uO1xuXG5cdHB1YmxpYyByZWFkb25seSBhY3RpdmVUYWIgPSBtb2RlbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ2JyblRhYnMnIH0pO1xuXHQvKiogaW50ZXJuYWwgKiovXG5cdHB1YmxpYyAkYWN0aXZlVGFiID0gdGhpcy5hY3RpdmVUYWIuYXNSZWFkb25seSgpO1xuXG5cdHB1YmxpYyByZWFkb25seSBhY3RpdmF0aW9uTW9kZSA9IGlucHV0PEJybkFjdGl2YXRpb25Nb2RlPignYXV0b21hdGljJyk7XG5cdC8qKiBpbnRlcm5hbCAqKi9cblx0cHVibGljICRhY3RpdmF0aW9uTW9kZSA9IHRoaXMuYWN0aXZhdGlvbk1vZGU7XG5cblx0cHVibGljIHJlYWRvbmx5IHRhYkFjdGl2YXRlZCA9IG91dHB1dDxzdHJpbmc+KCk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfdGFicyA9IHNpZ25hbDx7IFtrZXk6IHN0cmluZ106IFRhYkVudHJ5IH0+KHt9KTtcblx0cHVibGljIHJlYWRvbmx5ICR0YWJzID0gdGhpcy5fdGFicy5hc1JlYWRvbmx5KCk7XG5cblx0cHVibGljIHJlZ2lzdGVyVHJpZ2dlcihrZXk6IHN0cmluZywgdHJpZ2dlcjogQnJuVGFic1RyaWdnZXIpIHtcblx0XHR0aGlzLnVwZGF0ZUVudHJ5KGtleSwgeyB0cmlnZ2VyIH0pO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyQ29udGVudChrZXk6IHN0cmluZywgY29udGVudDogQnJuVGFic0NvbnRlbnQpIHtcblx0XHR0aGlzLnVwZGF0ZUVudHJ5KGtleSwgeyBjb250ZW50IH0pO1xuXHR9XG5cblx0cHVibGljIHVucmVnaXN0ZXJUcmlnZ2VyKGtleTogc3RyaW5nKSB7XG5cdFx0dGhpcy51cGRhdGVFbnRyeShrZXksIHsgdHJpZ2dlcjogdW5kZWZpbmVkIH0pO1xuXHRcdGlmICh0aGlzLmFjdGl2ZVRhYigpID09PSBrZXkpIHtcblx0XHRcdHRoaXMuYWN0aXZlVGFiLnNldCh1bmRlZmluZWQpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyB1bnJlZ2lzdGVyQ29udGVudChrZXk6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMudXBkYXRlRW50cnkoa2V5LCB7IGNvbnRlbnQ6IHVuZGVmaW5lZCB9KTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRW50cnkoa2V5OiBzdHJpbmcsIHBhdGNoOiBQYXJ0aWFsPFRhYkVudHJ5Pikge1xuXHRcdHRoaXMuX3RhYnMudXBkYXRlKCh0YWJzKSA9PiB7XG5cdFx0XHRjb25zdCBleGlzdGluZyA9IHRhYnNba2V5XSA/PyB7fTtcblx0XHRcdGNvbnN0IG1lcmdlZCA9IHsgLi4uZXhpc3RpbmcsIC4uLnBhdGNoIH07XG5cdFx0XHRjb25zdCBlbnRyeUVtcHR5ID0gIW1lcmdlZC50cmlnZ2VyICYmICFtZXJnZWQuY29udGVudDtcblx0XHRcdGlmIChlbnRyeUVtcHR5KSB7XG5cdFx0XHRcdGNvbnN0IHsgW2tleV06IHJlbW92ZWQsIC4uLnJlc3QgfSA9IHRhYnM7XG5cdFx0XHRcdHJldHVybiByZXN0O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHsgLi4udGFicywgW2tleV06IG1lcmdlZCB9O1xuXHRcdH0pO1xuXHR9XG5cblx0ZW1pdFRhYkFjdGl2YXRlZChrZXk6IHN0cmluZykge1xuXHRcdHRoaXMudGFiQWN0aXZhdGVkLmVtaXQoa2V5KTtcblx0fVxuXG5cdHNldEFjdGl2ZVRhYihrZXk6IHN0cmluZykge1xuXHRcdHRoaXMuYWN0aXZlVGFiLnNldChrZXkpO1xuXHR9XG59XG4iXX0=","import { computed, Directive, effect, ElementRef, inject, input, untracked } from '@angular/core';\nimport { BrnTabs } from './brn-tabs';\nimport * as i0 from \"@angular/core\";\nexport class BrnTabsContent {\n _root = inject(BrnTabs);\n _elementRef = inject(ElementRef);\n contentFor = input.required({ alias: 'brnTabsContent' });\n _isSelected = computed(() => this._root.$activeTab() === this.contentFor());\n _contentId = computed(() => `brn-tabs-content-${this.contentFor()}`);\n _labelId = computed(() => `brn-tabs-label-${this.contentFor()}`);\n constructor() {\n effect(() => {\n const contentFor = this.contentFor();\n untracked(() => this._root.registerContent(contentFor, this));\n });\n }\n focus() {\n this._elementRef.nativeElement.focus();\n }\n ngOnDestroy() {\n this._root.unregisterContent(this.contentFor());\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTabsContent, isStandalone: true, selector: \"[brnTabsContent]\", inputs: { contentFor: { classPropertyName: \"contentFor\", publicName: \"brnTabsContent\", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { \"role\": \"tabpanel\", \"tabindex\": \"0\" }, properties: { \"id\": \"_contentId()\", \"attr.aria-labelledby\": \"_labelId()\", \"hidden\": \"_isSelected() === false\" } }, exportAs: [\"brnTabsContent\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsContent, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTabsContent]',\n exportAs: 'brnTabsContent',\n host: {\n role: 'tabpanel',\n tabindex: '0',\n '[id]': '_contentId()',\n '[attr.aria-labelledby]': '_labelId()',\n '[hidden]': '_isSelected() === false',\n },\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMtY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdGFicy9zcmMvbGliL2Jybi10YWJzLWNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFhckMsTUFBTSxPQUFPLGNBQWM7SUFDVCxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFbEMsVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQVMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQzlELFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM1RSxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFcEY7UUFDQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLO1FBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELFdBQVc7UUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7MEhBdEJXLGNBQWM7OEdBQWQsY0FBYzs7MkZBQWQsY0FBYztrQkFYMUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixJQUFJLEVBQUU7d0JBQ0wsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLFFBQVEsRUFBRSxHQUFHO3dCQUNiLE1BQU0sRUFBRSxjQUFjO3dCQUN0Qix3QkFBd0IsRUFBRSxZQUFZO3dCQUN0QyxVQUFVLEVBQUUseUJBQXlCO3FCQUNyQztpQkFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBEaXJlY3RpdmUsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgdHlwZSBPbkRlc3Ryb3ksIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnJuVGFicyB9IGZyb20gJy4vYnJuLXRhYnMnO1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdbYnJuVGFic0NvbnRlbnRdJyxcblx0ZXhwb3J0QXM6ICdicm5UYWJzQ29udGVudCcsXG5cdGhvc3Q6IHtcblx0XHRyb2xlOiAndGFicGFuZWwnLFxuXHRcdHRhYmluZGV4OiAnMCcsXG5cdFx0J1tpZF0nOiAnX2NvbnRlbnRJZCgpJyxcblx0XHQnW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XSc6ICdfbGFiZWxJZCgpJyxcblx0XHQnW2hpZGRlbl0nOiAnX2lzU2VsZWN0ZWQoKSA9PT0gZmFsc2UnLFxuXHR9LFxufSlcbmV4cG9ydCBjbGFzcyBCcm5UYWJzQ29udGVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3Jvb3QgPSBpbmplY3QoQnJuVGFicyk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cblx0cHVibGljIHJlYWRvbmx5IGNvbnRlbnRGb3IgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KHsgYWxpYXM6ICdicm5UYWJzQ29udGVudCcgfSk7XG5cdHByb3RlY3RlZCByZWFkb25seSBfaXNTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3Jvb3QuJGFjdGl2ZVRhYigpID09PSB0aGlzLmNvbnRlbnRGb3IoKSk7XG5cdHByb3RlY3RlZCByZWFkb25seSBfY29udGVudElkID0gY29tcHV0ZWQoKCkgPT4gYGJybi10YWJzLWNvbnRlbnQtJHt0aGlzLmNvbnRlbnRGb3IoKX1gKTtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9sYWJlbElkID0gY29tcHV0ZWQoKCkgPT4gYGJybi10YWJzLWxhYmVsLSR7dGhpcy5jb250ZW50Rm9yKCl9YCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IGNvbnRlbnRGb3IgPSB0aGlzLmNvbnRlbnRGb3IoKTtcblx0XHRcdHVudHJhY2tlZCgoKSA9PiB0aGlzLl9yb290LnJlZ2lzdGVyQ29udGVudChjb250ZW50Rm9yLCB0aGlzKSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgZm9jdXMoKSB7XG5cdFx0dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLl9yb290LnVucmVnaXN0ZXJDb250ZW50KHRoaXMuY29udGVudEZvcigpKTtcblx0fVxufVxuIl19","import { Directive, ElementRef, booleanAttribute, computed, effect, inject, input, untracked, } from '@angular/core';\nimport { BrnTabs } from './brn-tabs';\nimport * as i0 from \"@angular/core\";\nexport class BrnTabsTrigger {\n elementRef = inject(ElementRef);\n _root = inject(BrnTabs);\n _orientation = this._root.$orientation;\n triggerFor = input.required({ alias: 'brnTabsTrigger' });\n selected = computed(() => this._root.$activeTab() === this.triggerFor());\n _contentId = computed(() => `brn-tabs-content-${this.triggerFor()}`);\n _labelId = computed(() => `brn-tabs-label-${this.triggerFor()}`);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _disabled = input(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\n get disabled() {\n return this._disabled();\n }\n constructor() {\n effect(() => {\n const triggerFor = this.triggerFor();\n untracked(() => this._root.registerTrigger(triggerFor, this));\n });\n }\n focus() {\n this.elementRef.nativeElement.focus();\n if (this._root.$activationMode() === 'automatic') {\n this.activate();\n }\n }\n activate() {\n if (!this.triggerFor())\n return;\n this._root.setActiveTab(this.triggerFor());\n this._root.emitTabActivated(this.triggerFor());\n }\n get key() {\n return this.triggerFor();\n }\n ngOnDestroy() {\n this._root.unregisterTrigger(this.triggerFor());\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTabsTrigger, isStandalone: true, selector: \"button[brnTabsTrigger]\", inputs: { triggerFor: { classPropertyName: \"triggerFor\", publicName: \"brnTabsTrigger\", isSignal: true, isRequired: true, transformFunction: null }, _disabled: { classPropertyName: \"_disabled\", publicName: \"disabled\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"type\": \"button\", \"role\": \"tab\" }, listeners: { \"click\": \"activate()\" }, properties: { \"id\": \"_labelId()\", \"tabindex\": \"_disabled() ? -1 : (selected() ? 0 : -1)\", \"attr.aria-selected\": \"selected()\", \"attr.aria-controls\": \"_contentId()\", \"attr.aria-disabled\": \"_disabled()\", \"attr.data-state\": \"selected() ? 'active' : 'inactive'\", \"attr.data-orientation\": \"_orientation()\", \"attr.data-disabled\": \"_disabled() ? '' : undefined\", \"attr.disabled\": \"_disabled() ? '' : undefined\" } }, exportAs: [\"brnTabsTrigger\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsTrigger, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[brnTabsTrigger]',\n exportAs: 'brnTabsTrigger',\n host: {\n '[id]': '_labelId()',\n type: 'button',\n role: 'tab',\n '[tabindex]': '_disabled() ? -1 : (selected() ? 0 : -1)',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-controls]': '_contentId()',\n '[attr.aria-disabled]': '_disabled()',\n '[attr.data-state]': \"selected() ? 'active' : 'inactive'\",\n '[attr.data-orientation]': '_orientation()',\n '[attr.data-disabled]': \"_disabled() ? '' : undefined\",\n '[attr.disabled]': \"_disabled() ? '' : undefined\",\n '(click)': 'activate()',\n },\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMtdHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdGFicy9zcmMvbGliL2Jybi10YWJzLXRyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBRVYsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFvQnJDLE1BQU0sT0FBTyxjQUFjO0lBQ1YsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUUvQixLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXRCLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztJQUUxQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBUyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDakUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVwRixnRUFBZ0U7SUFDaEQsU0FBUyxHQUFHLEtBQUssQ0FBd0IsS0FBSyxFQUFFO1FBQy9ELEtBQUssRUFBRSxVQUFVO1FBQ2pCLFNBQVMsRUFBRSxnQkFBZ0I7S0FDM0IsQ0FBQyxDQUFDO0lBRUgsSUFBVyxRQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDtRQUNDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUs7UUFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDRixDQUFDO0lBRU0sUUFBUTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQUUsT0FBTztRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFXLEdBQUc7UUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQzswSEFoRFcsY0FBYzs4R0FBZCxjQUFjOzsyRkFBZCxjQUFjO2tCQWxCMUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixJQUFJLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLFlBQVk7d0JBQ3BCLElBQUksRUFBRSxRQUFRO3dCQUNkLElBQUksRUFBRSxLQUFLO3dCQUNYLFlBQVksRUFBRSwwQ0FBMEM7d0JBQ3hELHNCQUFzQixFQUFFLFlBQVk7d0JBQ3BDLHNCQUFzQixFQUFFLGNBQWM7d0JBQ3RDLHNCQUFzQixFQUFFLGFBQWE7d0JBQ3JDLG1CQUFtQixFQUFFLG9DQUFvQzt3QkFDekQseUJBQXlCLEVBQUUsZ0JBQWdCO3dCQUMzQyxzQkFBc0IsRUFBRSw4QkFBOEI7d0JBQ3RELGlCQUFpQixFQUFFLDhCQUE4Qjt3QkFDakQsU0FBUyxFQUFFLFlBQVk7cUJBQ3ZCO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHR0eXBlIE9uRGVzdHJveSxcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJyblRhYnMgfSBmcm9tICcuL2Jybi10YWJzJztcblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnYnV0dG9uW2JyblRhYnNUcmlnZ2VyXScsXG5cdGV4cG9ydEFzOiAnYnJuVGFic1RyaWdnZXInLFxuXHRob3N0OiB7XG5cdFx0J1tpZF0nOiAnX2xhYmVsSWQoKScsXG5cdFx0dHlwZTogJ2J1dHRvbicsXG5cdFx0cm9sZTogJ3RhYicsXG5cdFx0J1t0YWJpbmRleF0nOiAnX2Rpc2FibGVkKCkgPyAtMSA6IChzZWxlY3RlZCgpID8gMCA6IC0xKScsXG5cdFx0J1thdHRyLmFyaWEtc2VsZWN0ZWRdJzogJ3NlbGVjdGVkKCknLFxuXHRcdCdbYXR0ci5hcmlhLWNvbnRyb2xzXSc6ICdfY29udGVudElkKCknLFxuXHRcdCdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdfZGlzYWJsZWQoKScsXG5cdFx0J1thdHRyLmRhdGEtc3RhdGVdJzogXCJzZWxlY3RlZCgpID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnXCIsXG5cdFx0J1thdHRyLmRhdGEtb3JpZW50YXRpb25dJzogJ19vcmllbnRhdGlvbigpJyxcblx0XHQnW2F0dHIuZGF0YS1kaXNhYmxlZF0nOiBcIl9kaXNhYmxlZCgpID8gJycgOiB1bmRlZmluZWRcIixcblx0XHQnW2F0dHIuZGlzYWJsZWRdJzogXCJfZGlzYWJsZWQoKSA/ICcnIDogdW5kZWZpbmVkXCIsXG5cdFx0JyhjbGljayknOiAnYWN0aXZhdGUoKScsXG5cdH0sXG59KVxuZXhwb3J0IGNsYXNzIEJyblRhYnNUcmlnZ2VyIGltcGxlbWVudHMgT25EZXN0cm95IHtcblx0cHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfcm9vdCA9IGluamVjdChCcm5UYWJzKTtcblxuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgX29yaWVudGF0aW9uID0gdGhpcy5fcm9vdC4kb3JpZW50YXRpb247XG5cblx0cHVibGljIHJlYWRvbmx5IHRyaWdnZXJGb3IgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KHsgYWxpYXM6ICdicm5UYWJzVHJpZ2dlcicgfSk7XG5cdHB1YmxpYyByZWFkb25seSBzZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3Jvb3QuJGFjdGl2ZVRhYigpID09PSB0aGlzLnRyaWdnZXJGb3IoKSk7XG5cdHByb3RlY3RlZCByZWFkb25seSBfY29udGVudElkID0gY29tcHV0ZWQoKCkgPT4gYGJybi10YWJzLWNvbnRlbnQtJHt0aGlzLnRyaWdnZXJGb3IoKX1gKTtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9sYWJlbElkID0gY29tcHV0ZWQoKCkgPT4gYGJybi10YWJzLWxhYmVsLSR7dGhpcy50cmlnZ2VyRm9yKCl9YCk7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuXHRwdWJsaWMgcmVhZG9ubHkgX2Rpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbiwgQm9vbGVhbklucHV0PihmYWxzZSwge1xuXHRcdGFsaWFzOiAnZGlzYWJsZWQnLFxuXHRcdHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSxcblx0fSk7XG5cblx0cHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzYWJsZWQoKTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCB0cmlnZ2VyRm9yID0gdGhpcy50cmlnZ2VyRm9yKCk7XG5cdFx0XHR1bnRyYWNrZWQoKCkgPT4gdGhpcy5fcm9vdC5yZWdpc3RlclRyaWdnZXIodHJpZ2dlckZvciwgdGhpcykpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIGZvY3VzKCkge1xuXHRcdHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0aWYgKHRoaXMuX3Jvb3QuJGFjdGl2YXRpb25Nb2RlKCkgPT09ICdhdXRvbWF0aWMnKSB7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGFjdGl2YXRlKCkge1xuXHRcdGlmICghdGhpcy50cmlnZ2VyRm9yKCkpIHJldHVybjtcblx0XHR0aGlzLl9yb290LnNldEFjdGl2ZVRhYih0aGlzLnRyaWdnZXJGb3IoKSk7XG5cdFx0dGhpcy5fcm9vdC5lbWl0VGFiQWN0aXZhdGVkKHRoaXMudHJpZ2dlckZvcigpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQga2V5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMudHJpZ2dlckZvcigpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5fcm9vdC51bnJlZ2lzdGVyVHJpZ2dlcih0aGlzLnRyaWdnZXJGb3IoKSk7XG5cdH1cbn1cbiJdfQ==","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { Directive, ElementRef, contentChildren, inject } from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { BrnTabs } from './brn-tabs';\nimport { BrnTabsTrigger } from './brn-tabs-trigger';\nimport * as i0 from \"@angular/core\";\nexport class BrnTabsList {\n _root = inject(BrnTabs);\n _orientation = this._root.$orientation;\n _direction = this._root.$direction;\n _activeTab = this._root.$activeTab;\n _tabs = this._root.$tabs;\n _elementRef = inject(ElementRef);\n _keyDownListener = fromEvent(this._elementRef.nativeElement, 'keydown');\n _keyManager;\n triggers = contentChildren(BrnTabsTrigger, { descendants: true });\n ngAfterContentInit() {\n this._keyManager = new FocusKeyManager(this.triggers())\n .withHorizontalOrientation(this._direction())\n .withHomeAndEnd()\n .withPageUpDown()\n .withWrap();\n // needed because by default the index is set to -1, which means first interaction is skipped\n this._keyDownListener.pipe(take(1)).subscribe(() => {\n const currentTabKey = this._activeTab();\n const tabs = this._tabs();\n let activeIndex = 0;\n if (currentTabKey) {\n const currentTab = tabs[currentTabKey];\n if (currentTab) {\n activeIndex = this.triggers().indexOf(currentTab.trigger);\n }\n }\n this._keyManager?.setActiveItem(activeIndex);\n });\n this._keyDownListener.subscribe((event) => {\n if ('key' in event) {\n if (this._orientation() === 'horizontal') {\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown')\n return;\n }\n if (this._orientation() === 'vertical') {\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight')\n return;\n }\n }\n this._keyManager?.onKeydown(event);\n });\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsList, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.0.7\", type: BrnTabsList, isStandalone: true, selector: \"[brnTabsList]\", host: { attributes: { \"role\": \"tablist\" }, properties: { \"attr.aria-orientation\": \"_orientation()\", \"attr.data-orientation\": \"_orientation()\" } }, queries: [{ propertyName: \"triggers\", predicate: BrnTabsTrigger, descendants: true, isSignal: true }], exportAs: [\"brnTabsList\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsList, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTabsList]',\n exportAs: 'brnTabsList',\n host: {\n role: 'tablist',\n '[attr.aria-orientation]': '_orientation()',\n '[attr.data-orientation]': '_orientation()',\n },\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdGFicy9zcmMvbGliL2Jybi10YWJzLWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBeUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQVdwRCxNQUFNLE9BQU8sV0FBVztJQUNOLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFdEIsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ3pDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUNuQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDbkMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3pCLFdBQVcsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO0lBQzFELGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUVqRixXQUFXLENBQW1DO0lBRXRDLFFBQVEsR0FBRyxlQUFlLENBQUMsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFM0Usa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQWlCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNyRSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDNUMsY0FBYyxFQUFFO2FBQ2hCLGNBQWMsRUFBRTthQUNoQixRQUFRLEVBQUUsQ0FBQztRQUViLDZGQUE2RjtRQUM3RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDcEIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUNoQixXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNELENBQUM7WUFDRixDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDekMsSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLFlBQVksRUFBRSxDQUFDO29CQUMxQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVzt3QkFBRSxPQUFPO2dCQUNsRSxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUN4QyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssWUFBWTt3QkFBRSxPQUFPO2dCQUNyRSxDQUFDO1lBQ0YsQ0FBQztZQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQXNCLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7MEhBOUNXLFdBQVc7OEdBQVgsV0FBVyxxUEFZb0IsY0FBYzs7MkZBWjdDLFdBQVc7a0JBVHZCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRSxhQUFhO29CQUN2QixJQUFJLEVBQUU7d0JBQ0wsSUFBSSxFQUFFLFNBQVM7d0JBQ2YseUJBQXlCLEVBQUUsZ0JBQWdCO3dCQUMzQyx5QkFBeUIsRUFBRSxnQkFBZ0I7cUJBQzNDO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgdHlwZSBBZnRlckNvbnRlbnRJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGNvbnRlbnRDaGlsZHJlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCcm5UYWJzIH0gZnJvbSAnLi9icm4tdGFicyc7XG5pbXBvcnQgeyBCcm5UYWJzVHJpZ2dlciB9IGZyb20gJy4vYnJuLXRhYnMtdHJpZ2dlcic7XG5cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ1ticm5UYWJzTGlzdF0nLFxuXHRleHBvcnRBczogJ2JyblRhYnNMaXN0Jyxcblx0aG9zdDoge1xuXHRcdHJvbGU6ICd0YWJsaXN0Jyxcblx0XHQnW2F0dHIuYXJpYS1vcmllbnRhdGlvbl0nOiAnX29yaWVudGF0aW9uKCknLFxuXHRcdCdbYXR0ci5kYXRhLW9yaWVudGF0aW9uXSc6ICdfb3JpZW50YXRpb24oKScsXG5cdH0sXG59KVxuZXhwb3J0IGNsYXNzIEJyblRhYnNMaXN0IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3Jvb3QgPSBpbmplY3QoQnJuVGFicyk7XG5cblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9vcmllbnRhdGlvbiA9IHRoaXMuX3Jvb3QuJG9yaWVudGF0aW9uO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9kaXJlY3Rpb24gPSB0aGlzLl9yb290LiRkaXJlY3Rpb247XG5cdHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZVRhYiA9IHRoaXMuX3Jvb3QuJGFjdGl2ZVRhYjtcblx0cHJpdmF0ZSByZWFkb25seSBfdGFicyA9IHRoaXMuX3Jvb3QuJHRhYnM7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9rZXlEb3duTGlzdGVuZXIgPSBmcm9tRXZlbnQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpO1xuXG5cdHByaXZhdGUgX2tleU1hbmFnZXI/OiBGb2N1c0tleU1hbmFnZXI8QnJuVGFic1RyaWdnZXI+O1xuXG5cdHB1YmxpYyByZWFkb25seSB0cmlnZ2VycyA9IGNvbnRlbnRDaGlsZHJlbihCcm5UYWJzVHJpZ2dlciwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KTtcblxuXHRwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuXHRcdHRoaXMuX2tleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyPEJyblRhYnNUcmlnZ2VyPih0aGlzLnRyaWdnZXJzKCkpXG5cdFx0XHQud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9kaXJlY3Rpb24oKSlcblx0XHRcdC53aXRoSG9tZUFuZEVuZCgpXG5cdFx0XHQud2l0aFBhZ2VVcERvd24oKVxuXHRcdFx0LndpdGhXcmFwKCk7XG5cblx0XHQvLyBuZWVkZWQgYmVjYXVzZSBieSBkZWZhdWx0IHRoZSBpbmRleCBpcyBzZXQgdG8gLTEsIHdoaWNoIG1lYW5zIGZpcnN0IGludGVyYWN0aW9uIGlzIHNraXBwZWRcblx0XHR0aGlzLl9rZXlEb3duTGlzdGVuZXIucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0Y29uc3QgY3VycmVudFRhYktleSA9IHRoaXMuX2FjdGl2ZVRhYigpO1xuXHRcdFx0Y29uc3QgdGFicyA9IHRoaXMuX3RhYnMoKTtcblx0XHRcdGxldCBhY3RpdmVJbmRleCA9IDA7XG5cdFx0XHRpZiAoY3VycmVudFRhYktleSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VGFiID0gdGFic1tjdXJyZW50VGFiS2V5XTtcblx0XHRcdFx0aWYgKGN1cnJlbnRUYWIpIHtcblx0XHRcdFx0XHRhY3RpdmVJbmRleCA9IHRoaXMudHJpZ2dlcnMoKS5pbmRleE9mKGN1cnJlbnRUYWIudHJpZ2dlcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuX2tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oYWN0aXZlSW5kZXgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5fa2V5RG93bkxpc3RlbmVyLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcblx0XHRcdGlmICgna2V5JyBpbiBldmVudCkge1xuXHRcdFx0XHRpZiAodGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdFx0XHRcdGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSByZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuX2tleU1hbmFnZXI/Lm9uS2V5ZG93bihldmVudCBhcyBLZXlib2FyZEV2ZW50KTtcblx0XHR9KTtcblx0fVxufVxuIl19","/**\n * We are building on shoulders of giants here and adapt the implementation provided by the incredible Angular\n * team: https://github.com/angular/components/blob/main/src/material/tabs/paginated-tab-header.ts\n * Check them out! Give them a try! Leave a star! Their work is incredible!\n */\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { ENTER, SPACE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { Platform, normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { ANIMATION_MODULE_TYPE, ChangeDetectorRef, Directive, ElementRef, Injector, NgZone, afterNextRender, booleanAttribute, computed, effect, inject, input, output, signal, } from '@angular/core';\nimport { EMPTY, Observable, Subject, fromEvent, merge, of as observableOf, timer } from 'rxjs';\nimport { debounceTime, filter, skip, startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport { BrnTabs } from './brn-tabs';\nimport * as i0 from \"@angular/core\";\n/** Config used to bind passive event listeners */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({\n passive: true,\n});\n/**\n * Amount of milliseconds to wait before starting to scroll the header automatically.\n * Set a little conservatively in order to handle fake events dispatched on touch devices.\n */\nconst HEADER_SCROLL_DELAY = 650;\n/**\n * Interval in milliseconds at which to scroll the header\n * while the user is holding their pointer.\n */\nconst HEADER_SCROLL_INTERVAL = 100;\n/**\n * Base class for a tab header that supported pagination.\n * @docs-private\n */\nexport class BrnTabsPaginatedList {\n /** The distance in pixels that the tab labels should be translated to the left. */\n _scrollDistance = 0;\n /** Whether the header should scroll to the selected index after the view has been checked. */\n _selectedIndexChanged = false;\n _root = inject(BrnTabs);\n _activeTab = this._root.$activeTab;\n _tabs = this._root.$tabs;\n /** Emits when the component is destroyed. */\n _destroyed = new Subject();\n /** Whether the controls for pagination should be displayed */\n showPaginationControls = signal(false);\n /** Whether the tab list can be scrolled more towards the end of the tab label list. */\n disableScrollAfter = true;\n /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\n disableScrollBefore = true;\n /**\n * The number of tab labels that are displayed on the header. When this changes, the header\n * should re-evaluate the scroll position.\n */\n _tabLabelCount;\n /** Whether the scroll distance has changed and should be applied after the view is checked. */\n _scrollDistanceChanged;\n /** Used to manage focus between the tabs. */\n _keyManager;\n /** Cached text content of the header. */\n _currentTextContent;\n /** Stream that will stop the automated scrolling. */\n _stopScrolling = new Subject();\n /**\n * Whether pagination should be disabled. This can be used to avoid unnecessary\n * layout recalculations if it's known that pagination won't be required.\n */\n disablePagination = input(false, { transform: booleanAttribute });\n /** The index of the active tab. */\n _selectedIndex = computed(() => {\n const currentTabKey = this._activeTab();\n const tabs = this._tabs();\n let activeIndex = 0;\n if (currentTabKey && this.items()) {\n const currentTab = tabs[currentTabKey];\n if (currentTab) {\n activeIndex = this.items().indexOf(currentTab.trigger);\n }\n }\n return activeIndex;\n });\n /** Event emitted when the option is selected. */\n selectFocusedIndex = output();\n /** Event emitted when a label is focused. */\n indexFocused = output();\n _sharedResizeObserver = inject(SharedResizeObserver);\n _injector = inject(Injector);\n _elementRef = inject(ElementRef);\n _changeDetectorRef = inject(ChangeDetectorRef);\n _viewportRuler = inject(ViewportRuler);\n _dir = inject(Directionality, { optional: true });\n _ngZone = inject(NgZone);\n _platform = inject(Platform);\n animationMode = inject(ANIMATION_MODULE_TYPE, { optional: true });\n constructor() {\n // Bind the `mouseleave` event on the outside since it doesn't change anything in the view.\n this._ngZone.runOutsideAngular(() => {\n fromEvent(this._elementRef.nativeElement, 'mouseleave')\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._stopInterval();\n });\n });\n effect(() => {\n const selectedIndex = this._selectedIndex();\n if (selectedIndex !== 0) {\n this._selectedIndexChanged = true;\n if (this._keyManager) {\n this._keyManager.updateActiveItem(selectedIndex);\n }\n }\n });\n }\n ngAfterViewInit() {\n // We need to handle these events manually, because we want to bind passive event listeners.\n fromEvent(this.previousPaginator().nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('before');\n });\n fromEvent(this.nextPaginator().nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('after');\n });\n }\n ngAfterContentInit() {\n const dirChange = this._dir ? this._dir.change : observableOf('ltr');\n // We need to debounce resize events because the alignment logic is expensive.\n // If someone animates the width of tabs, we don't want to realign on every animation frame.\n // Once we haven't seen any more resize events in the last 32ms (~2 animaion frames) we can\n // re-align.\n const resize = this._sharedResizeObserver\n .observe(this._elementRef.nativeElement)\n .pipe(debounceTime(32), takeUntil(this._destroyed));\n // Note: We do not actually need to watch these events for proper functioning of the tabs,\n // the resize events above should capture any viewport resize that we care about. However,\n // removing this is fairly breaking for screenshot tests, so we're leaving it here for now.\n const viewportResize = this._viewportRuler.change(150).pipe(takeUntil(this._destroyed));\n const realign = () => {\n this.updatePagination();\n };\n this._keyManager = new FocusKeyManager(this.items())\n .withHorizontalOrientation(this._getLayoutDirection())\n .withHomeAndEnd()\n .withWrap()\n // Allow focus to land on disabled tabs, as per https://w3c.github.io/aria-practices/#kbd_disabled_controls\n .skipPredicate(() => false);\n this._keyManager.updateActiveItem(this._selectedIndex());\n // Note: We do not need to realign after the first render for proper functioning of the tabs\n // the resize events above should fire when we first start observing the element. However,\n // removing this is fairly breaking for screenshot tests, so we're leaving it here for now.\n afterNextRender(realign, { injector: this._injector });\n // On dir change or resize, realign the ink bar and update the orientation of\n // the key manager if the direction has changed.\n merge(dirChange, viewportResize, resize, this.itemsChanges, this._itemsResized())\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n // We need to defer this to give the browser some time to recalculate\n // the element dimensions. The call has to be wrapped in `NgZone.run`,\n // because the viewport change handler runs outside of Angular.\n this._ngZone.run(() => {\n Promise.resolve().then(() => {\n // Clamp the scroll distance, because it can change with the number of tabs.\n this._scrollDistance = Math.max(0, Math.min(this._getMaxScrollDistance(), this._scrollDistance));\n realign();\n });\n });\n this._keyManager.withHorizontalOrientation(this._getLayoutDirection());\n });\n // If there is a change in the focus key manager we need to emit the `indexFocused`\n // event in order to provide a public event that notifies about focus changes. Also we realign\n // the tabs container by scrolling the new focused tab into the visible section.\n this._keyManager.change.subscribe((newFocusIndex) => {\n this.indexFocused.emit(newFocusIndex);\n this._setTabFocus(newFocusIndex);\n });\n }\n /** Sends any changes that could affect the layout of the items. */\n _itemsResized() {\n if (typeof ResizeObserver !== 'function') {\n return EMPTY;\n }\n return this.itemsChanges.pipe(startWith(this.items()), switchMap((tabItems) => new Observable((observer) => this._ngZone.runOutsideAngular(() => {\n const resizeObserver = new ResizeObserver((entries) => observer.next(entries));\n for (const tabItem of tabItems) {\n resizeObserver.observe(tabItem.elementRef.nativeElement);\n }\n return () => {\n resizeObserver.disconnect();\n };\n }))), \n // Skip the first emit since the resize observer emits when an item\n // is observed for new items when the tab is already inserted\n skip(1), \n // Skip emissions where all the elements are invisible since we don't want\n // the header to try and re-render with invalid measurements. See #25574.\n filter((entries) => entries.some((e) => e.contentRect.width > 0 && e.contentRect.height > 0)));\n }\n ngAfterContentChecked() {\n // If the number of tab labels have changed, check if scrolling should be enabled\n if (this._tabLabelCount !== this.items().length) {\n this.updatePagination();\n this._tabLabelCount = this.items().length;\n this._changeDetectorRef.markForCheck();\n }\n // If the selected index has changed, scroll to the label and check if the scrolling controls\n // should be disabled.\n if (this._selectedIndexChanged) {\n this._scrollToLabel(this._selectedIndex());\n this._checkScrollingControls();\n this._selectedIndexChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n // If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n // then translate the header to reflect this.\n if (this._scrollDistanceChanged) {\n this._updateTabScrollPosition();\n this._scrollDistanceChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n ngOnDestroy() {\n this._keyManager?.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n this._stopScrolling.complete();\n }\n /** Handles keyboard events on the header. */\n _handleKeydown(event) {\n // We don't handle any key bindings with a modifier key.\n if (hasModifierKey(event)) {\n return;\n }\n switch (event.keyCode) {\n case ENTER:\n case SPACE:\n if (this.focusIndex !== this._selectedIndex()) {\n const item = this.items()[this.focusIndex];\n if (item && !item.disabled) {\n this.selectFocusedIndex.emit(this.focusIndex);\n this._itemSelected(event);\n }\n }\n break;\n default:\n this._keyManager.onKeydown(event);\n }\n }\n /**\n * Callback for when the MutationObserver detects that the content has changed.\n */\n _onContentChanges() {\n const textContent = this._elementRef.nativeElement.textContent;\n // We need to diff the text content of the header, because the MutationObserver callback\n // will fire even if the text content didn't change which is inefficient and is prone\n // to infinite loops if a poorly constructed expression is passed in (see #14249).\n if (textContent !== this._currentTextContent) {\n this._currentTextContent = textContent || '';\n // The content observer runs outside the `NgZone` by default, which\n // means that we need to bring the callback back in ourselves.\n this._ngZone.run(() => {\n this.updatePagination();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /**\n * Updates the view whether pagination should be enabled or not.\n *\n * WARNING: Calling this method can be very costly in terms of performance. It should be called\n * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\n * page.\n */\n updatePagination() {\n this._checkPaginationEnabled();\n this._checkScrollingControls();\n this._updateTabScrollPosition();\n }\n /** Tracks which element has focus; used for keyboard navigation */\n get focusIndex() {\n return this._keyManager ? (this._keyManager.activeItemIndex ?? 0) : 0;\n }\n /** When the focus index is set, we must manually send focus to the correct label */\n set focusIndex(value) {\n if (!this._isValidIndex(value) || this.focusIndex === value || !this._keyManager) {\n return;\n }\n this._keyManager.setActiveItem(value);\n }\n /**\n * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is\n * providing a valid index and return true.\n */\n _isValidIndex(index) {\n return this.items() ? !!this.items()[index] : true;\n }\n /**\n * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n * scrolling is enabled.\n */\n _setTabFocus(tabIndex) {\n if (this.showPaginationControls()) {\n this._scrollToLabel(tabIndex);\n }\n if (this.items()?.length) {\n this.items()[tabIndex].focus();\n // Do not let the browser manage scrolling to focus the element, this will be handled\n // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n // should be the full width minus the offset width.\n const containerEl = this.tabListContainer().nativeElement;\n const dir = this._getLayoutDirection();\n if (dir === 'ltr') {\n containerEl.scrollLeft = 0;\n }\n else {\n containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n }\n }\n }\n /** The layout direction of the containing app. */\n _getLayoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Performs the CSS transformation on the tab list that will cause the list to scroll. */\n _updateTabScrollPosition() {\n if (this.disablePagination()) {\n return;\n }\n const scrollDistance = this.scrollDistance;\n const translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n // Don't use `translate3d` here because we don't want to create a new layer. A new layer\n // seems to cause flickering and overflow in Internet Explorer. For example, the ink bar\n // and ripples will exceed the boundaries of the visible tab bar.\n // See: https://github.com/angular/components/issues/10276\n // We round the `transform` here, because transforms with sub-pixel precision cause some\n // browsers to blur the content of the element.\n this.tabList().nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`;\n // Setting the `transform` on IE will change the scroll offset of the parent, causing the\n // position to be thrown off in some cases. We have to reset it ourselves to ensure that\n // it doesn't get thrown off. Note that we scope it only to IE and Edge, because messing\n // with the scroll position throws off Chrome 71+ in RTL mode (see #14689).\n if (this._platform.TRIDENT || this._platform.EDGE) {\n this.tabListContainer().nativeElement.scrollLeft = 0;\n }\n }\n /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\n get scrollDistance() {\n return this._scrollDistance;\n }\n set scrollDistance(value) {\n this._scrollTo(value);\n }\n /**\n * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n * the end of the list, respectively). The distance to scroll is computed to be a third of the\n * length of the tab list view window.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollHeader(direction) {\n const viewLength = this.tabListContainer().nativeElement.offsetWidth;\n // Move the scroll distance one-third the length of the tab list's viewport.\n const scrollAmount = ((direction === 'before' ? -1 : 1) * viewLength) / 3;\n return this._scrollTo(this._scrollDistance + scrollAmount);\n }\n /** Handles click events on the pagination arrows. */\n _handlePaginatorClick(direction) {\n this._stopInterval();\n this._scrollHeader(direction);\n }\n /**\n * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollToLabel(labelIndex) {\n if (this.disablePagination()) {\n return;\n }\n const selectedLabel = this.items() ? this.items()[labelIndex] : null;\n if (!selectedLabel) {\n return;\n }\n // The view length is the visible width of the tab labels.\n const viewLength = this.tabListContainer().nativeElement.offsetWidth;\n const { offsetLeft, offsetWidth } = selectedLabel.elementRef.nativeElement;\n let labelBeforePos;\n let labelAfterPos;\n if (this._getLayoutDirection() === 'ltr') {\n labelBeforePos = offsetLeft;\n labelAfterPos = labelBeforePos + offsetWidth;\n }\n else {\n labelAfterPos = this.tabListInner().nativeElement.offsetWidth - offsetLeft;\n labelBeforePos = labelAfterPos - offsetWidth;\n }\n const beforeVisiblePos = this.scrollDistance;\n const afterVisiblePos = this.scrollDistance + viewLength;\n if (labelBeforePos < beforeVisiblePos) {\n // Scroll header to move label to the before direction\n this.scrollDistance -= beforeVisiblePos - labelBeforePos;\n }\n else if (labelAfterPos > afterVisiblePos) {\n // Scroll header to move label to the after direction\n this.scrollDistance += Math.min(labelAfterPos - afterVisiblePos, labelBeforePos - beforeVisiblePos);\n }\n }\n /**\n * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n * tab list is wider than the size of the header container, then the pagination controls should\n * be shown.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkPaginationEnabled() {\n if (this.disablePagination()) {\n this.showPaginationControls.set(false);\n }\n else {\n const isEnabled = this.tabListInner().nativeElement.scrollWidth > this._elementRef.nativeElement.offsetWidth;\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n if (isEnabled !== this.showPaginationControls()) {\n this._changeDetectorRef.markForCheck();\n }\n this.showPaginationControls.set(isEnabled);\n }\n }\n /**\n * Evaluate whether the before and after controls should be enabled or disabled.\n * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n * before button. If the header is at the end of the list (scroll distance is equal to the\n * maximum distance we can scroll), then disable the after button.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkScrollingControls() {\n if (this.disablePagination()) {\n this.disableScrollAfter = this.disableScrollBefore = true;\n }\n else {\n // Check if the pagination arrows should be activated.\n this.disableScrollBefore = this.scrollDistance === 0;\n this.disableScrollAfter = this.scrollDistance === this._getMaxScrollDistance();\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n * is equal to the difference in width between the tab list container and tab header container.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _getMaxScrollDistance() {\n const lengthOfTabList = this.tabListInner().nativeElement.scrollWidth;\n const viewLength = this.tabListContainer().nativeElement.offsetWidth;\n return lengthOfTabList - viewLength || 0;\n }\n /** Stops the currently-running paginator interval. */\n _stopInterval() {\n this._stopScrolling.next();\n }\n /**\n * Handles the user pressing down on one of the paginators.\n * Starts scrolling the header after a certain amount of time.\n * @param direction In which direction the paginator should be scrolled.\n */\n _handlePaginatorPress(direction, mouseEvent) {\n // Don't start auto scrolling for right mouse button clicks. Note that we shouldn't have to\n // null check the `button`, but we do it so we don't break tests that use fake events.\n if (mouseEvent && mouseEvent.button !== null && mouseEvent.button !== 0) {\n return;\n }\n // Avoid overlapping timers.\n this._stopInterval();\n // Start a timer after the delay and keep firing based on the interval.\n timer(HEADER_SCROLL_DELAY, HEADER_SCROLL_INTERVAL)\n // Keep the timer going until something tells it to stop or the component is destroyed.\n .pipe(takeUntil(merge(this._stopScrolling, this._destroyed)))\n .subscribe(() => {\n const { maxScrollDistance, distance } = this._scrollHeader(direction);\n // Stop the timer if we've reached the start or the end.\n if (distance === 0 || distance >= maxScrollDistance) {\n this._stopInterval();\n }\n });\n }\n /**\n * Scrolls the header to a given position.\n * @param position Position to which to scroll.\n * @returns Information on the current scroll distance and the maximum.\n */\n _scrollTo(position) {\n if (this.disablePagination()) {\n return { maxScrollDistance: 0, distance: 0 };\n }\n const maxScrollDistance = this._getMaxScrollDistance();\n this._scrollDistance = Math.max(0, Math.min(maxScrollDistance, position));\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this._scrollDistanceChanged = true;\n this._checkScrollingControls();\n return { maxScrollDistance, distance: this._scrollDistance };\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsPaginatedList, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTabsPaginatedList, isStandalone: true, inputs: { disablePagination: { classPropertyName: \"disablePagination\", publicName: \"disablePagination\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectFocusedIndex: \"selectFocusedIndex\", indexFocused: \"indexFocused\" }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsPaginatedList, decorators: [{\n type: Directive\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMtcGFnaW5hdGVkLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3RhYnMvc3JjL2xpYi9icm4tdGFicy1wYWdpbmF0ZWQtbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUg7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBd0IsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRSxPQUFPLEVBQWtCLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUNOLHFCQUFxQixFQUlyQixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUdOLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQWlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxPQUFPLEVB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LENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2FBQzVELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZixNQUFNLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUV0RSx3REFBd0Q7WUFDeEQsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLFFBQVEsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxTQUFTLENBQUMsUUFBZ0I7UUFDakMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTFFLHVGQUF1RjtRQUN2RixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUUvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM5RCxDQUFDOzBIQS9qQm9CLG9CQUFvQjs4R0FBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQUR6QyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXZSBhcmUgYnVpbGRpbmcgb24gc2hvdWxkZXJzIG9mIGdpYW50cyBoZXJlIGFuZCBhZGFwdCB0aGUgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIGluY3JlZGlibGUgQW5ndWxhclxuICogdGVhbTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9ibG9iL21haW4vc3JjL21hdGVyaWFsL3RhYnMvcGFnaW5hdGVkLXRhYi1oZWFkZXIudHNcbiAqIENoZWNrIHRoZW0gb3V0ISBHaXZlIHRoZW0gYSB0cnkhIExlYXZlIGEgc3RhciEgVGhlaXIgd29yayBpcyBpbmNyZWRpYmxlIVxuICovXG5cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBGb2N1c0tleU1hbmFnZXIsIHR5cGUgRm9jdXNhYmxlT3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgdHlwZSBEaXJlY3Rpb24sIERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgRU5URVIsIFNQQUNFLCBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBTaGFyZWRSZXNpemVPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vYnNlcnZlcnMvcHJpdmF0ZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybSwgbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBWaWV3cG9ydFJ1bGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1xuXHRBTklNQVRJT05fTU9EVUxFX1RZUEUsXG5cdHR5cGUgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcblx0dHlwZSBBZnRlckNvbnRlbnRJbml0LFxuXHR0eXBlIEFmdGVyVmlld0luaXQsXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHREaXJlY3RpdmUsXG5cdEVsZW1lbnRSZWYsXG5cdEluamVjdG9yLFxuXHROZ1pvbmUsXG5cdHR5cGUgT25EZXN0cm95LFxuXHR0eXBlIFNpZ25hbCxcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRib29sZWFuQXR0cmlidXRlLFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRvdXRwdXQsXG5cdHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgdHlwZSBPYnNlcnZlciwgU3ViamVjdCwgZnJvbUV2ZW50LCBtZXJnZSwgb2YgYXMgb2JzZXJ2YWJsZU9mLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHNraXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCcm5UYWJzIH0gZnJvbSAnLi9icm4tdGFicyc7XG5cbi8qKiBDb25maWcgdXNlZCB0byBiaW5kIHBhc3NpdmUgZXZlbnQgbGlzdGVuZXJzICovXG5jb25zdCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zKHtcblx0cGFzc2l2ZTogdHJ1ZSxcbn0pIGFzIEV2ZW50TGlzdGVuZXJPcHRpb25zO1xuXG4vKipcbiAqIFRoZSBkaXJlY3Rpb25zIHRoYXQgc2Nyb2xsaW5nIGNhbiBnbyBpbiB3aGVuIHRoZSBoZWFkZXIncyB0YWJzIGV4Y2VlZCB0aGUgaGVhZGVyIHdpZHRoLiAnQWZ0ZXInXG4gKiB3aWxsIHNjcm9sbCB0aGUgaGVhZGVyIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgdGFicyBsaXN0IGFuZCAnYmVmb3JlJyB3aWxsIHNjcm9sbCB0b3dhcmRzIHRoZVxuICogYmVnaW5uaW5nIG9mIHRoZSBsaXN0LlxuICovXG5leHBvcnQgdHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnYWZ0ZXInIHwgJ2JlZm9yZSc7XG5cbi8qKlxuICogQW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBzdGFydGluZyB0byBzY3JvbGwgdGhlIGhlYWRlciBhdXRvbWF0aWNhbGx5LlxuICogU2V0IGEgbGl0dGxlIGNvbnNlcnZhdGl2ZWx5IGluIG9yZGVyIHRvIGhhbmRsZSBmYWtlIGV2ZW50cyBkaXNwYXRjaGVkIG9uIHRvdWNoIGRldmljZXMuXG4gKi9cbmNvbnN0IEhFQURFUl9TQ1JPTExfREVMQVkgPSA2NTA7XG5cbi8qKlxuICogSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIGF0IHdoaWNoIHRvIHNjcm9sbCB0aGUgaGVhZGVyXG4gKiB3aGlsZSB0aGUgdXNlciBpcyBob2xkaW5nIHRoZWlyIHBvaW50ZXIuXG4gKi9cbmNvbnN0IEhFQURFUl9TQ1JPTExfSU5URVJWQUwgPSAxMDA7XG5cbi8qKiBJdGVtIGluc2lkZSBhIHBhZ2luYXRlZCB0YWIgaGVhZGVyLiAqL1xuZXhwb3J0IHR5cGUgQnJuUGFnaW5hdGVkVGFiSGVhZGVySXRlbSA9IEZvY3VzYWJsZU9wdGlvbiAmIHsgZWxlbWVudFJlZjogRWxlbWVudFJlZiB9O1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGEgdGFiIGhlYWRlciB0aGF0IHN1cHBvcnRlZCBwYWdpbmF0aW9uLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCcm5UYWJzUGFnaW5hdGVkTGlzdCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cdHB1YmxpYyBhYnN0cmFjdCBpdGVtczogU2lnbmFsPFJlYWRvbmx5QXJyYXk8QnJuUGFnaW5hdGVkVGFiSGVhZGVySXRlbT4+O1xuXHRwdWJsaWMgYWJzdHJhY3QgaXRlbXNDaGFuZ2VzOiBPYnNlcnZhYmxlPFJlYWRvbmx5QXJyYXk8QnJuUGFnaW5hdGVkVGFiSGVhZGVySXRlbT4+O1xuXHRwdWJsaWMgYWJzdHJhY3QgdGFiTGlzdENvbnRhaW5lcjogU2lnbmFsPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+Pjtcblx0cHVibGljIGFic3RyYWN0IHRhYkxpc3Q6IFNpZ25hbDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cdHB1YmxpYyBhYnN0cmFjdCB0YWJMaXN0SW5uZXI6IFNpZ25hbDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cdHB1YmxpYyBhYnN0cmFjdCBuZXh0UGFnaW5hdG9yOiBTaWduYWw8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXHRwdWJsaWMgYWJzdHJhY3QgcHJldmlvdXNQYWdpbmF0b3I6IFNpZ25hbDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cblx0LyoqIFRoZSBkaXN0YW5jZSBpbiBwaXhlbHMgdGhhdCB0aGUgdGFiIGxhYmVscyBzaG91bGQgYmUgdHJhbnNsYXRlZCB0byB0aGUgbGVmdC4gKi9cblx0cHJpdmF0ZSBfc2Nyb2xsRGlzdGFuY2UgPSAwO1xuXG5cdC8qKiBXaGV0aGVyIHRoZSBoZWFkZXIgc2hvdWxkIHNjcm9sbCB0byB0aGUgc2VsZWN0ZWQgaW5kZXggYWZ0ZXIgdGhlIHZpZXcgaGFzIGJlZW4gY2hlY2tlZC4gKi9cblx0cHJpdmF0ZSBfc2VsZWN0ZWRJbmRleENoYW5nZWQgPSBmYWxzZTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9yb290ID0gaW5qZWN0KEJyblRhYnMpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVUYWIgPSB0aGlzLl9yb290LiRhY3RpdmVUYWI7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3RhYnMgPSB0aGlzLl9yb290LiR0YWJzO1xuXG5cdC8qKiBFbWl0cyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLiAqL1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cblx0LyoqIFdoZXRoZXIgdGhlIGNvbnRyb2xzIGZvciBwYWdpbmF0aW9uIHNob3VsZCBiZSBkaXNwbGF5ZWQgKi9cblx0cHVibGljIHJlYWRvbmx5IHNob3dQYWdpbmF0aW9uQ29udHJvbHMgPSBzaWduYWwoZmFsc2UpO1xuXG5cdC8qKiBXaGV0aGVyIHRoZSB0YWIgbGlzdCBjYW4gYmUgc2Nyb2xsZWQgbW9yZSB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIHRhYiBsYWJlbCBsaXN0LiAqL1xuXHRwdWJsaWMgZGlzYWJsZVNjcm9sbEFmdGVyID0gdHJ1ZTtcblxuXHQvKiogV2hldGhlciB0aGUgdGFiIGxpc3QgY2FuIGJlIHNjcm9sbGVkIG1vcmUgdG93YXJkcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0YWIgbGFiZWwgbGlzdC4gKi9cblx0cHVibGljIGRpc2FibGVTY3JvbGxCZWZvcmUgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgbnVtYmVyIG9mIHRhYiBsYWJlbHMgdGhhdCBhcmUgZGlzcGxheWVkIG9uIHRoZSBoZWFkZXIuIFdoZW4gdGhpcyBjaGFuZ2VzLCB0aGUgaGVhZGVyXG5cdCAqIHNob3VsZCByZS1ldmFsdWF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBfdGFiTGFiZWxDb3VudCE6IG51bWJlcjtcblxuXHQvKiogV2hldGhlciB0aGUgc2Nyb2xsIGRpc3RhbmNlIGhhcyBjaGFuZ2VkIGFuZCBzaG91bGQgYmUgYXBwbGllZCBhZnRlciB0aGUgdmlldyBpcyBjaGVja2VkLiAqL1xuXHRwcml2YXRlIF9zY3JvbGxEaXN0YW5jZUNoYW5nZWQhOiBib29sZWFuO1xuXG5cdC8qKiBVc2VkIHRvIG1hbmFnZSBmb2N1cyBiZXR3ZWVuIHRoZSB0YWJzLiAqL1xuXHRwcml2YXRlIF9rZXlNYW5hZ2VyITogRm9jdXNLZXlNYW5hZ2VyPEJyblBhZ2luYXRlZFRhYkhlYWRlckl0ZW0+O1xuXG5cdC8qKiBDYWNoZWQgdGV4dCBjb250ZW50IG9mIHRoZSBoZWFkZXIuICovXG5cdHByaXZhdGUgX2N1cnJlbnRUZXh0Q29udGVudCE6IHN0cmluZztcblxuXHQvKiogU3RyZWFtIHRoYXQgd2lsbCBzdG9wIHRoZSBhdXRvbWF0ZWQgc2Nyb2xsaW5nLiAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IF9zdG9wU2Nyb2xsaW5nID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuXHQvKipcblx0ICogV2hldGhlciBwYWdpbmF0aW9uIHNob3VsZCBiZSBkaXNhYmxlZC4gVGhpcyBjYW4gYmUgdXNlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeVxuXHQgKiBsYXlvdXQgcmVjYWxjdWxhdGlvbnMgaWYgaXQncyBrbm93biB0aGF0IHBhZ2luYXRpb24gd29uJ3QgYmUgcmVxdWlyZWQuXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZVBhZ2luYXRpb24gPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cblx0LyoqIFRoZSBpbmRleCBvZiB0aGUgYWN0aXZlIHRhYi4gKi9cblx0cHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWRJbmRleCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBjdXJyZW50VGFiS2V5ID0gdGhpcy5fYWN0aXZlVGFiKCk7XG5cdFx0Y29uc3QgdGFicyA9IHRoaXMuX3RhYnMoKTtcblxuXHRcdGxldCBhY3RpdmVJbmRleCA9IDA7XG5cdFx0aWYgKGN1cnJlbnRUYWJLZXkgJiYgdGhpcy5pdGVtcygpKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50VGFiID0gdGFic1tjdXJyZW50VGFiS2V5XTtcblx0XHRcdGlmIChjdXJyZW50VGFiKSB7XG5cdFx0XHRcdGFjdGl2ZUluZGV4ID0gdGhpcy5pdGVtcygpLmluZGV4T2YoY3VycmVudFRhYi50cmlnZ2VyKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYWN0aXZlSW5kZXg7XG5cdH0pO1xuXG5cdC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIG9wdGlvbiBpcyBzZWxlY3RlZC4gKi9cblx0cHVibGljIHJlYWRvbmx5IHNlbGVjdEZvY3VzZWRJbmRleCA9IG91dHB1dDxudW1iZXI+KCk7XG5cblx0LyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIGxhYmVsIGlzIGZvY3VzZWQuICovXG5cdHB1YmxpYyByZWFkb25seSBpbmRleEZvY3VzZWQgPSBvdXRwdXQ8bnVtYmVyPigpO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX3NoYXJlZFJlc2l6ZU9ic2VydmVyID0gaW5qZWN0KFNoYXJlZFJlc2l6ZU9ic2VydmVyKTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cblx0cHJvdGVjdGVkIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmKTtcblx0cHJvdGVjdGVkIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF92aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyID0gaW5qZWN0KFZpZXdwb3J0UnVsZXIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9kaXIgPSBpbmplY3QoRGlyZWN0aW9uYWxpdHksIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX25nWm9uZTogTmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3BsYXRmb3JtOiBQbGF0Zm9ybSA9IGluamVjdChQbGF0Zm9ybSk7XG5cdHB1YmxpYyByZWFkb25seSBhbmltYXRpb25Nb2RlID0gaW5qZWN0KEFOSU1BVElPTl9NT0RVTEVfVFlQRSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHQvLyBCaW5kIHRoZSBgbW91c2VsZWF2ZWAgZXZlbnQgb24gdGhlIG91dHNpZGUgc2luY2UgaXQgZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcgaW4gdGhlIHZpZXcuXG5cdFx0dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdGZyb21FdmVudCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJylcblx0XHRcdFx0LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3N0b3BJbnRlcnZhbCgpO1xuXHRcdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRJbmRleCgpO1xuXG5cdFx0XHRpZiAoc2VsZWN0ZWRJbmRleCAhPT0gMCkge1xuXHRcdFx0XHR0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZCA9IHRydWU7XG5cdFx0XHRcdGlmICh0aGlzLl9rZXlNYW5hZ2VyKSB7XG5cdFx0XHRcdFx0dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHNlbGVjdGVkSW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKiogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGFuIGl0ZW0gdmlhIHRoZSBrZXlib2FyZC4gKi9cblx0cHJvdGVjdGVkIGFic3RyYWN0IF9pdGVtU2VsZWN0ZWQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHQvLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGVzZSBldmVudHMgbWFudWFsbHksIGJlY2F1c2Ugd2Ugd2FudCB0byBiaW5kIHBhc3NpdmUgZXZlbnQgbGlzdGVuZXJzLlxuXHRcdGZyb21FdmVudCh0aGlzLnByZXZpb3VzUGFnaW5hdG9yKCkubmF0aXZlRWxlbWVudCwgJ3RvdWNoc3RhcnQnLCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMpXG5cdFx0XHQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcblx0XHRcdC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9oYW5kbGVQYWdpbmF0b3JQcmVzcygnYmVmb3JlJyk7XG5cdFx0XHR9KTtcblxuXHRcdGZyb21FdmVudCh0aGlzLm5leHRQYWdpbmF0b3IoKS5uYXRpdmVFbGVtZW50LCAndG91Y2hzdGFydCcsIHBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9ucylcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCdhZnRlcicpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRuZ0FmdGVyQ29udGVudEluaXQoKSB7XG5cdFx0Y29uc3QgZGlyQ2hhbmdlID0gdGhpcy5fZGlyID8gdGhpcy5fZGlyLmNoYW5nZSA6IG9ic2VydmFibGVPZignbHRyJyk7XG5cdFx0Ly8gV2UgbmVlZCB0byBkZWJvdW5jZSByZXNpemUgZXZlbnRzIGJlY2F1c2UgdGhlIGFsaWdubWVudCBsb2dpYyBpcyBleHBlbnNpdmUuXG5cdFx0Ly8gSWYgc29tZW9uZSBhbmltYXRlcyB0aGUgd2lkdGggb2YgdGFicywgd2UgZG9uJ3Qgd2FudCB0byByZWFsaWduIG9uIGV2ZXJ5IGFuaW1hdGlvbiBmcmFtZS5cblx0XHQvLyBPbmNlIHdlIGhhdmVuJ3Qgc2VlbiBhbnkgbW9yZSByZXNpemUgZXZlbnRzIGluIHRoZSBsYXN0IDMybXMgKH4yIGFuaW1haW9uIGZyYW1lcykgd2UgY2FuXG5cdFx0Ly8gcmUtYWxpZ24uXG5cdFx0Y29uc3QgcmVzaXplID0gdGhpcy5fc2hhcmVkUmVzaXplT2JzZXJ2ZXJcblx0XHRcdC5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcblx0XHRcdC5waXBlKGRlYm91bmNlVGltZSgzMiksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKTtcblx0XHQvLyBOb3RlOiBXZSBkbyBub3QgYWN0dWFsbHkgbmVlZCB0byB3YXRjaCB0aGVzZSBldmVudHMgZm9yIHByb3BlciBmdW5jdGlvbmluZyBvZiB0aGUgdGFicyxcblx0XHQvLyB0aGUgcmVzaXplIGV2ZW50cyBhYm92ZSBzaG91bGQgY2FwdHVyZSBhbnkgdmlld3BvcnQgcmVzaXplIHRoYXQgd2UgY2FyZSBhYm91dC4gSG93ZXZlcixcblx0XHQvLyByZW1vdmluZyB0aGlzIGlzIGZhaXJseSBicmVha2luZyBmb3Igc2NyZWVuc2hvdCB0ZXN0cywgc28gd2UncmUgbGVhdmluZyBpdCBoZXJlIGZvciBub3cuXG5cdFx0Y29uc3Qgdmlld3BvcnRSZXNpemUgPSB0aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxNTApLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpO1xuXG5cdFx0Y29uc3QgcmVhbGlnbiA9ICgpID0+IHtcblx0XHRcdHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xuXHRcdH07XG5cblx0XHR0aGlzLl9rZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcjxCcm5QYWdpbmF0ZWRUYWJIZWFkZXJJdGVtPih0aGlzLml0ZW1zKCkpXG5cdFx0XHQud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSlcblx0XHRcdC53aXRoSG9tZUFuZEVuZCgpXG5cdFx0XHQud2l0aFdyYXAoKVxuXHRcdFx0Ly8gQWxsb3cgZm9jdXMgdG8gbGFuZCBvbiBkaXNhYmxlZCB0YWJzLCBhcyBwZXIgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2FyaWEtcHJhY3RpY2VzLyNrYmRfZGlzYWJsZWRfY29udHJvbHNcblx0XHRcdC5za2lwUHJlZGljYXRlKCgpID0+IGZhbHNlKTtcblxuXHRcdHRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSh0aGlzLl9zZWxlY3RlZEluZGV4KCkpO1xuXG5cdFx0Ly8gTm90ZTogV2UgZG8gbm90IG5lZWQgdG8gcmVhbGlnbiBhZnRlciB0aGUgZmlyc3QgcmVuZGVyIGZvciBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdGhlIHRhYnNcblx0XHQvLyB0aGUgcmVzaXplIGV2ZW50cyBhYm92ZSBzaG91bGQgZmlyZSB3aGVuIHdlIGZpcnN0IHN0YXJ0IG9ic2VydmluZyB0aGUgZWxlbWVudC4gSG93ZXZlcixcblx0XHQvLyByZW1vdmluZyB0aGlzIGlzIGZhaXJseSBicmVha2luZyBmb3Igc2NyZWVuc2hvdCB0ZXN0cywgc28gd2UncmUgbGVhdmluZyBpdCBoZXJlIGZvciBub3cuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKHJlYWxpZ24sIHsgaW5qZWN0b3I6IHRoaXMuX2luamVjdG9yIH0pO1xuXG5cdFx0Ly8gT24gZGlyIGNoYW5nZSBvciByZXNpemUsIHJlYWxpZ24gdGhlIGluayBiYXIgYW5kIHVwZGF0ZSB0aGUgb3JpZW50YXRpb24gb2Zcblx0XHQvLyB0aGUga2V5IG1hbmFnZXIgaWYgdGhlIGRpcmVjdGlvbiBoYXMgY2hhbmdlZC5cblx0XHRtZXJnZShkaXJDaGFuZ2UsIHZpZXdwb3J0UmVzaXplLCByZXNpemUsIHRoaXMuaXRlbXNDaGFuZ2VzLCB0aGlzLl9pdGVtc1Jlc2l6ZWQoKSlcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gZGVmZXIgdGhpcyB0byBnaXZlIHRoZSBicm93c2VyIHNvbWUgdGltZSB0byByZWNhbGN1bGF0ZVxuXHRcdFx0XHQvLyB0aGUgZWxlbWVudCBkaW1lbnNpb25zLiBUaGUgY2FsbCBoYXMgdG8gYmUgd3JhcHBlZCBpbiBgTmdab25lLnJ1bmAsXG5cdFx0XHRcdC8vIGJlY2F1c2UgdGhlIHZpZXdwb3J0IGNoYW5nZSBoYW5kbGVyIHJ1bnMgb3V0c2lkZSBvZiBBbmd1bGFyLlxuXHRcdFx0XHR0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcblx0XHRcdFx0XHRQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdC8vIENsYW1wIHRoZSBzY3JvbGwgZGlzdGFuY2UsIGJlY2F1c2UgaXQgY2FuIGNoYW5nZSB3aXRoIHRoZSBudW1iZXIgb2YgdGFicy5cblx0XHRcdFx0XHRcdHRoaXMuX3Njcm9sbERpc3RhbmNlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKSwgdGhpcy5fc2Nyb2xsRGlzdGFuY2UpKTtcblx0XHRcdFx0XHRcdHJlYWxpZ24oKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSk7XG5cdFx0XHR9KTtcblxuXHRcdC8vIElmIHRoZXJlIGlzIGEgY2hhbmdlIGluIHRoZSBmb2N1cyBrZXkgbWFuYWdlciB3ZSBuZWVkIHRvIGVtaXQgdGhlIGBpbmRleEZvY3VzZWRgXG5cdFx0Ly8gZXZlbnQgaW4gb3JkZXIgdG8gcHJvdmlkZSBhIHB1YmxpYyBldmVudCB0aGF0IG5vdGlmaWVzIGFib3V0IGZvY3VzIGNoYW5nZXMuIEFsc28gd2UgcmVhbGlnblxuXHRcdC8vIHRoZSB0YWJzIGNvbnRhaW5lciBieSBzY3JvbGxpbmcgdGhlIG5ldyBmb2N1c2VkIHRhYiBpbnRvIHRoZSB2aXNpYmxlIHNlY3Rpb24uXG5cdFx0dGhpcy5fa2V5TWFuYWdlci5jaGFuZ2Uuc3Vic2NyaWJlKChuZXdGb2N1c0luZGV4KSA9PiB7XG5cdFx0XHR0aGlzLmluZGV4Rm9jdXNlZC5lbWl0KG5ld0ZvY3VzSW5kZXgpO1xuXHRcdFx0dGhpcy5fc2V0VGFiRm9jdXMobmV3Rm9jdXNJbmRleCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKiogU2VuZHMgYW55IGNoYW5nZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIGxheW91dCBvZiB0aGUgaXRlbXMuICovXG5cdHByaXZhdGUgX2l0ZW1zUmVzaXplZCgpOiBPYnNlcnZhYmxlPFJlc2l6ZU9ic2VydmVyRW50cnlbXT4ge1xuXHRcdGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiBFTVBUWTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtc0NoYW5nZXMucGlwZShcblx0XHRcdHN0YXJ0V2l0aCh0aGlzLml0ZW1zKCkpLFxuXHRcdFx0c3dpdGNoTWFwKFxuXHRcdFx0XHQodGFiSXRlbXM6IFJlYWRvbmx5QXJyYXk8QnJuUGFnaW5hdGVkVGFiSGVhZGVySXRlbT4pID0+XG5cdFx0XHRcdFx0bmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxSZXNpemVPYnNlcnZlckVudHJ5W10+KSA9PlxuXHRcdFx0XHRcdFx0dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IG9ic2VydmVyLm5leHQoZW50cmllcykpO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHRhYkl0ZW0gb2YgdGFiSXRlbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNpemVPYnNlcnZlci5vYnNlcnZlKHRhYkl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdCksXG5cdFx0XHQpLFxuXHRcdFx0Ly8gU2tpcCB0aGUgZmlyc3QgZW1pdCBzaW5jZSB0aGUgcmVzaXplIG9ic2VydmVyIGVtaXRzIHdoZW4gYW4gaXRlbVxuXHRcdFx0Ly8gaXMgb2JzZXJ2ZWQgZm9yIG5ldyBpdGVtcyB3aGVuIHRoZSB0YWIgaXMgYWxyZWFkeSBpbnNlcnRlZFxuXHRcdFx0c2tpcCgxKSxcblx0XHRcdC8vIFNraXAgZW1pc3Npb25zIHdoZXJlIGFsbCB0aGUgZWxlbWVudHMgYXJlIGludmlzaWJsZSBzaW5jZSB3ZSBkb24ndCB3YW50XG5cdFx0XHQvLyB0aGUgaGVhZGVyIHRvIHRyeSBhbmQgcmUtcmVuZGVyIHdpdGggaW52YWxpZCBtZWFzdXJlbWVudHMuIFNlZSAjMjU1NzQuXG5cdFx0XHRmaWx0ZXIoKGVudHJpZXMpID0+IGVudHJpZXMuc29tZSgoZSkgPT4gZS5jb250ZW50UmVjdC53aWR0aCA+IDAgJiYgZS5jb250ZW50UmVjdC5oZWlnaHQgPiAwKSksXG5cdFx0KTtcblx0fVxuXG5cdG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcblx0XHQvLyBJZiB0aGUgbnVtYmVyIG9mIHRhYiBsYWJlbHMgaGF2ZSBjaGFuZ2VkLCBjaGVjayBpZiBzY3JvbGxpbmcgc2hvdWxkIGJlIGVuYWJsZWRcblx0XHRpZiAodGhpcy5fdGFiTGFiZWxDb3VudCAhPT0gdGhpcy5pdGVtcygpLmxlbmd0aCkge1xuXHRcdFx0dGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XG5cdFx0XHR0aGlzLl90YWJMYWJlbENvdW50ID0gdGhpcy5pdGVtcygpLmxlbmd0aDtcblx0XHRcdHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBzZWxlY3RlZCBpbmRleCBoYXMgY2hhbmdlZCwgc2Nyb2xsIHRvIHRoZSBsYWJlbCBhbmQgY2hlY2sgaWYgdGhlIHNjcm9sbGluZyBjb250cm9sc1xuXHRcdC8vIHNob3VsZCBiZSBkaXNhYmxlZC5cblx0XHRpZiAodGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQpIHtcblx0XHRcdHRoaXMuX3Njcm9sbFRvTGFiZWwodGhpcy5fc2VsZWN0ZWRJbmRleCgpKTtcblx0XHRcdHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKTtcblx0XHRcdHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgc2Nyb2xsIGRpc3RhbmNlIGhhcyBiZWVuIGNoYW5nZWQgKHRhYiBzZWxlY3RlZCwgZm9jdXNlZCwgc2Nyb2xsIGNvbnRyb2xzIGFjdGl2YXRlZCksXG5cdFx0Ly8gdGhlbiB0cmFuc2xhdGUgdGhlIGhlYWRlciB0byByZWZsZWN0IHRoaXMuXG5cdFx0aWYgKHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZCkge1xuXHRcdFx0dGhpcy5fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKTtcblx0XHRcdHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGhpcy5fa2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuXHRcdHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCk7XG5cdFx0dGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fc3RvcFNjcm9sbGluZy5jb21wbGV0ZSgpO1xuXHR9XG5cblx0LyoqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIG9uIHRoZSBoZWFkZXIuICovXG5cdF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0Ly8gV2UgZG9uJ3QgaGFuZGxlIGFueSBrZXkgYmluZGluZ3Mgd2l0aCBhIG1vZGlmaWVyIGtleS5cblx0XHRpZiAoaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG5cdFx0XHRjYXNlIEVOVEVSOlxuXHRcdFx0Y2FzZSBTUEFDRTpcblx0XHRcdFx0aWYgKHRoaXMuZm9jdXNJbmRleCAhPT0gdGhpcy5fc2VsZWN0ZWRJbmRleCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMuaXRlbXMoKVt0aGlzLmZvY3VzSW5kZXhdO1xuXG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgIWl0ZW0uZGlzYWJsZWQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0Rm9jdXNlZEluZGV4LmVtaXQodGhpcy5mb2N1c0luZGV4KTtcblx0XHRcdFx0XHRcdHRoaXMuX2l0ZW1TZWxlY3RlZChldmVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5fa2V5TWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayBmb3Igd2hlbiB0aGUgTXV0YXRpb25PYnNlcnZlciBkZXRlY3RzIHRoYXQgdGhlIGNvbnRlbnQgaGFzIGNoYW5nZWQuXG5cdCAqL1xuXHRfb25Db250ZW50Q2hhbmdlcygpIHtcblx0XHRjb25zdCB0ZXh0Q29udGVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtcblxuXHRcdC8vIFdlIG5lZWQgdG8gZGlmZiB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBoZWFkZXIsIGJlY2F1c2UgdGhlIE11dGF0aW9uT2JzZXJ2ZXIgY2FsbGJhY2tcblx0XHQvLyB3aWxsIGZpcmUgZXZlbiBpZiB0aGUgdGV4dCBjb250ZW50IGRpZG4ndCBjaGFuZ2Ugd2hpY2ggaXMgaW5lZmZpY2llbnQgYW5kIGlzIHByb25lXG5cdFx0Ly8gdG8gaW5maW5pdGUgbG9vcHMgaWYgYSBwb29ybHkgY29uc3RydWN0ZWQgZXhwcmVzc2lvbiBpcyBwYXNzZWQgaW4gKHNlZSAjMTQyNDkpLlxuXHRcdGlmICh0ZXh0Q29udGVudCAhPT0gdGhpcy5fY3VycmVudFRleHRDb250ZW50KSB7XG5cdFx0XHR0aGlzLl9jdXJyZW50VGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudCB8fCAnJztcblxuXHRcdFx0Ly8gVGhlIGNvbnRlbnQgb2JzZXJ2ZXIgcnVucyBvdXRzaWRlIHRoZSBgTmdab25lYCBieSBkZWZhdWx0LCB3aGljaFxuXHRcdFx0Ly8gbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGJyaW5nIHRoZSBjYWxsYmFjayBiYWNrIGluIG91cnNlbHZlcy5cblx0XHRcdHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcblx0XHRcdFx0dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdmlldyB3aGV0aGVyIHBhZ2luYXRpb24gc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90LlxuXHQgKlxuXHQgKiBXQVJOSU5HOiBDYWxsaW5nIHRoaXMgbWV0aG9kIGNhbiBiZSB2ZXJ5IGNvc3RseSBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZS4gSXQgc2hvdWxkIGJlIGNhbGxlZFxuXHQgKiBhcyBpbmZyZXF1ZW50bHkgYXMgcG9zc2libGUgZnJvbSBvdXRzaWRlIG9mIHRoZSBUYWJzIGNvbXBvbmVudCBhcyBpdCBjYXVzZXMgYSByZWZsb3cgb2YgdGhlXG5cdCAqIHBhZ2UuXG5cdCAqL1xuXHR1cGRhdGVQYWdpbmF0aW9uKCkge1xuXHRcdHRoaXMuX2NoZWNrUGFnaW5hdGlvbkVuYWJsZWQoKTtcblx0XHR0aGlzLl9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCk7XG5cdFx0dGhpcy5fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKTtcblx0fVxuXG5cdC8qKiBUcmFja3Mgd2hpY2ggZWxlbWVudCBoYXMgZm9jdXM7IHVzZWQgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gKi9cblx0cHVibGljIGdldCBmb2N1c0luZGV4KCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX2tleU1hbmFnZXIgPyAodGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXggPz8gMCkgOiAwO1xuXHR9XG5cblx0LyoqIFdoZW4gdGhlIGZvY3VzIGluZGV4IGlzIHNldCwgd2UgbXVzdCBtYW51YWxseSBzZW5kIGZvY3VzIHRvIHRoZSBjb3JyZWN0IGxhYmVsICovXG5cdHB1YmxpYyBzZXQgZm9jdXNJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG5cdFx0aWYgKCF0aGlzLl9pc1ZhbGlkSW5kZXgodmFsdWUpIHx8IHRoaXMuZm9jdXNJbmRleCA9PT0gdmFsdWUgfHwgIXRoaXMuX2tleU1hbmFnZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgYW4gaW5kZXggaXMgdmFsaWQuICBJZiB0aGUgdGFicyBhcmUgbm90IHJlYWR5IHlldCwgd2UgYXNzdW1lIHRoYXQgdGhlIHVzZXIgaXNcblx0ICogcHJvdmlkaW5nIGEgdmFsaWQgaW5kZXggYW5kIHJldHVybiB0cnVlLlxuXHQgKi9cblx0X2lzVmFsaWRJbmRleChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbXMoKSA/ICEhdGhpcy5pdGVtcygpW2luZGV4XSA6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBmb2N1cyBvbiB0aGUgSFRNTCBlbGVtZW50IGZvciB0aGUgbGFiZWwgd3JhcHBlciBhbmQgc2Nyb2xscyBpdCBpbnRvIHRoZSB2aWV3IGlmXG5cdCAqIHNjcm9sbGluZyBpcyBlbmFibGVkLlxuXHQgKi9cblx0X3NldFRhYkZvY3VzKHRhYkluZGV4OiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKCkpIHtcblx0XHRcdHRoaXMuX3Njcm9sbFRvTGFiZWwodGFiSW5kZXgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLml0ZW1zKCk/Lmxlbmd0aCkge1xuXHRcdFx0dGhpcy5pdGVtcygpW3RhYkluZGV4XS5mb2N1cygpO1xuXG5cdFx0XHQvLyBEbyBub3QgbGV0IHRoZSBicm93c2VyIG1hbmFnZSBzY3JvbGxpbmcgdG8gZm9jdXMgdGhlIGVsZW1lbnQsIHRoaXMgd2lsbCBiZSBoYW5kbGVkXG5cdFx0XHQvLyBieSB1c2luZyB0cmFuc2xhdGlvbi4gSW4gTFRSLCB0aGUgc2Nyb2xsIGxlZnQgc2hvdWxkIGJlIDAuIEluIFJUTCwgdGhlIHNjcm9sbCB3aWR0aFxuXHRcdFx0Ly8gc2hvdWxkIGJlIHRoZSBmdWxsIHdpZHRoIG1pbnVzIHRoZSBvZmZzZXQgd2lkdGguXG5cdFx0XHRjb25zdCBjb250YWluZXJFbCA9IHRoaXMudGFiTGlzdENvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRjb25zdCBkaXIgPSB0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKTtcblxuXHRcdFx0aWYgKGRpciA9PT0gJ2x0cicpIHtcblx0XHRcdFx0Y29udGFpbmVyRWwuc2Nyb2xsTGVmdCA9IDA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb250YWluZXJFbC5zY3JvbGxMZWZ0ID0gY29udGFpbmVyRWwuc2Nyb2xsV2lkdGggLSBjb250YWluZXJFbC5vZmZzZXRXaWR0aDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKiogVGhlIGxheW91dCBkaXJlY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcgYXBwLiAqL1xuXHRfZ2V0TGF5b3V0RGlyZWN0aW9uKCk6IERpcmVjdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2RpciAmJiB0aGlzLl9kaXIudmFsdWUgPT09ICdydGwnID8gJ3J0bCcgOiAnbHRyJztcblx0fVxuXG5cdC8qKiBQZXJmb3JtcyB0aGUgQ1NTIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSB0YWIgbGlzdCB0aGF0IHdpbGwgY2F1c2UgdGhlIGxpc3QgdG8gc2Nyb2xsLiAqL1xuXHRfdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKSB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24oKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNjcm9sbERpc3RhbmNlID0gdGhpcy5zY3JvbGxEaXN0YW5jZTtcblx0XHRjb25zdCB0cmFuc2xhdGVYID0gdGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkgPT09ICdsdHInID8gLXNjcm9sbERpc3RhbmNlIDogc2Nyb2xsRGlzdGFuY2U7XG5cblx0XHQvLyBEb24ndCB1c2UgYHRyYW5zbGF0ZTNkYCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjcmVhdGUgYSBuZXcgbGF5ZXIuIEEgbmV3IGxheWVyXG5cdFx0Ly8gc2VlbXMgdG8gY2F1c2UgZmxpY2tlcmluZyBhbmQgb3ZlcmZsb3cgaW4gSW50ZXJuZXQgRXhwbG9yZXIuIEZvciBleGFtcGxlLCB0aGUgaW5rIGJhclxuXHRcdC8vIGFuZCByaXBwbGVzIHdpbGwgZXhjZWVkIHRoZSBib3VuZGFyaWVzIG9mIHRoZSB2aXNpYmxlIHRhYiBiYXIuXG5cdFx0Ly8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8xMDI3NlxuXHRcdC8vIFdlIHJvdW5kIHRoZSBgdHJhbnNmb3JtYCBoZXJlLCBiZWNhdXNlIHRyYW5zZm9ybXMgd2l0aCBzdWItcGl4ZWwgcHJlY2lzaW9uIGNhdXNlIHNvbWVcblx0XHQvLyBicm93c2VycyB0byBibHVyIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50LlxuXHRcdHRoaXMudGFiTGlzdCgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKHRyYW5zbGF0ZVgpfXB4KWA7XG5cblx0XHQvLyBTZXR0aW5nIHRoZSBgdHJhbnNmb3JtYCBvbiBJRSB3aWxsIGNoYW5nZSB0aGUgc2Nyb2xsIG9mZnNldCBvZiB0aGUgcGFyZW50LCBjYXVzaW5nIHRoZVxuXHRcdC8vIHBvc2l0aW9uIHRvIGJlIHRocm93biBvZmYgaW4gc29tZSBjYXNlcy4gV2UgaGF2ZSB0byByZXNldCBpdCBvdXJzZWx2ZXMgdG8gZW5zdXJlIHRoYXRcblx0XHQvLyBpdCBkb2Vzbid0IGdldCB0aHJvd24gb2ZmLiBOb3RlIHRoYXQgd2Ugc2NvcGUgaXQgb25seSB0byBJRSBhbmQgRWRnZSwgYmVjYXVzZSBtZXNzaW5nXG5cdFx0Ly8gd2l0aCB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRocm93cyBvZmYgQ2hyb21lIDcxKyBpbiBSVEwgbW9kZSAoc2VlICMxNDY4OSkuXG5cdFx0aWYgKHRoaXMuX3BsYXRmb3JtLlRSSURFTlQgfHwgdGhpcy5fcGxhdGZvcm0uRURHRSkge1xuXHRcdFx0dGhpcy50YWJMaXN0Q29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcblx0XHR9XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgZGlzdGFuY2UgaW4gcGl4ZWxzIHRoYXQgdGhlIHRhYiBoZWFkZXIgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIGluIHRoZSBYLWF4aXMuICovXG5cdHB1YmxpYyBnZXQgc2Nyb2xsRGlzdGFuY2UoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2U7XG5cdH1cblx0cHVibGljIHNldCBzY3JvbGxEaXN0YW5jZSh2YWx1ZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5fc2Nyb2xsVG8odmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1vdmVzIHRoZSB0YWIgbGlzdCBpbiB0aGUgJ2JlZm9yZScgb3IgJ2FmdGVyJyBkaXJlY3Rpb24gKHRvd2FyZHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBvclxuXHQgKiB0aGUgZW5kIG9mIHRoZSBsaXN0LCByZXNwZWN0aXZlbHkpLiBUaGUgZGlzdGFuY2UgdG8gc2Nyb2xsIGlzIGNvbXB1dGVkIHRvIGJlIGEgdGhpcmQgb2YgdGhlXG5cdCAqIGxlbmd0aCBvZiB0aGUgdGFiIGxpc3QgdmlldyB3aW5kb3cuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcblx0ICogc2hvdWxkIGJlIGNhbGxlZCBzcGFyaW5nbHkuXG5cdCAqL1xuXHRfc2Nyb2xsSGVhZGVyKGRpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uKSB7XG5cdFx0Y29uc3Qgdmlld0xlbmd0aCA9IHRoaXMudGFiTGlzdENvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cblx0XHQvLyBNb3ZlIHRoZSBzY3JvbGwgZGlzdGFuY2Ugb25lLXRoaXJkIHRoZSBsZW5ndGggb2YgdGhlIHRhYiBsaXN0J3Mgdmlld3BvcnQuXG5cdFx0Y29uc3Qgc2Nyb2xsQW1vdW50ID0gKChkaXJlY3Rpb24gPT09ICdiZWZvcmUnID8gLTEgOiAxKSAqIHZpZXdMZW5ndGgpIC8gMztcblxuXHRcdHJldHVybiB0aGlzLl9zY3JvbGxUbyh0aGlzLl9zY3JvbGxEaXN0YW5jZSArIHNjcm9sbEFtb3VudCk7XG5cdH1cblxuXHQvKiogSGFuZGxlcyBjbGljayBldmVudHMgb24gdGhlIHBhZ2luYXRpb24gYXJyb3dzLiAqL1xuXHRfaGFuZGxlUGFnaW5hdG9yQ2xpY2soZGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24pIHtcblx0XHR0aGlzLl9zdG9wSW50ZXJ2YWwoKTtcblx0XHR0aGlzLl9zY3JvbGxIZWFkZXIoZGlyZWN0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNb3ZlcyB0aGUgdGFiIGxpc3Qgc3VjaCB0aGF0IHRoZSBkZXNpcmVkIHRhYiBsYWJlbCAobWFya2VkIGJ5IGluZGV4KSBpcyBtb3ZlZCBpbnRvIHZpZXcuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcblx0ICogc2hvdWxkIGJlIGNhbGxlZCBzcGFyaW5nbHkuXG5cdCAqL1xuXHRfc2Nyb2xsVG9MYWJlbChsYWJlbEluZGV4OiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbigpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2VsZWN0ZWRMYWJlbCA9IHRoaXMuaXRlbXMoKSA/IHRoaXMuaXRlbXMoKVtsYWJlbEluZGV4XSA6IG51bGw7XG5cblx0XHRpZiAoIXNlbGVjdGVkTGFiZWwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBUaGUgdmlldyBsZW5ndGggaXMgdGhlIHZpc2libGUgd2lkdGggb2YgdGhlIHRhYiBsYWJlbHMuXG5cdFx0Y29uc3Qgdmlld0xlbmd0aCA9IHRoaXMudGFiTGlzdENvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cdFx0Y29uc3QgeyBvZmZzZXRMZWZ0LCBvZmZzZXRXaWR0aCB9ID0gc2VsZWN0ZWRMYWJlbC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRsZXQgbGFiZWxCZWZvcmVQb3M6IG51bWJlcjtcblx0XHRsZXQgbGFiZWxBZnRlclBvczogbnVtYmVyO1xuXHRcdGlmICh0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSA9PT0gJ2x0cicpIHtcblx0XHRcdGxhYmVsQmVmb3JlUG9zID0gb2Zmc2V0TGVmdDtcblx0XHRcdGxhYmVsQWZ0ZXJQb3MgPSBsYWJlbEJlZm9yZVBvcyArIG9mZnNldFdpZHRoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsYWJlbEFmdGVyUG9zID0gdGhpcy50YWJMaXN0SW5uZXIoKS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC0gb2Zmc2V0TGVmdDtcblx0XHRcdGxhYmVsQmVmb3JlUG9zID0gbGFiZWxBZnRlclBvcyAtIG9mZnNldFdpZHRoO1xuXHRcdH1cblxuXHRcdGNvbnN0IGJlZm9yZVZpc2libGVQb3MgPSB0aGlzLnNjcm9sbERpc3RhbmNlO1xuXHRcdGNvbnN0IGFmdGVyVmlzaWJsZVBvcyA9IHRoaXMuc2Nyb2xsRGlzdGFuY2UgKyB2aWV3TGVuZ3RoO1xuXG5cdFx0aWYgKGxhYmVsQmVmb3JlUG9zIDwgYmVmb3JlVmlzaWJsZVBvcykge1xuXHRcdFx0Ly8gU2Nyb2xsIGhlYWRlciB0byBtb3ZlIGxhYmVsIHRvIHRoZSBiZWZvcmUgZGlyZWN0aW9uXG5cdFx0XHR0aGlzLnNjcm9sbERpc3RhbmNlIC09IGJlZm9yZVZpc2libGVQb3MgLSBsYWJlbEJlZm9yZVBvcztcblx0XHR9IGVsc2UgaWYgKGxhYmVsQWZ0ZXJQb3MgPiBhZnRlclZpc2libGVQb3MpIHtcblx0XHRcdC8vIFNjcm9sbCBoZWFkZXIgdG8gbW92ZSBsYWJlbCB0byB0aGUgYWZ0ZXIgZGlyZWN0aW9uXG5cdFx0XHR0aGlzLnNjcm9sbERpc3RhbmNlICs9IE1hdGgubWluKGxhYmVsQWZ0ZXJQb3MgLSBhZnRlclZpc2libGVQb3MsIGxhYmVsQmVmb3JlUG9zIC0gYmVmb3JlVmlzaWJsZVBvcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEV2YWx1YXRlIHdoZXRoZXIgdGhlIHBhZ2luYXRpb24gY29udHJvbHMgc2hvdWxkIGJlIGRpc3BsYXllZC4gSWYgdGhlIHNjcm9sbCB3aWR0aCBvZiB0aGVcblx0ICogdGFiIGxpc3QgaXMgd2lkZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyIGNvbnRhaW5lciwgdGhlbiB0aGUgcGFnaW5hdGlvbiBjb250cm9scyBzaG91bGRcblx0ICogYmUgc2hvd24uXG5cdCAqXG5cdCAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcblx0ICogc2hvdWxkIGJlIGNhbGxlZCBzcGFyaW5nbHkuXG5cdCAqL1xuXHRfY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbigpKSB7XG5cdFx0XHR0aGlzLnNob3dQYWdpbmF0aW9uQ29udHJvbHMuc2V0KGZhbHNlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgaXNFbmFibGVkID0gdGhpcy50YWJMaXN0SW5uZXIoKS5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoID4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG5cdFx0XHRpZiAoIWlzRW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLnNjcm9sbERpc3RhbmNlID0gMDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzRW5hYmxlZCAhPT0gdGhpcy5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKCkpIHtcblx0XHRcdFx0dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2hvd1BhZ2luYXRpb25Db250cm9scy5zZXQoaXNFbmFibGVkKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRXZhbHVhdGUgd2hldGhlciB0aGUgYmVmb3JlIGFuZCBhZnRlciBjb250cm9scyBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogSWYgdGhlIGhlYWRlciBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0IChzY3JvbGwgZGlzdGFuY2UgaXMgZXF1YWwgdG8gMCkgdGhlbiBkaXNhYmxlIHRoZVxuXHQgKiBiZWZvcmUgYnV0dG9uLiBJZiB0aGUgaGVhZGVyIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKHNjcm9sbCBkaXN0YW5jZSBpcyBlcXVhbCB0byB0aGVcblx0ICogbWF4aW11bSBkaXN0YW5jZSB3ZSBjYW4gc2Nyb2xsKSwgdGhlbiBkaXNhYmxlIHRoZSBhZnRlciBidXR0b24uXG5cdCAqXG5cdCAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcblx0ICogc2hvdWxkIGJlIGNhbGxlZCBzcGFyaW5nbHkuXG5cdCAqL1xuXHRfY2hlY2tTY3JvbGxpbmdDb250cm9scygpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbigpKSB7XG5cdFx0XHR0aGlzLmRpc2FibGVTY3JvbGxBZnRlciA9IHRoaXMuZGlzYWJsZVNjcm9sbEJlZm9yZSA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBwYWdpbmF0aW9uIGFycm93cyBzaG91bGQgYmUgYWN0aXZhdGVkLlxuXHRcdFx0dGhpcy5kaXNhYmxlU2Nyb2xsQmVmb3JlID0gdGhpcy5zY3JvbGxEaXN0YW5jZSA9PT0gMDtcblx0XHRcdHRoaXMuZGlzYWJsZVNjcm9sbEFmdGVyID0gdGhpcy5zY3JvbGxEaXN0YW5jZSA9PT0gdGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKTtcblx0XHRcdHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIGluIHBpeGVscyB0aGF0IGNhbiBiZSBzZXQgZm9yIHRoZSBzY3JvbGwgZGlzdGFuY2UuIFRoaXNcblx0ICogaXMgZXF1YWwgdG8gdGhlIGRpZmZlcmVuY2UgaW4gd2lkdGggYmV0d2VlbiB0aGUgdGFiIGxpc3QgY29udGFpbmVyIGFuZCB0YWIgaGVhZGVyIGNvbnRhaW5lci5cblx0ICpcblx0ICogVGhpcyBpcyBhbiBleHBlbnNpdmUgY2FsbCB0aGF0IGZvcmNlcyBhIGxheW91dCByZWZsb3cgdG8gY29tcHV0ZSBib3ggYW5kIHNjcm9sbCBtZXRyaWNzIGFuZFxuXHQgKiBzaG91bGQgYmUgY2FsbGVkIHNwYXJpbmdseS5cblx0ICovXG5cdF9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpOiBudW1iZXIge1xuXHRcdGNvbnN0IGxlbmd0aE9mVGFiTGlzdCA9IHRoaXMudGFiTGlzdElubmVyKCkubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcblx0XHRjb25zdCB2aWV3TGVuZ3RoID0gdGhpcy50YWJMaXN0Q29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcblx0XHRyZXR1cm4gbGVuZ3RoT2ZUYWJMaXN0IC0gdmlld0xlbmd0aCB8fCAwO1xuXHR9XG5cblx0LyoqIFN0b3BzIHRoZSBjdXJyZW50bHktcnVubmluZyBwYWdpbmF0b3IgaW50ZXJ2YWwuICAqL1xuXHRfc3RvcEludGVydmFsKCkge1xuXHRcdHRoaXMuX3N0b3BTY3JvbGxpbmcubmV4dCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHVzZXIgcHJlc3NpbmcgZG93biBvbiBvbmUgb2YgdGhlIHBhZ2luYXRvcnMuXG5cdCAqIFN0YXJ0cyBzY3JvbGxpbmcgdGhlIGhlYWRlciBhZnRlciBhIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUuXG5cdCAqIEBwYXJhbSBkaXJlY3Rpb24gSW4gd2hpY2ggZGlyZWN0aW9uIHRoZSBwYWdpbmF0b3Igc2hvdWxkIGJlIHNjcm9sbGVkLlxuXHQgKi9cblx0X2hhbmRsZVBhZ2luYXRvclByZXNzKGRpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLCBtb3VzZUV2ZW50PzogTW91c2VFdmVudCkge1xuXHRcdC8vIERvbid0IHN0YXJ0IGF1dG8gc2Nyb2xsaW5nIGZvciByaWdodCBtb3VzZSBidXR0b24gY2xpY2tzLiBOb3RlIHRoYXQgd2Ugc2hvdWxkbid0IGhhdmUgdG9cblx0XHQvLyBudWxsIGNoZWNrIHRoZSBgYnV0dG9uYCwgYnV0IHdlIGRvIGl0IHNvIHdlIGRvbid0IGJyZWFrIHRlc3RzIHRoYXQgdXNlIGZha2UgZXZlbnRzLlxuXHRcdGlmIChtb3VzZUV2ZW50ICYmIG1vdXNlRXZlbnQuYnV0dG9uICE9PSBudWxsICYmIG1vdXNlRXZlbnQuYnV0dG9uICE9PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQXZvaWQgb3ZlcmxhcHBpbmcgdGltZXJzLlxuXHRcdHRoaXMuX3N0b3BJbnRlcnZhbCgpO1xuXG5cdFx0Ly8gU3RhcnQgYSB0aW1lciBhZnRlciB0aGUgZGVsYXkgYW5kIGtlZXAgZmlyaW5nIGJhc2VkIG9uIHRoZSBpbnRlcnZhbC5cblx0XHR0aW1lcihIRUFERVJfU0NST0xMX0RFTEFZLCBIRUFERVJfU0NST0xMX0lOVEVSVkFMKVxuXHRcdFx0Ly8gS2VlcCB0aGUgdGltZXIgZ29pbmcgdW50aWwgc29tZXRoaW5nIHRlbGxzIGl0IHRvIHN0b3Agb3IgdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuXG5cdFx0XHQucGlwZSh0YWtlVW50aWwobWVyZ2UodGhpcy5fc3RvcFNjcm9sbGluZywgdGhpcy5fZGVzdHJveWVkKSkpXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgeyBtYXhTY3JvbGxEaXN0YW5jZSwgZGlzdGFuY2UgfSA9IHRoaXMuX3Njcm9sbEhlYWRlcihkaXJlY3Rpb24pO1xuXG5cdFx0XHRcdC8vIFN0b3AgdGhlIHRpbWVyIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIHN0YXJ0IG9yIHRoZSBlbmQuXG5cdFx0XHRcdGlmIChkaXN0YW5jZSA9PT0gMCB8fCBkaXN0YW5jZSA+PSBtYXhTY3JvbGxEaXN0YW5jZSkge1xuXHRcdFx0XHRcdHRoaXMuX3N0b3BJbnRlcnZhbCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGxzIHRoZSBoZWFkZXIgdG8gYSBnaXZlbiBwb3NpdGlvbi5cblx0ICogQHBhcmFtIHBvc2l0aW9uIFBvc2l0aW9uIHRvIHdoaWNoIHRvIHNjcm9sbC5cblx0ICogQHJldHVybnMgSW5mb3JtYXRpb24gb24gdGhlIGN1cnJlbnQgc2Nyb2xsIGRpc3RhbmNlIGFuZCB0aGUgbWF4aW11bS5cblx0ICovXG5cdHByaXZhdGUgX3Njcm9sbFRvKHBvc2l0aW9uOiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbigpKSB7XG5cdFx0XHRyZXR1cm4geyBtYXhTY3JvbGxEaXN0YW5jZTogMCwgZGlzdGFuY2U6IDAgfTtcblx0XHR9XG5cblx0XHRjb25zdCBtYXhTY3JvbGxEaXN0YW5jZSA9IHRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCk7XG5cdFx0dGhpcy5fc2Nyb2xsRGlzdGFuY2UgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihtYXhTY3JvbGxEaXN0YW5jZSwgcG9zaXRpb24pKTtcblxuXHRcdC8vIE1hcmsgdGhhdCB0aGUgc2Nyb2xsIGRpc3RhbmNlIGhhcyBjaGFuZ2VkIHNvIHRoYXQgYWZ0ZXIgdGhlIHZpZXcgaXMgY2hlY2tlZCwgdGhlIENTU1xuXHRcdC8vIHRyYW5zZm9ybWF0aW9uIGNhbiBtb3ZlIHRoZSBoZWFkZXIuXG5cdFx0dGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkID0gdHJ1ZTtcblx0XHR0aGlzLl9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCk7XG5cblx0XHRyZXR1cm4geyBtYXhTY3JvbGxEaXN0YW5jZSwgZGlzdGFuY2U6IHRoaXMuX3Njcm9sbERpc3RhbmNlIH07XG5cdH1cbn1cbiJdfQ==","import { BrnTabs } from './lib/brn-tabs';\nimport { BrnTabsContent } from './lib/brn-tabs-content';\nimport { BrnTabsList } from './lib/brn-tabs-list';\nimport { BrnTabsTrigger } from './lib/brn-tabs-trigger';\nexport * from './lib/brn-tabs';\nexport * from './lib/brn-tabs-content';\nexport * from './lib/brn-tabs-list';\nexport * from './lib/brn-tabs-paginated-list';\nexport * from './lib/brn-tabs-trigger';\nexport const BrnTabsImports = [BrnTabs, BrnTabsList, BrnTabsTrigger, BrnTabsContent];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3RhYnMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcm5UYWJzIH0gZnJvbSAnLi9saWIvYnJuLXRhYnMnO1xuaW1wb3J0IHsgQnJuVGFic0NvbnRlbnQgfSBmcm9tICcuL2xpYi9icm4tdGFicy1jb250ZW50JztcbmltcG9ydCB7IEJyblRhYnNMaXN0IH0gZnJvbSAnLi9saWIvYnJuLXRhYnMtbGlzdCc7XG5pbXBvcnQgeyBCcm5UYWJzVHJpZ2dlciB9IGZyb20gJy4vbGliL2Jybi10YWJzLXRyaWdnZXInO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9icm4tdGFicyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icm4tdGFicy1jb250ZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Jybi10YWJzLWxpc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJuLXRhYnMtcGFnaW5hdGVkLWxpc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJuLXRhYnMtdHJpZ2dlcic7XG5cbmV4cG9ydCBjb25zdCBCcm5UYWJzSW1wb3J0cyA9IFtCcm5UYWJzLCBCcm5UYWJzTGlzdCwgQnJuVGFic1RyaWdnZXIsIEJyblRhYnNDb250ZW50XSBhcyBjb25zdDtcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnRhbi1uZy1icmFpbi10YWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9icmFpbi90YWJzL3NyYy9zcGFydGFuLW5nLWJyYWluLXRhYnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["observableOf"],"mappings":"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"}
|
|
@@ -136,10 +136,10 @@ class BrnToggleGroup {
|
|
|
136
136
|
this._onChange(value);
|
|
137
137
|
this.change.emit(new BrnButtonToggleChange(source, this.value()));
|
|
138
138
|
}
|
|
139
|
-
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
140
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
139
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: BrnToggleGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
140
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.7", type: BrnToggleGroup, isStandalone: true, selector: "[brnToggleGroup],brn-toggle-group", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, nullable: { classPropertyName: "nullable", publicName: "nullable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange", change: "change" }, host: { attributes: { "role": "group" }, listeners: { "focusout": "onTouched()" }, properties: { "attr.aria-disabled": "disabledState()", "attr.data-disabled": "disabledState()" } }, providers: [provideBrnToggleGroup(BrnToggleGroup), BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR], exportAs: ["brnToggleGroup"], ngImport: i0 });
|
|
141
141
|
}
|
|
142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
142
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: BrnToggleGroup, decorators: [{
|
|
143
143
|
type: Directive,
|
|
144
144
|
args: [{
|
|
145
145
|
selector: '[brnToggleGroup],brn-toggle-group',
|
|
@@ -201,10 +201,10 @@ class BrnToggleGroupItem {
|
|
|
201
201
|
this.state.set(this._isOn() ? 'off' : 'on');
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
|
-
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
205
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
204
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: BrnToggleGroupItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
205
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.7", type: BrnToggleGroupItem, isStandalone: true, selector: "button[brnToggleGroupItem]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { state: "stateChange" }, host: { listeners: { "click": "toggle()" }, properties: { "id": "id()", "attr.disabled": "_disabled() ? true : null", "attr.data-disabled": "_disabled() ? true : null", "attr.data-state": "_state()", "attr.aria-pressed": "_isOn()", "attr.aria-label": "ariaLabel() || null", "type": "type()" } }, ngImport: i0 });
|
|
206
206
|
}
|
|
207
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
207
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: BrnToggleGroupItem, decorators: [{
|
|
208
208
|
type: Directive,
|
|
209
209
|
args: [{
|
|
210
210
|
selector: 'button[brnToggleGroupItem]',
|