@koobiq/components 18.39.0 → 19.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/accordion-content.d.ts +2 -2
- package/accordion/accordion-content.directive.d.ts +11 -0
- package/accordion/accordion-header.d.ts +2 -2
- package/accordion/accordion-header.directive.d.ts +7 -0
- package/accordion/accordion-item.d.ts +2 -2
- package/accordion/accordion-item.directive.d.ts +72 -0
- package/accordion/accordion-root.directive.d.ts +64 -0
- package/accordion/accordion-trigger.component.d.ts +2 -2
- package/accordion/accordion-trigger.directive.d.ts +13 -0
- package/accordion/accordion.component.d.ts +2 -4
- package/accordion/accordion.module.d.ts +7 -7
- package/accordion/public-api.d.ts +5 -0
- package/alert/_alert-theme.scss +4 -16
- package/alert/alert-tokens.scss +6 -12
- package/alert/alert.component.d.ts +5 -12
- package/alert/alert.module.d.ts +4 -4
- package/app-switcher/app-switcher.d.ts +8 -7
- package/autocomplete/autocomplete-origin.directive.d.ts +1 -1
- package/autocomplete/autocomplete-trigger.directive.d.ts +1 -1
- package/autocomplete/autocomplete.component.d.ts +1 -1
- package/autocomplete/autocomplete.module.d.ts +7 -7
- package/badge/badge.component.d.ts +3 -3
- package/badge/badge.module.d.ts +4 -4
- package/breadcrumbs/breadcrumbs.d.ts +3 -2
- package/breadcrumbs/public-api.d.ts +2 -0
- package/breadcrumbs/roving-focus-group.directive.d.ts +50 -0
- package/breadcrumbs/roving-focus-item.directive.d.ts +50 -0
- package/breadcrumbs/utils.d.ts +19 -0
- package/button/button.component.d.ts +2 -2
- package/button/button.module.d.ts +6 -6
- package/button-toggle/_button-toggle-theme.scss +30 -27
- package/button-toggle/button-toggle.component.d.ts +2 -2
- package/button-toggle/button-toggle.module.d.ts +4 -4
- package/button-toggle/button-toggle.scss +2 -2
- package/checkbox/checkbox-module.d.ts +4 -4
- package/checkbox/checkbox-required-validator.d.ts +1 -1
- package/checkbox/checkbox.d.ts +1 -1
- package/checkbox/checkbox.scss +5 -21
- package/code-block/code-block.scss +2 -2
- package/core/common-behaviors/index.d.ts +0 -1
- package/core/formatters/date/formatter.pipe.d.ts +13 -0
- package/core/formatters/index.d.ts +4 -4
- package/core/formatters/number/formatter.d.ts +3 -3
- package/core/forms/forms-module.d.ts +1 -1
- package/core/forms/forms.directive.d.ts +2 -2
- package/core/highlight/highlight.pipe.d.ts +1 -1
- package/core/highlight/index.d.ts +3 -3
- package/core/line/line.d.ts +1 -6
- package/core/locales/en-US.d.ts +8 -0
- package/core/locales/es-LA.d.ts +8 -0
- package/core/locales/locale-service.d.ts +40 -0
- package/core/locales/pt-BR.d.ts +8 -0
- package/core/locales/ru-RU.d.ts +8 -0
- package/core/locales/tk-TM.d.ts +8 -0
- package/core/locales/types.d.ts +21 -0
- package/core/option/_option-theme.scss +5 -2
- package/core/option/action.d.ts +1 -1
- package/core/option/optgroup.d.ts +1 -1
- package/core/option/option-module.d.ts +5 -5
- package/core/option/option.d.ts +5 -1
- package/core/pop-up/constants.d.ts +4 -0
- package/core/pop-up/pop-up-trigger.d.ts +5 -5
- package/core/pop-up/pop-up.d.ts +1 -1
- package/core/select/common.d.ts +1 -1
- package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +1 -1
- package/core/selection/pseudo-checkbox/pseudo-checkbox.module.d.ts +3 -3
- package/core/styles/common/_select.scss +1 -1
- package/core/styles/common/_visually-hidden.scss +1 -0
- package/core/styles/theming/_scrollbar-theme.scss +19 -12
- package/core/utils/utils.d.ts +3 -0
- package/datepicker/calendar-body.component.d.ts +1 -1
- package/datepicker/calendar-header.component.d.ts +1 -1
- package/datepicker/calendar.component.d.ts +1 -1
- package/datepicker/datepicker-input.directive.d.ts +2 -2
- package/datepicker/datepicker-module.d.ts +15 -15
- package/datepicker/datepicker-toggle.component.d.ts +2 -2
- package/datepicker/datepicker.component.d.ts +2 -2
- package/datepicker/month-view.component.d.ts +1 -1
- package/divider/divider.component.d.ts +5 -1
- package/divider/divider.module.d.ts +3 -3
- package/dl/dl.component.d.ts +3 -3
- package/dl/dl.module.d.ts +4 -4
- package/dropdown/dropdown-content.directive.d.ts +1 -1
- package/dropdown/dropdown-item.component.d.ts +1 -1
- package/dropdown/dropdown-trigger.directive.d.ts +1 -1
- package/dropdown/dropdown.component.d.ts +1 -1
- package/dropdown/dropdown.module.d.ts +8 -8
- package/dropdown/dropdown.scss +1 -0
- package/ellipsis-center/ellipsis-center.directive.d.ts +2 -2
- package/empty-state/empty-state.component.d.ts +5 -5
- package/empty-state/empty-state.module.d.ts +4 -4
- package/fesm2022/koobiq-components-accordion.mjs +459 -40
- package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
- package/fesm2022/koobiq-components-actions-panel.mjs +18 -18
- package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-alert.mjs +28 -36
- package/fesm2022/koobiq-components-alert.mjs.map +1 -1
- package/fesm2022/koobiq-components-app-switcher.mjs +66 -66
- package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
- package/fesm2022/koobiq-components-autocomplete.mjs +31 -25
- package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
- package/fesm2022/koobiq-components-badge.mjs +20 -21
- package/fesm2022/koobiq-components-badge.mjs.map +1 -1
- package/fesm2022/koobiq-components-breadcrumbs.mjs +339 -36
- package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/koobiq-components-button-toggle.mjs +25 -22
- package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-button.mjs +25 -26
- package/fesm2022/koobiq-components-button.mjs.map +1 -1
- package/fesm2022/koobiq-components-checkbox.mjs +18 -16
- package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
- package/fesm2022/koobiq-components-clamped-text.mjs +9 -9
- package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
- package/fesm2022/koobiq-components-code-block.mjs +15 -16
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-content-panel.mjs +55 -57
- package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-core.mjs +379 -367
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +107 -91
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-divider.mjs +16 -14
- package/fesm2022/koobiq-components-divider.mjs.map +1 -1
- package/fesm2022/koobiq-components-dl.mjs +19 -20
- package/fesm2022/koobiq-components-dl.mjs.map +1 -1
- package/fesm2022/koobiq-components-dropdown.mjs +47 -48
- package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-dynamic-translation.mjs +16 -19
- package/fesm2022/koobiq-components-dynamic-translation.mjs.map +1 -1
- package/fesm2022/koobiq-components-ellipsis-center.mjs +10 -10
- package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-empty-state.mjs +26 -27
- package/fesm2022/koobiq-components-empty-state.mjs.map +1 -1
- package/fesm2022/koobiq-components-file-upload.mjs +402 -152
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +293 -258
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-form-field.mjs +84 -92
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-icon.mjs +18 -18
- package/fesm2022/koobiq-components-icon.mjs.map +1 -1
- package/fesm2022/koobiq-components-inline-edit.mjs +33 -37
- package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
- package/fesm2022/koobiq-components-input.mjs +31 -30
- package/fesm2022/koobiq-components-input.mjs.map +1 -1
- package/fesm2022/koobiq-components-link.mjs +11 -10
- package/fesm2022/koobiq-components-link.mjs.map +1 -1
- package/fesm2022/koobiq-components-list.mjs +47 -45
- package/fesm2022/koobiq-components-list.mjs.map +1 -1
- package/fesm2022/koobiq-components-loader-overlay.mjs +27 -28
- package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
- package/fesm2022/koobiq-components-markdown.mjs +14 -14
- package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +76 -64
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar-ic.mjs +76 -54
- package/fesm2022/koobiq-components-navbar-ic.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar.mjs +77 -66
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-notification-center.mjs +31 -32
- package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-overflow-items.mjs +16 -19
- package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
- package/fesm2022/koobiq-components-popover.mjs +55 -46
- package/fesm2022/koobiq-components-popover.mjs.map +1 -1
- package/fesm2022/koobiq-components-progress-bar.mjs +18 -19
- package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-progress-spinner.mjs +22 -23
- package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
- package/fesm2022/koobiq-components-radio.mjs +20 -16
- package/fesm2022/koobiq-components-radio.mjs.map +1 -1
- package/fesm2022/koobiq-components-resizer.mjs +10 -12
- package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
- package/fesm2022/koobiq-components-risk-level.mjs +19 -12
- package/fesm2022/koobiq-components-risk-level.mjs.map +1 -1
- package/fesm2022/koobiq-components-scrollbar.mjs +17 -18
- package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-search-expandable.mjs +19 -19
- package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +113 -74
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidebar.mjs +16 -23
- package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidepanel.mjs +61 -55
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-split-button.mjs +12 -12
- package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
- package/fesm2022/koobiq-components-splitter.mjs +24 -25
- package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
- package/fesm2022/koobiq-components-table.mjs +17 -18
- package/fesm2022/koobiq-components-table.mjs.map +1 -1
- package/fesm2022/koobiq-components-tabs.mjs +85 -89
- package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
- package/fesm2022/koobiq-components-tags.mjs +43 -47
- package/fesm2022/koobiq-components-tags.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +10 -11
- package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
- package/fesm2022/koobiq-components-time-range.mjs +38 -40
- package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
- package/fesm2022/koobiq-components-timepicker.mjs +68 -18
- package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-timezone.mjs +68 -59
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/fesm2022/koobiq-components-title.mjs +23 -11
- package/fesm2022/koobiq-components-title.mjs.map +1 -1
- package/fesm2022/koobiq-components-toast.mjs +23 -24
- package/fesm2022/koobiq-components-toast.mjs.map +1 -1
- package/fesm2022/koobiq-components-toggle.mjs +16 -14
- package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-tooltip.mjs +20 -23
- package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
- package/fesm2022/koobiq-components-top-bar.mjs +18 -20
- package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree-select.mjs +81 -70
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +77 -66
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/fesm2022/koobiq-components-username.mjs +31 -37
- package/fesm2022/koobiq-components-username.mjs.map +1 -1
- package/file-upload/file-upload.d.ts +33 -3
- package/file-upload/file-upload.module.d.ts +15 -15
- package/file-upload/multiple-file-upload.component.d.ts +25 -34
- package/file-upload/{file-drop.d.ts → primitives/file-drop.d.ts} +3 -3
- package/file-upload/primitives/file-picker.d.ts +82 -0
- package/file-upload/primitives/index.d.ts +2 -0
- package/file-upload/public-api.d.ts +2 -1
- package/file-upload/single-file-upload.component.d.ts +25 -18
- package/filter-bar/pipes/pipe-multi-select.d.ts +4 -1
- package/filter-bar/pipes/pipe-multi-tree-select.d.ts +5 -0
- package/icon/_icon-button-theme.scss +2 -1
- package/inline-edit/inline-edit.d.ts +2 -3
- package/input/_input-theme.scss +2 -1
- package/input/input-number-validators.d.ts +2 -2
- package/input/input-number.d.ts +1 -1
- package/input/input-password.d.ts +1 -1
- package/input/input.d.ts +2 -2
- package/input/input.module.d.ts +8 -8
- package/link/_link-theme.scss +3 -0
- package/link/link.component.d.ts +1 -1
- package/link/link.module.d.ts +3 -3
- package/list/_list-theme.scss +6 -0
- package/list/list-selection.component.d.ts +3 -3
- package/list/list.component.d.ts +2 -2
- package/list/list.module.d.ts +6 -6
- package/list/list.scss +1 -0
- package/loader-overlay/loader-overlay.component.d.ts +4 -4
- package/loader-overlay/loader-overlay.module.d.ts +5 -5
- package/loader-overlay/loader-overlay.scss +22 -31
- package/modal/css-unit.pipe.d.ts +1 -1
- package/modal/modal.component.d.ts +1 -1
- package/modal/modal.directive.d.ts +4 -4
- package/modal/modal.module.d.ts +10 -10
- package/modal/modal.scss +1 -1
- package/modal/modal.service.d.ts +1 -1
- package/navbar/_navbar-theme.scss +1 -0
- package/navbar/navbar-brand.component.d.ts +1 -1
- package/navbar/navbar-item.component.d.ts +7 -7
- package/navbar/navbar-toggle.component.d.ts +1 -1
- package/navbar/navbar-toggle.scss +1 -1
- package/navbar/navbar.component.d.ts +4 -4
- package/navbar/navbar.module.d.ts +10 -10
- package/navbar/vertical-navbar.component.d.ts +1 -1
- package/navbar/vertical-navbar.scss +5 -2
- package/navbar-ic/navbar-ic-header.d.ts +3 -0
- package/navbar-ic/navbar-ic-item.d.ts +18 -0
- package/navbar-ic/navbar-ic.d.ts +13 -7
- package/notification-center/notification-center.d.ts +5 -5
- package/overflow-items/overflow-items.d.ts +1 -1
- package/package.json +11 -142
- package/popover/_popover-theme.scss +2 -2
- package/popover/popover-confirm.component.d.ts +2 -2
- package/popover/popover.component.d.ts +9 -9
- package/popover/popover.module.d.ts +9 -9
- package/prebuilt-themes/dark-theme.css +1 -1
- package/prebuilt-themes/light-theme.css +1 -1
- package/prebuilt-themes/theme.css +1 -1
- package/progress-bar/progress-bar.component.d.ts +3 -3
- package/progress-bar/progress-bar.module.d.ts +3 -3
- package/progress-spinner/_progress-spinner-theme.scss +14 -4
- package/progress-spinner/progress-spinner-tokens.scss +2 -0
- package/progress-spinner/progress-spinner.component.d.ts +3 -3
- package/progress-spinner/progress-spinner.module.d.ts +4 -4
- package/progress-spinner/progress-spinner.scss +1 -0
- package/radio/_radio-theme.scss +2 -1
- package/radio/radio-tokens.scss +1 -0
- package/radio/radio.component.d.ts +10 -5
- package/radio/radio.module.d.ts +3 -3
- package/risk-level/risk-level.component.d.ts +4 -1
- package/risk-level/risk-level.module.d.ts +7 -4
- package/schematics/migrations/icons-replacement/README.md +5 -1
- package/schematics/migrations/icons-replacement/index.js +1 -1
- package/schematics/migrations/new-icons-pack/README.md +52 -4
- package/schematics/migrations/new-icons-pack/data.js +1142 -1142
- package/schematics/migrations/new-icons-pack/index.js +18 -7
- package/schematics/migrations/new-icons-pack/migration.json +4570 -0
- package/schematics/migrations/new-icons-pack/replacement.json +18 -0
- package/schematics/migrations/new-icons-pack/schema.json +13 -0
- package/schematics/ng-add/index.js +6 -7
- package/scrollbar/_scrollbar-component-theme.scss +16 -14
- package/select/select-option.directive.d.ts +1 -1
- package/select/select.component.d.ts +6 -5
- package/select/select.module.d.ts +10 -10
- package/sidebar/sidebar.component.d.ts +3 -3
- package/sidebar/sidebar.module.d.ts +3 -3
- package/sidepanel/sidepanel-container.component.d.ts +1 -1
- package/sidepanel/sidepanel-directives.d.ts +5 -5
- package/sidepanel/sidepanel.module.d.ts +9 -9
- package/splitter/splitter.component.d.ts +4 -4
- package/splitter/splitter.module.d.ts +3 -3
- package/table/_table-theme.scss +1 -0
- package/table/table.component.d.ts +2 -2
- package/table/table.module.d.ts +4 -4
- package/tabs/paginated-tab-header.d.ts +1 -1
- package/tabs/tab-body.component.d.ts +2 -2
- package/tabs/tab-content.directive.d.ts +1 -1
- package/tabs/tab-group.component.d.ts +5 -5
- package/tabs/tab-header.component.d.ts +1 -1
- package/tabs/tab-label-wrapper.directive.d.ts +1 -1
- package/tabs/tab-label.directive.d.ts +1 -1
- package/tabs/tab.component.d.ts +3 -3
- package/tabs/tabs.module.d.ts +15 -15
- package/tags/tag-input.d.ts +1 -1
- package/tags/tag-list.component.d.ts +1 -1
- package/tags/tag.component.d.ts +4 -4
- package/tags/tag.module.d.ts +4 -4
- package/textarea/textarea.component.d.ts +1 -1
- package/textarea/textarea.module.d.ts +4 -4
- package/timepicker/timepicker.directive.d.ts +17 -7
- package/timepicker/timepicker.module.d.ts +5 -5
- package/timezone/cities-by-filter.pipe.d.ts +1 -1
- package/timezone/timezone-option.component.d.ts +1 -1
- package/timezone/timezone-option.directive.d.ts +1 -1
- package/timezone/timezone-select.component.d.ts +2 -2
- package/timezone/timezone.module.d.ts +15 -15
- package/timezone/utc-offset.pipe.d.ts +1 -1
- package/title/title.directive.d.ts +4 -1
- package/title/title.module.d.ts +3 -3
- package/toggle/toggle.component.d.ts +1 -1
- package/toggle/toggle.module.d.ts +3 -3
- package/tooltip/_tooltip-theme.scss +5 -6
- package/tooltip/tooltip.component.d.ts +3 -3
- package/tooltip/tooltip.scss +1 -0
- package/top-bar/top-bar.d.ts +1 -1
- package/tree/node.d.ts +1 -1
- package/tree/outlet.d.ts +1 -1
- package/tree/padding.directive.d.ts +1 -1
- package/tree/toggle.d.ts +3 -3
- package/tree/tree-base.d.ts +2 -2
- package/tree/tree-option.component.d.ts +1 -1
- package/tree/tree-option.scss +1 -1
- package/tree/tree-selection.component.d.ts +1 -1
- package/tree/tree.d.ts +1 -1
- package/tree/tree.module.d.ts +11 -11
- package/tree-select/tree-select.component.d.ts +2 -2
- package/tree-select/tree-select.module.d.ts +9 -9
- package/core/common-behaviors/focus-monitor.d.ts +0 -19
- package/esm2022/accordion/accordion-content.mjs +0 -19
- package/esm2022/accordion/accordion-header.mjs +0 -19
- package/esm2022/accordion/accordion-item.mjs +0 -25
- package/esm2022/accordion/accordion-trigger.component.mjs +0 -48
- package/esm2022/accordion/accordion.component.mjs +0 -41
- package/esm2022/accordion/accordion.module.mjs +0 -44
- package/esm2022/accordion/index.mjs +0 -2
- package/esm2022/accordion/koobiq-components-accordion.mjs +0 -5
- package/esm2022/accordion/public-api.mjs +0 -7
- package/esm2022/actions-panel/actions-panel-config.mjs +0 -55
- package/esm2022/actions-panel/actions-panel-container.mjs +0 -217
- package/esm2022/actions-panel/actions-panel-ref.mjs +0 -78
- package/esm2022/actions-panel/actions-panel.mjs +0 -133
- package/esm2022/actions-panel/index.mjs +0 -6
- package/esm2022/actions-panel/koobiq-components-actions-panel.mjs +0 -5
- package/esm2022/actions-panel/module.mjs +0 -21
- package/esm2022/alert/alert.component.mjs +0 -124
- package/esm2022/alert/alert.module.mjs +0 -40
- package/esm2022/alert/index.mjs +0 -2
- package/esm2022/alert/koobiq-components-alert.mjs +0 -5
- package/esm2022/alert/public-api.mjs +0 -3
- package/esm2022/app-switcher/app-switcher-animations.mjs +0 -18
- package/esm2022/app-switcher/app-switcher-dropdown-app.mjs +0 -75
- package/esm2022/app-switcher/app-switcher-dropdown-site.mjs +0 -60
- package/esm2022/app-switcher/app-switcher.mjs +0 -446
- package/esm2022/app-switcher/app-switcher.module.mjs +0 -45
- package/esm2022/app-switcher/index.mjs +0 -2
- package/esm2022/app-switcher/kbq-app-switcher-list-item.mjs +0 -84
- package/esm2022/app-switcher/koobiq-components-app-switcher.mjs +0 -5
- package/esm2022/app-switcher/public-api.mjs +0 -7
- package/esm2022/autocomplete/autocomplete-origin.directive.mjs +0 -21
- package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +0 -540
- package/esm2022/autocomplete/autocomplete.component.mjs +0 -178
- package/esm2022/autocomplete/autocomplete.module.mjs +0 -38
- package/esm2022/autocomplete/index.mjs +0 -2
- package/esm2022/autocomplete/koobiq-components-autocomplete.mjs +0 -5
- package/esm2022/autocomplete/public-api.mjs +0 -5
- package/esm2022/badge/badge.component.mjs +0 -124
- package/esm2022/badge/badge.module.mjs +0 -36
- package/esm2022/badge/index.mjs +0 -2
- package/esm2022/badge/koobiq-components-badge.mjs +0 -5
- package/esm2022/badge/public-api.mjs +0 -3
- package/esm2022/breadcrumbs/breadcrumbs.mjs +0 -268
- package/esm2022/breadcrumbs/breadcrumbs.module.mjs +0 -31
- package/esm2022/breadcrumbs/breadcrumbs.types.mjs +0 -2
- package/esm2022/breadcrumbs/index.mjs +0 -2
- package/esm2022/breadcrumbs/koobiq-components-breadcrumbs.mjs +0 -5
- package/esm2022/breadcrumbs/public-api.mjs +0 -4
- package/esm2022/button/button.component.mjs +0 -180
- package/esm2022/button/button.dropdown-trigger.directive.mjs +0 -28
- package/esm2022/button/button.module.mjs +0 -41
- package/esm2022/button/index.mjs +0 -2
- package/esm2022/button/koobiq-components-button.mjs +0 -5
- package/esm2022/button/public-api.mjs +0 -4
- package/esm2022/button-toggle/button-toggle.component.mjs +0 -384
- package/esm2022/button-toggle/button-toggle.module.mjs +0 -19
- package/esm2022/button-toggle/index.mjs +0 -2
- package/esm2022/button-toggle/koobiq-components-button-toggle.mjs +0 -5
- package/esm2022/button-toggle/public-api.mjs +0 -3
- package/esm2022/checkbox/checkbox-config.mjs +0 -6
- package/esm2022/checkbox/checkbox-module.mjs +0 -19
- package/esm2022/checkbox/checkbox-required-validator.mjs +0 -27
- package/esm2022/checkbox/checkbox.mjs +0 -295
- package/esm2022/checkbox/index.mjs +0 -2
- package/esm2022/checkbox/koobiq-components-checkbox.mjs +0 -5
- package/esm2022/checkbox/public-api.mjs +0 -5
- package/esm2022/clamped-text/clamped-text.mjs +0 -202
- package/esm2022/clamped-text/constants.mjs +0 -20
- package/esm2022/clamped-text/index.mjs +0 -4
- package/esm2022/clamped-text/koobiq-components-clamped-text.mjs +0 -5
- package/esm2022/clamped-text/module.mjs +0 -19
- package/esm2022/code-block/code-block-highlight.mjs +0 -418
- package/esm2022/code-block/code-block.mjs +0 -440
- package/esm2022/code-block/code-block.module.mjs +0 -19
- package/esm2022/code-block/index.mjs +0 -2
- package/esm2022/code-block/koobiq-components-code-block.mjs +0 -5
- package/esm2022/code-block/public-api.mjs +0 -5
- package/esm2022/code-block/types.mjs +0 -2
- package/esm2022/content-panel/content-panel.mjs +0 -432
- package/esm2022/content-panel/index.mjs +0 -3
- package/esm2022/content-panel/koobiq-components-content-panel.mjs +0 -5
- package/esm2022/content-panel/module.mjs +0 -42
- package/esm2022/core/animation/animation.mjs +0 -39
- package/esm2022/core/animation/fade-animations.mjs +0 -9
- package/esm2022/core/animation/index.mjs +0 -4
- package/esm2022/core/animation/select-animations.mjs +0 -45
- package/esm2022/core/common-behaviors/checkbox.mjs +0 -2
- package/esm2022/core/common-behaviors/clipboard.mjs +0 -31
- package/esm2022/core/common-behaviors/color.mjs +0 -89
- package/esm2022/core/common-behaviors/common-module.mjs +0 -76
- package/esm2022/core/common-behaviors/constructor.mjs +0 -2
- package/esm2022/core/common-behaviors/disabled.mjs +0 -19
- package/esm2022/core/common-behaviors/error-state.mjs +0 -50
- package/esm2022/core/common-behaviors/focus-monitor.mjs +0 -37
- package/esm2022/core/common-behaviors/hover.mjs +0 -34
- package/esm2022/core/common-behaviors/index.mjs +0 -14
- package/esm2022/core/common-behaviors/orientation.mjs +0 -2
- package/esm2022/core/common-behaviors/read-state.mjs +0 -33
- package/esm2022/core/common-behaviors/size.mjs +0 -2
- package/esm2022/core/common-behaviors/tabindex.mjs +0 -20
- package/esm2022/core/datetime/date-adapter.mjs +0 -14
- package/esm2022/core/datetime/date-formats.mjs +0 -3
- package/esm2022/core/datetime/index.mjs +0 -3
- package/esm2022/core/error/error-state-matcher.mjs +0 -56
- package/esm2022/core/form-field/field-sizing-content.mjs +0 -117
- package/esm2022/core/form-field/form-field-ref.mjs +0 -10
- package/esm2022/core/form-field/index.mjs +0 -3
- package/esm2022/core/formatters/date/formatter.mjs +0 -25
- package/esm2022/core/formatters/date/formatter.pipe.mjs +0 -380
- package/esm2022/core/formatters/filesize/config.mjs +0 -32
- package/esm2022/core/formatters/filesize/formatter.mjs +0 -43
- package/esm2022/core/formatters/filesize/index.mjs +0 -4
- package/esm2022/core/formatters/filesize/size.mjs +0 -65
- package/esm2022/core/formatters/index.mjs +0 -146
- package/esm2022/core/formatters/number/formatter.mjs +0 -347
- package/esm2022/core/forms/forms-module.mjs +0 -24
- package/esm2022/core/forms/forms.directive.mjs +0 -66
- package/esm2022/core/forms/index.mjs +0 -4
- package/esm2022/core/forms/validators.mjs +0 -184
- package/esm2022/core/highlight/highlight.pipe.mjs +0 -23
- package/esm2022/core/highlight/index.mjs +0 -19
- package/esm2022/core/index.mjs +0 -2
- package/esm2022/core/koobiq-components-core.mjs +0 -5
- package/esm2022/core/line/line.mjs +0 -70
- package/esm2022/core/locales/en-US.mjs +0 -210
- package/esm2022/core/locales/es-LA.mjs +0 -209
- package/esm2022/core/locales/formatters.mjs +0 -193
- package/esm2022/core/locales/index.mjs +0 -10
- package/esm2022/core/locales/locale-service.mjs +0 -173
- package/esm2022/core/locales/locale-service.module.mjs +0 -19
- package/esm2022/core/locales/pt-BR.mjs +0 -209
- package/esm2022/core/locales/ru-RU.mjs +0 -224
- package/esm2022/core/locales/tk-TM.mjs +0 -210
- package/esm2022/core/locales/types.mjs +0 -2
- package/esm2022/core/navbar/index.mjs +0 -2
- package/esm2022/core/navbar/rectangle-item.mjs +0 -40
- package/esm2022/core/option/action-container.mjs +0 -23
- package/esm2022/core/option/action.mjs +0 -107
- package/esm2022/core/option/index.mjs +0 -6
- package/esm2022/core/option/optgroup.mjs +0 -37
- package/esm2022/core/option/option-module.mjs +0 -20
- package/esm2022/core/option/option.mjs +0 -322
- package/esm2022/core/overlay/overlay-position-map.mjs +0 -251
- package/esm2022/core/pop-up/constants.mjs +0 -55
- package/esm2022/core/pop-up/focus-trap-strategy.mjs +0 -6
- package/esm2022/core/pop-up/index.mjs +0 -6
- package/esm2022/core/pop-up/pop-up-styles.mjs +0 -24
- package/esm2022/core/pop-up/pop-up-trigger.mjs +0 -343
- package/esm2022/core/pop-up/pop-up.mjs +0 -152
- package/esm2022/core/public-api.mjs +0 -24
- package/esm2022/core/select/common.mjs +0 -203
- package/esm2022/core/select/constants.mjs +0 -25
- package/esm2022/core/select/errors.mjs +0 -26
- package/esm2022/core/select/events.mjs +0 -2
- package/esm2022/core/select/index.mjs +0 -5
- package/esm2022/core/selection/constants.mjs +0 -6
- package/esm2022/core/selection/index.mjs +0 -4
- package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +0 -43
- package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs +0 -18
- package/esm2022/core/services/measure-scrollbar.service.mjs +0 -42
- package/esm2022/core/services/theme.service.mjs +0 -80
- package/esm2022/core/title/index.mjs +0 -2
- package/esm2022/core/title/title-text-ref.mjs +0 -3
- package/esm2022/core/tokens/index.mjs +0 -2
- package/esm2022/core/tokens/window.mjs +0 -19
- package/esm2022/core/utils/dom.mjs +0 -8
- package/esm2022/core/utils/index.mjs +0 -3
- package/esm2022/core/utils/public-api.mjs +0 -2
- package/esm2022/core/utils/utils.mjs +0 -31
- package/esm2022/core/validation/index.mjs +0 -2
- package/esm2022/core/validation/validation.mjs +0 -27
- package/esm2022/core/version.mjs +0 -3
- package/esm2022/datepicker/calendar-body.component.mjs +0 -87
- package/esm2022/datepicker/calendar-header.component.mjs +0 -164
- package/esm2022/datepicker/calendar.component.mjs +0 -185
- package/esm2022/datepicker/datepicker-animations.mjs +0 -32
- package/esm2022/datepicker/datepicker-errors.mjs +0 -6
- package/esm2022/datepicker/datepicker-input.directive.mjs +0 -1119
- package/esm2022/datepicker/datepicker-intl.mjs +0 -40
- package/esm2022/datepicker/datepicker-module.mjs +0 -103
- package/esm2022/datepicker/datepicker-toggle.component.mjs +0 -170
- package/esm2022/datepicker/datepicker.component.mjs +0 -388
- package/esm2022/datepicker/index.mjs +0 -2
- package/esm2022/datepicker/koobiq-components-datepicker.mjs +0 -5
- package/esm2022/datepicker/month-view.component.mjs +0 -148
- package/esm2022/datepicker/public-api.mjs +0 -11
- package/esm2022/divider/divider.component.mjs +0 -49
- package/esm2022/divider/divider.module.mjs +0 -18
- package/esm2022/divider/index.mjs +0 -2
- package/esm2022/divider/koobiq-components-divider.mjs +0 -5
- package/esm2022/divider/public-api.mjs +0 -3
- package/esm2022/dl/dl.component.mjs +0 -81
- package/esm2022/dl/dl.module.mjs +0 -36
- package/esm2022/dl/index.mjs +0 -2
- package/esm2022/dl/koobiq-components-dl.mjs +0 -5
- package/esm2022/dl/public-api.mjs +0 -3
- package/esm2022/dropdown/dropdown-animations.mjs +0 -41
- package/esm2022/dropdown/dropdown-content.directive.mjs +0 -61
- package/esm2022/dropdown/dropdown-errors.mjs +0 -29
- package/esm2022/dropdown/dropdown-item.component.mjs +0 -150
- package/esm2022/dropdown/dropdown-trigger.directive.mjs +0 -513
- package/esm2022/dropdown/dropdown.component.mjs +0 -293
- package/esm2022/dropdown/dropdown.module.mjs +0 -51
- package/esm2022/dropdown/dropdown.types.mjs +0 -23
- package/esm2022/dropdown/index.mjs +0 -2
- package/esm2022/dropdown/koobiq-components-dropdown.mjs +0 -5
- package/esm2022/dropdown/public-api.mjs +0 -9
- package/esm2022/dynamic-translation/dynamic-translation.mjs +0 -175
- package/esm2022/dynamic-translation/index.mjs +0 -3
- package/esm2022/dynamic-translation/koobiq-components-dynamic-translation.mjs +0 -5
- package/esm2022/dynamic-translation/module.mjs +0 -25
- package/esm2022/ellipsis-center/ellipsis-center.directive.mjs +0 -120
- package/esm2022/ellipsis-center/index.mjs +0 -2
- package/esm2022/ellipsis-center/koobiq-components-ellipsis-center.mjs +0 -5
- package/esm2022/ellipsis-center/public-api.mjs +0 -2
- package/esm2022/empty-state/empty-state.component.mjs +0 -109
- package/esm2022/empty-state/empty-state.module.mjs +0 -44
- package/esm2022/empty-state/index.mjs +0 -2
- package/esm2022/empty-state/koobiq-components-empty-state.mjs +0 -5
- package/esm2022/empty-state/public-api.mjs +0 -3
- package/esm2022/file-upload/file-drop.mjs +0 -87
- package/esm2022/file-upload/file-upload.mjs +0 -71
- package/esm2022/file-upload/file-upload.module.mjs +0 -79
- package/esm2022/file-upload/index.mjs +0 -2
- package/esm2022/file-upload/koobiq-components-file-upload.mjs +0 -5
- package/esm2022/file-upload/multiple-file-upload.component.mjs +0 -306
- package/esm2022/file-upload/public-api.mjs +0 -6
- package/esm2022/file-upload/single-file-upload.component.mjs +0 -257
- package/esm2022/filter-bar/filter-bar-button.mjs +0 -31
- package/esm2022/filter-bar/filter-bar.mjs +0 -213
- package/esm2022/filter-bar/filter-bar.module.mjs +0 -67
- package/esm2022/filter-bar/filter-bar.types.mjs +0 -72
- package/esm2022/filter-bar/filter-refresher.mjs +0 -34
- package/esm2022/filter-bar/filter-reset.mjs +0 -49
- package/esm2022/filter-bar/filter-search.mjs +0 -173
- package/esm2022/filter-bar/filters.mjs +0 -266
- package/esm2022/filter-bar/index.mjs +0 -2
- package/esm2022/filter-bar/koobiq-components-filter-bar.mjs +0 -5
- package/esm2022/filter-bar/pipe-add.mjs +0 -140
- package/esm2022/filter-bar/pipe.directive.mjs +0 -37
- package/esm2022/filter-bar/pipes/base-pipe.mjs +0 -146
- package/esm2022/filter-bar/pipes/pipe-button.mjs +0 -72
- package/esm2022/filter-bar/pipes/pipe-date.mjs +0 -206
- package/esm2022/filter-bar/pipes/pipe-datetime.mjs +0 -208
- package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +0 -188
- package/esm2022/filter-bar/pipes/pipe-multi-tree-select.mjs +0 -260
- package/esm2022/filter-bar/pipes/pipe-readonly.mjs +0 -68
- package/esm2022/filter-bar/pipes/pipe-select.mjs +0 -101
- package/esm2022/filter-bar/pipes/pipe-state.mjs +0 -53
- package/esm2022/filter-bar/pipes/pipe-text.mjs +0 -104
- package/esm2022/filter-bar/pipes/pipe-title.mjs +0 -102
- package/esm2022/filter-bar/pipes/pipe-tree-select.mjs +0 -142
- package/esm2022/filter-bar/public-api.mjs +0 -22
- package/esm2022/form-field/cleaner.mjs +0 -28
- package/esm2022/form-field/error.mjs +0 -20
- package/esm2022/form-field/fieldset.mjs +0 -84
- package/esm2022/form-field/form-field-control.mjs +0 -4
- package/esm2022/form-field/form-field.mjs +0 -447
- package/esm2022/form-field/form-field.module.mjs +0 -87
- package/esm2022/form-field/hint.mjs +0 -36
- package/esm2022/form-field/index.mjs +0 -2
- package/esm2022/form-field/koobiq-components-form-field.mjs +0 -5
- package/esm2022/form-field/label.mjs +0 -19
- package/esm2022/form-field/password-hint.mjs +0 -165
- package/esm2022/form-field/password-toggle.mjs +0 -129
- package/esm2022/form-field/prefix.mjs +0 -19
- package/esm2022/form-field/public-api.mjs +0 -16
- package/esm2022/form-field/reactive-password-hint.mjs +0 -66
- package/esm2022/form-field/stepper.mjs +0 -144
- package/esm2022/form-field/suffix.mjs +0 -18
- package/esm2022/form-field/validate.directive.mjs +0 -190
- package/esm2022/icon/icon-button.component.mjs +0 -64
- package/esm2022/icon/icon-item.component.mjs +0 -31
- package/esm2022/icon/icon.component.mjs +0 -56
- package/esm2022/icon/icon.module.mjs +0 -27
- package/esm2022/icon/index.mjs +0 -2
- package/esm2022/icon/koobiq-components-icon.mjs +0 -5
- package/esm2022/icon/public-api.mjs +0 -5
- package/esm2022/index.mjs +0 -2
- package/esm2022/inline-edit/index.mjs +0 -3
- package/esm2022/inline-edit/inline-edit.mjs +0 -382
- package/esm2022/inline-edit/koobiq-components-inline-edit.mjs +0 -5
- package/esm2022/inline-edit/module.mjs +0 -25
- package/esm2022/input/index.mjs +0 -2
- package/esm2022/input/input-errors.mjs +0 -4
- package/esm2022/input/input-number-validators.mjs +0 -88
- package/esm2022/input/input-number.mjs +0 -386
- package/esm2022/input/input-password.mjs +0 -253
- package/esm2022/input/input-value-accessor.mjs +0 -3
- package/esm2022/input/input.mjs +0 -299
- package/esm2022/input/input.module.mjs +0 -58
- package/esm2022/input/koobiq-components-input.mjs +0 -5
- package/esm2022/input/public-api.mjs +0 -7
- package/esm2022/koobiq-components.mjs +0 -5
- package/esm2022/link/index.mjs +0 -2
- package/esm2022/link/koobiq-components-link.mjs +0 -5
- package/esm2022/link/link.component.mjs +0 -143
- package/esm2022/link/link.module.mjs +0 -20
- package/esm2022/link/public-api.mjs +0 -3
- package/esm2022/list/index.mjs +0 -2
- package/esm2022/list/koobiq-components-list.mjs +0 -5
- package/esm2022/list/list-selection.component.mjs +0 -745
- package/esm2022/list/list.component.mjs +0 -43
- package/esm2022/list/list.module.mjs +0 -60
- package/esm2022/list/public-api.mjs +0 -4
- package/esm2022/loader-overlay/index.mjs +0 -2
- package/esm2022/loader-overlay/koobiq-components-loader-overlay.mjs +0 -5
- package/esm2022/loader-overlay/loader-overlay.component.mjs +0 -110
- package/esm2022/loader-overlay/loader-overlay.module.mjs +0 -44
- package/esm2022/loader-overlay/public-api.mjs +0 -3
- package/esm2022/markdown/index.mjs +0 -2
- package/esm2022/markdown/koobiq-components-markdown.mjs +0 -5
- package/esm2022/markdown/markdown.component.mjs +0 -67
- package/esm2022/markdown/markdown.module.mjs +0 -21
- package/esm2022/markdown/markdown.service.mjs +0 -36
- package/esm2022/markdown/markdown.values.mjs +0 -35
- package/esm2022/markdown/public-api.mjs +0 -5
- package/esm2022/modal/css-unit.pipe.mjs +0 -17
- package/esm2022/modal/index.mjs +0 -2
- package/esm2022/modal/koobiq-components-modal.mjs +0 -5
- package/esm2022/modal/modal-control.service.mjs +0 -89
- package/esm2022/modal/modal-ref.class.mjs +0 -7
- package/esm2022/modal/modal-util.mjs +0 -22
- package/esm2022/modal/modal.component.mjs +0 -540
- package/esm2022/modal/modal.directive.mjs +0 -94
- package/esm2022/modal/modal.module.mjs +0 -78
- package/esm2022/modal/modal.service.mjs +0 -135
- package/esm2022/modal/modal.type.mjs +0 -7
- package/esm2022/modal/public-api.mjs +0 -7
- package/esm2022/navbar/index.mjs +0 -2
- package/esm2022/navbar/koobiq-components-navbar.mjs +0 -5
- package/esm2022/navbar/navbar-brand.component.mjs +0 -105
- package/esm2022/navbar/navbar-item.component.mjs +0 -428
- package/esm2022/navbar/navbar-toggle.component.mjs +0 -88
- package/esm2022/navbar/navbar.component.mjs +0 -251
- package/esm2022/navbar/navbar.module.mjs +0 -84
- package/esm2022/navbar/public-api.mjs +0 -7
- package/esm2022/navbar/vertical-navbar.component.mjs +0 -128
- package/esm2022/navbar-ic/index.mjs +0 -2
- package/esm2022/navbar-ic/koobiq-components-navbar-ic.mjs +0 -5
- package/esm2022/navbar-ic/navbar-ic-header.mjs +0 -74
- package/esm2022/navbar-ic/navbar-ic-item.mjs +0 -390
- package/esm2022/navbar-ic/navbar-ic.animation.mjs +0 -17
- package/esm2022/navbar-ic/navbar-ic.mjs +0 -310
- package/esm2022/navbar-ic/navbar-ic.module.mjs +0 -74
- package/esm2022/navbar-ic/public-api.mjs +0 -5
- package/esm2022/notification-center/index.mjs +0 -2
- package/esm2022/notification-center/koobiq-components-notification-center.mjs +0 -5
- package/esm2022/notification-center/notification-center-animations.mjs +0 -18
- package/esm2022/notification-center/notification-center.mjs +0 -329
- package/esm2022/notification-center/notification-center.module.mjs +0 -38
- package/esm2022/notification-center/notification-center.service.mjs +0 -127
- package/esm2022/notification-center/notification-item.mjs +0 -70
- package/esm2022/notification-center/public-api.mjs +0 -5
- package/esm2022/overflow-items/index.mjs +0 -3
- package/esm2022/overflow-items/koobiq-components-overflow-items.mjs +0 -5
- package/esm2022/overflow-items/module.mjs +0 -25
- package/esm2022/overflow-items/overflow-items.mjs +0 -290
- package/esm2022/popover/index.mjs +0 -2
- package/esm2022/popover/koobiq-components-popover.mjs +0 -5
- package/esm2022/popover/popover-animations.mjs +0 -16
- package/esm2022/popover/popover-confirm.component.mjs +0 -97
- package/esm2022/popover/popover.component.mjs +0 -410
- package/esm2022/popover/popover.module.mjs +0 -67
- package/esm2022/popover/public-api.mjs +0 -5
- package/esm2022/progress-bar/index.mjs +0 -2
- package/esm2022/progress-bar/koobiq-components-progress-bar.mjs +0 -5
- package/esm2022/progress-bar/progress-bar.component.mjs +0 -62
- package/esm2022/progress-bar/progress-bar.module.mjs +0 -32
- package/esm2022/progress-bar/public-api.mjs +0 -3
- package/esm2022/progress-spinner/index.mjs +0 -2
- package/esm2022/progress-spinner/koobiq-components-progress-spinner.mjs +0 -5
- package/esm2022/progress-spinner/progress-spinner.component.mjs +0 -78
- package/esm2022/progress-spinner/progress-spinner.module.mjs +0 -35
- package/esm2022/progress-spinner/public-api.mjs +0 -3
- package/esm2022/public-api.mjs +0 -2
- package/esm2022/radio/index.mjs +0 -2
- package/esm2022/radio/koobiq-components-radio.mjs +0 -5
- package/esm2022/radio/public-api.mjs +0 -3
- package/esm2022/radio/radio.component.mjs +0 -451
- package/esm2022/radio/radio.module.mjs +0 -18
- package/esm2022/resizer/index.mjs +0 -3
- package/esm2022/resizer/koobiq-components-resizer.mjs +0 -5
- package/esm2022/resizer/module.mjs +0 -17
- package/esm2022/resizer/resizer.mjs +0 -135
- package/esm2022/risk-level/index.mjs +0 -2
- package/esm2022/risk-level/koobiq-components-risk-level.mjs +0 -5
- package/esm2022/risk-level/public-api.mjs +0 -3
- package/esm2022/risk-level/risk-level.component.mjs +0 -40
- package/esm2022/risk-level/risk-level.module.mjs +0 -24
- package/esm2022/scrollbar/index.mjs +0 -2
- package/esm2022/scrollbar/koobiq-components-scrollbar.mjs +0 -5
- package/esm2022/scrollbar/public-api.mjs +0 -5
- package/esm2022/scrollbar/scrollbar.component.mjs +0 -133
- package/esm2022/scrollbar/scrollbar.directive.mjs +0 -105
- package/esm2022/scrollbar/scrollbar.module.mjs +0 -25
- package/esm2022/scrollbar/scrollbar.types.mjs +0 -14
- package/esm2022/search-expandable/index.mjs +0 -2
- package/esm2022/search-expandable/koobiq-components-search-expandable.mjs +0 -5
- package/esm2022/search-expandable/public-api.mjs +0 -3
- package/esm2022/search-expandable/search-expandable.mjs +0 -177
- package/esm2022/search-expandable/search-expandable.module.mjs +0 -18
- package/esm2022/select/index.mjs +0 -2
- package/esm2022/select/koobiq-components-select.mjs +0 -5
- package/esm2022/select/public-api.mjs +0 -4
- package/esm2022/select/select-option.directive.mjs +0 -69
- package/esm2022/select/select.component.mjs +0 -1154
- package/esm2022/select/select.module.mjs +0 -81
- package/esm2022/sidebar/index.mjs +0 -2
- package/esm2022/sidebar/koobiq-components-sidebar.mjs +0 -5
- package/esm2022/sidebar/public-api.mjs +0 -3
- package/esm2022/sidebar/sidebar-animations.mjs +0 -23
- package/esm2022/sidebar/sidebar.component.mjs +0 -169
- package/esm2022/sidebar/sidebar.module.mjs +0 -30
- package/esm2022/sidepanel/index.mjs +0 -2
- package/esm2022/sidepanel/koobiq-components-sidepanel.mjs +0 -5
- package/esm2022/sidepanel/public-api.mjs +0 -7
- package/esm2022/sidepanel/sidepanel-animations.mjs +0 -29
- package/esm2022/sidepanel/sidepanel-config.mjs +0 -33
- package/esm2022/sidepanel/sidepanel-container.component.mjs +0 -126
- package/esm2022/sidepanel/sidepanel-directives.mjs +0 -168
- package/esm2022/sidepanel/sidepanel-ref.mjs +0 -60
- package/esm2022/sidepanel/sidepanel.module.mjs +0 -73
- package/esm2022/sidepanel/sidepanel.service.mjs +0 -167
- package/esm2022/split-button/index.mjs +0 -2
- package/esm2022/split-button/koobiq-components-split-button.mjs +0 -5
- package/esm2022/split-button/public-api.mjs +0 -3
- package/esm2022/split-button/split-button.mjs +0 -133
- package/esm2022/split-button/split-button.module.mjs +0 -18
- package/esm2022/splitter/index.mjs +0 -2
- package/esm2022/splitter/koobiq-components-splitter.mjs +0 -5
- package/esm2022/splitter/public-api.mjs +0 -3
- package/esm2022/splitter/splitter.component.mjs +0 -492
- package/esm2022/splitter/splitter.module.mjs +0 -34
- package/esm2022/table/index.mjs +0 -2
- package/esm2022/table/koobiq-components-table.mjs +0 -5
- package/esm2022/table/public-api.mjs +0 -3
- package/esm2022/table/table.component.mjs +0 -36
- package/esm2022/table/table.module.mjs +0 -32
- package/esm2022/tabs/index.mjs +0 -2
- package/esm2022/tabs/koobiq-components-tabs.mjs +0 -5
- package/esm2022/tabs/paginated-tab-header.mjs +0 -490
- package/esm2022/tabs/public-api.mjs +0 -11
- package/esm2022/tabs/tab-body.component.mjs +0 -178
- package/esm2022/tabs/tab-content.directive.mjs +0 -15
- package/esm2022/tabs/tab-group.component.mjs +0 -384
- package/esm2022/tabs/tab-header.component.mjs +0 -60
- package/esm2022/tabs/tab-label-wrapper.directive.mjs +0 -86
- package/esm2022/tabs/tab-label.directive.mjs +0 -17
- package/esm2022/tabs/tab-nav-bar.mjs +0 -292
- package/esm2022/tabs/tab.component.mjs +0 -145
- package/esm2022/tabs/tabs-animations.mjs +0 -24
- package/esm2022/tabs/tabs.module.mjs +0 -95
- package/esm2022/tags/index.mjs +0 -2
- package/esm2022/tags/koobiq-components-tags.mjs +0 -5
- package/esm2022/tags/public-api.mjs +0 -6
- package/esm2022/tags/tag-default-options.mjs +0 -4
- package/esm2022/tags/tag-input.mjs +0 -281
- package/esm2022/tags/tag-list.component.mjs +0 -765
- package/esm2022/tags/tag-text-control.mjs +0 -2
- package/esm2022/tags/tag.component.mjs +0 -647
- package/esm2022/tags/tag.module.mjs +0 -67
- package/esm2022/textarea/index.mjs +0 -2
- package/esm2022/textarea/koobiq-components-textarea.mjs +0 -5
- package/esm2022/textarea/public-api.mjs +0 -3
- package/esm2022/textarea/textarea.component.mjs +0 -300
- package/esm2022/textarea/textarea.module.mjs +0 -20
- package/esm2022/time-range/constants.mjs +0 -42
- package/esm2022/time-range/index.mjs +0 -8
- package/esm2022/time-range/koobiq-components-time-range.mjs +0 -5
- package/esm2022/time-range/module.mjs +0 -36
- package/esm2022/time-range/time-range-editor.mjs +0 -224
- package/esm2022/time-range/time-range-title-as-form-field.mjs +0 -60
- package/esm2022/time-range/time-range-title.mjs +0 -112
- package/esm2022/time-range/time-range.mjs +0 -234
- package/esm2022/time-range/time-range.service.mjs +0 -126
- package/esm2022/time-range/types.mjs +0 -2
- package/esm2022/timepicker/index.mjs +0 -2
- package/esm2022/timepicker/koobiq-components-timepicker.mjs +0 -5
- package/esm2022/timepicker/public-api.mjs +0 -4
- package/esm2022/timepicker/timepicker.constants.mjs +0 -29
- package/esm2022/timepicker/timepicker.directive.mjs +0 -686
- package/esm2022/timepicker/timepicker.module.mjs +0 -29
- package/esm2022/timezone/cities-by-filter.pipe.mjs +0 -17
- package/esm2022/timezone/index.mjs +0 -2
- package/esm2022/timezone/koobiq-components-timezone.mjs +0 -5
- package/esm2022/timezone/public-api.mjs +0 -7
- package/esm2022/timezone/timezone-option.component.mjs +0 -50
- package/esm2022/timezone/timezone-option.directive.mjs +0 -54
- package/esm2022/timezone/timezone-select.component.mjs +0 -55
- package/esm2022/timezone/timezone.models.mjs +0 -2
- package/esm2022/timezone/timezone.module.mjs +0 -82
- package/esm2022/timezone/timezone.utils.mjs +0 -80
- package/esm2022/timezone/utc-offset.pipe.mjs +0 -17
- package/esm2022/title/index.mjs +0 -2
- package/esm2022/title/koobiq-components-title.mjs +0 -5
- package/esm2022/title/public-api.mjs +0 -3
- package/esm2022/title/title.directive.mjs +0 -108
- package/esm2022/title/title.module.mjs +0 -18
- package/esm2022/toast/index.mjs +0 -2
- package/esm2022/toast/koobiq-components-toast.mjs +0 -5
- package/esm2022/toast/public-api.mjs +0 -6
- package/esm2022/toast/toast-animations.mjs +0 -10
- package/esm2022/toast/toast-container.component.mjs +0 -57
- package/esm2022/toast/toast.component.mjs +0 -125
- package/esm2022/toast/toast.module.mjs +0 -26
- package/esm2022/toast/toast.service.mjs +0 -197
- package/esm2022/toast/toast.type.mjs +0 -39
- package/esm2022/toggle/index.mjs +0 -2
- package/esm2022/toggle/koobiq-components-toggle.mjs +0 -5
- package/esm2022/toggle/public-api.mjs +0 -3
- package/esm2022/toggle/toggle.component.mjs +0 -254
- package/esm2022/toggle/toggle.module.mjs +0 -18
- package/esm2022/tooltip/index.mjs +0 -2
- package/esm2022/tooltip/koobiq-components-tooltip.mjs +0 -5
- package/esm2022/tooltip/public-api.mjs +0 -3
- package/esm2022/tooltip/tooltip.animations.mjs +0 -19
- package/esm2022/tooltip/tooltip.component.mjs +0 -400
- package/esm2022/tooltip/tooltip.module.mjs +0 -35
- package/esm2022/top-bar/index.mjs +0 -2
- package/esm2022/top-bar/koobiq-components-top-bar.mjs +0 -5
- package/esm2022/top-bar/module.mjs +0 -25
- package/esm2022/top-bar/public-api.mjs +0 -3
- package/esm2022/top-bar/top-bar.mjs +0 -74
- package/esm2022/tree/control/base-tree-control.mjs +0 -59
- package/esm2022/tree/control/flat-tree-control.filters.mjs +0 -52
- package/esm2022/tree/control/flat-tree-control.mjs +0 -109
- package/esm2022/tree/control/nested-tree-control.mjs +0 -40
- package/esm2022/tree/control/tree-control.mjs +0 -2
- package/esm2022/tree/data-source/flat-data-source.mjs +0 -157
- package/esm2022/tree/data-source/nested-data-source.mjs +0 -28
- package/esm2022/tree/index.mjs +0 -2
- package/esm2022/tree/koobiq-components-tree.mjs +0 -5
- package/esm2022/tree/node.mjs +0 -31
- package/esm2022/tree/outlet.mjs +0 -15
- package/esm2022/tree/padding.directive.mjs +0 -108
- package/esm2022/tree/public-api.mjs +0 -17
- package/esm2022/tree/toggle.mjs +0 -93
- package/esm2022/tree/tree-base.mjs +0 -236
- package/esm2022/tree/tree-errors.mjs +0 -36
- package/esm2022/tree/tree-option.component.mjs +0 -303
- package/esm2022/tree/tree-selection.component.mjs +0 -568
- package/esm2022/tree/tree.mjs +0 -19
- package/esm2022/tree/tree.module.mjs +0 -64
- package/esm2022/tree-select/index.mjs +0 -2
- package/esm2022/tree-select/koobiq-components-tree-select.mjs +0 -5
- package/esm2022/tree-select/public-api.mjs +0 -3
- package/esm2022/tree-select/tree-select.component.mjs +0 -1034
- package/esm2022/tree-select/tree-select.module.mjs +0 -71
- package/esm2022/username/constants.mjs +0 -25
- package/esm2022/username/index.mjs +0 -6
- package/esm2022/username/koobiq-components-username.mjs +0 -5
- package/esm2022/username/module.mjs +0 -35
- package/esm2022/username/types.mjs +0 -32
- package/esm2022/username/username.mjs +0 -129
- package/esm2022/username/username.pipe.mjs +0 -92
|
@@ -1,418 +0,0 @@
|
|
|
1
|
-
import { DOCUMENT } from '@angular/common';
|
|
2
|
-
import { booleanAttribute, Directive, inject, InjectionToken, Input, numberAttribute, Renderer2, SecurityContext } from '@angular/core';
|
|
3
|
-
import { DomSanitizer } from '@angular/platform-browser';
|
|
4
|
-
import { KBQ_WINDOW, kbqInjectNativeElement } from '@koobiq/components/core';
|
|
5
|
-
import hljs from 'highlight.js';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
/**
|
|
8
|
-
* Fallback language for code block if language is not supported/specified.
|
|
9
|
-
*
|
|
10
|
-
* List of supported languages:
|
|
11
|
-
* @link https://highlightjs.readthedocs.io/en/stable/supported-languages.html
|
|
12
|
-
*/
|
|
13
|
-
export const KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE = new InjectionToken('KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE', { factory: () => 'plaintext' });
|
|
14
|
-
/** Utility provider for `KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE`. */
|
|
15
|
-
export const kbqCodeBlockFallbackFileLanguageProvider = (language) => ({
|
|
16
|
-
provide: KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE,
|
|
17
|
-
useValue: language
|
|
18
|
-
});
|
|
19
|
-
/** Directive which applies syntax highlighting to the code block content. */
|
|
20
|
-
export class KbqCodeBlockHighlight {
|
|
21
|
-
/** The code file. */
|
|
22
|
-
set file(file) {
|
|
23
|
-
if (!this.window)
|
|
24
|
-
return;
|
|
25
|
-
let { language } = file;
|
|
26
|
-
if (!language || !hljs.getLanguage(language)) {
|
|
27
|
-
// eslint-disable-next-line no-console
|
|
28
|
-
console.warn(`[KbqCodeBlock] Unknown file language: "${language}". Fall back to "${this.fallbackFileLanguage}".`, file);
|
|
29
|
-
language = this.fallbackFileLanguage;
|
|
30
|
-
}
|
|
31
|
-
const { value: highlightedHTML, language: highlightedLanguage, illegal, relevance } = hljs.highlight(file.content, {
|
|
32
|
-
language: language
|
|
33
|
-
});
|
|
34
|
-
if (illegal) {
|
|
35
|
-
// eslint-disable-next-line no-console
|
|
36
|
-
console.warn('[KbqCodeBlock] File content contains illegal characters.', file);
|
|
37
|
-
}
|
|
38
|
-
if (relevance === 0) {
|
|
39
|
-
// eslint-disable-next-line no-console
|
|
40
|
-
console.warn('[KbqCodeBlock] File content does not match the specified programming language.', file);
|
|
41
|
-
}
|
|
42
|
-
const safeHTML = this.domSanitizer.sanitize(SecurityContext.HTML, highlightedHTML);
|
|
43
|
-
const highlightedHTMLWithLineNumbers = this.window['hljs'].lineNumbersValue(safeHTML, {
|
|
44
|
-
startFrom: this.startFrom,
|
|
45
|
-
singleLine: this.singleLine
|
|
46
|
-
});
|
|
47
|
-
this.renderer.setAttribute(this.nativeElement, 'data-language', highlightedLanguage);
|
|
48
|
-
this.renderer.setProperty(this.nativeElement, 'innerHTML', highlightedHTMLWithLineNumbers);
|
|
49
|
-
}
|
|
50
|
-
constructor() {
|
|
51
|
-
this.nativeElement = kbqInjectNativeElement();
|
|
52
|
-
this.document = inject(DOCUMENT);
|
|
53
|
-
this.renderer = inject(Renderer2);
|
|
54
|
-
this.domSanitizer = inject(DomSanitizer);
|
|
55
|
-
this.fallbackFileLanguage = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE);
|
|
56
|
-
this.window = inject(KBQ_WINDOW);
|
|
57
|
-
/** The starting line number. */
|
|
58
|
-
this.startFrom = 1;
|
|
59
|
-
/** Whether to display line numbers for single line code block. */
|
|
60
|
-
this.singleLine = false;
|
|
61
|
-
this.initLineNumbersPlugin();
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Initialize the HighlightJS line numbers plugin. This method is called once when
|
|
65
|
-
* the component is constructed.
|
|
66
|
-
*/
|
|
67
|
-
initLineNumbersPlugin() {
|
|
68
|
-
if (!this.window)
|
|
69
|
-
return;
|
|
70
|
-
this.window['hljs'] = hljs;
|
|
71
|
-
this.highlightJSLineNumbersPlugin(this.document, this.window);
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* This method is not intended for editing.
|
|
75
|
-
* Changes may lead to unpredictable behavior.
|
|
76
|
-
* Source code: https://github.com/wcoder/highlightjs-line-numbers.js/blob/v2.9.0/src/highlightjs-line-numbers.js
|
|
77
|
-
*/
|
|
78
|
-
highlightJSLineNumbersPlugin(d, w) {
|
|
79
|
-
'use strict';
|
|
80
|
-
if (!w)
|
|
81
|
-
return;
|
|
82
|
-
const TABLE_NAME = 'hljs-ln', LINE_NAME = 'hljs-ln-line', CODE_BLOCK_NAME = 'hljs-ln-code', NUMBERS_BLOCK_NAME = 'hljs-ln-numbers', NUMBER_LINE_NAME = 'hljs-ln-n', DATA_ATTR_NAME = 'data-line-number', BREAK_LINE_REGEXP = /\r\n|\r|\n/g;
|
|
83
|
-
if (w['hljs']) {
|
|
84
|
-
w['hljs'].initLineNumbersOnLoad = initLineNumbersOnLoad;
|
|
85
|
-
w['hljs'].lineNumbersBlock = lineNumbersBlock;
|
|
86
|
-
w['hljs'].lineNumbersBlockSync = lineNumbersBlockSync;
|
|
87
|
-
w['hljs'].lineNumbersValue = lineNumbersValue;
|
|
88
|
-
addStyles();
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
// eslint-disable-next-line no-console
|
|
92
|
-
console.error('highlight.js not detected!');
|
|
93
|
-
}
|
|
94
|
-
function isHljsLnCodeDescendant(domElt) {
|
|
95
|
-
let curElt = domElt;
|
|
96
|
-
while (curElt) {
|
|
97
|
-
if (curElt.className && curElt.className.indexOf('hljs-ln-code') !== -1) {
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
curElt = curElt.parentNode;
|
|
101
|
-
}
|
|
102
|
-
return false;
|
|
103
|
-
}
|
|
104
|
-
function getHljsLnTable(hljsLnDomElt) {
|
|
105
|
-
let curElt = hljsLnDomElt;
|
|
106
|
-
while (curElt.nodeName !== 'TABLE') {
|
|
107
|
-
curElt = curElt.parentNode;
|
|
108
|
-
}
|
|
109
|
-
return curElt;
|
|
110
|
-
}
|
|
111
|
-
// Function to workaround a copy issue with Microsoft Edge.
|
|
112
|
-
// Due to hljs-ln wrapping the lines of code inside a <table> element,
|
|
113
|
-
// itself wrapped inside a <pre> element, window.getSelection().toString()
|
|
114
|
-
// does not contain any line breaks. So we need to get them back using the
|
|
115
|
-
// rendered code in the DOM as reference.
|
|
116
|
-
function edgeGetSelectedCodeLines(selection) {
|
|
117
|
-
// current selected text without line breaks
|
|
118
|
-
const selectionText = selection.toString();
|
|
119
|
-
// get the <td> element wrapping the first line of selected code
|
|
120
|
-
let tdAnchor = selection.anchorNode;
|
|
121
|
-
while (tdAnchor.nodeName !== 'TD') {
|
|
122
|
-
tdAnchor = tdAnchor.parentNode;
|
|
123
|
-
}
|
|
124
|
-
// get the <td> element wrapping the last line of selected code
|
|
125
|
-
let tdFocus = selection.focusNode;
|
|
126
|
-
while (tdFocus.nodeName !== 'TD') {
|
|
127
|
-
tdFocus = tdFocus.parentNode;
|
|
128
|
-
}
|
|
129
|
-
// extract line numbers
|
|
130
|
-
let firstLineNumber = parseInt(tdAnchor.dataset.lineNumber);
|
|
131
|
-
let lastLineNumber = parseInt(tdFocus.dataset.lineNumber);
|
|
132
|
-
// multi-lines copied case
|
|
133
|
-
if (firstLineNumber != lastLineNumber) {
|
|
134
|
-
let firstLineText = tdAnchor.textContent;
|
|
135
|
-
let lastLineText = tdFocus.textContent;
|
|
136
|
-
// if the selection was made backward, swap values
|
|
137
|
-
if (firstLineNumber > lastLineNumber) {
|
|
138
|
-
let tmp = firstLineNumber;
|
|
139
|
-
firstLineNumber = lastLineNumber;
|
|
140
|
-
lastLineNumber = tmp;
|
|
141
|
-
tmp = firstLineText;
|
|
142
|
-
firstLineText = lastLineText;
|
|
143
|
-
lastLineText = tmp;
|
|
144
|
-
}
|
|
145
|
-
// discard not copied characters in first line
|
|
146
|
-
while (selectionText.indexOf(firstLineText) !== 0) {
|
|
147
|
-
firstLineText = firstLineText.slice(1);
|
|
148
|
-
}
|
|
149
|
-
// discard not copied characters in last line
|
|
150
|
-
while (selectionText.lastIndexOf(lastLineText) === -1) {
|
|
151
|
-
lastLineText = lastLineText.slice(0, -1);
|
|
152
|
-
}
|
|
153
|
-
// reconstruct and return the real copied text
|
|
154
|
-
let selectedText = firstLineText;
|
|
155
|
-
const hljsLnTable = getHljsLnTable(tdAnchor);
|
|
156
|
-
for (let i = firstLineNumber + 1; i < lastLineNumber; ++i) {
|
|
157
|
-
const codeLineSel = format('.{0}[{1}="{2}"]', [CODE_BLOCK_NAME, DATA_ATTR_NAME, i]);
|
|
158
|
-
const codeLineElt = hljsLnTable.querySelector(codeLineSel);
|
|
159
|
-
selectedText += '\n' + codeLineElt.textContent;
|
|
160
|
-
}
|
|
161
|
-
selectedText += '\n' + lastLineText;
|
|
162
|
-
return selectedText;
|
|
163
|
-
// single copied line case
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
return selectionText;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
// ensure consistent code copy/paste behavior across all browsers
|
|
170
|
-
// (see https://github.com/wcoder/highlightjs-line-numbers.js/issues/51)
|
|
171
|
-
d.addEventListener('copy', function (e) {
|
|
172
|
-
// get current selection
|
|
173
|
-
const selection = w.getSelection();
|
|
174
|
-
// override behavior when one wants to copy line of codes
|
|
175
|
-
if (isHljsLnCodeDescendant(selection.anchorNode)) {
|
|
176
|
-
let selectionText;
|
|
177
|
-
// workaround an issue with Microsoft Edge as copied line breaks
|
|
178
|
-
// are removed otherwise from the selection string
|
|
179
|
-
if (w.navigator.userAgent.indexOf('Edge') !== -1) {
|
|
180
|
-
selectionText = edgeGetSelectedCodeLines(selection);
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
// other browsers can directly use the selection string
|
|
184
|
-
selectionText = selection.toString();
|
|
185
|
-
}
|
|
186
|
-
e.clipboardData.setData('text/plain', selectionText);
|
|
187
|
-
e.preventDefault();
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
function addStyles() {
|
|
191
|
-
const css = d.createElement('style');
|
|
192
|
-
css.type = 'text/css';
|
|
193
|
-
css.innerHTML = format('.{0}{border-collapse:collapse}' + '.{0} td{padding:0}' + '.{1}:before{content:attr({2})}', [
|
|
194
|
-
TABLE_NAME,
|
|
195
|
-
NUMBER_LINE_NAME,
|
|
196
|
-
DATA_ATTR_NAME
|
|
197
|
-
]);
|
|
198
|
-
d.getElementsByTagName('head')[0].appendChild(css);
|
|
199
|
-
}
|
|
200
|
-
function initLineNumbersOnLoad(options) {
|
|
201
|
-
if (d.readyState === 'interactive' || d.readyState === 'complete') {
|
|
202
|
-
documentReady(options);
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
w.addEventListener('DOMContentLoaded', function () {
|
|
206
|
-
documentReady(options);
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
function documentReady(options) {
|
|
211
|
-
try {
|
|
212
|
-
const blocks = d.querySelectorAll('code.hljs,code.nohighlight');
|
|
213
|
-
for (const i in blocks) {
|
|
214
|
-
if (blocks.hasOwnProperty(i)) {
|
|
215
|
-
if (!isPluginDisabledForBlock(blocks[i])) {
|
|
216
|
-
lineNumbersBlock(blocks[i], options);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
catch (e) {
|
|
222
|
-
// eslint-disable-next-line no-console
|
|
223
|
-
console.error('LineNumbers error: ', e);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
function isPluginDisabledForBlock(element) {
|
|
227
|
-
return element.classList.contains('nohljsln');
|
|
228
|
-
}
|
|
229
|
-
function lineNumbersBlock(element, options) {
|
|
230
|
-
if (typeof element !== 'object')
|
|
231
|
-
return;
|
|
232
|
-
async(function () {
|
|
233
|
-
element.innerHTML = lineNumbersInternal(element, options);
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
function lineNumbersBlockSync(element, options) {
|
|
237
|
-
if (typeof element !== 'object')
|
|
238
|
-
return;
|
|
239
|
-
element.innerHTML = lineNumbersInternal(element, options);
|
|
240
|
-
}
|
|
241
|
-
function lineNumbersValue(value, options) {
|
|
242
|
-
if (typeof value !== 'string')
|
|
243
|
-
return;
|
|
244
|
-
const element = d.createElement('code');
|
|
245
|
-
element.innerHTML = value;
|
|
246
|
-
return lineNumbersInternal(element, options);
|
|
247
|
-
}
|
|
248
|
-
function lineNumbersInternal(element, options) {
|
|
249
|
-
const internalOptions = mapOptions(element, options);
|
|
250
|
-
duplicateMultilineNodes(element);
|
|
251
|
-
return addLineNumbersBlockFor(element.innerHTML, internalOptions);
|
|
252
|
-
}
|
|
253
|
-
function addLineNumbersBlockFor(inputHtml, options) {
|
|
254
|
-
const lines = getLines(inputHtml);
|
|
255
|
-
// if last line contains only carriage return remove it
|
|
256
|
-
if (lines[lines.length - 1].trim() === '') {
|
|
257
|
-
lines.pop();
|
|
258
|
-
}
|
|
259
|
-
if (lines.length > 1 || options.singleLine) {
|
|
260
|
-
let html = '';
|
|
261
|
-
for (let i = 0, l = lines.length; i < l; i++) {
|
|
262
|
-
html += format('<tr>' +
|
|
263
|
-
'<td class="{0} {1}" {3}="{5}">' +
|
|
264
|
-
'<div class="{2}" {3}="{5}"></div>' +
|
|
265
|
-
'</td>' +
|
|
266
|
-
'<td class="{0} {4}" {3}="{5}">' +
|
|
267
|
-
'{6}' +
|
|
268
|
-
'</td>' +
|
|
269
|
-
'</tr>', [
|
|
270
|
-
LINE_NAME,
|
|
271
|
-
NUMBERS_BLOCK_NAME,
|
|
272
|
-
NUMBER_LINE_NAME,
|
|
273
|
-
DATA_ATTR_NAME,
|
|
274
|
-
CODE_BLOCK_NAME,
|
|
275
|
-
i + options.startFrom,
|
|
276
|
-
lines[i].length > 0 ? lines[i] : ' '
|
|
277
|
-
]);
|
|
278
|
-
}
|
|
279
|
-
return format('<table class="{0}">{1}</table>', [TABLE_NAME, html]);
|
|
280
|
-
}
|
|
281
|
-
return inputHtml;
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* @param {HTMLElement} element Code block.
|
|
285
|
-
* @param {Object} options External API options.
|
|
286
|
-
* @returns {Object} Internal API options.
|
|
287
|
-
*/
|
|
288
|
-
function mapOptions(element, options) {
|
|
289
|
-
options = options || {};
|
|
290
|
-
return {
|
|
291
|
-
singleLine: getSingleLineOption(options),
|
|
292
|
-
startFrom: getStartFromOption(element, options)
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
function getSingleLineOption(options) {
|
|
296
|
-
const defaultValue = false;
|
|
297
|
-
if (options.singleLine) {
|
|
298
|
-
return options.singleLine;
|
|
299
|
-
}
|
|
300
|
-
return defaultValue;
|
|
301
|
-
}
|
|
302
|
-
function getStartFromOption(element, options) {
|
|
303
|
-
const defaultValue = 1;
|
|
304
|
-
let startFrom = defaultValue;
|
|
305
|
-
if (isFinite(options.startFrom)) {
|
|
306
|
-
startFrom = options.startFrom;
|
|
307
|
-
}
|
|
308
|
-
// can be overridden because local option is priority
|
|
309
|
-
const value = getAttribute(element, 'data-ln-start-from');
|
|
310
|
-
if (value !== null) {
|
|
311
|
-
startFrom = toNumber(value, defaultValue);
|
|
312
|
-
}
|
|
313
|
-
return startFrom;
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* Recursive method for fix multi-line elements implementation in highlight.js
|
|
317
|
-
* Doing deep passage on child nodes.
|
|
318
|
-
* @param {HTMLElement} element
|
|
319
|
-
*/
|
|
320
|
-
function duplicateMultilineNodes(element) {
|
|
321
|
-
const nodes = element.childNodes;
|
|
322
|
-
for (const node in nodes) {
|
|
323
|
-
if (nodes.hasOwnProperty(node)) {
|
|
324
|
-
const child = nodes[node];
|
|
325
|
-
if (getLinesCount(child.textContent) > 0) {
|
|
326
|
-
if (child.childNodes.length > 0) {
|
|
327
|
-
duplicateMultilineNodes(child);
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
duplicateMultilineNode(child.parentNode);
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Method for fix multi-line elements implementation in highlight.js
|
|
338
|
-
* @param {HTMLElement} element
|
|
339
|
-
*/
|
|
340
|
-
function duplicateMultilineNode(element) {
|
|
341
|
-
const className = element.className;
|
|
342
|
-
if (!/hljs-/.test(className))
|
|
343
|
-
return;
|
|
344
|
-
const lines = getLines(element.innerHTML);
|
|
345
|
-
let result = '';
|
|
346
|
-
for (let i = 0; i < lines.length; i++) {
|
|
347
|
-
const lineText = lines[i].length > 0 ? lines[i] : ' ';
|
|
348
|
-
result += format('<span class="{0}">{1}</span>\n', [className, lineText]);
|
|
349
|
-
}
|
|
350
|
-
element.innerHTML = result.trim();
|
|
351
|
-
}
|
|
352
|
-
function getLines(text) {
|
|
353
|
-
if (text.length === 0)
|
|
354
|
-
return [];
|
|
355
|
-
return text.split(BREAK_LINE_REGEXP);
|
|
356
|
-
}
|
|
357
|
-
function getLinesCount(text) {
|
|
358
|
-
return (text.trim().match(BREAK_LINE_REGEXP) || []).length;
|
|
359
|
-
}
|
|
360
|
-
///
|
|
361
|
-
/// HELPERS
|
|
362
|
-
///
|
|
363
|
-
function async(func) {
|
|
364
|
-
w.setTimeout(func, 0);
|
|
365
|
-
}
|
|
366
|
-
/**
|
|
367
|
-
* {@link https://wcoder.github.io/notes/string-format-for-string-formating-in-javascript}
|
|
368
|
-
* @param {string} format
|
|
369
|
-
* @param {array} args
|
|
370
|
-
*/
|
|
371
|
-
function format(format, args) {
|
|
372
|
-
return format.replace(/\{(\d+)\}/g, function (m, n) {
|
|
373
|
-
return args[n] !== undefined ? args[n] : m;
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
/**
|
|
377
|
-
* @param {HTMLElement} element Code block.
|
|
378
|
-
* @param {String} attrName Attribute name.
|
|
379
|
-
* @returns {String} Attribute value or empty.
|
|
380
|
-
*/
|
|
381
|
-
function getAttribute(element, attrName) {
|
|
382
|
-
return element.hasAttribute(attrName) ? element.getAttribute(attrName) : null;
|
|
383
|
-
}
|
|
384
|
-
/**
|
|
385
|
-
* @param {String} str Source string.
|
|
386
|
-
* @param {Number} fallback Fallback value.
|
|
387
|
-
* @returns Parsed number or fallback value.
|
|
388
|
-
*/
|
|
389
|
-
function toNumber(str, fallback) {
|
|
390
|
-
if (!str)
|
|
391
|
-
return fallback;
|
|
392
|
-
const number = Number(str);
|
|
393
|
-
return isFinite(number) ? number : fallback;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqCodeBlockHighlight, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
397
|
-
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.14", type: KbqCodeBlockHighlight, isStandalone: true, selector: "code[kbqCodeBlockHighlight]", inputs: { file: "file", startFrom: ["startFrom", "startFrom", numberAttribute], singleLine: ["singleLine", "singleLine", booleanAttribute] }, host: { classAttribute: "hljs" }, ngImport: i0 }); }
|
|
398
|
-
}
|
|
399
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqCodeBlockHighlight, decorators: [{
|
|
400
|
-
type: Directive,
|
|
401
|
-
args: [{
|
|
402
|
-
standalone: true,
|
|
403
|
-
selector: 'code[kbqCodeBlockHighlight]',
|
|
404
|
-
host: {
|
|
405
|
-
class: 'hljs'
|
|
406
|
-
}
|
|
407
|
-
}]
|
|
408
|
-
}], ctorParameters: () => [], propDecorators: { file: [{
|
|
409
|
-
type: Input,
|
|
410
|
-
args: [{ required: true }]
|
|
411
|
-
}], startFrom: [{
|
|
412
|
-
type: Input,
|
|
413
|
-
args: [{ transform: numberAttribute }]
|
|
414
|
-
}], singleLine: [{
|
|
415
|
-
type: Input,
|
|
416
|
-
args: [{ transform: booleanAttribute }]
|
|
417
|
-
}] } });
|
|
418
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1ibG9jay1oaWdobGlnaHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2NvZGUtYmxvY2svY29kZS1ibG9jay1oaWdobGlnaHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUNMLGVBQWUsRUFFZixTQUFTLEVBQ1QsZUFBZSxFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sSUFBSSxNQUFNLGNBQWMsQ0FBQzs7QUFHaEM7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxJQUFJLGNBQWMsQ0FDbkUsdUNBQXVDLEVBQ3ZDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUNqQyxDQUFDO0FBRUYsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLENBQUMsUUFBZ0IsRUFBWSxFQUFFLENBQUMsQ0FBQztJQUNyRixPQUFPLEVBQUUscUNBQXFDO0lBQzlDLFFBQVEsRUFBRSxRQUFRO0NBQ3JCLENBQUMsQ0FBQztBQUVILDZFQUE2RTtBQVE3RSxNQUFNLE9BQU8scUJBQXFCO0lBUTlCLHFCQUFxQjtJQUNyQixJQUNJLElBQUksQ0FBQyxJQUFzQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXpCLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFeEIsSUFBSSxDQUFDLFFBQVEsSUFBSSxD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VUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLElBQUksRUFBRTt3QkFDRixLQUFLLEVBQUUsTUFBTTtxQkFDaEI7aUJBQ0o7d0RBV08sSUFBSTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkE2Q2MsU0FBUztzQkFBL0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBR0csVUFBVTtzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBEaXJlY3RpdmUsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIElucHV0LFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBQcm92aWRlcixcbiAgICBSZW5kZXJlcjIsXG4gICAgU2VjdXJpdHlDb250ZXh0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBLQlFfV0lORE9XLCBrYnFJbmplY3ROYXRpdmVFbGVtZW50IH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IGhsanMgZnJvbSAnaGlnaGxpZ2h0LmpzJztcbmltcG9ydCB7IEticUNvZGVCbG9ja0ZpbGUgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBGYWxsYmFjayBsYW5ndWFnZSBmb3IgY29kZSBibG9jayBpZiBsYW5ndWFnZSBpcyBub3Qgc3VwcG9ydGVkL3NwZWNpZmllZC5cbiAqXG4gKiBMaXN0IG9mIHN1cHBvcnRlZCBsYW5ndWFnZXM6XG4gKiBAbGluayBodHRwczovL2hpZ2hsaWdodGpzLnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zdXBwb3J0ZWQtbGFuZ3VhZ2VzLmh0bWxcbiAqL1xuZXhwb3J0IGNvbnN0IEtCUV9DT0RFX0JMT0NLX0ZBTExCQUNLX0ZJTEVfTEFOR1VBR0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcbiAgICAnS0JRX0NPREVfQkxPQ0tfRkFMTEJBQ0tfRklMRV9MQU5HVUFHRScsXG4gICAgeyBmYWN0b3J5OiAoKSA9PiAncGxhaW50ZXh0JyB9XG4pO1xuXG4vKiogVXRpbGl0eSBwcm92aWRlciBmb3IgYEtCUV9DT0RFX0JMT0NLX0ZBTExCQUNLX0ZJTEVfTEFOR1VBR0VgLiAqL1xuZXhwb3J0IGNvbnN0IGticUNvZGVCbG9ja0ZhbGxiYWNrRmlsZUxhbmd1YWdlUHJvdmlkZXIgPSAobGFuZ3VhZ2U6IHN0cmluZyk6IFByb3ZpZGVyID0+ICh7XG4gICAgcHJvdmlkZTogS0JRX0NPREVfQkxPQ0tfRkFMTEJBQ0tfRklMRV9MQU5HVUFHRSxcbiAgICB1c2VWYWx1ZTogbGFuZ3VhZ2Vcbn0pO1xuXG4vKiogRGlyZWN0aXZlIHdoaWNoIGFwcGxpZXMgc3ludGF4IGhpZ2hsaWdodGluZyB0byB0aGUgY29kZSBibG9jayBjb250ZW50LiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2NvZGVba2JxQ29kZUJsb2NrSGlnaGxpZ2h0XScsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2hsanMnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBLYnFDb2RlQmxvY2tIaWdobGlnaHQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlRWxlbWVudCA9IGticUluamVjdE5hdGl2ZUVsZW1lbnQoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0PERvY3VtZW50PihET0NVTUVOVCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9tU2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYWxsYmFja0ZpbGVMYW5ndWFnZSA9IGluamVjdChLQlFfQ09ERV9CTE9DS19GQUxMQkFDS19GSUxFX0xBTkdVQUdFKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdyA9IGluamVjdChLQlFfV0lORE9XKTtcblxuICAgIC8qKiBUaGUgY29kZSBmaWxlLiAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgc2V0IGZpbGUoZmlsZTogS2JxQ29kZUJsb2NrRmlsZSkge1xuICAgICAgICBpZiAoIXRoaXMud2luZG93KSByZXR1cm47XG5cbiAgICAgICAgbGV0IHsgbGFuZ3VhZ2UgfSA9IGZpbGU7XG5cbiAgICAgICAgaWYgKCFsYW5ndWFnZSB8fCAhaGxqcy5nZXRMYW5ndWFnZShsYW5ndWFnZSkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgYFtLYnFDb2RlQmxvY2tdIFVua25vd24gZmlsZSBsYW5ndWFnZTogXCIke2xhbmd1YWdlfVwiLiBGYWxsIGJhY2sgdG8gXCIke3RoaXMuZmFsbGJhY2tGaWxlTGFuZ3VhZ2V9XCIuYCxcbiAgICAgICAgICAgICAgICBmaWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGFuZ3VhZ2UgPSB0aGlzLmZhbGxiYWNrRmlsZUxhbmd1YWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgdmFsdWU6IGhpZ2hsaWdodGVkSFRNTCxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBoaWdobGlnaHRlZExhbmd1YWdlLFxuICAgICAgICAgICAgaWxsZWdhbCxcbiAgICAgICAgICAgIHJlbGV2YW5jZVxuICAgICAgICB9ID0gaGxqcy5oaWdobGlnaHQoZmlsZS5jb250ZW50LCB7XG4gICAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2UhXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpbGxlZ2FsKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbS2JxQ29kZUJsb2NrXSBGaWxlIGNvbnRlbnQgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLicsIGZpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbGV2YW5jZSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW0ticUNvZGVCbG9ja10gRmlsZSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuJywgZmlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzYWZlSFRNTCA9IHRoaXMuZG9tU2FuaXRpemVyLnNhbml0aXplKFNlY3VyaXR5Q29udGV4dC5IVE1MLCBoaWdobGlnaHRlZEhUTUwpO1xuICAgICAgICBjb25zdCBoaWdobGlnaHRlZEhUTUxXaXRoTGluZU51bWJlcnMgPSB0aGlzLndpbmRvd1snaGxqcyddLmxpbmVOdW1iZXJzVmFsdWUoc2FmZUhUTUwsIHtcbiAgICAgICAgICAgIHN0YXJ0RnJvbTogdGhpcy5zdGFydEZyb20sXG4gICAgICAgICAgICBzaW5nbGVMaW5lOiB0aGlzLnNpbmdsZUxpbmVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5uYXRpdmVFbGVtZW50LCAnZGF0YS1sYW5ndWFnZScsIGhpZ2hsaWdodGVkTGFuZ3VhZ2UhKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdpbm5lckhUTUwnLCBoaWdobGlnaHRlZEhUTUxXaXRoTGluZU51bWJlcnMpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgc3RhcnRpbmcgbGluZSBudW1iZXIuICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgc3RhcnRGcm9tOiBudW1iZXIgPSAxO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSBsaW5lIG51bWJlcnMgZm9yIHNpbmdsZSBsaW5lIGNvZGUgYmxvY2suICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNpbmdsZUxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmluaXRMaW5lTnVtYmVyc1BsdWdpbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgdGhlIEhpZ2hsaWdodEpTIGxpbmUgbnVtYmVycyBwbHVnaW4uIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHdoZW5cbiAgICAgKiB0aGUgY29tcG9uZW50IGlzIGNvbnN0cnVjdGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgaW5pdExpbmVOdW1iZXJzUGx1Z2luKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMud2luZG93KSByZXR1cm47XG5cbiAgICAgICAgdGhpcy53aW5kb3dbJ2hsanMnXSA9IGhsanM7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0SlNMaW5lTnVtYmVyc1BsdWdpbih0aGlzLmRvY3VtZW50LCB0aGlzLndpbmRvdyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbm90IGludGVuZGVkIGZvciBlZGl0aW5nLlxuICAgICAqIENoYW5nZXMgbWF5IGxlYWQgdG8gdW5wcmVkaWN0YWJsZSBiZWhhdmlvci5cbiAgICAgKiBTb3VyY2UgY29kZTogaHR0cHM6Ly9naXRodWIuY29tL3djb2Rlci9oaWdobGlnaHRqcy1saW5lLW51bWJlcnMuanMvYmxvYi92Mi45LjAvc3JjL2hpZ2hsaWdodGpzLWxpbmUtbnVtYmVycy5qc1xuICAgICAqL1xuICAgIHByaXZhdGUgaGlnaGxpZ2h0SlNMaW5lTnVtYmVyc1BsdWdpbihkOiBEb2N1bWVudCwgdzogV2luZG93KTogdm9pZCB7XG4gICAgICAgICd1c2Ugc3RyaWN0JztcblxuICAgICAgICBpZiAoIXcpIHJldHVybjtcblxuICAgICAgICBjb25zdCBUQUJMRV9OQU1FID0gJ2hsanMtbG4nLFxuICAgICAgICAgICAgTElORV9OQU1FID0gJ2hsanMtbG4tbGluZScsXG4gICAgICAgICAgICBDT0RFX0JMT0NLX05BTUUgPSAnaGxqcy1sbi1jb2RlJyxcbiAgICAgICAgICAgIE5VTUJFUlNfQkxPQ0tfTkFNRSA9ICdobGpzLWxuLW51bWJlcnMnLFxuICAgICAgICAgICAgTlVNQkVSX0xJTkVfTkFNRSA9ICdobGpzLWxuLW4nLFxuICAgICAgICAgICAgREFUQV9BVFRSX05BTUUgPSAnZGF0YS1saW5lLW51bWJlcicsXG4gICAgICAgICAgICBCUkVBS19MSU5FX1JFR0VYUCA9IC9cXHJcXG58XFxyfFxcbi9nO1xuXG4gICAgICAgIGlmICh3WydobGpzJ10pIHtcbiAgICAgICAgICAgIHdbJ2hsanMnXS5pbml0TGluZU51bWJlcnNPbkxvYWQgPSBpbml0TGluZU51bWJlcnNPbkxvYWQ7XG4gICAgICAgICAgICB3WydobGpzJ10ubGluZU51bWJlcnNCbG9jayA9IGxpbmVOdW1iZXJzQmxvY2s7XG4gICAgICAgICAgICB3WydobGpzJ10ubGluZU51bWJlcnNCbG9ja1N5bmMgPSBsaW5lTnVtYmVyc0Jsb2NrU3luYztcbiAgICAgICAgICAgIHdbJ2hsanMnXS5saW5lTnVtYmVyc1ZhbHVlID0gbGluZU51bWJlcnNWYWx1ZTtcblxuICAgICAgICAgICAgYWRkU3R5bGVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignaGlnaGxpZ2h0LmpzIG5vdCBkZXRlY3RlZCEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGlzSGxqc0xuQ29kZURlc2NlbmRhbnQoZG9tRWx0KSB7XG4gICAgICAgICAgICBsZXQgY3VyRWx0ID0gZG9tRWx0O1xuXG4gICAgICAgICAgICB3aGlsZSAoY3VyRWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1ckVsdC5jbGFzc05hbWUgJiYgY3VyRWx0LmNsYXNzTmFtZS5pbmRleE9mKCdobGpzLWxuLWNvZGUnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3VyRWx0ID0gY3VyRWx0LnBhcmVudE5vZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldEhsanNMblRhYmxlKGhsanNMbkRvbUVsdCkge1xuICAgICAgICAgICAgbGV0IGN1ckVsdCA9IGhsanNMbkRvbUVsdDtcblxuICAgICAgICAgICAgd2hpbGUgKGN1ckVsdC5ub2RlTmFtZSAhPT0gJ1RBQkxFJykge1xuICAgICAgICAgICAgICAgIGN1ckVsdCA9IGN1ckVsdC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY3VyRWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRnVuY3Rpb24gdG8gd29ya2Fyb3VuZCBhIGNvcHkgaXNzdWUgd2l0aCBNaWNyb3NvZnQgRWRnZS5cbiAgICAgICAgLy8gRHVlIHRvIGhsanMtbG4gd3JhcHBpbmcgdGhlIGxpbmVzIG9mIGNvZGUgaW5zaWRlIGEgPHRhYmxlPiBlbGVtZW50LFxuICAgICAgICAvLyBpdHNlbGYgd3JhcHBlZCBpbnNpZGUgYSA8cHJlPiBlbGVtZW50LCB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKVxuICAgICAgICAvLyBkb2VzIG5vdCBjb250YWluIGFueSBsaW5lIGJyZWFrcy4gU28gd2UgbmVlZCB0byBnZXQgdGhlbSBiYWNrIHVzaW5nIHRoZVxuICAgICAgICAvLyByZW5kZXJlZCBjb2RlIGluIHRoZSBET00gYXMgcmVmZXJlbmNlLlxuICAgICAgICBmdW5jdGlvbiBlZGdlR2V0U2VsZWN0ZWRDb2RlTGluZXMoc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAvLyBjdXJyZW50IHNlbGVjdGVkIHRleHQgd2l0aG91dCBsaW5lIGJyZWFrc1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuXG4gICAgICAgICAgICAvLyBnZXQgdGhlIDx0ZD4gZWxlbWVudCB3cmFwcGluZyB0aGUgZmlyc3QgbGluZSBvZiBzZWxlY3RlZCBjb2RlXG4gICAgICAgICAgICBsZXQgdGRBbmNob3IgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTtcblxuICAgICAgICAgICAgd2hpbGUgKHRkQW5jaG9yLm5vZGVOYW1lICE9PSAnVEQnKSB7XG4gICAgICAgICAgICAgICAgdGRBbmNob3IgPSB0ZEFuY2hvci5wYXJlbnROb2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBnZXQgdGhlIDx0ZD4gZWxlbWVudCB3cmFwcGluZyB0aGUgbGFzdCBsaW5lIG9mIHNlbGVjdGVkIGNvZGVcbiAgICAgICAgICAgIGxldCB0ZEZvY3VzID0gc2VsZWN0aW9uLmZvY3VzTm9kZTtcblxuICAgICAgICAgICAgd2hpbGUgKHRkRm9jdXMubm9kZU5hbWUgIT09ICdURCcpIHtcbiAgICAgICAgICAgICAgICB0ZEZvY3VzID0gdGRGb2N1cy5wYXJlbnROb2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBleHRyYWN0IGxpbmUgbnVtYmVyc1xuICAgICAgICAgICAgbGV0IGZpcnN0TGluZU51bWJlciA9IHBhcnNlSW50KHRkQW5jaG9yLmRhdGFzZXQubGluZU51bWJlcik7XG4gICAgICAgICAgICBsZXQgbGFzdExpbmVOdW1iZXIgPSBwYXJzZUludCh0ZEZvY3VzLmRhdGFzZXQubGluZU51bWJlcik7XG5cbiAgICAgICAgICAgIC8vIG11bHRpLWxpbmVzIGNvcGllZCBjYXNlXG4gICAgICAgICAgICBpZiAoZmlyc3RMaW5lTnVtYmVyICE9IGxhc3RMaW5lTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpcnN0TGluZVRleHQgPSB0ZEFuY2hvci50ZXh0Q29udGVudDtcbiAgICAgICAgICAgICAgICBsZXQgbGFzdExpbmVUZXh0ID0gdGRGb2N1cy50ZXh0Q29udGVudDtcblxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBzZWxlY3Rpb24gd2FzIG1hZGUgYmFja3dhcmQsIHN3YXAgdmFsdWVzXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0TGluZU51bWJlciA+IGxhc3RMaW5lTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXAgPSBmaXJzdExpbmVOdW1iZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgZmlyc3RMaW5lTnVtYmVyID0gbGFzdExpbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RMaW5lTnVtYmVyID0gdG1wO1xuICAgICAgICAgICAgICAgICAgICB0bXAgPSBmaXJzdExpbmVUZXh0O1xuICAgICAgICAgICAgICAgICAgICBmaXJzdExpbmVUZXh0ID0gbGFzdExpbmVUZXh0O1xuICAgICAgICAgICAgICAgICAgICBsYXN0TGluZVRleHQgPSB0bXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gZGlzY2FyZCBub3QgY29waWVkIGNoYXJhY3RlcnMgaW4gZmlyc3QgbGluZVxuICAgICAgICAgICAgICAgIHdoaWxlIChzZWxlY3Rpb25UZXh0LmluZGV4T2YoZmlyc3RMaW5lVGV4dCkgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RMaW5lVGV4dCA9IGZpcnN0TGluZVRleHQuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gZGlzY2FyZCBub3QgY29waWVkIGNoYXJhY3RlcnMgaW4gbGFzdCBsaW5lXG4gICAgICAgICAgICAgICAgd2hpbGUgKHNlbGVjdGlvblRleHQubGFzdEluZGV4T2YobGFzdExpbmVUZXh0KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdExpbmVUZXh0ID0gbGFzdExpbmVUZXh0LnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyByZWNvbnN0cnVjdCBhbmQgcmV0dXJuIHRoZSByZWFsIGNvcGllZCB0ZXh0XG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkVGV4dCA9IGZpcnN0TGluZVRleHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgaGxqc0xuVGFibGUgPSBnZXRIbGpzTG5UYWJsZSh0ZEFuY2hvcik7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZmlyc3RMaW5lTnVtYmVyICsgMTsgaSA8IGxhc3RMaW5lTnVtYmVyOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29kZUxpbmVTZWwgPSBmb3JtYXQoJy57MH1bezF9PVwiezJ9XCJdJywgW0NPREVfQkxPQ0tfTkFNRSwgREFUQV9BVFRSX05BTUUsIGldKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29kZUxpbmVFbHQgPSBobGpzTG5UYWJsZS5xdWVyeVNlbGVjdG9yKGNvZGVMaW5lU2VsKTtcblxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFRleHQgKz0gJ1xcbicgKyBjb2RlTGluZUVsdC50ZXh0Q29udGVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRleHQgKz0gJ1xcbicgKyBsYXN0TGluZVRleHQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRUZXh0O1xuICAgICAgICAgICAgICAgIC8vIHNpbmdsZSBjb3BpZWQgbGluZSBjYXNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb25UZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5zdXJlIGNvbnNpc3RlbnQgY29kZSBjb3B5L3Bhc3RlIGJlaGF2aW9yIGFjcm9zcyBhbGwgYnJvd3NlcnNcbiAgICAgICAgLy8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2NvZGVyL2hpZ2hsaWdodGpzLWxpbmUtbnVtYmVycy5qcy9pc3N1ZXMvNTEpXG4gICAgICAgIGQuYWRkRXZlbnRMaXN0ZW5lcignY29weScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAvLyBnZXQgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHcuZ2V0U2VsZWN0aW9uKCkhO1xuXG4gICAgICAgICAgICAvLyBvdmVycmlkZSBiZWhhdmlvciB3aGVuIG9uZSB3YW50cyB0byBjb3B5IGxpbmUgb2YgY29kZXNcbiAgICAgICAgICAgIGlmIChpc0hsanNMbkNvZGVEZXNjZW5kYW50KHNlbGVjdGlvbi5hbmNob3JOb2RlKSkge1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3Rpb25UZXh0O1xuXG4gICAgICAgICAgICAgICAgLy8gd29ya2Fyb3VuZCBhbiBpc3N1ZSB3aXRoIE1pY3Jvc29mdCBFZGdlIGFzIGNvcGllZCBsaW5lIGJyZWFrc1xuICAgICAgICAgICAgICAgIC8vIGFyZSByZW1vdmVkIG90aGVyd2lzZSBmcm9tIHRoZSBzZWxlY3Rpb24gc3RyaW5nXG4gICAgICAgICAgICAgICAgaWYgKHcubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdFZGdlJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblRleHQgPSBlZGdlR2V0U2VsZWN0ZWRDb2RlTGluZXMoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBvdGhlciBicm93c2VycyBjYW4gZGlyZWN0bHkgdXNlIHRoZSBzZWxlY3Rpb24gc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlLmNsaXBib2FyZERhdGEhLnNldERhdGEoJ3RleHQvcGxhaW4nLCBzZWxlY3Rpb25UZXh0KTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZFN0eWxlcygpIHtcbiAgICAgICAgICAgIGNvbnN0IGNzcyA9IGQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblxuICAgICAgICAgICAgY3NzLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgICAgY3NzLmlubmVySFRNTCA9IGZvcm1hdChcbiAgICAgICAgICAgICAgICAnLnswfXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9JyArICcuezB9IHRke3BhZGRpbmc6MH0nICsgJy57MX06YmVmb3Jle2NvbnRlbnQ6YXR0cih7Mn0pfScsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBUQUJMRV9OQU1FLFxuICAgICAgICAgICAgICAgICAgICBOVU1CRVJfTElORV9OQU1FLFxuICAgICAgICAgICAgICAgICAgICBEQVRBX0FUVFJfTkFNRVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoY3NzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGluaXRMaW5lTnVtYmVyc09uTG9hZChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoZC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnIHx8IGQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50UmVhZHkob3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHcuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRSZWFkeShvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvY3VtZW50UmVhZHkob3B0aW9ucykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3MgPSBkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2NvZGUuaGxqcyxjb2RlLm5vaGlnaGxpZ2h0Jyk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChibG9ja3MuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQbHVnaW5EaXNhYmxlZEZvckJsb2NrKGJsb2Nrc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyc0Jsb2NrKGJsb2Nrc1tpXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdMaW5lTnVtYmVycyBlcnJvcjogJywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc1BsdWdpbkRpc2FibGVkRm9yQmxvY2soZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdub2hsanNsbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbGluZU51bWJlcnNCbG9jayhlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQgIT09ICdvYmplY3QnKSByZXR1cm47XG5cbiAgICAgICAgICAgIGFzeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGxpbmVOdW1iZXJzSW50ZXJuYWwoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGxpbmVOdW1iZXJzQmxvY2tTeW5jKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCAhPT0gJ29iamVjdCcpIHJldHVybjtcblxuICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBsaW5lTnVtYmVyc0ludGVybmFsKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbGluZU51bWJlcnNWYWx1ZSh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGQuY3JlYXRlRWxlbWVudCgnY29kZScpO1xuXG4gICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlO1xuXG4gICAgICAgICAgICByZXR1cm4gbGluZU51bWJlcnNJbnRlcm5hbChlbGVtZW50LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGxpbmVOdW1iZXJzSW50ZXJuYWwoZWxlbWVudCwgb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxPcHRpb25zID0gbWFwT3B0aW9ucyhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICAgICAgZHVwbGljYXRlTXVsdGlsaW5lTm9kZXMoZWxlbWVudCk7XG5cbiAgICAgICAgICAgIHJldHVybiBhZGRMaW5lTnVtYmVyc0Jsb2NrRm9yKGVsZW1lbnQuaW5uZXJIVE1MLCBpbnRlcm5hbE9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkTGluZU51bWJlcnNCbG9ja0ZvcihpbnB1dEh0bWwsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gZ2V0TGluZXMoaW5wdXRIdG1sKTtcblxuICAgICAgICAgICAgLy8gaWYgbGFzdCBsaW5lIGNvbnRhaW5zIG9ubHkgY2FycmlhZ2UgcmV0dXJuIHJlbW92ZSBpdFxuICAgICAgICAgICAgaWYgKGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBsaW5lcy5wb3AoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDEgfHwgb3B0aW9ucy5zaW5nbGVMaW5lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSAnJztcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJzx0cj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRkIGNsYXNzPVwiezB9IHsxfVwiIHszfT1cIns1fVwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiezJ9XCIgezN9PVwiezV9XCI+PC9kaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvdGQ+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZCBjbGFzcz1cInswfSB7NH1cIiB7M309XCJ7NX1cIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnezZ9JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvdGQ+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvdHI+JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSU5FX05BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVNQkVSU19CTE9DS19OQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTUJFUl9MSU5FX05BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgREFUQV9BVFRSX05BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ERV9CTE9DS19OQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKyBvcHRpb25zLnN0YXJ0RnJvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc1tpXS5sZW5ndGggPiAwID8gbGluZXNbaV0gOiAnICdcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0KCc8dGFibGUgY2xhc3M9XCJ7MH1cIj57MX08L3RhYmxlPicsIFtUQUJMRV9OQU1FLCBodG1sXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBpbnB1dEh0bWw7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBDb2RlIGJsb2NrLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBFeHRlcm5hbCBBUEkgb3B0aW9ucy5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gSW50ZXJuYWwgQVBJIG9wdGlvbnMuXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBtYXBPcHRpb25zKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNpbmdsZUxpbmU6IGdldFNpbmdsZUxpbmVPcHRpb24ob3B0aW9ucyksXG4gICAgICAgICAgICAgICAgc3RhcnRGcm9tOiBnZXRTdGFydEZyb21PcHRpb24oZWxlbWVudCwgb3B0aW9ucylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRTaW5nbGVMaW5lT3B0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zaW5nbGVMaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2luZ2xlTGluZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldFN0YXJ0RnJvbU9wdGlvbihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSAxO1xuICAgICAgICAgICAgbGV0IHN0YXJ0RnJvbSA9IGRlZmF1bHRWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKGlzRmluaXRlKG9wdGlvbnMuc3RhcnRGcm9tKSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0RnJvbSA9IG9wdGlvbnMuc3RhcnRGcm9tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjYW4gYmUgb3ZlcnJpZGRlbiBiZWNhdXNlIGxvY2FsIG9wdGlvbiBpcyBwcmlvcml0eVxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ2RhdGEtbG4tc3RhcnQtZnJvbScpO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdGFydEZyb20gPSB0b051bWJlcih2YWx1ZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RnJvbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWN1cnNpdmUgbWV0aG9kIGZvciBmaXggbXVsdGktbGluZSBlbGVtZW50cyBpbXBsZW1lbnRhdGlvbiBpbiBoaWdobGlnaHQuanNcbiAgICAgICAgICogRG9pbmcgZGVlcCBwYXNzYWdlIG9uIGNoaWxkIG5vZGVzLlxuICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBkdXBsaWNhdGVNdWx0aWxpbmVOb2RlcyhlbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IGVsZW1lbnQuY2hpbGROb2RlcztcblxuICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIGluIG5vZGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVzLmhhc093blByb3BlcnR5KG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZXNbbm9kZV07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldExpbmVzQ291bnQoY2hpbGQudGV4dENvbnRlbnQpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZU11bHRpbGluZU5vZGVzKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVwbGljYXRlTXVsdGlsaW5lTm9kZShjaGlsZC5wYXJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNZXRob2QgZm9yIGZpeCBtdWx0aS1saW5lIGVsZW1lbnRzIGltcGxlbWVudGF0aW9uIGluIGhpZ2hsaWdodC5qc1xuICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBkdXBsaWNhdGVNdWx0aWxpbmVOb2RlKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lO1xuXG4gICAgICAgICAgICBpZiAoIS9obGpzLS8udGVzdChjbGFzc05hbWUpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gZ2V0TGluZXMoZWxlbWVudC5pbm5lckhUTUwpO1xuXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lVGV4dCA9IGxpbmVzW2ldLmxlbmd0aCA+IDAgPyBsaW5lc1tpXSA6ICcgJztcblxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmb3JtYXQoJzxzcGFuIGNsYXNzPVwiezB9XCI+ezF9PC9zcGFuPlxcbicsIFtjbGFzc05hbWUsIGxpbmVUZXh0XSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gcmVzdWx0LnRyaW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldExpbmVzKHRleHQpIHtcbiAgICAgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdChCUkVBS19MSU5FX1JFR0VYUCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRMaW5lc0NvdW50KHRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiAodGV4dC50cmltKCkubWF0Y2goQlJFQUtfTElORV9SRUdFWFApIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICAvLy9cbiAgICAgICAgLy8vIEhFTFBFUlNcbiAgICAgICAgLy8vXG5cbiAgICAgICAgZnVuY3Rpb24gYXN5bmMoZnVuYykge1xuICAgICAgICAgICAgdy5zZXRUaW1lb3V0KGZ1bmMsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHtAbGluayBodHRwczovL3djb2Rlci5naXRodWIuaW8vbm90ZXMvc3RyaW5nLWZvcm1hdC1mb3Itc3RyaW5nLWZvcm1hdGluZy1pbi1qYXZhc2NyaXB0fVxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0XG4gICAgICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyZ3NcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGZvcm1hdChmb3JtYXQsIGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgvXFx7KFxcZCspXFx9L2csIGZ1bmN0aW9uIChtLCBuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3Nbbl0gIT09IHVuZGVmaW5lZCA/IGFyZ3Nbbl0gOiBtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBDb2RlIGJsb2NrLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXR0ck5hbWUgQXR0cmlidXRlIG5hbWUuXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IEF0dHJpYnV0ZSB2YWx1ZSBvciBlbXB0eS5cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZShlbGVtZW50LCBhdHRyTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJOYW1lKSA/IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJOYW1lKSA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciBTb3VyY2Ugc3RyaW5nLlxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gZmFsbGJhY2sgRmFsbGJhY2sgdmFsdWUuXG4gICAgICAgICAqIEByZXR1cm5zIFBhcnNlZCBudW1iZXIgb3IgZmFsbGJhY2sgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB0b051bWJlcihzdHIsIGZhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIXN0cikgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyKHN0cik7XG5cbiAgICAgICAgICAgIHJldHVybiBpc0Zpbml0ZShudW1iZXIpID8gbnVtYmVyIDogZmFsbGJhY2s7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|