@worktile/theia 16.1.2 → 16.1.4
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/components/contextmenu/contextmenu.component.d.ts +1 -1
- package/components/conversion-hint/conversion-hint.component.d.ts +1 -1
- package/components/inline-toolbar/inline-toolbar.component.d.ts +1 -1
- package/components/listbox/listbox.d.ts +3 -3
- package/components/plugin-menu/plugin-menu.component.d.ts +1 -1
- package/components/table-select/table-select.component.d.ts +1 -1
- package/components/toolbar/toolbar.component.d.ts +1 -1
- package/components/toolbar-group/toolbar-group.component.d.ts +1 -1
- package/core/toolbar-item/base-toolbar-item.d.ts +2 -2
- package/editor.component.d.ts +1 -1
- package/editor.module.d.ts +1 -1
- package/{esm2022 → esm2020}/components/action/prevent-default.mjs +4 -4
- package/{esm2022 → esm2020}/components/column-resize/column-resize-notifier.mjs +4 -4
- package/{esm2022 → esm2020}/components/column-resize/column-resize.directive.mjs +4 -4
- package/{esm2022 → esm2020}/components/column-resize/column-resize.module.mjs +9 -9
- package/{esm2022 → esm2020}/components/column-resize/event-dispatcher.mjs +4 -4
- package/{esm2022 → esm2020}/components/column-resize/overlay-handle.component.mjs +4 -4
- package/{esm2022 → esm2020}/components/column-resize/resizing.store.mjs +4 -4
- package/{esm2022 → esm2020}/components/contextmenu/contextmenu.component.mjs +4 -4
- package/{esm2022 → esm2020}/components/conversion-hint/conversion-hint.component.mjs +4 -4
- package/{esm2022 → esm2020}/components/element/element.component.mjs +4 -4
- package/{esm2022 → esm2020}/components/inline-toolbar/inline-toolbar.component.mjs +6 -6
- package/esm2020/components/listbox/listbox.mjs +375 -0
- package/{esm2022 → esm2020}/components/plugin-menu/plugin-menu.component.mjs +4 -4
- package/{esm2022 → esm2020}/components/table-select/table-select.component.mjs +4 -4
- package/{esm2022 → esm2020}/components/template/template.component.mjs +4 -4
- package/{esm2022 → esm2020}/components/text/text.component.mjs +4 -4
- package/{esm2022 → esm2020}/components/toolbar/toolbar.component.mjs +4 -4
- package/{esm2022 → esm2020}/components/toolbar-dropdown/toolbar-dropdown.component.mjs +4 -4
- package/{esm2022 → esm2020}/components/toolbar-group/toolbar-group.component.mjs +4 -4
- package/{esm2022 → esm2020}/components/toolbar-item/toolbar-item.component.mjs +6 -6
- package/esm2020/constants/plugin-menu.mjs +309 -0
- package/{esm2022 → esm2020}/core/toolbar-item/base-toolbar-item.mjs +7 -7
- package/{esm2022 → esm2020}/editor.component.mjs +11 -11
- package/esm2020/editor.module.mjs +254 -0
- package/{esm2022 → esm2020}/interfaces/view-base.mjs +4 -4
- package/{esm2022 → esm2020}/pipes.mjs +10 -10
- package/{esm2022 → esm2020}/plugins/blockquote/blockquote.component.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/code/code.component.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/color/toolbar-item.component.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/hr/hr.component.mjs +6 -6
- package/{esm2022 → esm2020}/plugins/image/image.component.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/inline-code/inline-code.component.mjs +6 -6
- package/{esm2022 → esm2020}/plugins/link/edit/link-edit.component.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/link/hover/link-hover.component.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/link/link.component.mjs +9 -9
- package/{esm2022 → esm2020}/plugins/list/components/bulleted-list.component.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/list/components/list-item.component.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/list/components/numbered-list.component.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/mention/suggestion.component.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/quick-insert/components/quick-insert.component.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/table/components/insert-mark/insert-mark.component.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/table/components/row/row.component.mjs +6 -6
- package/{esm2022 → esm2020}/plugins/table/components/table.component.mjs +16 -16
- package/{esm2022 → esm2020}/plugins/table/components/td/td.component.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/table/components/toolbar/table-options.component.mjs +6 -6
- package/esm2020/plugins/table/components/toolbar/table-toolbar.component.mjs +190 -0
- package/{esm2022 → esm2020}/plugins/table/table.pipe.mjs +7 -7
- package/{esm2022 → esm2020}/plugins/table/table.service.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/table/table.store.mjs +4 -4
- package/{esm2022 → esm2020}/plugins/table/toolbar-item.component.mjs +6 -7
- package/{esm2022 → esm2020}/plugins/todo-item/todo-item.component.mjs +6 -6
- package/esm2020/plugins/vertical-align/toolbar-item.component.mjs +82 -0
- package/{esm2022 → esm2020}/services/context.service.mjs +4 -4
- package/{esm2022 → esm2020}/services/table-contextmenu.service.mjs +4 -4
- package/{esm2022 → esm2020}/services/toolbar.service.mjs +4 -4
- package/fesm2015/worktile-theia.mjs +16706 -0
- package/fesm2015/worktile-theia.mjs.map +1 -0
- package/{fesm2022 → fesm2020}/worktile-theia.mjs +431 -448
- package/fesm2020/worktile-theia.mjs.map +1 -0
- package/interfaces/editor.d.ts +2 -4
- package/package.json +11 -5
- package/plugins/link/edit/link-edit.component.d.ts +1 -1
- package/plugins/link/hover/link-hover.component.d.ts +1 -1
- package/plugins/mention/suggestion.component.d.ts +1 -1
- package/plugins/quick-insert/components/quick-insert.component.d.ts +1 -1
- package/plugins/table/components/insert-mark/insert-mark.component.d.ts +1 -1
- package/plugins/table/components/table.component.d.ts +1 -1
- package/plugins/table/components/toolbar/table-options.component.d.ts +1 -1
- package/plugins/table/components/toolbar/table-toolbar.component.d.ts +1 -1
- package/queries/is-range-across-blocks.d.ts +1 -1
- package/esm2022/components/listbox/listbox.mjs +0 -375
- package/esm2022/constants/plugin-menu.mjs +0 -325
- package/esm2022/editor.module.mjs +0 -254
- package/esm2022/plugins/table/components/toolbar/table-toolbar.component.mjs +0 -189
- package/esm2022/plugins/vertical-align/toolbar-item.component.mjs +0 -83
- package/fesm2022/worktile-theia.mjs.map +0 -1
- /package/{esm2022 → esm2020}/components/column-resize/resize-ref.mjs +0 -0
- /package/{esm2022 → esm2020}/components/column-resize/selectors.mjs +0 -0
- /package/{esm2022 → esm2020}/components/index.mjs +0 -0
- /package/{esm2022 → esm2020}/components/listbox/listbox.type.mjs +0 -0
- /package/{esm2022 → esm2020}/constants/auto-format-rules.mjs +0 -0
- /package/{esm2022 → esm2020}/constants/code.mjs +0 -0
- /package/{esm2022 → esm2020}/constants/color-select.mjs +0 -0
- /package/{esm2022 → esm2020}/constants/default.mjs +0 -0
- /package/{esm2022 → esm2020}/constants/error.mjs +0 -0
- /package/{esm2022 → esm2020}/constants/index.mjs +0 -0
- /package/{esm2022 → esm2020}/constants/node-types.mjs +0 -0
- /package/{esm2022 → esm2020}/constants/selector.mjs +0 -0
- /package/{esm2022 → esm2020}/constants/toolbar.mjs +0 -0
- /package/{esm2022 → esm2020}/core/create-plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/core/create-toolbar.mjs +0 -0
- /package/{esm2022 → esm2020}/core/index.mjs +0 -0
- /package/{esm2022 → esm2020}/core/utils/combine-plugins.mjs +0 -0
- /package/{esm2022 → esm2020}/core/utils/flatten-deep-plugins.mjs +0 -0
- /package/{esm2022 → esm2020}/core/utils/get-plugin-options.mjs +0 -0
- /package/{esm2022 → esm2020}/core/utils/get-plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/core/utils/get-plugins.mjs +0 -0
- /package/{esm2022 → esm2020}/core/utils/index.mjs +0 -0
- /package/{esm2022 → esm2020}/core/utils/merge-array.mjs +0 -0
- /package/{esm2022 → esm2020}/core/utils/merge-deep-plugins.mjs +0 -0
- /package/{esm2022 → esm2020}/core/utils/merge-options.mjs +0 -0
- /package/{esm2022 → esm2020}/core/utils/nested-structure-by-key.mjs +0 -0
- /package/{esm2022 → esm2020}/core/utils/plugin-menu.mjs +0 -0
- /package/{esm2022 → esm2020}/core/utils/plugins-by-key.mjs +0 -0
- /package/{esm2022 → esm2020}/core/with-theia.mjs +0 -0
- /package/{esm2022 → esm2020}/custom-types.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/auto-format.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/editor.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/element.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/image.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/index.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/plugins/index.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/plugins/no-infer.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/plugins/plugin-key.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/plugins/plugin-menu.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/plugins/plugins.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/plugins/with-override.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/reset-block-type-plugin-options.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/toolbar.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/upload.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/utility/index.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/utility/nested-structure-by-key.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/utility/override-by-key.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/utility/types.mjs +0 -0
- /package/{esm2022 → esm2020}/interfaces/valid-children-types.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/align/align.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/align/align.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/autoformat/autoformat.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/autoformat/transforms/auto-format-block.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/autoformat/transforms/auto-format-inline.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/blockquote/blockquote.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/blockquote/blockquote.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/code/code.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/code/code.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/color/color.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/color/color.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/common/block-card.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/common/common.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/common/get-fragment.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/common/history.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/common/insert-data-by-invalid-type.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/common/move-selection.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/common/remove-empty.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/common/remove-void.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/common/reset-type.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/common/transforms.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/deserialize/deserialize-html.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/deserialize/deserialize-md.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/font-size/font-size.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/heading/heading.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/heading/heading.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/hr/hr.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/hr/hr.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/image/image.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/image/image.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/indent/indent.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/indent/indent.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/indent/on-keydown-indent.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/index.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/inline-code/inline-code.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/inline-code/inline-code.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/link/link.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/link/link.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/link/link.types.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/list.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/list.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/normalizers/get-list-normalizer.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/normalizers/normalize-list-item.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/normalizers/normalize-no.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/on-key-down-list.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/queries/get-list-item-entry.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/queries/get-list-item-sublist.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/queries/get-list-types.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/queries/get-start-list-item.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/queries/has-list-in-list-item.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/queries/is-in-list.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/queries/is-list-nested.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/queries/is-list.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/queries/is-node-type-list.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/queries/is-selection-at-list-item-start.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/queries/is-selection-in-same-list-item.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/queries/is-single-list-item.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/transforms/insert-list-data.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/transforms/insert-list-item.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/transforms/move-list-item-down.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/transforms/move-list-item-up.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/transforms/unwrap-list.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/list/types.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/mark/mark.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/mark/mark.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/mention/index.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/mention/mention.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/mention/mention.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/mention/mention.type.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/node-id/node-id.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/normalizers/insert-paragraph-nodes.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/normalizers/remove-empty-nodes.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/normalizers/trailing-node.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/paint-format/paint-format.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/public-api.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/quick-insert/quick-insert.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/quick-insert/quick-insert.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/soft-break/soft-break.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/soft-break/soft-break.types.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/table.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/table.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/table.types.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/transforms/clear-cell.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/transforms/clear-table-node.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/transforms/index.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/transforms/insert-column.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/transforms/insert-row.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/transforms/insert-table.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/transforms/remove-column.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/transforms/remove-row.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/transforms/remove-table.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/add-columns.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/calc-anchor-position.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/calc-span.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/calculate-table.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/cell-position.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/create-cell.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/create-row.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/create-table-position.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/create-table.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/get-grid-columns.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/get-min-max-cell-index.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/get-select-cell-node.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/handle-cell.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/index.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/is-header-row.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/is-legal-table.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/is-range-in-table.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/is-selection-in-table.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/is-virtual-key.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/merge-cell.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/next-path.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/normalize-table.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/remove-columns.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/remove-row-column.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/set-cells-background-color.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/set-menu-cell-invisibility.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/set-node-options.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/split-cell.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/table-entry.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/table/utils/table-position.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/todo-item/todo-item.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/todo-item/todo-item.plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/plugins/vertical-align/vertical-align.editor.mjs +0 -0
- /package/{esm2022 → esm2020}/public-api.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/anchor-block-entry.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/anchor-block.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/anchor-inline-entry.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/find-descendant.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/find-node.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/find-path.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-above-by-type.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-above.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-anchor-block-entry.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-block-above.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-block-card-above.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-block-card-cursor.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-container-blocks.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-directly-parent.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-insert-elements-path.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-last-child-path.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-last-node.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-next-sibling-nodes.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-node.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-nodes-by-type.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-nodes.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-parent.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-plain-text.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-plugin-by-toolbar.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-point-before.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-point-from-location.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-previous-path.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-rang-from-block-start.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-range-before.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-selection-marks.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-selection-nodes-by-type.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-text.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/get-toolbar-disabled.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/index.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-across-blocks.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-ancestor-empty.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-ancestor.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-block-above-empty.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-block-active.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-block-card-cursor.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-block-text-empty-after-selection.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-collapsed.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-contain-nested-type.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-container-type.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-descendant.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-empty-content-filter.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-empty-content.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-empty-paragraph-by-path.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-empty-paragraph.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-first-child.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-global-collapsed.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-include-types.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-node-type-in.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-node-type.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-paragraph.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-point-at-root.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-range-across-blocks.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-range-at-root.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/is-start.mjs +0 -0
- /package/{esm2022 → esm2020}/queries/some-node.mjs +0 -0
- /package/{esm2022 → esm2020}/shortcuts/index.mjs +0 -0
- /package/{esm2022 → esm2020}/shortcuts/mark.mjs +0 -0
- /package/{esm2022 → esm2020}/test/index.mjs +0 -0
- /package/{esm2022 → esm2020}/test/utils/with-plugin.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/apply-deep-to-nodes.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/clear-marks.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/close-conversion-hint.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/delete-element.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/handle-continual-delete-backward.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/handle-continual-insert-break.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/index.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/insert-elements.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/insert-paragraph.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/merge-deep-to-nodes.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/move-children.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/on-keydown-reset-block-type.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/set-end-selection.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/set-marks.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/set-node.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/un-hang-range.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/un-wrap.mjs +0 -0
- /package/{esm2022 → esm2020}/transforms/unwrap-nodes-by-type.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/auto-focus.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/blob.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/cast-array.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/color-picker.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/common.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/copy-node.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/create-empty-paragraph.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/data-transform.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/dom.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/editor-uuid.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/fragment.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/get-editable-element-height.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/get-toolbar-class.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/id-creator.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/index.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/insert-data-by-invalid-type.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/is-clean-empty-paragraph.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/is-inline.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/lodash.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/match.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/merge-element-options.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/refocus.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/scroll-into-view.mjs +0 -0
- /package/{esm2022 → esm2020}/utils/weak-maps.mjs +0 -0
- /package/{esm2022 → esm2020}/worktile-theia.mjs +0 -0
package/interfaces/editor.d.ts
CHANGED
|
@@ -28,7 +28,6 @@ export declare const TheEditor: {
|
|
|
28
28
|
findKey(editor: AngularEditor, node: Node): import("slate-angular").Key;
|
|
29
29
|
onError(errorData: import("slate-angular").SlateError): void;
|
|
30
30
|
findPath(editor: AngularEditor, node: Node): Path;
|
|
31
|
-
isNodeInEditor(editor: AngularEditor, node: Node): boolean;
|
|
32
31
|
findDocumentOrShadowRoot(editor: AngularEditor): Document | ShadowRoot;
|
|
33
32
|
isFocused(editor: AngularEditor): boolean;
|
|
34
33
|
isReadonly(editor: AngularEditor): boolean;
|
|
@@ -44,16 +43,15 @@ export declare const TheEditor: {
|
|
|
44
43
|
insertTextData(editor: AngularEditor, data: DataTransfer): boolean;
|
|
45
44
|
onKeydown(editor: AngularEditor, data: KeyboardEvent): void;
|
|
46
45
|
onClick(editor: AngularEditor, data: MouseEvent): void;
|
|
47
|
-
setFragmentData(editor: AngularEditor, data: DataTransfer, originEvent?: "
|
|
46
|
+
setFragmentData(editor: AngularEditor, data: DataTransfer, originEvent?: "copy" | "cut" | "drag"): void;
|
|
48
47
|
deleteCutData(editor: AngularEditor): void;
|
|
49
48
|
toDOMNode(editor: AngularEditor, node: Node): HTMLElement;
|
|
50
49
|
toDOMPoint(editor: AngularEditor, point: import("slate").BasePoint): import("slate-angular").DOMPoint;
|
|
51
50
|
toDOMRange(editor: AngularEditor, range: import("slate").BaseRange): globalThis.Range;
|
|
52
51
|
toSlateNode(editor: AngularEditor, domNode: globalThis.Node): Node;
|
|
53
52
|
findEventRange(editor: AngularEditor, event: any): import("slate").BaseRange;
|
|
54
|
-
isLeafInEditor(editor: AngularEditor, leafNode: globalThis.Element): boolean;
|
|
55
53
|
toSlatePoint(editor: AngularEditor, domPoint: import("slate-angular").DOMPoint): import("slate").BasePoint;
|
|
56
|
-
toSlateRange(editor: AngularEditor, domRange: globalThis.Range |
|
|
54
|
+
toSlateRange(editor: AngularEditor, domRange: StaticRange | globalThis.Range | Selection): import("slate").BaseRange;
|
|
57
55
|
isLeafBlock(editor: AngularEditor, node: Node): boolean;
|
|
58
56
|
isBlockCardLeftCursor(editor: AngularEditor): boolean;
|
|
59
57
|
isBlockCardRightCursor(editor: AngularEditor): boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@worktile/theia",
|
|
3
|
-
"version": "16.1.
|
|
3
|
+
"version": "16.1.4",
|
|
4
4
|
"description": "theia editor",
|
|
5
5
|
"author": "YanDong <nanianqiumo@foxmail.com>",
|
|
6
6
|
"homepage": "https://github.com/atinc/theia#readme",
|
|
@@ -13,9 +13,11 @@
|
|
|
13
13
|
".": {
|
|
14
14
|
"sass": "./styles/index.scss",
|
|
15
15
|
"types": "./index.d.ts",
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
16
|
+
"esm2020": "./esm2020/worktile-theia.mjs",
|
|
17
|
+
"es2020": "./fesm2020/worktile-theia.mjs",
|
|
18
|
+
"es2015": "./fesm2015/worktile-theia.mjs",
|
|
19
|
+
"node": "./fesm2015/worktile-theia.mjs",
|
|
20
|
+
"default": "./fesm2020/worktile-theia.mjs"
|
|
19
21
|
},
|
|
20
22
|
"./styles/index": {
|
|
21
23
|
"sass": "./styles/index.scss"
|
|
@@ -47,7 +49,11 @@
|
|
|
47
49
|
"lodash": "3.10.1",
|
|
48
50
|
"@angular/core": "^16.2.1"
|
|
49
51
|
},
|
|
50
|
-
"module": "
|
|
52
|
+
"module": "fesm2015/worktile-theia.mjs",
|
|
53
|
+
"es2020": "fesm2020/worktile-theia.mjs",
|
|
54
|
+
"esm2020": "esm2020/worktile-theia.mjs",
|
|
55
|
+
"fesm2020": "fesm2020/worktile-theia.mjs",
|
|
56
|
+
"fesm2015": "fesm2015/worktile-theia.mjs",
|
|
51
57
|
"typings": "index.d.ts",
|
|
52
58
|
"sideEffects": false
|
|
53
59
|
}
|
|
@@ -31,5 +31,5 @@ export declare class TheLinkEditComponent implements OnInit {
|
|
|
31
31
|
closePopover(type?: string): void;
|
|
32
32
|
applyLink(form: any): void;
|
|
33
33
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheLinkEditComponent, never>;
|
|
34
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TheLinkEditComponent, "the-link-edit", never, { "tag":
|
|
34
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TheLinkEditComponent, "the-link-edit", never, { "tag": "tag"; "node": "node"; "link": "link"; "text": "text"; "originSelection": "originSelection"; }, {}, never, never, false, never>;
|
|
35
35
|
}
|
|
@@ -11,5 +11,5 @@ export declare class TheLinkHoverComponent implements OnInit {
|
|
|
11
11
|
editLink(event: MouseEvent): void;
|
|
12
12
|
removeLink(event: MouseEvent): void;
|
|
13
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheLinkHoverComponent, never>;
|
|
14
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TheLinkHoverComponent, "the-link-hover", never, { "link":
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TheLinkHoverComponent, "the-link-hover", never, { "link": "link"; "dom": "dom"; "editHandle": "editHandle"; "deleteHandle": "deleteHandle"; }, {}, never, never, false, never>;
|
|
15
15
|
}
|
|
@@ -8,5 +8,5 @@ export declare abstract class TheBaseSuggestion {
|
|
|
8
8
|
abstract getSearchResult(keywords: string): void;
|
|
9
9
|
abstract selectMention<T>(event: T): void;
|
|
10
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheBaseSuggestion, never>;
|
|
11
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<TheBaseSuggestion, never, never, { "editor":
|
|
11
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<TheBaseSuggestion, never, never, { "editor": "editor"; "type": "type"; "keywords": "keywords"; }, {}, never, never, false, never>;
|
|
12
12
|
}
|
|
@@ -25,5 +25,5 @@ export declare class TheQuickInsertComponent implements OnInit {
|
|
|
25
25
|
mouseLeave(event: MouseEvent): void;
|
|
26
26
|
handleClick(event: MouseEvent): void;
|
|
27
27
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheQuickInsertComponent, never>;
|
|
28
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TheQuickInsertComponent, "[theQuickInsert]", never, { "editor":
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TheQuickInsertComponent, "[theQuickInsert]", never, { "editor": "editor"; "isVisible": "isVisible"; }, {}, never, never, false, never>;
|
|
29
29
|
}
|
|
@@ -24,5 +24,5 @@ export declare class TheInsertMarkComponent implements OnInit, OnDestroy {
|
|
|
24
24
|
onMouseLeave(event: MouseEvent): void;
|
|
25
25
|
getLength(): string;
|
|
26
26
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheInsertMarkComponent, never>;
|
|
27
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TheInsertMarkComponent, "the-table-insert-mark", never, { "type":
|
|
27
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TheInsertMarkComponent, "the-table-insert-mark", never, { "type": "type"; "at": "at"; "tableStore": "tableStore"; "parentElement": "parentElement"; }, {}, never, never, false, never>;
|
|
28
28
|
}
|
|
@@ -80,7 +80,7 @@ export declare class TheTableComponent extends TheBaseElementComponent<TableElem
|
|
|
80
80
|
subscribeCellsChange(): void;
|
|
81
81
|
useRowControls(): void;
|
|
82
82
|
detectChanges(): void;
|
|
83
|
-
resolveImage(): Promise<
|
|
83
|
+
resolveImage(): Promise<boolean> | Promise<any[]>;
|
|
84
84
|
getColControls(): void;
|
|
85
85
|
getIsInTable(): void;
|
|
86
86
|
getDefaultCellWidth(): number[];
|
|
@@ -13,5 +13,5 @@ export declare class TheTableOptionsComponent implements OnInit {
|
|
|
13
13
|
setColumnOptions(): void;
|
|
14
14
|
setTableOptions(event: MouseEvent, option: TableDropdownOption): void;
|
|
15
15
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheTableOptionsComponent, never>;
|
|
16
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TheTableOptionsComponent, "the-table-options", never, { "editor":
|
|
16
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TheTableOptionsComponent, "the-table-options", never, { "editor": "editor"; }, {}, never, never, false, never>;
|
|
17
17
|
}
|
|
@@ -38,7 +38,7 @@ export declare class TheTableToolbarComponent implements OnInit, OnDestroy {
|
|
|
38
38
|
setEquallyColumnHandle(event: MouseEvent): void;
|
|
39
39
|
openTableOptionMenu(event: Event): void;
|
|
40
40
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheTableToolbarComponent, never>;
|
|
41
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TheTableToolbarComponent, "the-table-toolbar", never, { "tableStore":
|
|
41
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TheTableToolbarComponent, "the-table-toolbar", never, { "tableStore": "tableStore"; "tableElement": "tableElement"; }, {}, never, never, false, never>;
|
|
42
42
|
}
|
|
43
43
|
export declare enum DeleteIcon {
|
|
44
44
|
'table-delete-rows' = "table-delete-rows",
|
|
@@ -3,6 +3,6 @@ import { EditorAboveOptions } from '../interfaces';
|
|
|
3
3
|
/**
|
|
4
4
|
* Is the range (default: selection) across blocks.
|
|
5
5
|
*/
|
|
6
|
-
export declare const isRangeAcrossBlocks: (editor: Editor, { at, ...options }?: Omit<EditorAboveOptions<import("slate").Ancestor>, "
|
|
6
|
+
export declare const isRangeAcrossBlocks: (editor: Editor, { at, ...options }?: Omit<EditorAboveOptions<import("slate").Ancestor>, "match" | "at"> & {
|
|
7
7
|
at?: Range | null;
|
|
8
8
|
}) => boolean;
|
|
@@ -1,375 +0,0 @@
|
|
|
1
|
-
import { DOWN_ARROW, LEFT_ARROW, ENTER, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';
|
|
2
|
-
import { forwardRef, Optional, SkipSelf } from '@angular/core';
|
|
3
|
-
import { ContentChildren, Directive, EventEmitter, HostBinding, Inject, Input, Output } from '@angular/core';
|
|
4
|
-
import { fromEvent } from 'rxjs';
|
|
5
|
-
import { debounceTime } from 'rxjs/operators';
|
|
6
|
-
import { THE_LISTBOX_TOKEN, THE_LISTBOX_PARENT_OPTION_TOKEN, THE_LISTBOX_PARENT_GROUP_TOKEN } from './listbox.type';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class TheListboxOptionDirective {
|
|
9
|
-
get hasChild() {
|
|
10
|
-
return this._options.length > 0;
|
|
11
|
-
}
|
|
12
|
-
get firstChild() {
|
|
13
|
-
return this._options.first;
|
|
14
|
-
}
|
|
15
|
-
constructor(parentOption, parentGroup, elementRef) {
|
|
16
|
-
this.parentOption = parentOption;
|
|
17
|
-
this.parentGroup = parentGroup;
|
|
18
|
-
this.elementRef = elementRef;
|
|
19
|
-
this._active = false;
|
|
20
|
-
this.className = 'the-listbox-option';
|
|
21
|
-
}
|
|
22
|
-
ngOnInit() { }
|
|
23
|
-
ngAfterContentInit() { }
|
|
24
|
-
getGroups() {
|
|
25
|
-
const groups = [];
|
|
26
|
-
this._options.forEach(option => {
|
|
27
|
-
if (option.parentOption && option.parentOption === this && !groups.includes(option.parentGroup)) {
|
|
28
|
-
groups.push(option.parentGroup);
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
return groups;
|
|
32
|
-
}
|
|
33
|
-
setActive(active) {
|
|
34
|
-
this._active = active;
|
|
35
|
-
if (active) {
|
|
36
|
-
this.elementRef.nativeElement.classList.add('focus');
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
this.elementRef.nativeElement.classList.remove('focus');
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
getActive() {
|
|
43
|
-
return this._active;
|
|
44
|
-
}
|
|
45
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: TheListboxOptionDirective, deps: [{ token: THE_LISTBOX_PARENT_OPTION_TOKEN, optional: true, skipSelf: true }, { token: THE_LISTBOX_PARENT_GROUP_TOKEN }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
46
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.1", type: TheListboxOptionDirective, selector: "[theListboxOption]", inputs: { theOptionValue: "theOptionValue", theOptionDisabled: "theOptionDisabled" }, host: { properties: { "class": "this.className" } }, providers: [
|
|
47
|
-
{
|
|
48
|
-
provide: THE_LISTBOX_PARENT_OPTION_TOKEN,
|
|
49
|
-
useExisting: TheListboxOptionDirective
|
|
50
|
-
}
|
|
51
|
-
], queries: [{ propertyName: "_options", predicate: i0.forwardRef(function () { return TheListboxOptionDirective; }), descendants: true }], exportAs: ["theListboxOption"], ngImport: i0 }); }
|
|
52
|
-
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: TheListboxOptionDirective, decorators: [{
|
|
54
|
-
type: Directive,
|
|
55
|
-
args: [{
|
|
56
|
-
selector: '[theListboxOption]',
|
|
57
|
-
exportAs: 'theListboxOption',
|
|
58
|
-
providers: [
|
|
59
|
-
{
|
|
60
|
-
provide: THE_LISTBOX_PARENT_OPTION_TOKEN,
|
|
61
|
-
useExisting: TheListboxOptionDirective
|
|
62
|
-
}
|
|
63
|
-
]
|
|
64
|
-
}]
|
|
65
|
-
}], ctorParameters: function () { return [{ type: TheListboxOptionDirective, decorators: [{
|
|
66
|
-
type: Inject,
|
|
67
|
-
args: [THE_LISTBOX_PARENT_OPTION_TOKEN]
|
|
68
|
-
}, {
|
|
69
|
-
type: Optional
|
|
70
|
-
}, {
|
|
71
|
-
type: SkipSelf
|
|
72
|
-
}] }, { type: TheListboxGroupDirective, decorators: [{
|
|
73
|
-
type: Inject,
|
|
74
|
-
args: [THE_LISTBOX_PARENT_GROUP_TOKEN]
|
|
75
|
-
}] }, { type: i0.ElementRef }]; }, propDecorators: { className: [{
|
|
76
|
-
type: HostBinding,
|
|
77
|
-
args: ['class']
|
|
78
|
-
}], _options: [{
|
|
79
|
-
type: ContentChildren,
|
|
80
|
-
args: [forwardRef(() => TheListboxOptionDirective), { descendants: true }]
|
|
81
|
-
}], theOptionValue: [{
|
|
82
|
-
type: Input
|
|
83
|
-
}], theOptionDisabled: [{
|
|
84
|
-
type: Input
|
|
85
|
-
}] } });
|
|
86
|
-
export class TheListboxGroupDirective {
|
|
87
|
-
constructor(parentOption, theListBox) {
|
|
88
|
-
this.parentOption = parentOption;
|
|
89
|
-
this.theListBox = theListBox;
|
|
90
|
-
this.className = 'the-listbox-group';
|
|
91
|
-
this.options = [];
|
|
92
|
-
/**
|
|
93
|
-
* 大于 1 表示水平分组,小于等于 1 表示垂直分组
|
|
94
|
-
*/
|
|
95
|
-
this.horizontalColumn = 1;
|
|
96
|
-
}
|
|
97
|
-
ngOnInit() { }
|
|
98
|
-
ngAfterContentInit() {
|
|
99
|
-
this.filterOptions();
|
|
100
|
-
}
|
|
101
|
-
filterOptions() {
|
|
102
|
-
this.options = this._options.filter(_option => {
|
|
103
|
-
if (_option.parentGroup && _option.parentGroup === this) {
|
|
104
|
-
return true;
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
return false;
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
getSiblingGroups() {
|
|
112
|
-
if (this.parentOption) {
|
|
113
|
-
return this.parentOption.getGroups();
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
return this.theListBox.groups;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
hasChild() {
|
|
120
|
-
return this.options.length > 0;
|
|
121
|
-
}
|
|
122
|
-
getFirst() {
|
|
123
|
-
return this.options[0];
|
|
124
|
-
}
|
|
125
|
-
getLast() {
|
|
126
|
-
return this.options[this.options.length - 1];
|
|
127
|
-
}
|
|
128
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: TheListboxGroupDirective, deps: [{ token: THE_LISTBOX_PARENT_OPTION_TOKEN, optional: true, skipSelf: true }, { token: THE_LISTBOX_TOKEN }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
129
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.1", type: TheListboxGroupDirective, selector: "[theListboxGroup]", inputs: { horizontalColumn: "horizontalColumn" }, host: { properties: { "class": "this.className" } }, providers: [
|
|
130
|
-
{
|
|
131
|
-
provide: THE_LISTBOX_PARENT_GROUP_TOKEN,
|
|
132
|
-
useExisting: TheListboxGroupDirective
|
|
133
|
-
}
|
|
134
|
-
], queries: [{ propertyName: "_options", predicate: TheListboxOptionDirective, descendants: true }], exportAs: ["theListboxGroup"], ngImport: i0 }); }
|
|
135
|
-
}
|
|
136
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: TheListboxGroupDirective, decorators: [{
|
|
137
|
-
type: Directive,
|
|
138
|
-
args: [{
|
|
139
|
-
selector: '[theListboxGroup]',
|
|
140
|
-
exportAs: 'theListboxGroup',
|
|
141
|
-
providers: [
|
|
142
|
-
{
|
|
143
|
-
provide: THE_LISTBOX_PARENT_GROUP_TOKEN,
|
|
144
|
-
useExisting: TheListboxGroupDirective
|
|
145
|
-
}
|
|
146
|
-
]
|
|
147
|
-
}]
|
|
148
|
-
}], ctorParameters: function () { return [{ type: TheListboxOptionDirective, decorators: [{
|
|
149
|
-
type: Inject,
|
|
150
|
-
args: [THE_LISTBOX_PARENT_OPTION_TOKEN]
|
|
151
|
-
}, {
|
|
152
|
-
type: Optional
|
|
153
|
-
}, {
|
|
154
|
-
type: SkipSelf
|
|
155
|
-
}] }, { type: TheListboxDirective, decorators: [{
|
|
156
|
-
type: Inject,
|
|
157
|
-
args: [THE_LISTBOX_TOKEN]
|
|
158
|
-
}] }]; }, propDecorators: { className: [{
|
|
159
|
-
type: HostBinding,
|
|
160
|
-
args: ['class']
|
|
161
|
-
}], _options: [{
|
|
162
|
-
type: ContentChildren,
|
|
163
|
-
args: [TheListboxOptionDirective, { descendants: true }]
|
|
164
|
-
}], horizontalColumn: [{
|
|
165
|
-
type: Input
|
|
166
|
-
}] } });
|
|
167
|
-
export class TheListboxDirective {
|
|
168
|
-
constructor(ngZone, elementRef) {
|
|
169
|
-
this.ngZone = ngZone;
|
|
170
|
-
this.elementRef = elementRef;
|
|
171
|
-
this.className = 'the-listbox-container';
|
|
172
|
-
this.groups = [];
|
|
173
|
-
this.autoActiveFirstItem = true;
|
|
174
|
-
this.theListboxChange = new EventEmitter();
|
|
175
|
-
}
|
|
176
|
-
ngOnInit() { }
|
|
177
|
-
ngAfterContentInit() {
|
|
178
|
-
this.filterGroups();
|
|
179
|
-
if (this.groups.length > 0 && this.autoActiveFirstItem) {
|
|
180
|
-
this.setActiveItem(null, this.groups[0].getFirst(), 'init');
|
|
181
|
-
}
|
|
182
|
-
this._optionChangesSubscription = this._options.changes.pipe(debounceTime(20)).subscribe(() => {
|
|
183
|
-
this.filterGroups();
|
|
184
|
-
this.setActiveItem(this.activeOption, this.groups[0].getFirst(), 'init');
|
|
185
|
-
});
|
|
186
|
-
this.ngZone.runOutsideAngular(() => {
|
|
187
|
-
this._keyboardSubscription = fromEvent(this.keyboardContainer || this.elementRef.nativeElement, 'keydown').subscribe(event => {
|
|
188
|
-
this.handleKeydown(event);
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
filterGroups() {
|
|
193
|
-
this.groups = this._groups.filter(group => {
|
|
194
|
-
group.filterOptions();
|
|
195
|
-
if (!group.parentOption && group.hasChild()) {
|
|
196
|
-
return true;
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
return false;
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
handleKeydown(event) {
|
|
204
|
-
const { keyCode } = event;
|
|
205
|
-
if (!this.activeOption && (keyCode === DOWN_ARROW || keyCode === UP_ARROW || keyCode === RIGHT_ARROW || keyCode === LEFT_ARROW)) {
|
|
206
|
-
this.setActiveItem(null, this.groups[0].getFirst(), 'init');
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
switch (keyCode) {
|
|
210
|
-
case DOWN_ARROW:
|
|
211
|
-
this.setNextLineActive();
|
|
212
|
-
event.preventDefault();
|
|
213
|
-
break;
|
|
214
|
-
case UP_ARROW:
|
|
215
|
-
this.setPreviousLineActive();
|
|
216
|
-
event.preventDefault();
|
|
217
|
-
break;
|
|
218
|
-
case RIGHT_ARROW:
|
|
219
|
-
this.setNextItemActive();
|
|
220
|
-
event.preventDefault();
|
|
221
|
-
break;
|
|
222
|
-
case LEFT_ARROW:
|
|
223
|
-
this.setPreviousItemActive();
|
|
224
|
-
event.preventDefault();
|
|
225
|
-
break;
|
|
226
|
-
case ENTER:
|
|
227
|
-
this.theListboxChange.emit({ option: this.activeOption, type: 'select' });
|
|
228
|
-
event.preventDefault();
|
|
229
|
-
break;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* ←
|
|
234
|
-
*/
|
|
235
|
-
setPreviousItemActive() {
|
|
236
|
-
if (this.activeOption.parentOption) {
|
|
237
|
-
this.setActiveItem(this.activeOption, this.activeOption.parentOption, 'parent');
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
const groupOptions = this.activeOption.parentGroup.options;
|
|
241
|
-
let optionIndex = groupOptions.indexOf(this.activeOption);
|
|
242
|
-
let newOptionIndex = optionIndex - 1;
|
|
243
|
-
if (newOptionIndex >= 0) {
|
|
244
|
-
this.setActiveItem(this.activeOption, groupOptions[newOptionIndex], 'turn');
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
this.enterPreviousGroup();
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* ↓ 键
|
|
253
|
-
*/
|
|
254
|
-
setNextLineActive(activeOption) {
|
|
255
|
-
const _activeOption = activeOption ? activeOption : this.activeOption;
|
|
256
|
-
const groupOptions = _activeOption.parentGroup.options;
|
|
257
|
-
let optionIndex = groupOptions.indexOf(_activeOption);
|
|
258
|
-
let newOptionIndex = optionIndex + _activeOption.parentGroup.horizontalColumn;
|
|
259
|
-
const lastLineLength = groupOptions.length % _activeOption.parentGroup.horizontalColumn;
|
|
260
|
-
const lastLineStartIndex = groupOptions.length - (lastLineLength > 0 ? lastLineLength : 1);
|
|
261
|
-
let newOption = null;
|
|
262
|
-
if (newOptionIndex <= groupOptions.length - 1) {
|
|
263
|
-
newOption = groupOptions[newOptionIndex];
|
|
264
|
-
}
|
|
265
|
-
else if (optionIndex < lastLineStartIndex) {
|
|
266
|
-
newOptionIndex = groupOptions.length - 1;
|
|
267
|
-
newOption = groupOptions[newOptionIndex];
|
|
268
|
-
}
|
|
269
|
-
if (newOption) {
|
|
270
|
-
this.setActiveItem(this.activeOption, newOption, 'turn');
|
|
271
|
-
}
|
|
272
|
-
else {
|
|
273
|
-
this.enterNextGroup();
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* → 键
|
|
278
|
-
*/
|
|
279
|
-
setNextItemActive() {
|
|
280
|
-
if (this.activeOption.hasChild) {
|
|
281
|
-
this.setActiveItem(this.activeOption, this.activeOption.firstChild, 'child');
|
|
282
|
-
}
|
|
283
|
-
else {
|
|
284
|
-
const groupOptions = this.activeOption.parentGroup.options;
|
|
285
|
-
let optionIndex = groupOptions.indexOf(this.activeOption);
|
|
286
|
-
let newOptionIndex = optionIndex + 1;
|
|
287
|
-
if (newOptionIndex <= groupOptions.length - 1) {
|
|
288
|
-
this.setActiveItem(this.activeOption, groupOptions[newOptionIndex], 'turn');
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
this.enterNextGroup();
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* ↑ 键
|
|
297
|
-
*/
|
|
298
|
-
setPreviousLineActive() {
|
|
299
|
-
const groupOptions = this.activeOption.parentGroup.options;
|
|
300
|
-
let optionIndex = groupOptions.indexOf(this.activeOption);
|
|
301
|
-
let newOptionIndex = optionIndex - this.activeOption.parentGroup.horizontalColumn;
|
|
302
|
-
if (newOptionIndex >= 0) {
|
|
303
|
-
this.setActiveItem(this.activeOption, groupOptions[newOptionIndex], 'turn');
|
|
304
|
-
}
|
|
305
|
-
else {
|
|
306
|
-
this.enterPreviousGroup();
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
enterNextGroup() {
|
|
310
|
-
const groups = this.activeOption.parentGroup.getSiblingGroups();
|
|
311
|
-
const groupIndex = groups.indexOf(this.activeOption.parentGroup);
|
|
312
|
-
let newGroupIndex = groupIndex + 1;
|
|
313
|
-
if (newGroupIndex > groups.length - 1) {
|
|
314
|
-
newGroupIndex = 0;
|
|
315
|
-
}
|
|
316
|
-
this.setActiveItem(this.activeOption, groups[newGroupIndex].getFirst(), 'turn');
|
|
317
|
-
}
|
|
318
|
-
enterPreviousGroup() {
|
|
319
|
-
const groups = this.activeOption.parentGroup.getSiblingGroups();
|
|
320
|
-
const groupIndex = groups.indexOf(this.activeOption.parentGroup);
|
|
321
|
-
let newGroupIndex = groupIndex - 1;
|
|
322
|
-
if (newGroupIndex < 0) {
|
|
323
|
-
newGroupIndex = groups.length - 1;
|
|
324
|
-
}
|
|
325
|
-
this.setActiveItem(this.activeOption, groups[newGroupIndex].getLast(), 'turn');
|
|
326
|
-
}
|
|
327
|
-
setActiveItem(previous, option, type) {
|
|
328
|
-
if (previous) {
|
|
329
|
-
previous.setActive(false);
|
|
330
|
-
}
|
|
331
|
-
option.setActive(true);
|
|
332
|
-
this.activeOption = option;
|
|
333
|
-
this.theListboxChange.emit({ option, type });
|
|
334
|
-
}
|
|
335
|
-
ngOnDestroy() {
|
|
336
|
-
this._optionChangesSubscription.unsubscribe();
|
|
337
|
-
this._keyboardSubscription.unsubscribe();
|
|
338
|
-
}
|
|
339
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: TheListboxDirective, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
340
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.1", type: TheListboxDirective, selector: "[theListBox]", inputs: { keyboardContainer: "keyboardContainer", autoActiveFirstItem: "autoActiveFirstItem" }, outputs: { theListboxChange: "theListboxChange" }, host: { properties: { "class": "this.className" } }, providers: [
|
|
341
|
-
{
|
|
342
|
-
provide: THE_LISTBOX_TOKEN,
|
|
343
|
-
useExisting: TheListboxDirective
|
|
344
|
-
}
|
|
345
|
-
], queries: [{ propertyName: "_groups", predicate: TheListboxGroupDirective, descendants: true }, { propertyName: "_options", predicate: TheListboxOptionDirective, descendants: true }], exportAs: ["theListBox"], ngImport: i0 }); }
|
|
346
|
-
}
|
|
347
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: TheListboxDirective, decorators: [{
|
|
348
|
-
type: Directive,
|
|
349
|
-
args: [{
|
|
350
|
-
selector: '[theListBox]',
|
|
351
|
-
exportAs: 'theListBox',
|
|
352
|
-
providers: [
|
|
353
|
-
{
|
|
354
|
-
provide: THE_LISTBOX_TOKEN,
|
|
355
|
-
useExisting: TheListboxDirective
|
|
356
|
-
}
|
|
357
|
-
]
|
|
358
|
-
}]
|
|
359
|
-
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }]; }, propDecorators: { className: [{
|
|
360
|
-
type: HostBinding,
|
|
361
|
-
args: ['class']
|
|
362
|
-
}], _groups: [{
|
|
363
|
-
type: ContentChildren,
|
|
364
|
-
args: [TheListboxGroupDirective, { descendants: true }]
|
|
365
|
-
}], _options: [{
|
|
366
|
-
type: ContentChildren,
|
|
367
|
-
args: [TheListboxOptionDirective, { descendants: true }]
|
|
368
|
-
}], keyboardContainer: [{
|
|
369
|
-
type: Input
|
|
370
|
-
}], autoActiveFirstItem: [{
|
|
371
|
-
type: Input
|
|
372
|
-
}], theListboxChange: [{
|
|
373
|
-
type: Output
|
|
374
|
-
}] } });
|
|
375
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9jb21wb25lbnRzL2xpc3Rib3gvbGlzdGJveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBSyxNQUFNLHVCQUF1QixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxVQUFVLEVBQVUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBRUgsZUFBZSxFQUNmLFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsK0JBQStCLEVBQy9CLDhCQUE4QixFQUNqQyxNQUFNLGdCQUFnQixDQUFDOztBQVl4QixNQUFNLE9BQU8seUJBQXlCO0lBUWxDLElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFNRCxZQUM0RSxZQUF1QyxFQUNoRSxXQUFxQyxFQUM3RSxVQUFtQztRQUY4QixpQkFBWSxHQUFaLFlBQVksQ0FBMkI7UUFDaEUsZ0JBQVcsR0FBWCxXQUFXLENBQTBCO1FBQzdFLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBdEJ0QyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRUYsY0FBUyxHQUFHLG9CQUFvQixDQUFDO0lBcUJwRCxDQUFD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LENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsMEJBQTBCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLENBQUM7OEdBaE1RLG1CQUFtQjtrR0FBbkIsbUJBQW1CLCtPQVBqQjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxtQkFBbUI7YUFDbkM7U0FDSixrREFhZ0Isd0JBQXdCLDhEQUV4Qix5QkFBeUI7OzJGQWJqQyxtQkFBbUI7a0JBVi9CLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFFBQVEsRUFBRSxZQUFZO29CQUN0QixTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxxQkFBcUI7eUJBQ25DO3FCQUNKO2lCQUNKO3NIQUV5QixTQUFTO3NCQUE5QixXQUFXO3VCQUFDLE9BQU87Z0JBVXdELE9BQU87c0JBQWxGLGVBQWU7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUVhLFFBQVE7c0JBQXBGLGVBQWU7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUV4RCxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVJLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPV05fQVJST1csIExFRlRfQVJST1csIEVOVEVSLCBSSUdIVF9BUlJPVywgVVBfQVJST1csIFQgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiwgTmdab25lLCBPcHRpb25hbCwgU2tpcFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMvaW50ZXJuYWwvU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgVGhlTGlzdGJveENoYW5nZUV2ZW50VHlwZSxcbiAgICBUSEVfTElTVEJPWF9UT0tFTixcbiAgICBUSEVfTElTVEJPWF9QQVJFTlRfT1BUSU9OX1RPS0VOLFxuICAgIFRIRV9MSVNUQk9YX1BBUkVOVF9HUk9VUF9UT0tFTlxufSBmcm9tICcuL2xpc3Rib3gudHlwZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3RoZUxpc3Rib3hPcHRpb25dJyxcbiAgICBleHBvcnRBczogJ3RoZUxpc3Rib3hPcHRpb24nLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSEVfTElTVEJPWF9QQVJFTlRfT1BUSU9OX1RPS0VOLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRoZUxpc3Rib3hPcHRpb25EaXJlY3RpdmVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgcHJpdmF0ZSBfYWN0aXZlID0gZmFsc2U7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgY2xhc3NOYW1lID0gJ3RoZS1saXN0Ym94LW9wdGlvbic7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZSksIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgX29wdGlvbnM6IFF1ZXJ5TGlzdDxUaGVMaXN0Ym94T3B0aW9uRGlyZWN0aXZlPjtcblxuICAgIGdldCBoYXNDaGlsZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBnZXQgZmlyc3RDaGlsZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuZmlyc3Q7XG4gICAgfVxuXG4gICAgQElucHV0KCkgdGhlT3B0aW9uVmFsdWU6IHVua25vd247XG5cbiAgICBASW5wdXQoKSB0aGVPcHRpb25EaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFRIRV9MSVNUQk9YX1BBUkVOVF9PUFRJT05fVE9LRU4pIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHB1YmxpYyBwYXJlbnRPcHRpb246IFRoZUxpc3Rib3hPcHRpb25EaXJlY3RpdmUsXG4gICAgICAgIEBJbmplY3QoVEhFX0xJU1RCT1hfUEFSRU5UX0dST1VQX1RPS0VOKSBwdWJsaWMgcGFyZW50R3JvdXA6IFRoZUxpc3Rib3hHcm91cERpcmVjdGl2ZSxcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge31cblxuICAgIGdldEdyb3VwcygpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzOiBUaGVMaXN0Ym94R3JvdXBEaXJlY3RpdmVbXSA9IFtdO1xuICAgICAgICB0aGlzLl9vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb24ucGFyZW50T3B0aW9uICYmIG9wdGlvbi5wYXJlbnRPcHRpb24gPT09IHRoaXMgJiYgIWdyb3Vwcy5pbmNsdWRlcyhvcHRpb24ucGFyZW50R3JvdXApKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBzLnB1c2gob3B0aW9uLnBhcmVudEdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncm91cHM7XG4gICAgfVxuXG4gICAgc2V0QWN0aXZlKGFjdGl2ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBhY3RpdmU7XG4gICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ZvY3VzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdmb2N1cycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdGhlTGlzdGJveEdyb3VwXScsXG4gICAgZXhwb3J0QXM6ICd0aGVMaXN0Ym94R3JvdXAnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSEVfTElTVEJPWF9QQVJFTlRfR1JPVVBfVE9LRU4sXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVGhlTGlzdGJveEdyb3VwRGlyZWN0aXZlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRoZUxpc3Rib3hHcm91cERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzTmFtZSA9ICd0aGUtbGlzdGJveC1ncm91cCc7XG5cbiAgICBvcHRpb25zOiBUaGVMaXN0Ym94T3B0aW9uRGlyZWN0aXZlW10gPSBbXTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwdWJsaWMgX29wdGlvbnM6IFF1ZXJ5TGlzdDxUaGVMaXN0Ym94T3B0aW9uRGlyZWN0aXZlPjtcblxuICAgIC8qKlxuICAgICAqIOWkp+S6jiAxIOihqOekuuawtOW5s+WIhue7hO+8jOWwj+S6juetieS6jiAxIOihqOekuuWeguebtOWIhue7hFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGhvcml6b250YWxDb2x1bW4gPSAxO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoVEhFX0xJU1RCT1hfUEFSRU5UX09QVElPTl9UT0tFTikgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcHVibGljIHBhcmVudE9wdGlvbjogVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZSxcbiAgICAgICAgQEluamVjdChUSEVfTElTVEJPWF9UT0tFTikgcHVibGljIHRoZUxpc3RCb3g6IFRoZUxpc3Rib3hEaXJlY3RpdmVcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpO1xuICAgIH1cblxuICAgIGZpbHRlck9wdGlvbnMoKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuX29wdGlvbnMuZmlsdGVyKF9vcHRpb24gPT4ge1xuICAgICAgICAgICAgaWYgKF9vcHRpb24ucGFyZW50R3JvdXAgJiYgX29wdGlvbi5wYXJlbnRHcm91cCA9PT0gdGhpcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFNpYmxpbmdHcm91cHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudE9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50T3B0aW9uLmdldEdyb3VwcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGhlTGlzdEJveC5ncm91cHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYXNDaGlsZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGdldEZpcnN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zWzBdO1xuICAgIH1cblxuICAgIGdldExhc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbdGhpcy5vcHRpb25zLmxlbmd0aCAtIDFdO1xuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdGhlTGlzdEJveF0nLFxuICAgIGV4cG9ydEFzOiAndGhlTGlzdEJveCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRIRV9MSVNUQk9YX1RPS0VOLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRoZUxpc3Rib3hEaXJlY3RpdmVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGhlTGlzdGJveERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgY2xhc3NOYW1lID0gJ3RoZS1saXN0Ym94LWNvbnRhaW5lcic7XG5cbiAgICBwcml2YXRlIF9vcHRpb25DaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBwcml2YXRlIF9rZXlib2FyZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgcHVibGljIGFjdGl2ZU9wdGlvbjogVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZTtcblxuICAgIHB1YmxpYyBncm91cHM6IFRoZUxpc3Rib3hHcm91cERpcmVjdGl2ZVtdID0gW107XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFRoZUxpc3Rib3hHcm91cERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwcm90ZWN0ZWQgX2dyb3VwczogUXVlcnlMaXN0PFRoZUxpc3Rib3hHcm91cERpcmVjdGl2ZT47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFRoZUxpc3Rib3hPcHRpb25EaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcHJvdGVjdGVkIF9vcHRpb25zOiBRdWVyeUxpc3Q8VGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZT47XG5cbiAgICBASW5wdXQoKSBrZXlib2FyZENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBASW5wdXQoKSBhdXRvQWN0aXZlRmlyc3RJdGVtID0gdHJ1ZTtcblxuICAgIEBPdXRwdXQoKSB0aGVMaXN0Ym94Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUaGVMaXN0Ym94Q2hhbmdlRXZlbnQ+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlckdyb3VwcygpO1xuICAgICAgICBpZiAodGhpcy5ncm91cHMubGVuZ3RoID4gMCAmJiB0aGlzLmF1dG9BY3RpdmVGaXJzdEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbShudWxsLCB0aGlzLmdyb3Vwc1swXS5nZXRGaXJzdCgpLCAnaW5pdCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29wdGlvbkNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLl9vcHRpb25zLmNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMjApKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJHcm91cHMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZU9wdGlvbiwgdGhpcy5ncm91cHNbMF0uZ2V0Rmlyc3QoKSwgJ2luaXQnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2tleWJvYXJkU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KFxuICAgICAgICAgICAgICAgIHRoaXMua2V5Ym9hcmRDb250YWluZXIgfHwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ2tleWRvd24nXG4gICAgICAgICAgICApLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmaWx0ZXJHcm91cHMoKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLmZpbHRlcihncm91cCA9PiB7XG4gICAgICAgICAgICBncm91cC5maWx0ZXJPcHRpb25zKCk7XG4gICAgICAgICAgICBpZiAoIWdyb3VwLnBhcmVudE9wdGlvbiAmJiBncm91cC5oYXNDaGlsZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCB7IGtleUNvZGUgfSA9IGV2ZW50O1xuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlT3B0aW9uICYmIChrZXlDb2RlID09PSBET1dOX0FSUk9XIHx8IGtleUNvZGUgPT09IFVQX0FSUk9XIHx8IGtleUNvZGUgPT09IFJJR0hUX0FSUk9XIHx8IGtleUNvZGUgPT09IExFRlRfQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZUl0ZW0obnVsbCwgdGhpcy5ncm91cHNbMF0uZ2V0Rmlyc3QoKSwgJ2luaXQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgICAgICAgY2FzZSBET1dOX0FSUk9XOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TmV4dExpbmVBY3RpdmUoKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBVUF9BUlJPVzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFByZXZpb3VzTGluZUFjdGl2ZSgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJJR0hUX0FSUk9XOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMRUZUX0FSUk9XOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRU5URVI6XG4gICAgICAgICAgICAgICAgdGhpcy50aGVMaXN0Ym94Q2hhbmdlLmVtaXQoeyBvcHRpb246IHRoaXMuYWN0aXZlT3B0aW9uLCB0eXBlOiAnc2VsZWN0JyB9KTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog4oaQXG4gICAgICovXG4gICAgc2V0UHJldmlvdXNJdGVtQWN0aXZlKCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVPcHRpb24ucGFyZW50T3B0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVPcHRpb24sIHRoaXMuYWN0aXZlT3B0aW9uLnBhcmVudE9wdGlvbiwgJ3BhcmVudCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBPcHRpb25zID0gdGhpcy5hY3RpdmVPcHRpb24ucGFyZW50R3JvdXAub3B0aW9ucztcbiAgICAgICAgICAgIGxldCBvcHRpb25JbmRleCA9IGdyb3VwT3B0aW9ucy5pbmRleE9mKHRoaXMuYWN0aXZlT3B0aW9uKTtcbiAgICAgICAgICAgIGxldCBuZXdPcHRpb25JbmRleCA9IG9wdGlvbkluZGV4IC0gMTtcbiAgICAgICAgICAgIGlmIChuZXdPcHRpb25JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVJdGVtKHRoaXMuYWN0aXZlT3B0aW9uLCBncm91cE9wdGlvbnNbbmV3T3B0aW9uSW5kZXhdLCAndHVybicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGVyUHJldmlvdXNHcm91cCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog4oaTIOmUrlxuICAgICAqL1xuICAgIHNldE5leHRMaW5lQWN0aXZlKGFjdGl2ZU9wdGlvbj86IFRoZUxpc3Rib3hPcHRpb25EaXJlY3RpdmUpIHtcbiAgICAgICAgY29uc3QgX2FjdGl2ZU9wdGlvbiA9IGFjdGl2ZU9wdGlvbiA/IGFjdGl2ZU9wdGlvbiA6IHRoaXMuYWN0aXZlT3B0aW9uO1xuICAgICAgICBjb25zdCBncm91cE9wdGlvbnMgPSBfYWN0aXZlT3B0aW9uLnBhcmVudEdyb3VwLm9wdGlvbnM7XG4gICAgICAgIGxldCBvcHRpb25JbmRleCA9IGdyb3VwT3B0aW9ucy5pbmRleE9mKF9hY3RpdmVPcHRpb24pO1xuICAgICAgICBsZXQgbmV3T3B0aW9uSW5kZXggPSBvcHRpb25JbmRleCArIF9hY3RpdmVPcHRpb24ucGFyZW50R3JvdXAuaG9yaXpvbnRhbENvbHVtbjtcbiAgICAgICAgY29uc3QgbGFzdExpbmVMZW5ndGggPSBncm91cE9wdGlvbnMubGVuZ3RoICUgX2FjdGl2ZU9wdGlvbi5wYXJlbnRHcm91cC5ob3Jpem9udGFsQ29sdW1uO1xuICAgICAgICBjb25zdCBsYXN0TGluZVN0YXJ0SW5kZXggPSBncm91cE9wdGlvbnMubGVuZ3RoIC0gKGxhc3RMaW5lTGVuZ3RoID4gMCA/IGxhc3RMaW5lTGVuZ3RoIDogMSk7XG4gICAgICAgIGxldCBuZXdPcHRpb24gPSBudWxsO1xuICAgICAgICBpZiAobmV3T3B0aW9uSW5kZXggPD0gZ3JvdXBPcHRpb25zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIG5ld09wdGlvbiA9IGdyb3VwT3B0aW9uc1tuZXdPcHRpb25JbmRleF07XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uSW5kZXggPCBsYXN0TGluZVN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgIG5ld09wdGlvbkluZGV4ID0gZ3JvdXBPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBuZXdPcHRpb24gPSBncm91cE9wdGlvbnNbbmV3T3B0aW9uSW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdPcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZU9wdGlvbiwgbmV3T3B0aW9uLCAndHVybicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbnRlck5leHRHcm91cCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog4oaSIOmUrlxuICAgICAqL1xuICAgIHNldE5leHRJdGVtQWN0aXZlKCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVPcHRpb24uaGFzQ2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZU9wdGlvbiwgdGhpcy5hY3RpdmVPcHRpb24uZmlyc3RDaGlsZCwgJ2NoaWxkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBncm91cE9wdGlvbnMgPSB0aGlzLmFjdGl2ZU9wdGlvbi5wYXJlbnRHcm91cC5vcHRpb25zO1xuICAgICAgICAgICAgbGV0IG9wdGlvbkluZGV4ID0gZ3JvdXBPcHRpb25zLmluZGV4T2YodGhpcy5hY3RpdmVPcHRpb24pO1xuICAgICAgICAgICAgbGV0IG5ld09wdGlvbkluZGV4ID0gb3B0aW9uSW5kZXggKyAxO1xuICAgICAgICAgICAgaWYgKG5ld09wdGlvbkluZGV4IDw9IGdyb3VwT3B0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVJdGVtKHRoaXMuYWN0aXZlT3B0aW9uLCBncm91cE9wdGlvbnNbbmV3T3B0aW9uSW5kZXhdLCAndHVybicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGVyTmV4dEdyb3VwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDihpEg6ZSuXG4gICAgICovXG4gICAgc2V0UHJldmlvdXNMaW5lQWN0aXZlKCkge1xuICAgICAgICBjb25zdCBncm91cE9wdGlvbnMgPSB0aGlzLmFjdGl2ZU9wdGlvbi5wYXJlbnRHcm91cC5vcHRpb25zO1xuICAgICAgICBsZXQgb3B0aW9uSW5kZXggPSBncm91cE9wdGlvbnMuaW5kZXhPZih0aGlzLmFjdGl2ZU9wdGlvbik7XG4gICAgICAgIGxldCBuZXdPcHRpb25JbmRleCA9IG9wdGlvbkluZGV4IC0gdGhpcy5hY3RpdmVPcHRpb24ucGFyZW50R3JvdXAuaG9yaXpvbnRhbENvbHVtbjtcbiAgICAgICAgaWYgKG5ld09wdGlvbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZU9wdGlvbiwgZ3JvdXBPcHRpb25zW25ld09wdGlvbkluZGV4XSwgJ3R1cm4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW50ZXJQcmV2aW91c0dyb3VwKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbnRlck5leHRHcm91cCgpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gdGhpcy5hY3RpdmVPcHRpb24ucGFyZW50R3JvdXAuZ2V0U2libGluZ0dyb3VwcygpO1xuICAgICAgICBjb25zdCBncm91cEluZGV4ID0gZ3JvdXBzLmluZGV4T2YodGhpcy5hY3RpdmVPcHRpb24ucGFyZW50R3JvdXApO1xuICAgICAgICBsZXQgbmV3R3JvdXBJbmRleCA9IGdyb3VwSW5kZXggKyAxO1xuICAgICAgICBpZiAobmV3R3JvdXBJbmRleCA+IGdyb3Vwcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBuZXdHcm91cEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVPcHRpb24sIGdyb3Vwc1tuZXdHcm91cEluZGV4XS5nZXRGaXJzdCgpLCAndHVybicpO1xuICAgIH1cblxuICAgIGVudGVyUHJldmlvdXNHcm91cCgpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gdGhpcy5hY3RpdmVPcHRpb24ucGFyZW50R3JvdXAuZ2V0U2libGluZ0dyb3VwcygpO1xuICAgICAgICBjb25zdCBncm91cEluZGV4ID0gZ3JvdXBzLmluZGV4T2YodGhpcy5hY3RpdmVPcHRpb24ucGFyZW50R3JvdXApO1xuICAgICAgICBsZXQgbmV3R3JvdXBJbmRleCA9IGdyb3VwSW5kZXggLSAxO1xuICAgICAgICBpZiAobmV3R3JvdXBJbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5ld0dyb3VwSW5kZXggPSBncm91cHMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVPcHRpb24sIGdyb3Vwc1tuZXdHcm91cEluZGV4XS5nZXRMYXN0KCksICd0dXJuJyk7XG4gICAgfVxuXG4gICAgc2V0QWN0aXZlSXRlbShwcmV2aW91czogVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZSB8IG51bGwsIG9wdGlvbjogVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZSwgdHlwZTogVGhlTGlzdGJveENoYW5nZUV2ZW50VHlwZSkge1xuICAgICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgICAgIHByZXZpb3VzLnNldEFjdGl2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9uLnNldEFjdGl2ZSh0cnVlKTtcbiAgICAgICAgdGhpcy5hY3RpdmVPcHRpb24gPSBvcHRpb247XG4gICAgICAgIHRoaXMudGhlTGlzdGJveENoYW5nZS5lbWl0KHsgb3B0aW9uLCB0eXBlIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcHRpb25DaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2tleWJvYXJkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRoZUxpc3Rib3hDaGFuZ2VFdmVudCB7XG4gICAgb3B0aW9uOiBUaGVMaXN0Ym94T3B0aW9uRGlyZWN0aXZlO1xuICAgIHR5cGU6IFRoZUxpc3Rib3hDaGFuZ2VFdmVudFR5cGU7XG59XG4iXX0=
|