@angular/cdk 16.0.0-next.4 → 16.0.0-rc.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/a11y/index.d.ts +2 -2
- package/accordion/index.d.ts +2 -2
- package/bidi/index.d.ts +1 -1
- package/clipboard/index.d.ts +1 -1
- package/drag-drop/index.d.ts +6 -6
- package/{esm2020 → esm2022}/a11y/a11y-module.mjs +5 -5
- package/{esm2020 → esm2022}/a11y/aria-describer/aria-describer.mjs +4 -4
- package/{esm2020 → esm2022}/a11y/focus-monitor/focus-monitor.mjs +7 -7
- package/{esm2020 → esm2022}/a11y/focus-trap/configurable-focus-trap-factory.mjs +4 -4
- package/{esm2020 → esm2022}/a11y/focus-trap/focus-trap-manager.mjs +4 -4
- package/{esm2020 → esm2022}/a11y/focus-trap/focus-trap.mjs +7 -7
- package/{esm2020 → esm2022}/a11y/high-contrast-mode/high-contrast-mode-detector.mjs +4 -4
- package/{esm2020 → esm2022}/a11y/input-modality/input-modality-detector.mjs +4 -4
- package/{esm2020 → esm2022}/a11y/interactivity-checker/interactivity-checker.mjs +4 -4
- package/{esm2020 → esm2022}/a11y/live-announcer/live-announcer.mjs +7 -7
- package/{esm2020 → esm2022}/accordion/accordion-item.mjs +8 -8
- package/{esm2020 → esm2022}/accordion/accordion-module.mjs +5 -5
- package/{esm2020 → esm2022}/accordion/accordion.mjs +4 -4
- package/{esm2020 → esm2022}/bidi/bidi-module.mjs +5 -5
- package/{esm2020 → esm2022}/bidi/dir.mjs +4 -4
- package/{esm2020 → esm2022}/bidi/directionality.mjs +4 -4
- package/{esm2020 → esm2022}/clipboard/clipboard-module.mjs +5 -5
- package/{esm2020 → esm2022}/clipboard/clipboard.mjs +4 -4
- package/{esm2020 → esm2022}/clipboard/copy-to-clipboard.mjs +4 -4
- package/{esm2020 → esm2022}/collections/unique-selection-dispatcher.mjs +4 -4
- package/{esm2020 → esm2022}/dialog/dialog-container.mjs +4 -4
- package/{esm2020 → esm2022}/dialog/dialog-module.mjs +12 -12
- package/{esm2020 → esm2022}/dialog/dialog.mjs +4 -4
- package/{esm2020 → esm2022}/drag-drop/directives/drag-handle.mjs +4 -4
- package/{esm2020 → esm2022}/drag-drop/directives/drag-placeholder.mjs +4 -4
- package/{esm2020 → esm2022}/drag-drop/directives/drag-preview.mjs +4 -4
- package/esm2022/drag-drop/directives/drag.mjs +489 -0
- package/{esm2020 → esm2022}/drag-drop/directives/drop-list-group.mjs +4 -4
- package/esm2022/drag-drop/directives/drop-list.mjs +348 -0
- package/{esm2020 → esm2022}/drag-drop/drag-drop-module.mjs +15 -15
- package/{esm2020 → esm2022}/drag-drop/drag-drop-registry.mjs +4 -4
- package/{esm2020 → esm2022}/drag-drop/drag-drop.mjs +4 -4
- package/{esm2020 → esm2022}/layout/breakpoints-observer.mjs +4 -4
- package/{esm2020 → esm2022}/layout/layout-module.mjs +5 -5
- package/{esm2020 → esm2022}/layout/media-matcher.mjs +4 -4
- package/{esm2020 → esm2022}/listbox/listbox-module.mjs +5 -5
- package/{esm2020 → esm2022}/listbox/listbox.mjs +13 -13
- package/{esm2020 → esm2022}/menu/context-menu-trigger.mjs +10 -10
- package/{esm2020 → esm2022}/menu/menu-aim.mjs +7 -7
- package/{esm2020 → esm2022}/menu/menu-bar.mjs +8 -8
- package/{esm2020 → esm2022}/menu/menu-base.mjs +4 -4
- package/{esm2020 → esm2022}/menu/menu-group.mjs +4 -4
- package/{esm2020 → esm2022}/menu/menu-item-checkbox.mjs +7 -7
- package/{esm2020 → esm2022}/menu/menu-item-radio.mjs +7 -7
- package/{esm2020 → esm2022}/menu/menu-item-selectable.mjs +4 -4
- package/{esm2020 → esm2022}/menu/menu-item.mjs +4 -4
- package/{esm2020 → esm2022}/menu/menu-module.mjs +21 -21
- package/{esm2020 → esm2022}/menu/menu-stack.mjs +4 -4
- package/{esm2020 → esm2022}/menu/menu-trigger-base.mjs +4 -4
- package/esm2022/menu/menu-trigger.mjs +307 -0
- package/{esm2020 → esm2022}/menu/menu.mjs +8 -8
- package/{esm2020 → esm2022}/observers/observe-content.mjs +14 -14
- package/{esm2020 → esm2022}/overlay/dispatchers/base-overlay-dispatcher.mjs +4 -4
- package/{esm2020 → esm2022}/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +4 -4
- package/{esm2020 → esm2022}/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +4 -4
- package/{esm2020 → esm2022}/overlay/fullscreen-overlay-container.mjs +4 -4
- package/{esm2020 → esm2022}/overlay/overlay-container.mjs +4 -4
- package/{esm2020 → esm2022}/overlay/overlay-directives.mjs +7 -7
- package/{esm2020 → esm2022}/overlay/overlay-module.mjs +5 -5
- package/{esm2020 → esm2022}/overlay/overlay.mjs +4 -4
- package/{esm2020 → esm2022}/overlay/position/overlay-position-builder.mjs +4 -4
- package/{esm2020 → esm2022}/overlay/scroll/scroll-strategy-options.mjs +4 -4
- package/{esm2020 → esm2022}/platform/platform-module.mjs +5 -5
- package/{esm2020 → esm2022}/platform/platform.mjs +4 -4
- package/esm2022/portal/portal-directives.mjs +250 -0
- package/{esm2020 → esm2022}/scrolling/fixed-size-virtual-scroll.mjs +10 -10
- package/{esm2020 → esm2022}/scrolling/scroll-dispatcher.mjs +4 -4
- package/{esm2020 → esm2022}/scrolling/scrollable.mjs +4 -4
- package/{esm2020 → esm2022}/scrolling/scrolling-module.mjs +19 -19
- package/{esm2020 → esm2022}/scrolling/viewport-ruler.mjs +4 -4
- package/{esm2020 → esm2022}/scrolling/virtual-for-of.mjs +4 -4
- package/{esm2020 → esm2022}/scrolling/virtual-scroll-viewport.mjs +10 -10
- package/{esm2020 → esm2022}/scrolling/virtual-scrollable-element.mjs +4 -4
- package/{esm2020 → esm2022}/scrolling/virtual-scrollable-window.mjs +4 -4
- package/{esm2020 → esm2022}/scrolling/virtual-scrollable.mjs +4 -4
- package/{esm2020 → esm2022}/stepper/step-header.mjs +4 -4
- package/{esm2020 → esm2022}/stepper/step-label.mjs +4 -4
- package/{esm2020 → esm2022}/stepper/stepper-button.mjs +7 -7
- package/{esm2020 → esm2022}/stepper/stepper-module.mjs +10 -10
- package/{esm2020 → esm2022}/stepper/stepper.mjs +7 -7
- package/{esm2020 → esm2022}/table/cell.mjs +22 -22
- package/{esm2020 → esm2022}/table/coalesced-style-scheduler.mjs +4 -4
- package/esm2022/table/row.mjs +271 -0
- package/{esm2020 → esm2022}/table/table-module.mjs +47 -47
- package/{esm2020 → esm2022}/table/table.mjs +25 -25
- package/{esm2020 → esm2022}/table/text-column.mjs +6 -6
- package/{esm2020 → esm2022}/text-field/autofill.mjs +7 -7
- package/{esm2020 → esm2022}/text-field/autosize.mjs +4 -4
- package/{esm2020 → esm2022}/text-field/text-field-module.mjs +5 -5
- package/{esm2020 → esm2022}/tree/nested-node.mjs +7 -7
- package/{esm2020 → esm2022}/tree/node.mjs +4 -4
- package/{esm2020 → esm2022}/tree/outlet.mjs +4 -4
- package/{esm2020 → esm2022}/tree/padding.mjs +4 -4
- package/{esm2020 → esm2022}/tree/toggle.mjs +4 -4
- package/{esm2020 → esm2022}/tree/tree-module.mjs +17 -17
- package/esm2022/tree/tree.mjs +349 -0
- package/{esm2020 → esm2022}/version.mjs +1 -1
- package/{fesm2020 → fesm2022}/a11y.mjs +40 -197
- package/fesm2022/a11y.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/accordion.mjs +14 -51
- package/fesm2022/accordion.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bidi.mjs +10 -54
- package/fesm2022/bidi.mjs.map +1 -0
- package/fesm2022/cdk.mjs +7 -0
- package/fesm2022/cdk.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/clipboard.mjs +10 -54
- package/fesm2022/clipboard.mjs.map +1 -0
- package/{fesm2015 → fesm2022}/coercion.mjs +0 -58
- package/fesm2022/coercion.mjs.map +1 -0
- package/{fesm2015 → fesm2022}/collections.mjs +5 -70
- package/fesm2022/collections.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/dialog.mjs +17 -75
- package/fesm2022/dialog.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/drag-drop.mjs +45 -216
- package/fesm2022/drag-drop.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/keycodes.mjs +0 -30
- package/fesm2022/keycodes.mjs.map +1 -0
- package/{fesm2015 → fesm2022}/layout.mjs +10 -54
- package/fesm2022/layout.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/listbox.mjs +16 -46
- package/fesm2022/listbox.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/menu.mjs +86 -220
- package/fesm2022/menu.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/observers.mjs +13 -36
- package/fesm2022/observers.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/overlay.mjs +34 -206
- package/fesm2022/overlay.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/platform.mjs +7 -72
- package/fesm2022/platform.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/portal.mjs +26 -77
- package/fesm2022/portal.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/scrolling.mjs +57 -158
- package/fesm2022/scrolling.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/stepper.mjs +27 -78
- package/fesm2022/stepper.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/table.mjs +134 -227
- package/fesm2022/table.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/testing/selenium-webdriver.mjs +0 -37
- package/fesm2022/testing/selenium-webdriver.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/testing/testbed.mjs +1 -72
- package/fesm2022/testing/testbed.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/testing.mjs +0 -66
- package/fesm2022/testing.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/text-field.mjs +13 -50
- package/fesm2022/text-field.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/tree.mjs +45 -131
- package/fesm2022/tree.mjs.map +1 -0
- package/listbox/index.d.ts +2 -2
- package/menu/index.d.ts +5 -5
- package/observers/index.d.ts +1 -1
- package/overlay/index.d.ts +1 -1
- package/package.json +77 -131
- package/portal/index.d.ts +2 -2
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-add/index.mjs +1 -1
- package/schematics/ng-update/devkit-file-system.js +3 -2
- package/schematics/ng-update/devkit-file-system.mjs +3 -2
- package/schematics/ng-update/migrations/attribute-selectors.js +5 -8
- package/schematics/ng-update/migrations/attribute-selectors.mjs +5 -8
- package/schematics/ng-update/migrations/class-inheritance.js +8 -11
- package/schematics/ng-update/migrations/class-inheritance.mjs +8 -11
- package/schematics/ng-update/migrations/class-names.js +12 -15
- package/schematics/ng-update/migrations/class-names.mjs +12 -15
- package/schematics/ng-update/migrations/constructor-signature.js +7 -10
- package/schematics/ng-update/migrations/constructor-signature.mjs +7 -10
- package/schematics/ng-update/migrations/css-selectors.js +5 -8
- package/schematics/ng-update/migrations/css-selectors.mjs +5 -8
- package/schematics/ng-update/migrations/element-selectors.js +5 -8
- package/schematics/ng-update/migrations/element-selectors.mjs +5 -8
- package/schematics/ng-update/migrations/input-names.js +5 -8
- package/schematics/ng-update/migrations/input-names.mjs +5 -8
- package/schematics/ng-update/migrations/method-call-arguments.js +5 -8
- package/schematics/ng-update/migrations/method-call-arguments.mjs +5 -8
- package/schematics/ng-update/migrations/misc-template.js +3 -6
- package/schematics/ng-update/migrations/misc-template.mjs +3 -6
- package/schematics/ng-update/migrations/output-names.js +5 -8
- package/schematics/ng-update/migrations/output-names.mjs +5 -8
- package/schematics/ng-update/migrations/property-names.js +5 -8
- package/schematics/ng-update/migrations/property-names.mjs +5 -8
- package/schematics/ng-update/migrations/symbol-removal.js +5 -8
- package/schematics/ng-update/migrations/symbol-removal.mjs +5 -8
- package/schematics/update-tool/component-resource-collector.js +5 -3
- package/schematics/update-tool/component-resource-collector.mjs +5 -3
- package/schematics/update-tool/index.js +8 -2
- package/schematics/update-tool/index.mjs +8 -2
- package/schematics/update-tool/migration.js +10 -3
- package/schematics/update-tool/migration.mjs +10 -3
- package/schematics/update-tool/utils/virtual-host.js +3 -2
- package/schematics/update-tool/utils/virtual-host.mjs +3 -2
- package/scrolling/index.d.ts +3 -3
- package/stepper/index.d.ts +4 -4
- package/table/index.d.ts +6 -6
- package/text-field/index.d.ts +1 -1
- package/tree/index.d.ts +6 -6
- package/esm2020/drag-drop/directives/drag.mjs +0 -489
- package/esm2020/drag-drop/directives/drop-list.mjs +0 -348
- package/esm2020/menu/menu-trigger.mjs +0 -306
- package/esm2020/portal/portal-directives.mjs +0 -250
- package/esm2020/table/row.mjs +0 -271
- package/esm2020/tree/tree.mjs +0 -349
- package/fesm2015/a11y.mjs +0 -2544
- package/fesm2015/a11y.mjs.map +0 -1
- package/fesm2015/accordion.mjs +0 -275
- package/fesm2015/accordion.mjs.map +0 -1
- package/fesm2015/bidi.mjs +0 -194
- package/fesm2015/bidi.mjs.map +0 -1
- package/fesm2015/cdk.mjs +0 -30
- package/fesm2015/cdk.mjs.map +0 -1
- package/fesm2015/clipboard.mjs +0 -263
- package/fesm2015/clipboard.mjs.map +0 -1
- package/fesm2015/coercion.mjs.map +0 -1
- package/fesm2015/collections.mjs.map +0 -1
- package/fesm2015/dialog.mjs +0 -800
- package/fesm2015/dialog.mjs.map +0 -1
- package/fesm2015/drag-drop.mjs +0 -3823
- package/fesm2015/drag-drop.mjs.map +0 -1
- package/fesm2015/keycodes.mjs +0 -167
- package/fesm2015/keycodes.mjs.map +0 -1
- package/fesm2015/layout.mjs.map +0 -1
- package/fesm2015/listbox.mjs +0 -918
- package/fesm2015/listbox.mjs.map +0 -1
- package/fesm2015/menu.mjs +0 -2009
- package/fesm2015/menu.mjs.map +0 -1
- package/fesm2015/observers.mjs +0 -211
- package/fesm2015/observers.mjs.map +0 -1
- package/fesm2015/overlay.mjs +0 -3142
- package/fesm2015/overlay.mjs.map +0 -1
- package/fesm2015/platform.mjs +0 -385
- package/fesm2015/platform.mjs.map +0 -1
- package/fesm2015/portal.mjs +0 -691
- package/fesm2015/portal.mjs.map +0 -1
- package/fesm2015/scrolling.mjs +0 -1566
- package/fesm2015/scrolling.mjs.map +0 -1
- package/fesm2015/stepper.mjs +0 -621
- package/fesm2015/stepper.mjs.map +0 -1
- package/fesm2015/table.mjs +0 -2357
- package/fesm2015/table.mjs.map +0 -1
- package/fesm2015/testing/selenium-webdriver.mjs +0 -419
- package/fesm2015/testing/selenium-webdriver.mjs.map +0 -1
- package/fesm2015/testing/testbed.mjs +0 -868
- package/fesm2015/testing/testbed.mjs.map +0 -1
- package/fesm2015/testing.mjs +0 -785
- package/fesm2015/testing.mjs.map +0 -1
- package/fesm2015/text-field.mjs +0 -461
- package/fesm2015/text-field.mjs.map +0 -1
- package/fesm2015/tree.mjs +0 -950
- package/fesm2015/tree.mjs.map +0 -1
- package/fesm2020/a11y.mjs.map +0 -1
- package/fesm2020/accordion.mjs.map +0 -1
- package/fesm2020/bidi.mjs.map +0 -1
- package/fesm2020/cdk.mjs +0 -30
- package/fesm2020/cdk.mjs.map +0 -1
- package/fesm2020/clipboard.mjs.map +0 -1
- package/fesm2020/coercion.mjs +0 -132
- package/fesm2020/coercion.mjs.map +0 -1
- package/fesm2020/collections.mjs +0 -543
- package/fesm2020/collections.mjs.map +0 -1
- package/fesm2020/dialog.mjs.map +0 -1
- package/fesm2020/drag-drop.mjs.map +0 -1
- package/fesm2020/keycodes.mjs.map +0 -1
- package/fesm2020/layout.mjs +0 -254
- package/fesm2020/layout.mjs.map +0 -1
- package/fesm2020/listbox.mjs.map +0 -1
- package/fesm2020/menu.mjs.map +0 -1
- package/fesm2020/observers.mjs.map +0 -1
- package/fesm2020/overlay.mjs.map +0 -1
- package/fesm2020/platform.mjs.map +0 -1
- package/fesm2020/portal.mjs.map +0 -1
- package/fesm2020/scrolling.mjs.map +0 -1
- package/fesm2020/stepper.mjs.map +0 -1
- package/fesm2020/table.mjs.map +0 -1
- package/fesm2020/testing/selenium-webdriver.mjs.map +0 -1
- package/fesm2020/testing/testbed.mjs.map +0 -1
- package/fesm2020/testing.mjs.map +0 -1
- package/fesm2020/text-field.mjs.map +0 -1
- package/fesm2020/tree.mjs.map +0 -1
- /package/{esm2020 → esm2022}/a11y/a11y_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/a11y/aria-describer/aria-reference.mjs +0 -0
- /package/{esm2020 → esm2022}/a11y/fake-event-detection.mjs +0 -0
- /package/{esm2020 → esm2022}/a11y/focus-trap/configurable-focus-trap-config.mjs +0 -0
- /package/{esm2020 → esm2022}/a11y/focus-trap/configurable-focus-trap.mjs +0 -0
- /package/{esm2020 → esm2022}/a11y/focus-trap/event-listener-inert-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/a11y/focus-trap/focus-trap-inert-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/a11y/index.mjs +0 -0
- /package/{esm2020 → esm2022}/a11y/key-manager/activedescendant-key-manager.mjs +0 -0
- /package/{esm2020 → esm2022}/a11y/key-manager/focus-key-manager.mjs +0 -0
- /package/{esm2020 → esm2022}/a11y/key-manager/list-key-manager.mjs +0 -0
- /package/{esm2020 → esm2022}/a11y/live-announcer/live-announcer-tokens.mjs +0 -0
- /package/{esm2020 → esm2022}/a11y/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/accordion/accordion_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/accordion/index.mjs +0 -0
- /package/{esm2020 → esm2022}/accordion/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/bidi/bidi_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/bidi/dir-document-token.mjs +0 -0
- /package/{esm2020 → esm2022}/bidi/index.mjs +0 -0
- /package/{esm2020 → esm2022}/bidi/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/clipboard/clipboard_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/clipboard/index.mjs +0 -0
- /package/{esm2020 → esm2022}/clipboard/pending-copy.mjs +0 -0
- /package/{esm2020 → esm2022}/clipboard/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/coercion/array.mjs +0 -0
- /package/{esm2020 → esm2022}/coercion/boolean-property.mjs +0 -0
- /package/{esm2020 → esm2022}/coercion/css-pixel-value.mjs +0 -0
- /package/{esm2020 → esm2022}/coercion/element.mjs +0 -0
- /package/{esm2020 → esm2022}/coercion/index.mjs +0 -0
- /package/{esm2020 → esm2022}/coercion/number-property.mjs +0 -0
- /package/{esm2020 → esm2022}/coercion/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/coercion/string-array.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/array-data-source.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/collection-viewer.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/collections_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/data-source.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/dispose-view-repeater-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/index.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/recycle-view-repeater-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/selection-model.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/tree-adapter.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/view-repeater.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/dialog-config.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/dialog-injectors.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/dialog-ref.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/dialog_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/index.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/directives/assertions.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/directives/config.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/dom/client-rect.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/dom/clone-node.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/dom/parent-position-tracker.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/dom/styling.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/dom/transition-duration.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/drag-drop_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/drag-events.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/drag-parent.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/drag-ref.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/drag-utils.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/drop-list-ref.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/index.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/sorting/drop-list-sort-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/drag-drop/sorting/single-axis-sort-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/keycodes/index.mjs +0 -0
- /package/{esm2020 → esm2022}/keycodes/keycodes.mjs +0 -0
- /package/{esm2020 → esm2022}/keycodes/keycodes_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/keycodes/modifiers.mjs +0 -0
- /package/{esm2020 → esm2022}/keycodes/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/layout/breakpoints.mjs +0 -0
- /package/{esm2020 → esm2022}/layout/index.mjs +0 -0
- /package/{esm2020 → esm2022}/layout/layout_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/layout/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/listbox/index.mjs +0 -0
- /package/{esm2020 → esm2022}/listbox/listbox_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/listbox/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/menu/index.mjs +0 -0
- /package/{esm2020 → esm2022}/menu/menu-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/menu/menu-interface.mjs +0 -0
- /package/{esm2020 → esm2022}/menu/menu_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/menu/pointer-focus-tracker.mjs +0 -0
- /package/{esm2020 → esm2022}/menu/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/observers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/observers/observers_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/observers/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/dispatchers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/index.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/overlay-config.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/overlay-ref.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/overlay-reference.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/overlay_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/position/connected-position.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/position/flexible-connected-position-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/position/global-position-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/position/position-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/position/scroll-clip.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/scroll/block-scroll-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/scroll/close-scroll-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/scroll/index.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/scroll/noop-scroll-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/scroll/reposition-scroll-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/overlay/scroll/scroll-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/platform/features/input-types.mjs +0 -0
- /package/{esm2020 → esm2022}/platform/features/passive-listeners.mjs +0 -0
- /package/{esm2020 → esm2022}/platform/features/scrolling.mjs +0 -0
- /package/{esm2020 → esm2022}/platform/features/shadow-dom.mjs +0 -0
- /package/{esm2020 → esm2022}/platform/features/test-environment.mjs +0 -0
- /package/{esm2020 → esm2022}/platform/index.mjs +0 -0
- /package/{esm2020 → esm2022}/platform/platform_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/platform/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/portal/dom-portal-outlet.mjs +0 -0
- /package/{esm2020 → esm2022}/portal/index.mjs +0 -0
- /package/{esm2020 → esm2022}/portal/portal-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/portal/portal-injector.mjs +0 -0
- /package/{esm2020 → esm2022}/portal/portal.mjs +0 -0
- /package/{esm2020 → esm2022}/portal/portal_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/portal/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/scrolling/index.mjs +0 -0
- /package/{esm2020 → esm2022}/scrolling/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/scrolling/scrolling_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/scrolling/virtual-scroll-repeater.mjs +0 -0
- /package/{esm2020 → esm2022}/scrolling/virtual-scroll-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/stepper/index.mjs +0 -0
- /package/{esm2020 → esm2022}/stepper/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/stepper/stepper_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/table/can-stick.mjs +0 -0
- /package/{esm2020 → esm2022}/table/index.mjs +0 -0
- /package/{esm2020 → esm2022}/table/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/table/sticky-position-listener.mjs +0 -0
- /package/{esm2020 → esm2022}/table/sticky-styler.mjs +0 -0
- /package/{esm2020 → esm2022}/table/table-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/table/table_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/table/tokens.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/change-detection.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/component-harness.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/element-dimensions.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/harness-environment.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/index.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/selenium-webdriver/index.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/selenium-webdriver/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/selenium-webdriver/selenium-web-driver-element.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/selenium-webdriver/selenium-web-driver-harness-environment.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/selenium-webdriver/selenium-webdriver-keys.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/test-element-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/test-element.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/testbed/fake-events/dispatch-events.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/testbed/fake-events/element-focus.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/testbed/fake-events/event-objects.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/testbed/fake-events/index.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/testbed/fake-events/type-in-element.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/testbed/index.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/testbed/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/testbed/task-state-zone-interceptor.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/testbed/testbed-harness-environment.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/testbed/unit-test-element.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/text-filtering.mjs +0 -0
- /package/{esm2020 → esm2022}/text-field/index.mjs +0 -0
- /package/{esm2020 → esm2022}/text-field/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/text-field/text-field_public_index.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/control/base-tree-control.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/control/flat-tree-control.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/control/nested-tree-control.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/control/tree-control.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/index.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/tree-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/tree_public_index.mjs +0 -0
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { Directive, ElementRef, inject, NgZone } from '@angular/core';
|
|
9
|
-
import { Directionality } from '@angular/cdk/bidi';
|
|
10
|
-
import { Overlay, OverlayConfig, STANDARD_DROPDOWN_ADJACENT_POSITIONS, STANDARD_DROPDOWN_BELOW_POSITIONS, } from '@angular/cdk/overlay';
|
|
11
|
-
import { DOWN_ARROW, ENTER, hasModifierKey, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW, } from '@angular/cdk/keycodes';
|
|
12
|
-
import { _getEventTarget } from '@angular/cdk/platform';
|
|
13
|
-
import { InputModalityDetector } from '@angular/cdk/a11y';
|
|
14
|
-
import { fromEvent } from 'rxjs';
|
|
15
|
-
import { filter, takeUntil } from 'rxjs/operators';
|
|
16
|
-
import { CDK_MENU } from './menu-interface';
|
|
17
|
-
import { PARENT_OR_NEW_MENU_STACK_PROVIDER } from './menu-stack';
|
|
18
|
-
import { MENU_AIM } from './menu-aim';
|
|
19
|
-
import { CdkMenuTriggerBase, MENU_TRIGGER } from './menu-trigger-base';
|
|
20
|
-
import * as i0 from "@angular/core";
|
|
21
|
-
/**
|
|
22
|
-
* A directive that turns its host element into a trigger for a popup menu.
|
|
23
|
-
* It can be combined with cdkMenuItem to create sub-menus. If the element is in a top level
|
|
24
|
-
* MenuBar it will open the menu on click, or if a sibling is already opened it will open on hover.
|
|
25
|
-
* If it is inside of a Menu it will open the attached Submenu on hover regardless of its sibling
|
|
26
|
-
* state.
|
|
27
|
-
*/
|
|
28
|
-
class CdkMenuTrigger extends CdkMenuTriggerBase {
|
|
29
|
-
constructor() {
|
|
30
|
-
super();
|
|
31
|
-
this._elementRef = inject(ElementRef);
|
|
32
|
-
this._overlay = inject(Overlay);
|
|
33
|
-
this._ngZone = inject(NgZone);
|
|
34
|
-
this._directionality = inject(Directionality, { optional: true });
|
|
35
|
-
this._inputModalityDetector = inject(InputModalityDetector);
|
|
36
|
-
/** The parent menu this trigger belongs to. */
|
|
37
|
-
this._parentMenu = inject(CDK_MENU, { optional: true });
|
|
38
|
-
/** The menu aim service used by this menu. */
|
|
39
|
-
this._menuAim = inject(MENU_AIM, { optional: true });
|
|
40
|
-
this._setRole();
|
|
41
|
-
this._registerCloseHandler();
|
|
42
|
-
this._subscribeToMenuStackClosed();
|
|
43
|
-
this._subscribeToMouseEnter();
|
|
44
|
-
this._subscribeToMenuStackHasFocus();
|
|
45
|
-
this._setType();
|
|
46
|
-
}
|
|
47
|
-
/** Toggle the attached menu. */
|
|
48
|
-
toggle() {
|
|
49
|
-
this.isOpen() ? this.close() : this.open();
|
|
50
|
-
}
|
|
51
|
-
/** Open the attached menu. */
|
|
52
|
-
open() {
|
|
53
|
-
if (!this.isOpen() && this.menuTemplateRef != null) {
|
|
54
|
-
this.opened.next();
|
|
55
|
-
this.overlayRef = this.overlayRef || this._overlay.create(this._getOverlayConfig());
|
|
56
|
-
this.overlayRef.attach(this.getMenuContentPortal());
|
|
57
|
-
this._subscribeToOutsideClicks();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/** Close the opened menu. */
|
|
61
|
-
close() {
|
|
62
|
-
if (this.isOpen()) {
|
|
63
|
-
this.closed.next();
|
|
64
|
-
this.overlayRef.detach();
|
|
65
|
-
}
|
|
66
|
-
this._closeSiblingTriggers();
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Get a reference to the rendered Menu if the Menu is open and rendered in the DOM.
|
|
70
|
-
*/
|
|
71
|
-
getMenu() {
|
|
72
|
-
return this.childMenu;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Handles keyboard events for the menu item.
|
|
76
|
-
* @param event The keyboard event to handle
|
|
77
|
-
*/
|
|
78
|
-
_toggleOnKeydown(event) {
|
|
79
|
-
const isParentVertical = this._parentMenu?.orientation === 'vertical';
|
|
80
|
-
switch (event.keyCode) {
|
|
81
|
-
case SPACE:
|
|
82
|
-
case ENTER:
|
|
83
|
-
if (!hasModifierKey(event)) {
|
|
84
|
-
this.toggle();
|
|
85
|
-
this.childMenu?.focusFirstItem('keyboard');
|
|
86
|
-
}
|
|
87
|
-
break;
|
|
88
|
-
case RIGHT_ARROW:
|
|
89
|
-
if (!hasModifierKey(event)) {
|
|
90
|
-
if (this._parentMenu && isParentVertical && this._directionality?.value !== 'rtl') {
|
|
91
|
-
event.preventDefault();
|
|
92
|
-
this.open();
|
|
93
|
-
this.childMenu?.focusFirstItem('keyboard');
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
break;
|
|
97
|
-
case LEFT_ARROW:
|
|
98
|
-
if (!hasModifierKey(event)) {
|
|
99
|
-
if (this._parentMenu && isParentVertical && this._directionality?.value === 'rtl') {
|
|
100
|
-
event.preventDefault();
|
|
101
|
-
this.open();
|
|
102
|
-
this.childMenu?.focusFirstItem('keyboard');
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
break;
|
|
106
|
-
case DOWN_ARROW:
|
|
107
|
-
case UP_ARROW:
|
|
108
|
-
if (!hasModifierKey(event)) {
|
|
109
|
-
if (!isParentVertical) {
|
|
110
|
-
event.preventDefault();
|
|
111
|
-
this.open();
|
|
112
|
-
event.keyCode === DOWN_ARROW
|
|
113
|
-
? this.childMenu?.focusFirstItem('keyboard')
|
|
114
|
-
: this.childMenu?.focusLastItem('keyboard');
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
/** Handles clicks on the menu trigger. */
|
|
121
|
-
_handleClick() {
|
|
122
|
-
// Don't handle clicks originating from the keyboard since we
|
|
123
|
-
// already do the same on `keydown` events for enter and space.
|
|
124
|
-
if (this._inputModalityDetector.mostRecentModality !== 'keyboard') {
|
|
125
|
-
this.toggle();
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Sets whether the trigger's menu stack has focus.
|
|
130
|
-
* @param hasFocus Whether the menu stack has focus.
|
|
131
|
-
*/
|
|
132
|
-
_setHasFocus(hasFocus) {
|
|
133
|
-
if (!this._parentMenu) {
|
|
134
|
-
this.menuStack.setHasFocus(hasFocus);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Subscribe to the mouseenter events and close any sibling menu items if this element is moused
|
|
139
|
-
* into.
|
|
140
|
-
*/
|
|
141
|
-
_subscribeToMouseEnter() {
|
|
142
|
-
this._ngZone.runOutsideAngular(() => {
|
|
143
|
-
fromEvent(this._elementRef.nativeElement, 'mouseenter')
|
|
144
|
-
.pipe(filter(() => !this.menuStack.isEmpty() && !this.isOpen()), takeUntil(this.destroyed))
|
|
145
|
-
.subscribe(() => {
|
|
146
|
-
// Closes any sibling menu items and opens the menu associated with this trigger.
|
|
147
|
-
const toggleMenus = () => this._ngZone.run(() => {
|
|
148
|
-
this._closeSiblingTriggers();
|
|
149
|
-
this.open();
|
|
150
|
-
});
|
|
151
|
-
if (this._menuAim) {
|
|
152
|
-
this._menuAim.toggle(toggleMenus);
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
toggleMenus();
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
/** Close out any sibling menu trigger menus. */
|
|
161
|
-
_closeSiblingTriggers() {
|
|
162
|
-
if (this._parentMenu) {
|
|
163
|
-
// If nothing was removed from the stack and the last element is not the parent item
|
|
164
|
-
// that means that the parent menu is a menu bar since we don't put the menu bar on the
|
|
165
|
-
// stack
|
|
166
|
-
const isParentMenuBar = !this.menuStack.closeSubMenuOf(this._parentMenu) &&
|
|
167
|
-
this.menuStack.peek() !== this._parentMenu;
|
|
168
|
-
if (isParentMenuBar) {
|
|
169
|
-
this.menuStack.closeAll();
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
this.menuStack.closeAll();
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
/** Get the configuration object used to create the overlay. */
|
|
177
|
-
_getOverlayConfig() {
|
|
178
|
-
return new OverlayConfig({
|
|
179
|
-
positionStrategy: this._getOverlayPositionStrategy(),
|
|
180
|
-
scrollStrategy: this._overlay.scrollStrategies.reposition(),
|
|
181
|
-
direction: this._directionality || undefined,
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
/** Build the position strategy for the overlay which specifies where to place the menu. */
|
|
185
|
-
_getOverlayPositionStrategy() {
|
|
186
|
-
return this._overlay
|
|
187
|
-
.position()
|
|
188
|
-
.flexibleConnectedTo(this._elementRef)
|
|
189
|
-
.withLockedPosition()
|
|
190
|
-
.withGrowAfterOpen()
|
|
191
|
-
.withPositions(this._getOverlayPositions());
|
|
192
|
-
}
|
|
193
|
-
/** Get the preferred positions for the opened menu relative to the menu item. */
|
|
194
|
-
_getOverlayPositions() {
|
|
195
|
-
return (this.menuPosition ??
|
|
196
|
-
(!this._parentMenu || this._parentMenu.orientation === 'horizontal'
|
|
197
|
-
? STANDARD_DROPDOWN_BELOW_POSITIONS
|
|
198
|
-
: STANDARD_DROPDOWN_ADJACENT_POSITIONS));
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Subscribe to the MenuStack close events if this is a standalone trigger and close out the menu
|
|
202
|
-
* this triggers when requested.
|
|
203
|
-
*/
|
|
204
|
-
_registerCloseHandler() {
|
|
205
|
-
if (!this._parentMenu) {
|
|
206
|
-
this.menuStack.closed.pipe(takeUntil(this.destroyed)).subscribe(({ item }) => {
|
|
207
|
-
if (item === this.childMenu) {
|
|
208
|
-
this.close();
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Subscribe to the overlays outside pointer events stream and handle closing out the stack if a
|
|
215
|
-
* click occurs outside the menus.
|
|
216
|
-
*/
|
|
217
|
-
_subscribeToOutsideClicks() {
|
|
218
|
-
if (this.overlayRef) {
|
|
219
|
-
this.overlayRef
|
|
220
|
-
.outsidePointerEvents()
|
|
221
|
-
.pipe(takeUntil(this.stopOutsideClicksListener))
|
|
222
|
-
.subscribe(event => {
|
|
223
|
-
const target = _getEventTarget(event);
|
|
224
|
-
const element = this._elementRef.nativeElement;
|
|
225
|
-
if (target !== element && !element.contains(target)) {
|
|
226
|
-
if (!this.isElementInsideMenuStack(target)) {
|
|
227
|
-
this.menuStack.closeAll();
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
this._closeSiblingTriggers();
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
/** Subscribe to the MenuStack hasFocus events. */
|
|
237
|
-
_subscribeToMenuStackHasFocus() {
|
|
238
|
-
if (!this._parentMenu) {
|
|
239
|
-
this.menuStack.hasFocus.pipe(takeUntil(this.destroyed)).subscribe(hasFocus => {
|
|
240
|
-
if (!hasFocus) {
|
|
241
|
-
this.menuStack.closeAll();
|
|
242
|
-
}
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
/** Subscribe to the MenuStack closed events. */
|
|
247
|
-
_subscribeToMenuStackClosed() {
|
|
248
|
-
if (!this._parentMenu) {
|
|
249
|
-
this.menuStack.closed.subscribe(({ focusParentTrigger }) => {
|
|
250
|
-
if (focusParentTrigger && !this.menuStack.length()) {
|
|
251
|
-
this._elementRef.nativeElement.focus();
|
|
252
|
-
}
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
/** Sets the role attribute for this trigger if needed. */
|
|
257
|
-
_setRole() {
|
|
258
|
-
// If this trigger is part of another menu, the cdkMenuItem directive will handle setting the
|
|
259
|
-
// role, otherwise this is a standalone trigger, and we should ensure it has role="button".
|
|
260
|
-
if (!this._parentMenu) {
|
|
261
|
-
this._elementRef.nativeElement.setAttribute('role', 'button');
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
/** Sets thte `type` attribute of the trigger. */
|
|
265
|
-
_setType() {
|
|
266
|
-
const element = this._elementRef.nativeElement;
|
|
267
|
-
if (element.nodeName === 'BUTTON' && !element.getAttribute('type')) {
|
|
268
|
-
// Prevents form submissions.
|
|
269
|
-
element.setAttribute('type', 'button');
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
CdkMenuTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: CdkMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
274
|
-
CdkMenuTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.2", type: CdkMenuTrigger, isStandalone: true, selector: "[cdkMenuTriggerFor]", inputs: { menuTemplateRef: ["cdkMenuTriggerFor", "menuTemplateRef"], menuPosition: ["cdkMenuPosition", "menuPosition"], menuData: ["cdkMenuTriggerData", "menuData"] }, outputs: { opened: "cdkMenuOpened", closed: "cdkMenuClosed" }, host: { listeners: { "focusin": "_setHasFocus(true)", "focusout": "_setHasFocus(false)", "keydown": "_toggleOnKeydown($event)", "click": "_handleClick()" }, properties: { "attr.aria-haspopup": "menuTemplateRef ? \"menu\" : null", "attr.aria-expanded": "menuTemplateRef == null ? null : isOpen()" }, classAttribute: "cdk-menu-trigger" }, providers: [
|
|
275
|
-
{ provide: MENU_TRIGGER, useExisting: CdkMenuTrigger },
|
|
276
|
-
PARENT_OR_NEW_MENU_STACK_PROVIDER,
|
|
277
|
-
], exportAs: ["cdkMenuTriggerFor"], usesInheritance: true, ngImport: i0 });
|
|
278
|
-
export { CdkMenuTrigger };
|
|
279
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: CdkMenuTrigger, decorators: [{
|
|
280
|
-
type: Directive,
|
|
281
|
-
args: [{
|
|
282
|
-
selector: '[cdkMenuTriggerFor]',
|
|
283
|
-
exportAs: 'cdkMenuTriggerFor',
|
|
284
|
-
standalone: true,
|
|
285
|
-
host: {
|
|
286
|
-
'class': 'cdk-menu-trigger',
|
|
287
|
-
'[attr.aria-haspopup]': 'menuTemplateRef ? "menu" : null',
|
|
288
|
-
'[attr.aria-expanded]': 'menuTemplateRef == null ? null : isOpen()',
|
|
289
|
-
'(focusin)': '_setHasFocus(true)',
|
|
290
|
-
'(focusout)': '_setHasFocus(false)',
|
|
291
|
-
'(keydown)': '_toggleOnKeydown($event)',
|
|
292
|
-
'(click)': '_handleClick()',
|
|
293
|
-
},
|
|
294
|
-
inputs: [
|
|
295
|
-
'menuTemplateRef: cdkMenuTriggerFor',
|
|
296
|
-
'menuPosition: cdkMenuPosition',
|
|
297
|
-
'menuData: cdkMenuTriggerData',
|
|
298
|
-
],
|
|
299
|
-
outputs: ['opened: cdkMenuOpened', 'closed: cdkMenuClosed'],
|
|
300
|
-
providers: [
|
|
301
|
-
{ provide: MENU_TRIGGER, useExisting: CdkMenuTrigger },
|
|
302
|
-
PARENT_OR_NEW_MENU_STACK_PROVIDER,
|
|
303
|
-
],
|
|
304
|
-
}]
|
|
305
|
-
}], ctorParameters: function () { return []; } });
|
|
306
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS10cmlnZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9tZW51L21lbnUtdHJpZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBR0wsT0FBTyxFQUNQLGFBQWEsRUFDYixvQ0FBb0MsRUFDcEMsaUNBQWlDLEdBQ2xDLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLFVBQVUsRUFDVixLQUFLLEVBQ0wsY0FBYyxFQUNkLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsR0FDVCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFDLFFBQVEsRUFBTyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMvRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFckU7Ozs7OztHQU1HO0FBQ0gsTUF3QmEsY0FBZSxTQUFRLGtCQUFrQjtJQWFwRDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBYk8sZ0JBQVcsR0FBNEIs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QztTQUN4QztJQUNILENBQUM7O2tIQXJSVSxjQUFjO3NHQUFkLGNBQWMsMG5CQUxkO1FBQ1QsRUFBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUM7UUFDcEQsaUNBQWlDO0tBQ2xDO1NBRVUsY0FBYztrR0FBZCxjQUFjO2tCQXhCMUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFO3dCQUNKLE9BQU8sRUFBRSxrQkFBa0I7d0JBQzNCLHNCQUFzQixFQUFFLGlDQUFpQzt3QkFDekQsc0JBQXNCLEVBQUUsMkNBQTJDO3dCQUNuRSxXQUFXLEVBQUUsb0JBQW9CO3dCQUNqQyxZQUFZLEVBQUUscUJBQXFCO3dCQUNuQyxXQUFXLEVBQUUsMEJBQTBCO3dCQUN2QyxTQUFTLEVBQUUsZ0JBQWdCO3FCQUM1QjtvQkFDRCxNQUFNLEVBQUU7d0JBQ04sb0NBQW9DO3dCQUNwQywrQkFBK0I7d0JBQy9CLDhCQUE4QjtxQkFDL0I7b0JBQ0QsT0FBTyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLENBQUM7b0JBQzNELFNBQVMsRUFBRTt3QkFDVCxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxnQkFBZ0IsRUFBQzt3QkFDcEQsaUNBQWlDO3FCQUNsQztpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0RpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBOZ1pvbmUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RpcmVjdGlvbmFsaXR5fSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQge1xuICBDb25uZWN0ZWRQb3NpdGlvbixcbiAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICBPdmVybGF5LFxuICBPdmVybGF5Q29uZmlnLFxuICBTVEFOREFSRF9EUk9QRE9XTl9BREpBQ0VOVF9QT1NJVElPTlMsXG4gIFNUQU5EQVJEX0RST1BET1dOX0JFTE9XX1BPU0lUSU9OUyxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgRE9XTl9BUlJPVyxcbiAgRU5URVIsXG4gIGhhc01vZGlmaWVyS2V5LFxuICBMRUZUX0FSUk9XLFxuICBSSUdIVF9BUlJPVyxcbiAgU1BBQ0UsXG4gIFVQX0FSUk9XLFxufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtfZ2V0RXZlbnRUYXJnZXR9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge0lucHV0TW9kYWxpdHlEZXRlY3Rvcn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtmcm9tRXZlbnR9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDREtfTUVOVSwgTWVudX0gZnJvbSAnLi9tZW51LWludGVyZmFjZSc7XG5pbXBvcnQge1BBUkVOVF9PUl9ORVdfTUVOVV9TVEFDS19QUk9WSURFUn0gZnJvbSAnLi9tZW51LXN0YWNrJztcbmltcG9ydCB7TUVOVV9BSU19IGZyb20gJy4vbWVudS1haW0nO1xuaW1wb3J0IHtDZGtNZW51VHJpZ2dlckJhc2UsIE1FTlVfVFJJR0dFUn0gZnJvbSAnLi9tZW51LXRyaWdnZXItYmFzZSc7XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdGhhdCB0dXJucyBpdHMgaG9zdCBlbGVtZW50IGludG8gYSB0cmlnZ2VyIGZvciBhIHBvcHVwIG1lbnUuXG4gKiBJdCBjYW4gYmUgY29tYmluZWQgd2l0aCBjZGtNZW51SXRlbSB0byBjcmVhdGUgc3ViLW1lbnVzLiBJZiB0aGUgZWxlbWVudCBpcyBpbiBhIHRvcCBsZXZlbFxuICogTWVudUJhciBpdCB3aWxsIG9wZW4gdGhlIG1lbnUgb24gY2xpY2ssIG9yIGlmIGEgc2libGluZyBpcyBhbHJlYWR5IG9wZW5lZCBpdCB3aWxsIG9wZW4gb24gaG92ZXIuXG4gKiBJZiBpdCBpcyBpbnNpZGUgb2YgYSBNZW51IGl0IHdpbGwgb3BlbiB0aGUgYXR0YWNoZWQgU3VibWVudSBvbiBob3ZlciByZWdhcmRsZXNzIG9mIGl0cyBzaWJsaW5nXG4gKiBzdGF0ZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Nka01lbnVUcmlnZ2VyRm9yXScsXG4gIGV4cG9ydEFzOiAnY2RrTWVudVRyaWdnZXJGb3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2Nkay1tZW51LXRyaWdnZXInLFxuICAgICdbYXR0ci5hcmlhLWhhc3BvcHVwXSc6ICdtZW51VGVtcGxhdGVSZWYgPyBcIm1lbnVcIiA6IG51bGwnLFxuICAgICdbYXR0ci5hcmlhLWV4cGFuZGVkXSc6ICdtZW51VGVtcGxhdGVSZWYgPT0gbnVsbCA/IG51bGwgOiBpc09wZW4oKScsXG4gICAgJyhmb2N1c2luKSc6ICdfc2V0SGFzRm9jdXModHJ1ZSknLFxuICAgICcoZm9jdXNvdXQpJzogJ19zZXRIYXNGb2N1cyhmYWxzZSknLFxuICAgICcoa2V5ZG93biknOiAnX3RvZ2dsZU9uS2V5ZG93bigkZXZlbnQpJyxcbiAgICAnKGNsaWNrKSc6ICdfaGFuZGxlQ2xpY2soKScsXG4gIH0sXG4gIGlucHV0czogW1xuICAgICdtZW51VGVtcGxhdGVSZWY6IGNka01lbnVUcmlnZ2VyRm9yJyxcbiAgICAnbWVudVBvc2l0aW9uOiBjZGtNZW51UG9zaXRpb24nLFxuICAgICdtZW51RGF0YTogY2RrTWVudVRyaWdnZXJEYXRhJyxcbiAgXSxcbiAgb3V0cHV0czogWydvcGVuZWQ6IGNka01lbnVPcGVuZWQnLCAnY2xvc2VkOiBjZGtNZW51Q2xvc2VkJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBNRU5VX1RSSUdHRVIsIHVzZUV4aXN0aW5nOiBDZGtNZW51VHJpZ2dlcn0sXG4gICAgUEFSRU5UX09SX05FV19NRU5VX1NUQUNLX1BST1ZJREVSLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDZGtNZW51VHJpZ2dlciBleHRlbmRzIENka01lbnVUcmlnZ2VyQmFzZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlyZWN0aW9uYWxpdHkgPSBpbmplY3QoRGlyZWN0aW9uYWxpdHksIHtvcHRpb25hbDogdHJ1ZX0pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dE1vZGFsaXR5RGV0ZWN0b3IgPSBpbmplY3QoSW5wdXRNb2RhbGl0eURldGVjdG9yKTtcblxuICAvKiogVGhlIHBhcmVudCBtZW51IHRoaXMgdHJpZ2dlciBiZWxvbmdzIHRvLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnRNZW51ID0gaW5qZWN0KENES19NRU5VLCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAvKiogVGhlIG1lbnUgYWltIHNlcnZpY2UgdXNlZCBieSB0aGlzIG1lbnUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX21lbnVBaW0gPSBpbmplY3QoTUVOVV9BSU0sIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fc2V0Um9sZSgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyQ2xvc2VIYW5kbGVyKCk7XG4gICAgdGhpcy5fc3Vic2NyaWJlVG9NZW51U3RhY2tDbG9zZWQoKTtcbiAgICB0aGlzLl9zdWJzY3JpYmVUb01vdXNlRW50ZXIoKTtcbiAgICB0aGlzLl9zdWJzY3JpYmVUb01lbnVTdGFja0hhc0ZvY3VzKCk7XG4gICAgdGhpcy5fc2V0VHlwZSgpO1xuICB9XG5cbiAgLyoqIFRvZ2dsZSB0aGUgYXR0YWNoZWQgbWVudS4gKi9cbiAgdG9nZ2xlKCkge1xuICAgIHRoaXMuaXNPcGVuKCkgPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKTtcbiAgfVxuXG4gIC8qKiBPcGVuIHRoZSBhdHRhY2hlZCBtZW51LiAqL1xuICBvcGVuKCkge1xuICAgIGlmICghdGhpcy5pc09wZW4oKSAmJiB0aGlzLm1lbnVUZW1wbGF0ZVJlZiAhPSBudWxsKSB7XG4gICAgICB0aGlzLm9wZW5lZC5uZXh0KCk7XG5cbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheVJlZiB8fCB0aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKCkpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaCh0aGlzLmdldE1lbnVDb250ZW50UG9ydGFsKCkpO1xuICAgICAgdGhpcy5fc3Vic2NyaWJlVG9PdXRzaWRlQ2xpY2tzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlIHRoZSBvcGVuZWQgbWVudS4gKi9cbiAgY2xvc2UoKSB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIHRoaXMuY2xvc2VkLm5leHQoKTtcblxuICAgICAgdGhpcy5vdmVybGF5UmVmIS5kZXRhY2goKTtcbiAgICB9XG4gICAgdGhpcy5fY2xvc2VTaWJsaW5nVHJpZ2dlcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIHJlbmRlcmVkIE1lbnUgaWYgdGhlIE1lbnUgaXMgb3BlbiBhbmQgcmVuZGVyZWQgaW4gdGhlIERPTS5cbiAgICovXG4gIGdldE1lbnUoKTogTWVudSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRNZW51O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIGZvciB0aGUgbWVudSBpdGVtLlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGtleWJvYXJkIGV2ZW50IHRvIGhhbmRsZVxuICAgKi9cbiAgX3RvZ2dsZU9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGlzUGFyZW50VmVydGljYWwgPSB0aGlzLl9wYXJlbnRNZW51Py5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJztcbiAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgIGNhc2UgU1BBQ0U6XG4gICAgICBjYXNlIEVOVEVSOlxuICAgICAgICBpZiAoIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkge1xuICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgICAgdGhpcy5jaGlsZE1lbnU/LmZvY3VzRmlyc3RJdGVtKCdrZXlib2FyZCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJJR0hUX0FSUk9XOlxuICAgICAgICBpZiAoIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkge1xuICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnRNZW51ICYmIGlzUGFyZW50VmVydGljYWwgJiYgdGhpcy5fZGlyZWN0aW9uYWxpdHk/LnZhbHVlICE9PSAncnRsJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgdGhpcy5jaGlsZE1lbnU/LmZvY3VzRmlyc3RJdGVtKCdrZXlib2FyZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMRUZUX0FSUk9XOlxuICAgICAgICBpZiAoIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkge1xuICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnRNZW51ICYmIGlzUGFyZW50VmVydGljYWwgJiYgdGhpcy5fZGlyZWN0aW9uYWxpdHk/LnZhbHVlID09PSAncnRsJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgdGhpcy5jaGlsZE1lbnU/LmZvY3VzRmlyc3RJdGVtKCdrZXlib2FyZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBET1dOX0FSUk9XOlxuICAgICAgY2FzZSBVUF9BUlJPVzpcbiAgICAgICAgaWYgKCFoYXNNb2RpZmllcktleShldmVudCkpIHtcbiAgICAgICAgICBpZiAoIWlzUGFyZW50VmVydGljYWwpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgPT09IERPV05fQVJST1dcbiAgICAgICAgICAgICAgPyB0aGlzLmNoaWxkTWVudT8uZm9jdXNGaXJzdEl0ZW0oJ2tleWJvYXJkJylcbiAgICAgICAgICAgICAgOiB0aGlzLmNoaWxkTWVudT8uZm9jdXNMYXN0SXRlbSgna2V5Ym9hcmQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZXMgY2xpY2tzIG9uIHRoZSBtZW51IHRyaWdnZXIuICovXG4gIF9oYW5kbGVDbGljaygpIHtcbiAgICAvLyBEb24ndCBoYW5kbGUgY2xpY2tzIG9yaWdpbmF0aW5nIGZyb20gdGhlIGtleWJvYXJkIHNpbmNlIHdlXG4gICAgLy8gYWxyZWFkeSBkbyB0aGUgc2FtZSBvbiBga2V5ZG93bmAgZXZlbnRzIGZvciBlbnRlciBhbmQgc3BhY2UuXG4gICAgaWYgKHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgIT09ICdrZXlib2FyZCcpIHtcbiAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgd2hldGhlciB0aGUgdHJpZ2dlcidzIG1lbnUgc3RhY2sgaGFzIGZvY3VzLlxuICAgKiBAcGFyYW0gaGFzRm9jdXMgV2hldGhlciB0aGUgbWVudSBzdGFjayBoYXMgZm9jdXMuXG4gICAqL1xuICBfc2V0SGFzRm9jdXMoaGFzRm9jdXM6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuX3BhcmVudE1lbnUpIHtcbiAgICAgIHRoaXMubWVudVN0YWNrLnNldEhhc0ZvY3VzKGhhc0ZvY3VzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBtb3VzZWVudGVyIGV2ZW50cyBhbmQgY2xvc2UgYW55IHNpYmxpbmcgbWVudSBpdGVtcyBpZiB0aGlzIGVsZW1lbnQgaXMgbW91c2VkXG4gICAqIGludG8uXG4gICAqL1xuICBwcml2YXRlIF9zdWJzY3JpYmVUb01vdXNlRW50ZXIoKSB7XG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGZyb21FdmVudCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWVudGVyJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLm1lbnVTdGFjay5pc0VtcHR5KCkgJiYgIXRoaXMuaXNPcGVuKCkpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgLy8gQ2xvc2VzIGFueSBzaWJsaW5nIG1lbnUgaXRlbXMgYW5kIG9wZW5zIHRoZSBtZW51IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRyaWdnZXIuXG4gICAgICAgICAgY29uc3QgdG9nZ2xlTWVudXMgPSAoKSA9PlxuICAgICAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2Nsb3NlU2libGluZ1RyaWdnZXJzKCk7XG4gICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fbWVudUFpbSkge1xuICAgICAgICAgICAgdGhpcy5fbWVudUFpbS50b2dnbGUodG9nZ2xlTWVudXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2dnbGVNZW51cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogQ2xvc2Ugb3V0IGFueSBzaWJsaW5nIG1lbnUgdHJpZ2dlciBtZW51cy4gKi9cbiAgcHJpdmF0ZSBfY2xvc2VTaWJsaW5nVHJpZ2dlcnMoKSB7XG4gICAgaWYgKHRoaXMuX3BhcmVudE1lbnUpIHtcbiAgICAgIC8vIElmIG5vdGhpbmcgd2FzIHJlbW92ZWQgZnJvbSB0aGUgc3RhY2sgYW5kIHRoZSBsYXN0IGVsZW1lbnQgaXMgbm90IHRoZSBwYXJlbnQgaXRlbVxuICAgICAgLy8gdGhhdCBtZWFucyB0aGF0IHRoZSBwYXJlbnQgbWVudSBpcyBhIG1lbnUgYmFyIHNpbmNlIHdlIGRvbid0IHB1dCB0aGUgbWVudSBiYXIgb24gdGhlXG4gICAgICAvLyBzdGFja1xuICAgICAgY29uc3QgaXNQYXJlbnRNZW51QmFyID1cbiAgICAgICAgIXRoaXMubWVudVN0YWNrLmNsb3NlU3ViTWVudU9mKHRoaXMuX3BhcmVudE1lbnUpICYmXG4gICAgICAgIHRoaXMubWVudVN0YWNrLnBlZWsoKSAhPT0gdGhpcy5fcGFyZW50TWVudTtcblxuICAgICAgaWYgKGlzUGFyZW50TWVudUJhcikge1xuICAgICAgICB0aGlzLm1lbnVTdGFjay5jbG9zZUFsbCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lbnVTdGFjay5jbG9zZUFsbCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHVzZWQgdG8gY3JlYXRlIHRoZSBvdmVybGF5LiAqL1xuICBwcml2YXRlIF9nZXRPdmVybGF5Q29uZmlnKCkge1xuICAgIHJldHVybiBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLl9nZXRPdmVybGF5UG9zaXRpb25TdHJhdGVneSgpLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMuX292ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXG4gICAgICBkaXJlY3Rpb246IHRoaXMuX2RpcmVjdGlvbmFsaXR5IHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBCdWlsZCB0aGUgcG9zaXRpb24gc3RyYXRlZ3kgZm9yIHRoZSBvdmVybGF5IHdoaWNoIHNwZWNpZmllcyB3aGVyZSB0byBwbGFjZSB0aGUgbWVudS4gKi9cbiAgcHJpdmF0ZSBfZ2V0T3ZlcmxheVBvc2l0aW9uU3RyYXRlZ3koKTogRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVxuICAgICAgLnBvc2l0aW9uKClcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuX2VsZW1lbnRSZWYpXG4gICAgICAud2l0aExvY2tlZFBvc2l0aW9uKClcbiAgICAgIC53aXRoR3Jvd0FmdGVyT3BlbigpXG4gICAgICAud2l0aFBvc2l0aW9ucyh0aGlzLl9nZXRPdmVybGF5UG9zaXRpb25zKCkpO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgcHJlZmVycmVkIHBvc2l0aW9ucyBmb3IgdGhlIG9wZW5lZCBtZW51IHJlbGF0aXZlIHRvIHRoZSBtZW51IGl0ZW0uICovXG4gIHByaXZhdGUgX2dldE92ZXJsYXlQb3NpdGlvbnMoKTogQ29ubmVjdGVkUG9zaXRpb25bXSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubWVudVBvc2l0aW9uID8/XG4gICAgICAoIXRoaXMuX3BhcmVudE1lbnUgfHwgdGhpcy5fcGFyZW50TWVudS5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gU1RBTkRBUkRfRFJPUERPV05fQkVMT1dfUE9TSVRJT05TXG4gICAgICAgIDogU1RBTkRBUkRfRFJPUERPV05fQURKQUNFTlRfUE9TSVRJT05TKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBNZW51U3RhY2sgY2xvc2UgZXZlbnRzIGlmIHRoaXMgaXMgYSBzdGFuZGFsb25lIHRyaWdnZXIgYW5kIGNsb3NlIG91dCB0aGUgbWVudVxuICAgKiB0aGlzIHRyaWdnZXJzIHdoZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDbG9zZUhhbmRsZXIoKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJlbnRNZW51KSB7XG4gICAgICB0aGlzLm1lbnVTdGFjay5jbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHtpdGVtfSkgPT4ge1xuICAgICAgICBpZiAoaXRlbSA9PT0gdGhpcy5jaGlsZE1lbnUpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIG92ZXJsYXlzIG91dHNpZGUgcG9pbnRlciBldmVudHMgc3RyZWFtIGFuZCBoYW5kbGUgY2xvc2luZyBvdXQgdGhlIHN0YWNrIGlmIGFcbiAgICogY2xpY2sgb2NjdXJzIG91dHNpZGUgdGhlIG1lbnVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9PdXRzaWRlQ2xpY2tzKCkge1xuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMub3ZlcmxheVJlZlxuICAgICAgICAub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5zdG9wT3V0c2lkZUNsaWNrc0xpc3RlbmVyKSlcbiAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gX2dldEV2ZW50VGFyZ2V0KGV2ZW50KSBhcyBFbGVtZW50O1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICBpZiAodGFyZ2V0ICE9PSBlbGVtZW50ICYmICFlbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0VsZW1lbnRJbnNpZGVNZW51U3RhY2sodGFyZ2V0KSkge1xuICAgICAgICAgICAgICB0aGlzLm1lbnVTdGFjay5jbG9zZUFsbCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5fY2xvc2VTaWJsaW5nVHJpZ2dlcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gdGhlIE1lbnVTdGFjayBoYXNGb2N1cyBldmVudHMuICovXG4gIHByaXZhdGUgX3N1YnNjcmliZVRvTWVudVN0YWNrSGFzRm9jdXMoKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJlbnRNZW51KSB7XG4gICAgICB0aGlzLm1lbnVTdGFjay5oYXNGb2N1cy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpLnN1YnNjcmliZShoYXNGb2N1cyA9PiB7XG4gICAgICAgIGlmICghaGFzRm9jdXMpIHtcbiAgICAgICAgICB0aGlzLm1lbnVTdGFjay5jbG9zZUFsbCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIHRvIHRoZSBNZW51U3RhY2sgY2xvc2VkIGV2ZW50cy4gKi9cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9NZW51U3RhY2tDbG9zZWQoKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJlbnRNZW51KSB7XG4gICAgICB0aGlzLm1lbnVTdGFjay5jbG9zZWQuc3Vic2NyaWJlKCh7Zm9jdXNQYXJlbnRUcmlnZ2VyfSkgPT4ge1xuICAgICAgICBpZiAoZm9jdXNQYXJlbnRUcmlnZ2VyICYmICF0aGlzLm1lbnVTdGFjay5sZW5ndGgoKSkge1xuICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0cyB0aGUgcm9sZSBhdHRyaWJ1dGUgZm9yIHRoaXMgdHJpZ2dlciBpZiBuZWVkZWQuICovXG4gIHByaXZhdGUgX3NldFJvbGUoKSB7XG4gICAgLy8gSWYgdGhpcyB0cmlnZ2VyIGlzIHBhcnQgb2YgYW5vdGhlciBtZW51LCB0aGUgY2RrTWVudUl0ZW0gZGlyZWN0aXZlIHdpbGwgaGFuZGxlIHNldHRpbmcgdGhlXG4gICAgLy8gcm9sZSwgb3RoZXJ3aXNlIHRoaXMgaXMgYSBzdGFuZGFsb25lIHRyaWdnZXIsIGFuZCB3ZSBzaG91bGQgZW5zdXJlIGl0IGhhcyByb2xlPVwiYnV0dG9uXCIuXG4gICAgaWYgKCF0aGlzLl9wYXJlbnRNZW51KSB7XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2J1dHRvbicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZXRzIHRodGUgYHR5cGVgIGF0dHJpYnV0ZSBvZiB0aGUgdHJpZ2dlci4gKi9cbiAgcHJpdmF0ZSBfc2V0VHlwZSgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdCVVRUT04nICYmICFlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpKSB7XG4gICAgICAvLyBQcmV2ZW50cyBmb3JtIHN1Ym1pc3Npb25zLlxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnYnV0dG9uJyk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { ComponentFactoryResolver, Directive, EventEmitter, NgModule, Output, TemplateRef, ViewContainerRef, Inject, } from '@angular/core';
|
|
9
|
-
import { DOCUMENT } from '@angular/common';
|
|
10
|
-
import { BasePortalOutlet, TemplatePortal } from './portal';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
/**
|
|
13
|
-
* Directive version of a `TemplatePortal`. Because the directive *is* a TemplatePortal,
|
|
14
|
-
* the directive instance itself can be attached to a host, enabling declarative use of portals.
|
|
15
|
-
*/
|
|
16
|
-
class CdkPortal extends TemplatePortal {
|
|
17
|
-
constructor(templateRef, viewContainerRef) {
|
|
18
|
-
super(templateRef, viewContainerRef);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
CdkPortal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: CdkPortal, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
22
|
-
CdkPortal.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.2", type: CdkPortal, selector: "[cdkPortal]", exportAs: ["cdkPortal"], usesInheritance: true, ngImport: i0 });
|
|
23
|
-
export { CdkPortal };
|
|
24
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: CdkPortal, decorators: [{
|
|
25
|
-
type: Directive,
|
|
26
|
-
args: [{
|
|
27
|
-
selector: '[cdkPortal]',
|
|
28
|
-
exportAs: 'cdkPortal',
|
|
29
|
-
}]
|
|
30
|
-
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; } });
|
|
31
|
-
/**
|
|
32
|
-
* @deprecated Use `CdkPortal` instead.
|
|
33
|
-
* @breaking-change 9.0.0
|
|
34
|
-
*/
|
|
35
|
-
class TemplatePortalDirective extends CdkPortal {
|
|
36
|
-
}
|
|
37
|
-
TemplatePortalDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: TemplatePortalDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
38
|
-
TemplatePortalDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.2", type: TemplatePortalDirective, selector: "[cdk-portal], [portal]", providers: [
|
|
39
|
-
{
|
|
40
|
-
provide: CdkPortal,
|
|
41
|
-
useExisting: TemplatePortalDirective,
|
|
42
|
-
},
|
|
43
|
-
], exportAs: ["cdkPortal"], usesInheritance: true, ngImport: i0 });
|
|
44
|
-
export { TemplatePortalDirective };
|
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: TemplatePortalDirective, decorators: [{
|
|
46
|
-
type: Directive,
|
|
47
|
-
args: [{
|
|
48
|
-
selector: '[cdk-portal], [portal]',
|
|
49
|
-
exportAs: 'cdkPortal',
|
|
50
|
-
providers: [
|
|
51
|
-
{
|
|
52
|
-
provide: CdkPortal,
|
|
53
|
-
useExisting: TemplatePortalDirective,
|
|
54
|
-
},
|
|
55
|
-
],
|
|
56
|
-
}]
|
|
57
|
-
}] });
|
|
58
|
-
/**
|
|
59
|
-
* Directive version of a PortalOutlet. Because the directive *is* a PortalOutlet, portals can be
|
|
60
|
-
* directly attached to it, enabling declarative use.
|
|
61
|
-
*
|
|
62
|
-
* Usage:
|
|
63
|
-
* `<ng-template [cdkPortalOutlet]="greeting"></ng-template>`
|
|
64
|
-
*/
|
|
65
|
-
class CdkPortalOutlet extends BasePortalOutlet {
|
|
66
|
-
constructor(_componentFactoryResolver, _viewContainerRef,
|
|
67
|
-
/**
|
|
68
|
-
* @deprecated `_document` parameter to be made required.
|
|
69
|
-
* @breaking-change 9.0.0
|
|
70
|
-
*/
|
|
71
|
-
_document) {
|
|
72
|
-
super();
|
|
73
|
-
this._componentFactoryResolver = _componentFactoryResolver;
|
|
74
|
-
this._viewContainerRef = _viewContainerRef;
|
|
75
|
-
/** Whether the portal component is initialized. */
|
|
76
|
-
this._isInitialized = false;
|
|
77
|
-
/** Emits when a portal is attached to the outlet. */
|
|
78
|
-
this.attached = new EventEmitter();
|
|
79
|
-
/**
|
|
80
|
-
* Attaches the given DomPortal to this PortalHost by moving all of the portal content into it.
|
|
81
|
-
* @param portal Portal to be attached.
|
|
82
|
-
* @deprecated To be turned into a method.
|
|
83
|
-
* @breaking-change 10.0.0
|
|
84
|
-
*/
|
|
85
|
-
this.attachDomPortal = (portal) => {
|
|
86
|
-
// @breaking-change 9.0.0 Remove check and error once the
|
|
87
|
-
// `_document` constructor parameter is required.
|
|
88
|
-
if (!this._document && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
89
|
-
throw Error('Cannot attach DOM portal without _document constructor parameter');
|
|
90
|
-
}
|
|
91
|
-
const element = portal.element;
|
|
92
|
-
if (!element.parentNode && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
93
|
-
throw Error('DOM portal content must be attached to a parent node.');
|
|
94
|
-
}
|
|
95
|
-
// Anchor used to save the element's previous position so
|
|
96
|
-
// that we can restore it when the portal is detached.
|
|
97
|
-
const anchorNode = this._document.createComment('dom-portal');
|
|
98
|
-
portal.setAttachedHost(this);
|
|
99
|
-
element.parentNode.insertBefore(anchorNode, element);
|
|
100
|
-
this._getRootNode().appendChild(element);
|
|
101
|
-
this._attachedPortal = portal;
|
|
102
|
-
super.setDisposeFn(() => {
|
|
103
|
-
if (anchorNode.parentNode) {
|
|
104
|
-
anchorNode.parentNode.replaceChild(element, anchorNode);
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
};
|
|
108
|
-
this._document = _document;
|
|
109
|
-
}
|
|
110
|
-
/** Portal associated with the Portal outlet. */
|
|
111
|
-
get portal() {
|
|
112
|
-
return this._attachedPortal;
|
|
113
|
-
}
|
|
114
|
-
set portal(portal) {
|
|
115
|
-
// Ignore the cases where the `portal` is set to a falsy value before the lifecycle hooks have
|
|
116
|
-
// run. This handles the cases where the user might do something like `<div cdkPortalOutlet>`
|
|
117
|
-
// and attach a portal programmatically in the parent component. When Angular does the first CD
|
|
118
|
-
// round, it will fire the setter with empty string, causing the user's content to be cleared.
|
|
119
|
-
if (this.hasAttached() && !portal && !this._isInitialized) {
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
if (this.hasAttached()) {
|
|
123
|
-
super.detach();
|
|
124
|
-
}
|
|
125
|
-
if (portal) {
|
|
126
|
-
super.attach(portal);
|
|
127
|
-
}
|
|
128
|
-
this._attachedPortal = portal || null;
|
|
129
|
-
}
|
|
130
|
-
/** Component or view reference that is attached to the portal. */
|
|
131
|
-
get attachedRef() {
|
|
132
|
-
return this._attachedRef;
|
|
133
|
-
}
|
|
134
|
-
ngOnInit() {
|
|
135
|
-
this._isInitialized = true;
|
|
136
|
-
}
|
|
137
|
-
ngOnDestroy() {
|
|
138
|
-
super.dispose();
|
|
139
|
-
this._attachedRef = this._attachedPortal = null;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Attach the given ComponentPortal to this PortalOutlet using the ComponentFactoryResolver.
|
|
143
|
-
*
|
|
144
|
-
* @param portal Portal to be attached to the portal outlet.
|
|
145
|
-
* @returns Reference to the created component.
|
|
146
|
-
*/
|
|
147
|
-
attachComponentPortal(portal) {
|
|
148
|
-
portal.setAttachedHost(this);
|
|
149
|
-
// If the portal specifies an origin, use that as the logical location of the component
|
|
150
|
-
// in the application tree. Otherwise use the location of this PortalOutlet.
|
|
151
|
-
const viewContainerRef = portal.viewContainerRef != null ? portal.viewContainerRef : this._viewContainerRef;
|
|
152
|
-
const resolver = portal.componentFactoryResolver || this._componentFactoryResolver;
|
|
153
|
-
const componentFactory = resolver.resolveComponentFactory(portal.component);
|
|
154
|
-
const ref = viewContainerRef.createComponent(componentFactory, viewContainerRef.length, portal.injector || viewContainerRef.injector, portal.projectableNodes || undefined);
|
|
155
|
-
// If we're using a view container that's different from the injected one (e.g. when the portal
|
|
156
|
-
// specifies its own) we need to move the component into the outlet, otherwise it'll be rendered
|
|
157
|
-
// inside of the alternate view container.
|
|
158
|
-
if (viewContainerRef !== this._viewContainerRef) {
|
|
159
|
-
this._getRootNode().appendChild(ref.hostView.rootNodes[0]);
|
|
160
|
-
}
|
|
161
|
-
super.setDisposeFn(() => ref.destroy());
|
|
162
|
-
this._attachedPortal = portal;
|
|
163
|
-
this._attachedRef = ref;
|
|
164
|
-
this.attached.emit(ref);
|
|
165
|
-
return ref;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Attach the given TemplatePortal to this PortalHost as an embedded View.
|
|
169
|
-
* @param portal Portal to be attached.
|
|
170
|
-
* @returns Reference to the created embedded view.
|
|
171
|
-
*/
|
|
172
|
-
attachTemplatePortal(portal) {
|
|
173
|
-
portal.setAttachedHost(this);
|
|
174
|
-
const viewRef = this._viewContainerRef.createEmbeddedView(portal.templateRef, portal.context, {
|
|
175
|
-
injector: portal.injector,
|
|
176
|
-
});
|
|
177
|
-
super.setDisposeFn(() => this._viewContainerRef.clear());
|
|
178
|
-
this._attachedPortal = portal;
|
|
179
|
-
this._attachedRef = viewRef;
|
|
180
|
-
this.attached.emit(viewRef);
|
|
181
|
-
return viewRef;
|
|
182
|
-
}
|
|
183
|
-
/** Gets the root node of the portal outlet. */
|
|
184
|
-
_getRootNode() {
|
|
185
|
-
const nativeElement = this._viewContainerRef.element.nativeElement;
|
|
186
|
-
// The directive could be set on a template which will result in a comment
|
|
187
|
-
// node being the root. Use the comment's parent node if that is the case.
|
|
188
|
-
return (nativeElement.nodeType === nativeElement.ELEMENT_NODE
|
|
189
|
-
? nativeElement
|
|
190
|
-
: nativeElement.parentNode);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
CdkPortalOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: CdkPortalOutlet, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ViewContainerRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
|
|
194
|
-
CdkPortalOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.2", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: { portal: ["cdkPortalOutlet", "portal"] }, outputs: { attached: "attached" }, exportAs: ["cdkPortalOutlet"], usesInheritance: true, ngImport: i0 });
|
|
195
|
-
export { CdkPortalOutlet };
|
|
196
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: CdkPortalOutlet, decorators: [{
|
|
197
|
-
type: Directive,
|
|
198
|
-
args: [{
|
|
199
|
-
selector: '[cdkPortalOutlet]',
|
|
200
|
-
exportAs: 'cdkPortalOutlet',
|
|
201
|
-
inputs: ['portal: cdkPortalOutlet'],
|
|
202
|
-
}]
|
|
203
|
-
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
|
|
204
|
-
type: Inject,
|
|
205
|
-
args: [DOCUMENT]
|
|
206
|
-
}] }]; }, propDecorators: { attached: [{
|
|
207
|
-
type: Output
|
|
208
|
-
}] } });
|
|
209
|
-
/**
|
|
210
|
-
* @deprecated Use `CdkPortalOutlet` instead.
|
|
211
|
-
* @breaking-change 9.0.0
|
|
212
|
-
*/
|
|
213
|
-
class PortalHostDirective extends CdkPortalOutlet {
|
|
214
|
-
}
|
|
215
|
-
PortalHostDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: PortalHostDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
216
|
-
PortalHostDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.2", type: PortalHostDirective, selector: "[cdkPortalHost], [portalHost]", inputs: { portal: ["cdkPortalHost", "portal"] }, providers: [
|
|
217
|
-
{
|
|
218
|
-
provide: CdkPortalOutlet,
|
|
219
|
-
useExisting: PortalHostDirective,
|
|
220
|
-
},
|
|
221
|
-
], exportAs: ["cdkPortalHost"], usesInheritance: true, ngImport: i0 });
|
|
222
|
-
export { PortalHostDirective };
|
|
223
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: PortalHostDirective, decorators: [{
|
|
224
|
-
type: Directive,
|
|
225
|
-
args: [{
|
|
226
|
-
selector: '[cdkPortalHost], [portalHost]',
|
|
227
|
-
exportAs: 'cdkPortalHost',
|
|
228
|
-
inputs: ['portal: cdkPortalHost'],
|
|
229
|
-
providers: [
|
|
230
|
-
{
|
|
231
|
-
provide: CdkPortalOutlet,
|
|
232
|
-
useExisting: PortalHostDirective,
|
|
233
|
-
},
|
|
234
|
-
],
|
|
235
|
-
}]
|
|
236
|
-
}] });
|
|
237
|
-
class PortalModule {
|
|
238
|
-
}
|
|
239
|
-
PortalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: PortalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
240
|
-
PortalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0-next.2", ngImport: i0, type: PortalModule, declarations: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective], exports: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective] });
|
|
241
|
-
PortalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: PortalModule });
|
|
242
|
-
export { PortalModule };
|
|
243
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: PortalModule, decorators: [{
|
|
244
|
-
type: NgModule,
|
|
245
|
-
args: [{
|
|
246
|
-
exports: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective],
|
|
247
|
-
declarations: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective],
|
|
248
|
-
}]
|
|
249
|
-
}] });
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLWRpcmVjdGl2ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3BvcnRhbC9wb3J0YWwtZGlyZWN0aXZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQ0wsd0JBQXdCLEVBRXhCLFNBQVMsRUFFVCxZQUFZLEVBQ1osUUFBUSxFQUdSLE1BQU0sRUFDTixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLGdCQUFnQixFQUEyQixjQUFjLEVBQVksTUFBTSxVQUFVLENBQUM7O0FBRTlGOzs7R0FHRztBQUNILE1BSWEsU0FBVSxTQUFRLGNBQWM7SUFDM0MsWUFBWSxXQUE2QixFQUFFLGdCQUFrQztRQUMzRSxLQUFLLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDdkMsQ0FBQzs7NkdBSFUsU0FBUztpR0FBVCxTQUFTO1NBQVQsU0FBUztrR0FBVCxTQUFTO2tCQUpyQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QixRQUFRLEVBQUUsV0FBVztpQkFDdEI7O0FBT0Q7OztHQUdHO0FBQ0gsTUFVYSx1QkFBd0IsU0FBUSxTQUFTOzsySEFBekMsdUJBQXVCOytHQUF2Qix1QkFBdUIsaURBUHZCO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsU0FBUztZQUNsQixXQUFXLEVBQUUsdUJBQXVCO1NBQ3JDO0tBQ0Y7U0FFVSx1QkFBdUI7a0dBQXZCLHVCQUF1QjtrQkFWbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxRQUFRLEVBQUUsV0FBVztvQkFDckIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxTQUFTOzRCQUNsQixXQUFXLHlCQUF5Qjt5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QixDQUFDO2lCQUNwQzs7MEJBa0JJLE1BQU07MkJBQUMsUUFBUTs0Q0FnQ0MsUUFBUTtzQkFBMUIsTUFBTTs7QUEwSFQ7OztHQUdHO0FBQ0gsTUFXYSxtQkFBb0IsU0FBUSxlQUFlOzt1SEFBM0MsbUJBQW1COzJHQUFuQixtQkFBbUIseUdBUG5CO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixXQUFXLEVBQUUsbUJBQW1CO1NBQ2pDO0tBQ0Y7U0FFVSxtQkFBbUI7a0dBQW5CLG1CQUFtQjtrQkFYL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsK0JBQStCO29CQUN6QyxRQUFRLEVBQUUsZUFBZTtvQkFDekIsTUFBTSxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ2pDLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsZUFBZTs0QkFDeEIsV0FBVyxxQkFBcUI7eUJBQ2pDO3FCQUNGO2lCQUNGOztBQUdELE1BSWEsWUFBWTs7Z0hBQVosWUFBWTtpSEFBWixZQUFZLGlCQXZPWixTQUFTLEVBdUNULGVBQWUsRUFuQmYsdUJBQXVCLEVBNk12QixtQkFBbUIsYUFqT25CLFNBQVMsRUF1Q1QsZUFBZSxFQW5CZix1QkFBdUIsRUE2TXZCLG1CQUFtQjtpSEFNbkIsWUFBWTtTQUFaLFlBQVk7a0dBQVosWUFBWTtrQkFKeEIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixDQUFDO29CQUNuRixZQUFZLEVBQUUsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixDQUFDO2lCQUN6RiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudFJlZixcbiAgRGlyZWN0aXZlLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgTmdNb2R1bGUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBJbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QmFzZVBvcnRhbE91dGxldCwgQ29tcG9uZW50UG9ydGFsLCBQb3J0YWwsIFRlbXBsYXRlUG9ydGFsLCBEb21Qb3J0YWx9IGZyb20gJy4vcG9ydGFsJztcblxuLyoqXG4gKiBEaXJlY3RpdmUgdmVyc2lvbiBvZiBhIGBUZW1wbGF0ZVBvcnRhbGAuIEJlY2F1c2UgdGhlIGRpcmVjdGl2ZSAqaXMqIGEgVGVtcGxhdGVQb3J0YWwsXG4gKiB0aGUgZGlyZWN0aXZlIGluc3RhbmNlIGl0c2VsZiBjYW4gYmUgYXR0YWNoZWQgdG8gYSBob3N0LCBlbmFibGluZyBkZWNsYXJhdGl2ZSB1c2Ugb2YgcG9ydGFscy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Nka1BvcnRhbF0nLFxuICBleHBvcnRBczogJ2Nka1BvcnRhbCcsXG59KVxuZXhwb3J0IGNsYXNzIENka1BvcnRhbCBleHRlbmRzIFRlbXBsYXRlUG9ydGFsIHtcbiAgY29uc3RydWN0b3IodGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICBzdXBlcih0ZW1wbGF0ZVJlZiwgdmlld0NvbnRhaW5lclJlZik7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYENka1BvcnRhbGAgaW5zdGVhZC5cbiAqIEBicmVha2luZy1jaGFuZ2UgOS4wLjBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Nkay1wb3J0YWxdLCBbcG9ydGFsXScsXG4gIGV4cG9ydEFzOiAnY2RrUG9ydGFsJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQ2RrUG9ydGFsLFxuICAgICAgdXNlRXhpc3Rpbmc6IFRlbXBsYXRlUG9ydGFsRGlyZWN0aXZlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlUG9ydGFsRGlyZWN0aXZlIGV4dGVuZHMgQ2RrUG9ydGFsIHt9XG5cbi8qKlxuICogUG9zc2libGUgYXR0YWNoZWQgcmVmZXJlbmNlcyB0byB0aGUgQ2RrUG9ydGFsT3V0bGV0LlxuICovXG5leHBvcnQgdHlwZSBDZGtQb3J0YWxPdXRsZXRBdHRhY2hlZFJlZiA9IENvbXBvbmVudFJlZjxhbnk+IHwgRW1iZWRkZWRWaWV3UmVmPGFueT4gfCBudWxsO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB2ZXJzaW9uIG9mIGEgUG9ydGFsT3V0bGV0LiBCZWNhdXNlIHRoZSBkaXJlY3RpdmUgKmlzKiBhIFBvcnRhbE91dGxldCwgcG9ydGFscyBjYW4gYmVcbiAqIGRpcmVjdGx5IGF0dGFjaGVkIHRvIGl0LCBlbmFibGluZyBkZWNsYXJhdGl2ZSB1c2UuXG4gKlxuICogVXNhZ2U6XG4gKiBgPG5nLXRlbXBsYXRlIFtjZGtQb3J0YWxPdXRsZXRdPVwiZ3JlZXRpbmdcIj48L25nLXRlbXBsYXRlPmBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Nka1BvcnRhbE91dGxldF0nLFxuICBleHBvcnRBczogJ2Nka1BvcnRhbE91dGxldCcsXG4gIGlucHV0czogWydwb3J0YWw6IGNka1BvcnRhbE91dGxldCddLFxufSlcbmV4cG9ydCBjbGFzcyBDZGtQb3J0YWxPdXRsZXQgZXh0ZW5kcyBCYXNlUG9ydGFsT3V0bGV0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9kb2N1bWVudDogRG9jdW1lbnQ7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHBvcnRhbCBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWQuICovXG4gIHByaXZhdGUgX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50bHktYXR0YWNoZWQgY29tcG9uZW50L3ZpZXcgcmVmLiAqL1xuICBwcml2YXRlIF9hdHRhY2hlZFJlZjogQ2RrUG9ydGFsT3V0bGV0QXR0YWNoZWRSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIGBfZG9jdW1lbnRgIHBhcmFtZXRlciB0byBiZSBtYWRlIHJlcXVpcmVkLlxuICAgICAqIEBicmVha2luZy1jaGFuZ2UgOS4wLjBcbiAgICAgKi9cbiAgICBASW5qZWN0KERPQ1VNRU5UKSBfZG9jdW1lbnQ/OiBhbnksXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZG9jdW1lbnQgPSBfZG9jdW1lbnQ7XG4gIH1cblxuICAvKiogUG9ydGFsIGFzc29jaWF0ZWQgd2l0aCB0aGUgUG9ydGFsIG91dGxldC4gKi9cbiAgZ2V0IHBvcnRhbCgpOiBQb3J0YWw8YW55PiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9hdHRhY2hlZFBvcnRhbDtcbiAgfVxuXG4gIHNldCBwb3J0YWwocG9ydGFsOiBQb3J0YWw8YW55PiB8IG51bGwgfCB1bmRlZmluZWQgfCAnJykge1xuICAgIC8vIElnbm9yZSB0aGUgY2FzZXMgd2hlcmUgdGhlIGBwb3J0YWxgIGlzIHNldCB0byBhIGZhbHN5IHZhbHVlIGJlZm9yZSB0aGUgbGlmZWN5Y2xlIGhvb2tzIGhhdmVcbiAgICAvLyBydW4uIFRoaXMgaGFuZGxlcyB0aGUgY2FzZXMgd2hlcmUgdGhlIHVzZXIgbWlnaHQgZG8gc29tZXRoaW5nIGxpa2UgYDxkaXYgY2RrUG9ydGFsT3V0bGV0PmBcbiAgICAvLyBhbmQgYXR0YWNoIGEgcG9ydGFsIHByb2dyYW1tYXRpY2FsbHkgaW4gdGhlIHBhcmVudCBjb21wb25lbnQuIFdoZW4gQW5ndWxhciBkb2VzIHRoZSBmaXJzdCBDRFxuICAgIC8vIHJvdW5kLCBpdCB3aWxsIGZpcmUgdGhlIHNldHRlciB3aXRoIGVtcHR5IHN0cmluZywgY2F1c2luZyB0aGUgdXNlcidzIGNvbnRlbnQgdG8gYmUgY2xlYXJlZC5cbiAgICBpZiAodGhpcy5oYXNBdHRhY2hlZCgpICYmICFwb3J0YWwgJiYgIXRoaXMuX2lzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICBzdXBlci5kZXRhY2goKTtcbiAgICB9XG5cbiAgICBpZiAocG9ydGFsKSB7XG4gICAgICBzdXBlci5hdHRhY2gocG9ydGFsKTtcbiAgICB9XG5cbiAgICB0aGlzLl9hdHRhY2hlZFBvcnRhbCA9IHBvcnRhbCB8fCBudWxsO1xuICB9XG5cbiAgLyoqIEVtaXRzIHdoZW4gYSBwb3J0YWwgaXMgYXR0YWNoZWQgdG8gdGhlIG91dGxldC4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGF0dGFjaGVkOiBFdmVudEVtaXR0ZXI8Q2RrUG9ydGFsT3V0bGV0QXR0YWNoZWRSZWY+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPENka1BvcnRhbE91dGxldEF0dGFjaGVkUmVmPigpO1xuXG4gIC8qKiBDb21wb25lbnQgb3IgdmlldyByZWZlcmVuY2UgdGhhdCBpcyBhdHRhY2hlZCB0byB0aGUgcG9ydGFsLiAqL1xuICBnZXQgYXR0YWNoZWRSZWYoKTogQ2RrUG9ydGFsT3V0bGV0QXR0YWNoZWRSZWYge1xuICAgIHJldHVybiB0aGlzLl9hdHRhY2hlZFJlZjtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2F0dGFjaGVkUmVmID0gdGhpcy5fYXR0YWNoZWRQb3J0YWwgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCB0aGUgZ2l2ZW4gQ29tcG9uZW50UG9ydGFsIHRvIHRoaXMgUG9ydGFsT3V0bGV0IHVzaW5nIHRoZSBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBwb3J0YWwgUG9ydGFsIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBwb3J0YWwgb3V0bGV0LlxuICAgKiBAcmV0dXJucyBSZWZlcmVuY2UgdG8gdGhlIGNyZWF0ZWQgY29tcG9uZW50LlxuICAgKi9cbiAgYXR0YWNoQ29tcG9uZW50UG9ydGFsPFQ+KHBvcnRhbDogQ29tcG9uZW50UG9ydGFsPFQ+KTogQ29tcG9uZW50UmVmPFQ+IHtcbiAgICBwb3J0YWwuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO1xuXG4gICAgLy8gSWYgdGhlIHBvcnRhbCBzcGVjaWZpZXMgYW4gb3JpZ2luLCB1c2UgdGhhdCBhcyB0aGUgbG9naWNhbCBsb2NhdGlvbiBvZiB0aGUgY29tcG9uZW50XG4gICAgLy8gaW4gdGhlIGFwcGxpY2F0aW9uIHRyZWUuIE90aGVyd2lzZSB1c2UgdGhlIGxvY2F0aW9uIG9mIHRoaXMgUG9ydGFsT3V0bGV0LlxuICAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPVxuICAgICAgcG9ydGFsLnZpZXdDb250YWluZXJSZWYgIT0gbnVsbCA/IHBvcnRhbC52aWV3Q29udGFpbmVyUmVmIDogdGhpcy5fdmlld0NvbnRhaW5lclJlZjtcblxuICAgIGNvbnN0IHJlc29sdmVyID0gcG9ydGFsLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB8fCB0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI7XG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHBvcnRhbC5jb21wb25lbnQpO1xuICAgIGNvbnN0IHJlZiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgY29tcG9uZW50RmFjdG9yeSxcbiAgICAgIHZpZXdDb250YWluZXJSZWYubGVuZ3RoLFxuICAgICAgcG9ydGFsLmluamVjdG9yIHx8IHZpZXdDb250YWluZXJSZWYuaW5qZWN0b3IsXG4gICAgICBwb3J0YWwucHJvamVjdGFibGVOb2RlcyB8fCB1bmRlZmluZWQsXG4gICAgKTtcblxuICAgIC8vIElmIHdlJ3JlIHVzaW5nIGEgdmlldyBjb250YWluZXIgdGhhdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBpbmplY3RlZCBvbmUgKGUuZy4gd2hlbiB0aGUgcG9ydGFsXG4gICAgLy8gc3BlY2lmaWVzIGl0cyBvd24pIHdlIG5lZWQgdG8gbW92ZSB0aGUgY29tcG9uZW50IGludG8gdGhlIG91dGxldCwgb3RoZXJ3aXNlIGl0J2xsIGJlIHJlbmRlcmVkXG4gICAgLy8gaW5zaWRlIG9mIHRoZSBhbHRlcm5hdGUgdmlldyBjb250YWluZXIuXG4gICAgaWYgKHZpZXdDb250YWluZXJSZWYgIT09IHRoaXMuX3ZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgIHRoaXMuX2dldFJvb3ROb2RlKCkuYXBwZW5kQ2hpbGQoKHJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdKTtcbiAgICB9XG5cbiAgICBzdXBlci5zZXREaXNwb3NlRm4oKCkgPT4gcmVmLmRlc3Ryb3koKSk7XG4gICAgdGhpcy5fYXR0YWNoZWRQb3J0YWwgPSBwb3J0YWw7XG4gICAgdGhpcy5fYXR0YWNoZWRSZWYgPSByZWY7XG4gICAgdGhpcy5hdHRhY2hlZC5lbWl0KHJlZik7XG5cbiAgICByZXR1cm4gcmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCB0aGUgZ2l2ZW4gVGVtcGxhdGVQb3J0YWwgdG8gdGhpcyBQb3J0YWxIb3N0IGFzIGFuIGVtYmVkZGVkIFZpZXcuXG4gICAqIEBwYXJhbSBwb3J0YWwgUG9ydGFsIHRvIGJlIGF0dGFjaGVkLlxuICAgKiBAcmV0dXJucyBSZWZlcmVuY2UgdG8gdGhlIGNyZWF0ZWQgZW1iZWRkZWQgdmlldy5cbiAgICovXG4gIGF0dGFjaFRlbXBsYXRlUG9ydGFsPEM+KHBvcnRhbDogVGVtcGxhdGVQb3J0YWw8Qz4pOiBFbWJlZGRlZFZpZXdSZWY8Qz4ge1xuICAgIHBvcnRhbC5zZXRBdHRhY2hlZEhvc3QodGhpcyk7XG4gICAgY29uc3Qgdmlld1JlZiA9IHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHBvcnRhbC50ZW1wbGF0ZVJlZiwgcG9ydGFsLmNvbnRleHQsIHtcbiAgICAgIGluamVjdG9yOiBwb3J0YWwuaW5qZWN0b3IsXG4gICAgfSk7XG4gICAgc3VwZXIuc2V0RGlzcG9zZUZuKCgpID0+IHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKSk7XG5cbiAgICB0aGlzLl9hdHRhY2hlZFBvcnRhbCA9IHBvcnRhbDtcbiAgICB0aGlzLl9hdHRhY2hlZFJlZiA9IHZpZXdSZWY7XG4gICAgdGhpcy5hdHRhY2hlZC5lbWl0KHZpZXdSZWYpO1xuXG4gICAgcmV0dXJuIHZpZXdSZWY7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoZXMgdGhlIGdpdmVuIERvbVBvcnRhbCB0byB0aGlzIFBvcnRhbEhvc3QgYnkgbW92aW5nIGFsbCBvZiB0aGUgcG9ydGFsIGNvbnRlbnQgaW50byBpdC5cbiAgICogQHBhcmFtIHBvcnRhbCBQb3J0YWwgdG8gYmUgYXR0YWNoZWQuXG4gICAqIEBkZXByZWNhdGVkIFRvIGJlIHR1cm5lZCBpbnRvIGEgbWV0aG9kLlxuICAgKiBAYnJlYWtpbmctY2hhbmdlIDEwLjAuMFxuICAgKi9cbiAgb3ZlcnJpZGUgYXR0YWNoRG9tUG9ydGFsID0gKHBvcnRhbDogRG9tUG9ydGFsKSA9PiB7XG4gICAgLy8gQGJyZWFraW5nLWNoYW5nZSA5LjAuMCBSZW1vdmUgY2hlY2sgYW5kIGVycm9yIG9uY2UgdGhlXG4gICAgLy8gYF9kb2N1bWVudGAgY29uc3RydWN0b3IgcGFyYW1ldGVyIGlzIHJlcXVpcmVkLlxuICAgIGlmICghdGhpcy5fZG9jdW1lbnQgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW5ub3QgYXR0YWNoIERPTSBwb3J0YWwgd2l0aG91dCBfZG9jdW1lbnQgY29uc3RydWN0b3IgcGFyYW1ldGVyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHBvcnRhbC5lbGVtZW50O1xuICAgIGlmICghZWxlbWVudC5wYXJlbnROb2RlICYmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpKSB7XG4gICAgICB0aHJvdyBFcnJvcignRE9NIHBvcnRhbCBjb250ZW50IG11c3QgYmUgYXR0YWNoZWQgdG8gYSBwYXJlbnQgbm9kZS4nKTtcbiAgICB9XG5cbiAgICAvLyBBbmNob3IgdXNlZCB0byBzYXZlIHRoZSBlbGVtZW50J3MgcHJldmlvdXMgcG9zaXRpb24gc29cbiAgICAvLyB0aGF0IHdlIGNhbiByZXN0b3JlIGl0IHdoZW4gdGhlIHBvcnRhbCBpcyBkZXRhY2hlZC5cbiAgICBjb25zdCBhbmNob3JOb2RlID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnZG9tLXBvcnRhbCcpO1xuXG4gICAgcG9ydGFsLnNldEF0dGFjaGVkSG9zdCh0aGlzKTtcbiAgICBlbGVtZW50LnBhcmVudE5vZGUhLmluc2VydEJlZm9yZShhbmNob3JOb2RlLCBlbGVtZW50KTtcbiAgICB0aGlzLl9nZXRSb290Tm9kZSgpLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIHRoaXMuX2F0dGFjaGVkUG9ydGFsID0gcG9ydGFsO1xuXG4gICAgc3VwZXIuc2V0RGlzcG9zZUZuKCgpID0+IHtcbiAgICAgIGlmIChhbmNob3JOb2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgYW5jaG9yTm9kZS5wYXJlbnROb2RlIS5yZXBsYWNlQ2hpbGQoZWxlbWVudCwgYW5jaG9yTm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqIEdldHMgdGhlIHJvb3Qgbm9kZSBvZiB0aGUgcG9ydGFsIG91dGxldC4gKi9cbiAgcHJpdmF0ZSBfZ2V0Um9vdE5vZGUoKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQ6IE5vZGUgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcblxuICAgIC8vIFRoZSBkaXJlY3RpdmUgY291bGQgYmUgc2V0IG9uIGEgdGVtcGxhdGUgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBjb21tZW50XG4gICAgLy8gbm9kZSBiZWluZyB0aGUgcm9vdC4gVXNlIHRoZSBjb21tZW50J3MgcGFyZW50IG5vZGUgaWYgdGhhdCBpcyB0aGUgY2FzZS5cbiAgICByZXR1cm4gKFxuICAgICAgbmF0aXZlRWxlbWVudC5ub2RlVHlwZSA9PT0gbmF0aXZlRWxlbWVudC5FTEVNRU5UX05PREVcbiAgICAgICAgPyBuYXRpdmVFbGVtZW50XG4gICAgICAgIDogbmF0aXZlRWxlbWVudC5wYXJlbnROb2RlIVxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYENka1BvcnRhbE91dGxldGAgaW5zdGVhZC5cbiAqIEBicmVha2luZy1jaGFuZ2UgOS4wLjBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Nka1BvcnRhbEhvc3RdLCBbcG9ydGFsSG9zdF0nLFxuICBleHBvcnRBczogJ2Nka1BvcnRhbEhvc3QnLFxuICBpbnB1dHM6IFsncG9ydGFsOiBjZGtQb3J0YWxIb3N0J10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IENka1BvcnRhbE91dGxldCxcbiAgICAgIHVzZUV4aXN0aW5nOiBQb3J0YWxIb3N0RGlyZWN0aXZlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBvcnRhbEhvc3REaXJlY3RpdmUgZXh0ZW5kcyBDZGtQb3J0YWxPdXRsZXQge31cblxuQE5nTW9kdWxlKHtcbiAgZXhwb3J0czogW0Nka1BvcnRhbCwgQ2RrUG9ydGFsT3V0bGV0LCBUZW1wbGF0ZVBvcnRhbERpcmVjdGl2ZSwgUG9ydGFsSG9zdERpcmVjdGl2ZV0sXG4gIGRlY2xhcmF0aW9uczogW0Nka1BvcnRhbCwgQ2RrUG9ydGFsT3V0bGV0LCBUZW1wbGF0ZVBvcnRhbERpcmVjdGl2ZSwgUG9ydGFsSG9zdERpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIFBvcnRhbE1vZHVsZSB7fVxuIl19
|