@payloadcms/richtext-lexical 0.1.0-beta.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/LICENSE.md +22 -0
- package/dist/cell/index.d.ts +6 -0
- package/dist/cell/index.d.ts.map +1 -0
- package/dist/cell/index.js +86 -0
- package/dist/field/Field.d.ts +6 -0
- package/dist/field/Field.d.ts.map +1 -0
- package/dist/field/Field.js +138 -0
- package/dist/field/features/BlockQuote/index.d.ts +3 -0
- package/dist/field/features/BlockQuote/index.d.ts.map +1 -0
- package/dist/field/features/BlockQuote/index.js +82 -0
- package/dist/field/features/BlockQuote/markdownTransformer.d.ts +3 -0
- package/dist/field/features/BlockQuote/markdownTransformer.d.ts.map +1 -0
- package/dist/field/features/BlockQuote/markdownTransformer.js +50 -0
- package/dist/field/features/Blocks/component/FormSavePlugin.d.ts +12 -0
- package/dist/field/features/Blocks/component/FormSavePlugin.d.ts.map +1 -0
- package/dist/field/features/Blocks/component/FormSavePlugin.js +33 -0
- package/dist/field/features/Blocks/component/index.d.ts +14 -0
- package/dist/field/features/Blocks/component/index.d.ts.map +1 -0
- package/dist/field/features/Blocks/component/index.js +176 -0
- package/dist/field/features/Blocks/drawer/index.d.ts +10 -0
- package/dist/field/features/Blocks/drawer/index.d.ts.map +1 -0
- package/dist/field/features/Blocks/drawer/index.js +140 -0
- package/dist/field/features/Blocks/index.d.ts +8 -0
- package/dist/field/features/Blocks/index.d.ts.map +1 -0
- package/dist/field/features/Blocks/index.js +80 -0
- package/dist/field/features/Blocks/nodes/BlocksNode.d.ts +38 -0
- package/dist/field/features/Blocks/nodes/BlocksNode.d.ts.map +1 -0
- package/dist/field/features/Blocks/nodes/BlocksNode.js +104 -0
- package/dist/field/features/Blocks/plugin/index.d.ts +7 -0
- package/dist/field/features/Blocks/plugin/index.d.ts.map +1 -0
- package/dist/field/features/Blocks/plugin/index.js +86 -0
- package/dist/field/features/Heading/index.d.ts +8 -0
- package/dist/field/features/Heading/index.d.ts.map +1 -0
- package/dist/field/features/Heading/index.js +104 -0
- package/dist/field/features/Heading/markdownTransformer.d.ts +3 -0
- package/dist/field/features/Heading/markdownTransformer.d.ts.map +1 -0
- package/dist/field/features/Heading/markdownTransformer.js +32 -0
- package/dist/field/features/Link/afterReadPromise.d.ts +5 -0
- package/dist/field/features/Link/afterReadPromise.d.ts.map +1 -0
- package/dist/field/features/Link/afterReadPromise.js +51 -0
- package/dist/field/features/Link/drawer/baseFields.d.ts +4 -0
- package/dist/field/features/Link/drawer/baseFields.d.ts.map +1 -0
- package/dist/field/features/Link/drawer/baseFields.js +91 -0
- package/dist/field/features/Link/drawer/index.d.ts +5 -0
- package/dist/field/features/Link/drawer/index.d.ts.map +1 -0
- package/dist/field/features/Link/drawer/index.js +40 -0
- package/dist/field/features/Link/drawer/types.d.ts +8 -0
- package/dist/field/features/Link/drawer/types.d.ts.map +1 -0
- package/dist/field/features/Link/drawer/types.js +6 -0
- package/dist/field/features/Link/index.d.ts +14 -0
- package/dist/field/features/Link/index.d.ts.map +1 -0
- package/dist/field/features/Link/index.js +117 -0
- package/dist/field/features/Link/nodes/AutoLinkNode.d.ts +16 -0
- package/dist/field/features/Link/nodes/AutoLinkNode.d.ts.map +1 -0
- package/dist/field/features/Link/nodes/AutoLinkNode.js +75 -0
- package/dist/field/features/Link/nodes/LinkNode.d.ts +55 -0
- package/dist/field/features/Link/nodes/LinkNode.d.ts.map +1 -0
- package/dist/field/features/Link/nodes/LinkNode.js +368 -0
- package/dist/field/features/Link/plugins/autoLink/index.d.ts +26 -0
- package/dist/field/features/Link/plugins/autoLink/index.d.ts.map +1 -0
- package/dist/field/features/Link/plugins/autoLink/index.js +230 -0
- package/dist/field/features/Link/plugins/floatingLinkEditor/LinkEditor/index.d.ts +9 -0
- package/dist/field/features/Link/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -0
- package/dist/field/features/Link/plugins/floatingLinkEditor/LinkEditor/index.js +301 -0
- package/dist/field/features/Link/plugins/floatingLinkEditor/index.d.ts +7 -0
- package/dist/field/features/Link/plugins/floatingLinkEditor/index.d.ts.map +1 -0
- package/dist/field/features/Link/plugins/floatingLinkEditor/index.js +61 -0
- package/dist/field/features/Link/plugins/floatingLinkEditor/types.d.ts +13 -0
- package/dist/field/features/Link/plugins/floatingLinkEditor/types.d.ts.map +1 -0
- package/dist/field/features/Link/plugins/floatingLinkEditor/types.js +6 -0
- package/dist/field/features/Link/plugins/floatingLinkEditor/utilities.d.ts +12 -0
- package/dist/field/features/Link/plugins/floatingLinkEditor/utilities.d.ts.map +1 -0
- package/dist/field/features/Link/plugins/floatingLinkEditor/utilities.js +44 -0
- package/dist/field/features/Link/plugins/link/index.d.ts +9 -0
- package/dist/field/features/Link/plugins/link/index.d.ts.map +1 -0
- package/dist/field/features/Link/plugins/link/index.js +74 -0
- package/dist/field/features/Paragraph/index.d.ts +3 -0
- package/dist/field/features/Paragraph/index.d.ts.map +1 -0
- package/dist/field/features/Paragraph/index.js +74 -0
- package/dist/field/features/Relationship/afterReadPromise.d.ts +4 -0
- package/dist/field/features/Relationship/afterReadPromise.d.ts.map +1 -0
- package/dist/field/features/Relationship/afterReadPromise.js +34 -0
- package/dist/field/features/Relationship/drawer/index.d.ts +14 -0
- package/dist/field/features/Relationship/drawer/index.d.ts.map +1 -0
- package/dist/field/features/Relationship/drawer/index.js +135 -0
- package/dist/field/features/Relationship/index.d.ts +4 -0
- package/dist/field/features/Relationship/index.d.ts.map +1 -0
- package/dist/field/features/Relationship/index.js +72 -0
- package/dist/field/features/Relationship/nodes/RelationshipNode.d.ts +34 -0
- package/dist/field/features/Relationship/nodes/RelationshipNode.d.ts.map +1 -0
- package/dist/field/features/Relationship/nodes/RelationshipNode.js +165 -0
- package/dist/field/features/Relationship/nodes/components/RelationshipComponent.d.ts +14 -0
- package/dist/field/features/Relationship/nodes/components/RelationshipComponent.d.ts.map +1 -0
- package/dist/field/features/Relationship/nodes/components/RelationshipComponent.js +158 -0
- package/dist/field/features/Relationship/plugins/index.d.ts +6 -0
- package/dist/field/features/Relationship/plugins/index.d.ts.map +1 -0
- package/dist/field/features/Relationship/plugins/index.js +88 -0
- package/dist/field/features/Relationship/utils/EnabledRelationshipsCondition.d.ts +3 -0
- package/dist/field/features/Relationship/utils/EnabledRelationshipsCondition.d.ts.map +1 -0
- package/dist/field/features/Relationship/utils/EnabledRelationshipsCondition.js +75 -0
- package/dist/field/features/Upload/afterReadPromise.d.ts +5 -0
- package/dist/field/features/Upload/afterReadPromise.d.ts.map +1 -0
- package/dist/field/features/Upload/afterReadPromise.js +51 -0
- package/dist/field/features/Upload/component/ExtraFieldsDrawer/index.d.ts +12 -0
- package/dist/field/features/Upload/component/ExtraFieldsDrawer/index.d.ts.map +1 -0
- package/dist/field/features/Upload/component/ExtraFieldsDrawer/index.js +129 -0
- package/dist/field/features/Upload/component/index.d.ts +10 -0
- package/dist/field/features/Upload/component/index.d.ts.map +1 -0
- package/dist/field/features/Upload/component/index.js +188 -0
- package/dist/field/features/Upload/drawer/index.d.ts +14 -0
- package/dist/field/features/Upload/drawer/index.d.ts.map +1 -0
- package/dist/field/features/Upload/drawer/index.js +131 -0
- package/dist/field/features/Upload/index.d.ts +12 -0
- package/dist/field/features/Upload/index.d.ts.map +1 -0
- package/dist/field/features/Upload/index.js +70 -0
- package/dist/field/features/Upload/nodes/UploadNode.d.ts +44 -0
- package/dist/field/features/Upload/nodes/UploadNode.d.ts.map +1 -0
- package/dist/field/features/Upload/nodes/UploadNode.js +153 -0
- package/dist/field/features/Upload/plugin/index.d.ts +7 -0
- package/dist/field/features/Upload/plugin/index.d.ts.map +1 -0
- package/dist/field/features/Upload/plugin/index.js +97 -0
- package/dist/field/features/align/floatingSelectToolbarAlignDropdownSection.d.ts +4 -0
- package/dist/field/features/align/floatingSelectToolbarAlignDropdownSection.d.ts.map +1 -0
- package/dist/field/features/align/floatingSelectToolbarAlignDropdownSection.js +23 -0
- package/dist/field/features/align/index.d.ts +4 -0
- package/dist/field/features/align/index.d.ts.map +1 -0
- package/dist/field/features/align/index.js +67 -0
- package/dist/field/features/common/floatingSelectToolbarFeaturesButtonsSection/index.d.ts +4 -0
- package/dist/field/features/common/floatingSelectToolbarFeaturesButtonsSection/index.d.ts.map +1 -0
- package/dist/field/features/common/floatingSelectToolbarFeaturesButtonsSection/index.js +21 -0
- package/dist/field/features/common/floatingSelectToolbarTextDropdownSection/index.d.ts +4 -0
- package/dist/field/features/common/floatingSelectToolbarTextDropdownSection/index.d.ts.map +1 -0
- package/dist/field/features/common/floatingSelectToolbarTextDropdownSection/index.js +23 -0
- package/dist/field/features/debug/TreeView/index.d.ts +4 -0
- package/dist/field/features/debug/TreeView/index.d.ts.map +1 -0
- package/dist/field/features/debug/TreeView/index.js +30 -0
- package/dist/field/features/debug/TreeView/plugin.d.ts +3 -0
- package/dist/field/features/debug/TreeView/plugin.d.ts.map +1 -0
- package/dist/field/features/debug/TreeView/plugin.js +66 -0
- package/dist/field/features/format/Bold/index.d.ts +3 -0
- package/dist/field/features/format/Bold/index.d.ts.map +1 -0
- package/dist/field/features/format/Bold/index.js +57 -0
- package/dist/field/features/format/Bold/markdownTransformers.d.ts +6 -0
- package/dist/field/features/format/Bold/markdownTransformers.d.ts.map +1 -0
- package/dist/field/features/format/Bold/markdownTransformers.js +58 -0
- package/dist/field/features/format/InlineCode/index.d.ts +3 -0
- package/dist/field/features/format/InlineCode/index.d.ts.map +1 -0
- package/dist/field/features/format/InlineCode/index.js +49 -0
- package/dist/field/features/format/InlineCode/markdownTransformers.d.ts +3 -0
- package/dist/field/features/format/InlineCode/markdownTransformers.d.ts.map +1 -0
- package/dist/field/features/format/InlineCode/markdownTransformers.js +19 -0
- package/dist/field/features/format/Italic/index.d.ts +3 -0
- package/dist/field/features/format/Italic/index.d.ts.map +1 -0
- package/dist/field/features/format/Italic/index.js +50 -0
- package/dist/field/features/format/Italic/markdownTransformers.d.ts +4 -0
- package/dist/field/features/format/Italic/markdownTransformers.d.ts.map +1 -0
- package/dist/field/features/format/Italic/markdownTransformers.js +35 -0
- package/dist/field/features/format/common/floatingSelectToolbarSection.d.ts +4 -0
- package/dist/field/features/format/common/floatingSelectToolbarSection.d.ts.map +1 -0
- package/dist/field/features/format/common/floatingSelectToolbarSection.js +21 -0
- package/dist/field/features/format/strikethrough/index.d.ts +3 -0
- package/dist/field/features/format/strikethrough/index.d.ts.map +1 -0
- package/dist/field/features/format/strikethrough/index.js +49 -0
- package/dist/field/features/format/strikethrough/markdownTransformers.d.ts +3 -0
- package/dist/field/features/format/strikethrough/markdownTransformers.d.ts.map +1 -0
- package/dist/field/features/format/strikethrough/markdownTransformers.js +19 -0
- package/dist/field/features/format/subscript/index.d.ts +3 -0
- package/dist/field/features/format/subscript/index.d.ts.map +1 -0
- package/dist/field/features/format/subscript/index.js +45 -0
- package/dist/field/features/format/superscript/index.d.ts +3 -0
- package/dist/field/features/format/superscript/index.d.ts.map +1 -0
- package/dist/field/features/format/superscript/index.js +45 -0
- package/dist/field/features/format/underline/index.d.ts +3 -0
- package/dist/field/features/format/underline/index.d.ts.map +1 -0
- package/dist/field/features/format/underline/index.js +45 -0
- package/dist/field/features/indent/floatingSelectToolbarIndentSection.d.ts +4 -0
- package/dist/field/features/indent/floatingSelectToolbarIndentSection.d.ts.map +1 -0
- package/dist/field/features/indent/floatingSelectToolbarIndentSection.js +21 -0
- package/dist/field/features/indent/index.d.ts +4 -0
- package/dist/field/features/indent/index.d.ts.map +1 -0
- package/dist/field/features/indent/index.js +67 -0
- package/dist/field/features/lists/CheckList/index.d.ts +3 -0
- package/dist/field/features/lists/CheckList/index.d.ts.map +1 -0
- package/dist/field/features/lists/CheckList/index.js +67 -0
- package/dist/field/features/lists/CheckList/markdownTransformers.d.ts +3 -0
- package/dist/field/features/lists/CheckList/markdownTransformers.d.ts.map +1 -0
- package/dist/field/features/lists/CheckList/markdownTransformers.js +26 -0
- package/dist/field/features/lists/OrderedList/index.d.ts +3 -0
- package/dist/field/features/lists/OrderedList/index.d.ts.map +1 -0
- package/dist/field/features/lists/OrderedList/index.js +65 -0
- package/dist/field/features/lists/OrderedList/markdownTransformer.d.ts +3 -0
- package/dist/field/features/lists/OrderedList/markdownTransformer.d.ts.map +1 -0
- package/dist/field/features/lists/OrderedList/markdownTransformer.js +26 -0
- package/dist/field/features/lists/UnorderedList/index.d.ts +3 -0
- package/dist/field/features/lists/UnorderedList/index.d.ts.map +1 -0
- package/dist/field/features/lists/UnorderedList/index.js +65 -0
- package/dist/field/features/lists/UnorderedList/markdownTransformer.d.ts +3 -0
- package/dist/field/features/lists/UnorderedList/markdownTransformer.d.ts.map +1 -0
- package/dist/field/features/lists/UnorderedList/markdownTransformer.js +26 -0
- package/dist/field/features/lists/common/markdown.d.ts +6 -0
- package/dist/field/features/lists/common/markdown.d.ts.map +1 -0
- package/dist/field/features/lists/common/markdown.js +76 -0
- package/dist/field/features/types.d.ts +95 -0
- package/dist/field/features/types.d.ts.map +1 -0
- package/dist/field/features/types.js +6 -0
- package/dist/field/index.d.ts +4 -0
- package/dist/field/index.d.ts.map +1 -0
- package/dist/field/index.js +60 -0
- package/dist/field/lexical/LexicalEditor.d.ts +5 -0
- package/dist/field/lexical/LexicalEditor.d.ts.map +1 -0
- package/dist/field/lexical/LexicalEditor.js +134 -0
- package/dist/field/lexical/LexicalProvider.d.ts +16 -0
- package/dist/field/lexical/LexicalProvider.d.ts.map +1 -0
- package/dist/field/lexical/LexicalProvider.js +89 -0
- package/dist/field/lexical/config/EditorConfigProvider.d.ts +16 -0
- package/dist/field/lexical/config/EditorConfigProvider.d.ts.map +1 -0
- package/dist/field/lexical/config/EditorConfigProvider.js +96 -0
- package/dist/field/lexical/config/default.d.ts +4 -0
- package/dist/field/lexical/config/default.d.ts.map +1 -0
- package/dist/field/lexical/config/default.js +67 -0
- package/dist/field/lexical/config/loader.d.ts +7 -0
- package/dist/field/lexical/config/loader.d.ts.map +1 -0
- package/dist/field/lexical/config/loader.js +133 -0
- package/dist/field/lexical/config/sanitize.d.ts +5 -0
- package/dist/field/lexical/config/sanitize.d.ts.map +1 -0
- package/dist/field/lexical/config/sanitize.js +138 -0
- package/dist/field/lexical/config/types.d.ts +12 -0
- package/dist/field/lexical/config/types.d.ts.map +1 -0
- package/dist/field/lexical/config/types.js +6 -0
- package/dist/field/lexical/nodes/index.d.ts +6 -0
- package/dist/field/lexical/nodes/index.d.ts.map +1 -0
- package/dist/field/lexical/nodes/index.js +15 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarButton/index.d.ts +8 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarButton/index.d.ts.map +1 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarButton/index.js +135 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/DropDown.d.ts +17 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/DropDown.d.ts.map +1 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/DropDown.js +289 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/index.d.ts +9 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/index.d.ts.map +1 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/index.js +36 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/index.d.ts +6 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/index.d.ts.map +1 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/index.js +272 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/types.d.ts +40 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/types.d.ts.map +1 -0
- package/dist/field/lexical/plugins/FloatingSelectToolbar/types.js +6 -0
- package/dist/field/lexical/plugins/MarkdownShortcut/index.d.ts +10 -0
- package/dist/field/lexical/plugins/MarkdownShortcut/index.d.ts.map +1 -0
- package/dist/field/lexical/plugins/MarkdownShortcut/index.js +66 -0
- package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +63 -0
- package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -0
- package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +457 -0
- package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +26 -0
- package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -0
- package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +281 -0
- package/dist/field/lexical/plugins/SlashMenu/defaultGroups.d.ts +2 -0
- package/dist/field/lexical/plugins/SlashMenu/defaultGroups.d.ts.map +1 -0
- package/dist/field/lexical/plugins/SlashMenu/defaultGroups.js +3 -0
- package/dist/field/lexical/plugins/SlashMenu/index.d.ts +4 -0
- package/dist/field/lexical/plugins/SlashMenu/index.d.ts.map +1 -0
- package/dist/field/lexical/plugins/SlashMenu/index.js +187 -0
- package/dist/field/lexical/plugins/handles/AddBlockHandlePlugin/index.d.ts +6 -0
- package/dist/field/lexical/plugins/handles/AddBlockHandlePlugin/index.d.ts.map +1 -0
- package/dist/field/lexical/plugins/handles/AddBlockHandlePlugin/index.js +264 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts +2 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/debounce.d.ts.map +1 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/debounce.js +24 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.d.ts +2 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.d.ts.map +1 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getBoundingRectWithoutTransform.js +24 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getNodeCloseToPoint.d.ts +27 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getNodeCloseToPoint.d.ts.map +1 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/getNodeCloseToPoint.js +160 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/highlightElemOriginalPosition.d.ts +3 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/highlightElemOriginalPosition.d.ts.map +1 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/highlightElemOriginalPosition.js +37 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts +6 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/index.js +346 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.d.ts +3 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.d.ts.map +1 -0
- package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js +59 -0
- package/dist/field/lexical/plugins/handles/utils/getCollapsedMargins.d.ts +5 -0
- package/dist/field/lexical/plugins/handles/utils/getCollapsedMargins.d.ts.map +1 -0
- package/dist/field/lexical/plugins/handles/utils/getCollapsedMargins.js +24 -0
- package/dist/field/lexical/plugins/handles/utils/getTopLevelNodeKeys.d.ts +3 -0
- package/dist/field/lexical/plugins/handles/utils/getTopLevelNodeKeys.d.ts.map +1 -0
- package/dist/field/lexical/plugins/handles/utils/getTopLevelNodeKeys.js +16 -0
- package/dist/field/lexical/plugins/handles/utils/isOnHandleElement.d.ts +2 -0
- package/dist/field/lexical/plugins/handles/utils/isOnHandleElement.d.ts.map +1 -0
- package/dist/field/lexical/plugins/handles/utils/isOnHandleElement.js +15 -0
- package/dist/field/lexical/plugins/handles/utils/setHandlePosition.d.ts +2 -0
- package/dist/field/lexical/plugins/handles/utils/setHandlePosition.d.ts.map +1 -0
- package/dist/field/lexical/plugins/handles/utils/setHandlePosition.js +27 -0
- package/dist/field/lexical/theme/EditorTheme.d.ts +4 -0
- package/dist/field/lexical/theme/EditorTheme.d.ts.map +1 -0
- package/dist/field/lexical/theme/EditorTheme.js +115 -0
- package/dist/field/lexical/ui/ContentEditable.d.ts +6 -0
- package/dist/field/lexical/ui/ContentEditable.d.ts.map +1 -0
- package/dist/field/lexical/ui/ContentEditable.js +59 -0
- package/dist/field/lexical/ui/icons/AI/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/AI/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/AI/index.js +42 -0
- package/dist/field/lexical/ui/icons/AlignCenter/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/AlignCenter/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/AlignCenter/index.js +40 -0
- package/dist/field/lexical/ui/icons/AlignLeft/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/AlignLeft/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/AlignLeft/index.js +40 -0
- package/dist/field/lexical/ui/icons/AlignRight/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/AlignRight/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/AlignRight/index.js +40 -0
- package/dist/field/lexical/ui/icons/Block/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Block/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Block/index.js +49 -0
- package/dist/field/lexical/ui/icons/Blockquote/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Blockquote/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Blockquote/index.js +31 -0
- package/dist/field/lexical/ui/icons/Bold/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Bold/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Bold/index.js +31 -0
- package/dist/field/lexical/ui/icons/Checklist/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Checklist/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Checklist/index.js +39 -0
- package/dist/field/lexical/ui/icons/Code/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Code/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Code/index.js +34 -0
- package/dist/field/lexical/ui/icons/CodeBlock/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/CodeBlock/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/CodeBlock/index.js +34 -0
- package/dist/field/lexical/ui/icons/H1/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/H1/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/H1/index.js +31 -0
- package/dist/field/lexical/ui/icons/H2/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/H2/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/H2/index.js +31 -0
- package/dist/field/lexical/ui/icons/H3/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/H3/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/H3/index.js +31 -0
- package/dist/field/lexical/ui/icons/H4/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/H4/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/H4/index.js +31 -0
- package/dist/field/lexical/ui/icons/H5/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/H5/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/H5/index.js +31 -0
- package/dist/field/lexical/ui/icons/H6/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/H6/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/H6/index.js +31 -0
- package/dist/field/lexical/ui/icons/IndentDecrease/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/IndentDecrease/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/IndentDecrease/index.js +43 -0
- package/dist/field/lexical/ui/icons/IndentIncrease/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/IndentIncrease/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/IndentIncrease/index.js +43 -0
- package/dist/field/lexical/ui/icons/Italic/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Italic/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Italic/index.js +31 -0
- package/dist/field/lexical/ui/icons/Link/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Link/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Link/index.js +42 -0
- package/dist/field/lexical/ui/icons/OrderedList/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/OrderedList/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/OrderedList/index.js +46 -0
- package/dist/field/lexical/ui/icons/Relationship/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Relationship/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Relationship/index.js +42 -0
- package/dist/field/lexical/ui/icons/Strikethrough/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Strikethrough/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Strikethrough/index.js +34 -0
- package/dist/field/lexical/ui/icons/Subscript/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Subscript/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Subscript/index.js +31 -0
- package/dist/field/lexical/ui/icons/Superscript/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Superscript/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Superscript/index.js +31 -0
- package/dist/field/lexical/ui/icons/Text/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Text/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Text/index.js +31 -0
- package/dist/field/lexical/ui/icons/Underline/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Underline/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Underline/index.js +34 -0
- package/dist/field/lexical/ui/icons/UnorderedList/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/UnorderedList/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/UnorderedList/index.js +61 -0
- package/dist/field/lexical/ui/icons/Upload/index.d.ts +3 -0
- package/dist/field/lexical/ui/icons/Upload/index.d.ts.map +1 -0
- package/dist/field/lexical/ui/icons/Upload/index.js +43 -0
- package/dist/field/lexical/utils/canUseDOM.d.ts +2 -0
- package/dist/field/lexical/utils/canUseDOM.d.ts.map +1 -0
- package/dist/field/lexical/utils/canUseDOM.js +13 -0
- package/dist/field/lexical/utils/cloneDeep.d.ts +2 -0
- package/dist/field/lexical/utils/cloneDeep.d.ts.map +1 -0
- package/dist/field/lexical/utils/cloneDeep.js +39 -0
- package/dist/field/lexical/utils/getDOMRangeRect.d.ts +2 -0
- package/dist/field/lexical/utils/getDOMRangeRect.d.ts.map +1 -0
- package/dist/field/lexical/utils/getDOMRangeRect.js +26 -0
- package/dist/field/lexical/utils/getSelectedNode.d.ts +3 -0
- package/dist/field/lexical/utils/getSelectedNode.d.ts.map +1 -0
- package/dist/field/lexical/utils/getSelectedNode.js +33 -0
- package/dist/field/lexical/utils/guard.d.ts +9 -0
- package/dist/field/lexical/utils/guard.d.ts.map +1 -0
- package/dist/field/lexical/utils/guard.js +21 -0
- package/dist/field/lexical/utils/invariant.d.ts +2 -0
- package/dist/field/lexical/utils/invariant.d.ts.map +1 -0
- package/dist/field/lexical/utils/invariant.js +22 -0
- package/dist/field/lexical/utils/isMobileWidth.d.ts +9 -0
- package/dist/field/lexical/utils/isMobileWidth.d.ts.map +1 -0
- package/dist/field/lexical/utils/isMobileWidth.js +9 -0
- package/dist/field/lexical/utils/joinClasses.d.ts +9 -0
- package/dist/field/lexical/utils/joinClasses.d.ts.map +1 -0
- package/dist/field/lexical/utils/joinClasses.js +21 -0
- package/dist/field/lexical/utils/markdown/createBlockNode.d.ts +4 -0
- package/dist/field/lexical/utils/markdown/createBlockNode.d.ts.map +1 -0
- package/dist/field/lexical/utils/markdown/createBlockNode.js +20 -0
- package/dist/field/lexical/utils/point.d.ts +22 -0
- package/dist/field/lexical/utils/point.d.ts.map +1 -0
- package/dist/field/lexical/utils/point.js +61 -0
- package/dist/field/lexical/utils/rect.d.ts +54 -0
- package/dist/field/lexical/utils/rect.d.ts.map +1 -0
- package/dist/field/lexical/utils/rect.js +154 -0
- package/dist/field/lexical/utils/setFloatingElemPosition.d.ts +2 -0
- package/dist/field/lexical/utils/setFloatingElemPosition.d.ts.map +1 -0
- package/dist/field/lexical/utils/setFloatingElemPosition.js +55 -0
- package/dist/field/lexical/utils/setFloatingElemPositionForLinkEditor.d.ts +2 -0
- package/dist/field/lexical/utils/setFloatingElemPositionForLinkEditor.d.ts.map +1 -0
- package/dist/field/lexical/utils/setFloatingElemPositionForLinkEditor.js +43 -0
- package/dist/field/lexical/utils/swipe.d.ts +12 -0
- package/dist/field/lexical/utils/swipe.d.ts.map +1 -0
- package/dist/field/lexical/utils/swipe.js +130 -0
- package/dist/field/lexical/utils/url.d.ts +10 -0
- package/dist/field/lexical/utils/url.d.ts.map +1 -0
- package/dist/field/lexical/utils/url.js +40 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +170 -0
- package/dist/populate/defaultValue.d.ts +26 -0
- package/dist/populate/defaultValue.d.ts.map +1 -0
- package/dist/populate/defaultValue.js +41 -0
- package/dist/populate/populate.d.ts +20 -0
- package/dist/populate/populate.d.ts.map +1 -0
- package/dist/populate/populate.js +31 -0
- package/dist/populate/recurseNestedFields.d.ts +16 -0
- package/dist/populate/recurseNestedFields.d.ts.map +1 -0
- package/dist/populate/recurseNestedFields.js +182 -0
- package/dist/populate/richTextRelationshipPromise.d.ts +22 -0
- package/dist/populate/richTextRelationshipPromise.d.ts.map +1 -0
- package/dist/populate/richTextRelationshipPromise.js +71 -0
- package/dist/populate/validation.d.ts +4 -0
- package/dist/populate/validation.d.ts.map +1 -0
- package/dist/populate/validation.js +21 -0
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/package.json +60 -0
- package/src/index.ts +92 -0
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
PUNCTUATION: function() {
|
|
13
|
+
return PUNCTUATION;
|
|
14
|
+
},
|
|
15
|
+
SlashMenuGroup: function() {
|
|
16
|
+
return SlashMenuGroup;
|
|
17
|
+
},
|
|
18
|
+
SlashMenuOption: function() {
|
|
19
|
+
return SlashMenuOption;
|
|
20
|
+
},
|
|
21
|
+
getScrollParent: function() {
|
|
22
|
+
return getScrollParent;
|
|
23
|
+
},
|
|
24
|
+
useDynamicPositioning: function() {
|
|
25
|
+
return useDynamicPositioning;
|
|
26
|
+
},
|
|
27
|
+
SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND: function() {
|
|
28
|
+
return SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND;
|
|
29
|
+
},
|
|
30
|
+
LexicalMenu: function() {
|
|
31
|
+
return LexicalMenu;
|
|
32
|
+
},
|
|
33
|
+
useMenuAnchorRef: function() {
|
|
34
|
+
return useMenuAnchorRef;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
const _LexicalComposerContext = require("@lexical/react/LexicalComposerContext");
|
|
38
|
+
const _utils = require("@lexical/utils");
|
|
39
|
+
const _lexical = require("lexical");
|
|
40
|
+
const _react = require("react");
|
|
41
|
+
const PUNCTUATION = '\\.,\\+\\*\\?\\$\\@\\|#{}\\(\\)\\^\\-\\[\\]\\\\/!%\'"~=<>_:;';
|
|
42
|
+
class SlashMenuGroup {
|
|
43
|
+
options;
|
|
44
|
+
title;
|
|
45
|
+
}
|
|
46
|
+
class SlashMenuOption {
|
|
47
|
+
Icon;
|
|
48
|
+
// Icon for display
|
|
49
|
+
key;
|
|
50
|
+
// TBD
|
|
51
|
+
keyboardShortcut;
|
|
52
|
+
// For extra searching.
|
|
53
|
+
keywords;
|
|
54
|
+
// What happens when you select this option?
|
|
55
|
+
onSelect;
|
|
56
|
+
ref;
|
|
57
|
+
// What shows up in the editor
|
|
58
|
+
title;
|
|
59
|
+
constructor(title, options){
|
|
60
|
+
this.key = title;
|
|
61
|
+
this.ref = {
|
|
62
|
+
current: null
|
|
63
|
+
};
|
|
64
|
+
this.setRefElement = this.setRefElement.bind(this);
|
|
65
|
+
this.title = title;
|
|
66
|
+
this.keywords = options.keywords || [];
|
|
67
|
+
this.Icon = options.Icon;
|
|
68
|
+
this.keyboardShortcut = options.keyboardShortcut;
|
|
69
|
+
this.onSelect = options.onSelect.bind(this);
|
|
70
|
+
}
|
|
71
|
+
setRefElement(element) {
|
|
72
|
+
this.ref = {
|
|
73
|
+
current: element
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const scrollIntoViewIfNeeded = (target)=>{
|
|
78
|
+
const typeaheadContainerNode = document.getElementById('typeahead-menu');
|
|
79
|
+
if (!typeaheadContainerNode) return;
|
|
80
|
+
const typeaheadRect = typeaheadContainerNode.getBoundingClientRect();
|
|
81
|
+
if (typeaheadRect.top + typeaheadRect.height > window.innerHeight) {
|
|
82
|
+
typeaheadContainerNode.scrollIntoView({
|
|
83
|
+
block: 'center'
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
if (typeaheadRect.top < 0) {
|
|
87
|
+
typeaheadContainerNode.scrollIntoView({
|
|
88
|
+
block: 'center'
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
target.scrollIntoView({
|
|
92
|
+
block: 'nearest'
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Walk backwards along user input and forward through entity title to try
|
|
97
|
+
* and replace more of the user's text with entity.
|
|
98
|
+
*/ function getFullMatchOffset(documentText, entryText, offset) {
|
|
99
|
+
let triggerOffset = offset;
|
|
100
|
+
for(let i = triggerOffset; i <= entryText.length; i++){
|
|
101
|
+
if (documentText.substr(-i) === entryText.substr(0, i)) {
|
|
102
|
+
triggerOffset = i;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return triggerOffset;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Split Lexical TextNode and return a new TextNode only containing matched text.
|
|
109
|
+
* Common use cases include: removing the node, replacing with a new node.
|
|
110
|
+
*/ function $splitNodeContainingQuery(match) {
|
|
111
|
+
const selection = (0, _lexical.$getSelection)();
|
|
112
|
+
if (!(0, _lexical.$isRangeSelection)(selection) || !selection.isCollapsed()) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
const anchor = selection.anchor;
|
|
116
|
+
if (anchor.type !== 'text') {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
const anchorNode = anchor.getNode();
|
|
120
|
+
if (!anchorNode.isSimpleText()) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
const selectionOffset = anchor.offset;
|
|
124
|
+
const textContent = anchorNode.getTextContent().slice(0, selectionOffset);
|
|
125
|
+
const characterOffset = match.replaceableString.length;
|
|
126
|
+
const queryOffset = getFullMatchOffset(textContent, match.matchingString, characterOffset);
|
|
127
|
+
const startOffset = selectionOffset - queryOffset;
|
|
128
|
+
if (startOffset < 0) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
let newNode;
|
|
132
|
+
if (startOffset === 0) {
|
|
133
|
+
[newNode] = anchorNode.splitText(selectionOffset);
|
|
134
|
+
} else {
|
|
135
|
+
[, newNode] = anchorNode.splitText(startOffset, selectionOffset);
|
|
136
|
+
}
|
|
137
|
+
return newNode;
|
|
138
|
+
}
|
|
139
|
+
function getScrollParent(element, includeHidden) {
|
|
140
|
+
let style = getComputedStyle(element);
|
|
141
|
+
const excludeStaticParent = style.position === 'absolute';
|
|
142
|
+
const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/;
|
|
143
|
+
if (style.position === 'fixed') {
|
|
144
|
+
return document.body;
|
|
145
|
+
}
|
|
146
|
+
for(let parent = element; parent = parent.parentElement;){
|
|
147
|
+
style = getComputedStyle(parent);
|
|
148
|
+
if (excludeStaticParent && style.position === 'static') {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) {
|
|
152
|
+
return parent;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return document.body;
|
|
156
|
+
}
|
|
157
|
+
function isTriggerVisibleInNearestScrollContainer(targetElement, containerElement) {
|
|
158
|
+
const tRect = targetElement.getBoundingClientRect();
|
|
159
|
+
const cRect = containerElement.getBoundingClientRect();
|
|
160
|
+
return tRect.top > cRect.top && tRect.top < cRect.bottom;
|
|
161
|
+
}
|
|
162
|
+
function useDynamicPositioning(resolution, targetElement, onReposition, onVisibilityChange) {
|
|
163
|
+
const [editor] = (0, _LexicalComposerContext.useLexicalComposerContext)();
|
|
164
|
+
(0, _react.useEffect)(()=>{
|
|
165
|
+
if (targetElement != null && resolution != null) {
|
|
166
|
+
const rootElement = editor.getRootElement();
|
|
167
|
+
const rootScrollParent = rootElement != null ? getScrollParent(rootElement, false) : document.body;
|
|
168
|
+
let ticking = false;
|
|
169
|
+
let previousIsInView = isTriggerVisibleInNearestScrollContainer(targetElement, rootScrollParent);
|
|
170
|
+
const handleScroll = function() {
|
|
171
|
+
if (!ticking) {
|
|
172
|
+
window.requestAnimationFrame(function() {
|
|
173
|
+
onReposition();
|
|
174
|
+
ticking = false;
|
|
175
|
+
});
|
|
176
|
+
ticking = true;
|
|
177
|
+
}
|
|
178
|
+
const isInView = isTriggerVisibleInNearestScrollContainer(targetElement, rootScrollParent);
|
|
179
|
+
if (isInView !== previousIsInView) {
|
|
180
|
+
previousIsInView = isInView;
|
|
181
|
+
if (onVisibilityChange != null) {
|
|
182
|
+
onVisibilityChange(isInView);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
const resizeObserver = new ResizeObserver(onReposition);
|
|
187
|
+
window.addEventListener('resize', onReposition);
|
|
188
|
+
document.addEventListener('scroll', handleScroll, {
|
|
189
|
+
capture: true,
|
|
190
|
+
passive: true
|
|
191
|
+
});
|
|
192
|
+
resizeObserver.observe(targetElement);
|
|
193
|
+
return ()=>{
|
|
194
|
+
resizeObserver.unobserve(targetElement);
|
|
195
|
+
window.removeEventListener('resize', onReposition);
|
|
196
|
+
document.removeEventListener('scroll', handleScroll, true);
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
}, [
|
|
200
|
+
targetElement,
|
|
201
|
+
editor,
|
|
202
|
+
onVisibilityChange,
|
|
203
|
+
onReposition,
|
|
204
|
+
resolution
|
|
205
|
+
]);
|
|
206
|
+
}
|
|
207
|
+
const SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND = (0, _lexical.createCommand)('SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND');
|
|
208
|
+
function LexicalMenu({ anchorElementRef, close, editor, // groupsWithOptions filtering is already handled in SlashMenu/index.tsx. Thus, groupsWithOptions always contains the matching options.
|
|
209
|
+
groupsWithOptions, menuRenderFn, onSelectOption, resolution, shouldSplitNodeWithQuery = false }) {
|
|
210
|
+
const [selectedOptionKey, setSelectedOptionKey] = (0, _react.useState)(null);
|
|
211
|
+
const matchingString = resolution.match && resolution.match.matchingString || '';
|
|
212
|
+
const updateSelectedOption = (0, _react.useCallback)((option)=>{
|
|
213
|
+
const rootElem = editor.getRootElement();
|
|
214
|
+
if (rootElem !== null) {
|
|
215
|
+
rootElem.setAttribute('aria-activedescendant', 'typeahead-item-' + option.key);
|
|
216
|
+
setSelectedOptionKey(option.key);
|
|
217
|
+
}
|
|
218
|
+
}, [
|
|
219
|
+
editor
|
|
220
|
+
]);
|
|
221
|
+
const setSelectedOptionKeyToFirstMatchingOption = (0, _react.useCallback)(()=>{
|
|
222
|
+
// set selected option to the first of the matching ones
|
|
223
|
+
if (groupsWithOptions !== null && matchingString != null) {
|
|
224
|
+
// groupsWithOptions filtering is already handled in SlashMenu/index.tsx. Thus, groupsWithOptions always contains the matching options.
|
|
225
|
+
const allOptions = groupsWithOptions.flatMap((group)=>group.options);
|
|
226
|
+
if (allOptions.length) {
|
|
227
|
+
const firstMatchingOption = allOptions[0];
|
|
228
|
+
updateSelectedOption(firstMatchingOption);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}, [
|
|
232
|
+
groupsWithOptions,
|
|
233
|
+
updateSelectedOption,
|
|
234
|
+
matchingString
|
|
235
|
+
]);
|
|
236
|
+
(0, _react.useEffect)(()=>{
|
|
237
|
+
setSelectedOptionKeyToFirstMatchingOption();
|
|
238
|
+
}, [
|
|
239
|
+
matchingString,
|
|
240
|
+
setSelectedOptionKeyToFirstMatchingOption
|
|
241
|
+
]);
|
|
242
|
+
const selectOptionAndCleanUp = (0, _react.useCallback)((selectedOption)=>{
|
|
243
|
+
editor.update(()=>{
|
|
244
|
+
const textNodeContainingQuery = resolution.match != null && shouldSplitNodeWithQuery ? $splitNodeContainingQuery(resolution.match) : null;
|
|
245
|
+
onSelectOption(selectedOption, textNodeContainingQuery, close, resolution.match ? resolution.match.matchingString : '');
|
|
246
|
+
});
|
|
247
|
+
}, [
|
|
248
|
+
editor,
|
|
249
|
+
shouldSplitNodeWithQuery,
|
|
250
|
+
resolution.match,
|
|
251
|
+
onSelectOption,
|
|
252
|
+
close
|
|
253
|
+
]);
|
|
254
|
+
(0, _react.useEffect)(()=>{
|
|
255
|
+
return ()=>{
|
|
256
|
+
const rootElem = editor.getRootElement();
|
|
257
|
+
if (rootElem !== null) {
|
|
258
|
+
rootElem.removeAttribute('aria-activedescendant');
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
}, [
|
|
262
|
+
editor
|
|
263
|
+
]);
|
|
264
|
+
(0, _react.useLayoutEffect)(()=>{
|
|
265
|
+
if (groupsWithOptions === null) {
|
|
266
|
+
setSelectedOptionKey(null);
|
|
267
|
+
} else if (selectedOptionKey === null) {
|
|
268
|
+
setSelectedOptionKeyToFirstMatchingOption();
|
|
269
|
+
}
|
|
270
|
+
}, [
|
|
271
|
+
groupsWithOptions,
|
|
272
|
+
selectedOptionKey,
|
|
273
|
+
updateSelectedOption,
|
|
274
|
+
setSelectedOptionKeyToFirstMatchingOption
|
|
275
|
+
]);
|
|
276
|
+
(0, _react.useEffect)(()=>{
|
|
277
|
+
return (0, _utils.mergeRegister)(editor.registerCommand(SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND, ({ option })=>{
|
|
278
|
+
if (option.ref && option.ref.current != null) {
|
|
279
|
+
scrollIntoViewIfNeeded(option.ref.current);
|
|
280
|
+
return true;
|
|
281
|
+
}
|
|
282
|
+
return false;
|
|
283
|
+
}, _lexical.COMMAND_PRIORITY_LOW));
|
|
284
|
+
}, [
|
|
285
|
+
editor,
|
|
286
|
+
updateSelectedOption
|
|
287
|
+
]);
|
|
288
|
+
(0, _react.useEffect)(()=>{
|
|
289
|
+
return (0, _utils.mergeRegister)(editor.registerCommand(_lexical.KEY_ARROW_DOWN_COMMAND, (payload)=>{
|
|
290
|
+
const event = payload;
|
|
291
|
+
if (groupsWithOptions !== null && groupsWithOptions.length && selectedOptionKey !== null) {
|
|
292
|
+
const allOptions = groupsWithOptions.flatMap((group)=>group.options);
|
|
293
|
+
const selectedIndex = allOptions.findIndex((option)=>option.key === selectedOptionKey);
|
|
294
|
+
const newSelectedIndex = selectedIndex !== allOptions.length - 1 ? selectedIndex + 1 : 0;
|
|
295
|
+
const newSelectedOption = allOptions[newSelectedIndex];
|
|
296
|
+
updateSelectedOption(newSelectedOption);
|
|
297
|
+
if (newSelectedOption.ref != null && newSelectedOption.ref.current) {
|
|
298
|
+
editor.dispatchCommand(SCROLL_TYPEAHEAD_OPTION_INTO_VIEW_COMMAND, {
|
|
299
|
+
index: newSelectedIndex,
|
|
300
|
+
option: newSelectedOption
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
event.preventDefault();
|
|
304
|
+
event.stopImmediatePropagation();
|
|
305
|
+
}
|
|
306
|
+
return true;
|
|
307
|
+
}, _lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(_lexical.KEY_ARROW_UP_COMMAND, (payload)=>{
|
|
308
|
+
const event = payload;
|
|
309
|
+
if (groupsWithOptions !== null && groupsWithOptions.length && selectedOptionKey !== null) {
|
|
310
|
+
const allOptions = groupsWithOptions.flatMap((group)=>group.options);
|
|
311
|
+
const selectedIndex = allOptions.findIndex((option)=>option.key === selectedOptionKey);
|
|
312
|
+
const newSelectedIndex = selectedIndex !== 0 ? selectedIndex - 1 : allOptions.length - 1;
|
|
313
|
+
const newSelectedOption = allOptions[newSelectedIndex];
|
|
314
|
+
updateSelectedOption(newSelectedOption);
|
|
315
|
+
if (newSelectedOption.ref != null && newSelectedOption.ref.current) {
|
|
316
|
+
scrollIntoViewIfNeeded(newSelectedOption.ref.current);
|
|
317
|
+
}
|
|
318
|
+
event.preventDefault();
|
|
319
|
+
event.stopImmediatePropagation();
|
|
320
|
+
}
|
|
321
|
+
return true;
|
|
322
|
+
}, _lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(_lexical.KEY_ESCAPE_COMMAND, (payload)=>{
|
|
323
|
+
const event = payload;
|
|
324
|
+
event.preventDefault();
|
|
325
|
+
event.stopImmediatePropagation();
|
|
326
|
+
close();
|
|
327
|
+
return true;
|
|
328
|
+
}, _lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(_lexical.KEY_TAB_COMMAND, (payload)=>{
|
|
329
|
+
const event = payload;
|
|
330
|
+
if (groupsWithOptions === null || selectedOptionKey === null) {
|
|
331
|
+
return false;
|
|
332
|
+
}
|
|
333
|
+
const allOptions = groupsWithOptions.flatMap((group)=>group.options);
|
|
334
|
+
const selectedOption = allOptions.find((option)=>option.key === selectedOptionKey);
|
|
335
|
+
if (!selectedOption) {
|
|
336
|
+
return false;
|
|
337
|
+
}
|
|
338
|
+
event.preventDefault();
|
|
339
|
+
event.stopImmediatePropagation();
|
|
340
|
+
selectOptionAndCleanUp(selectedOption);
|
|
341
|
+
return true;
|
|
342
|
+
}, _lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(_lexical.KEY_ENTER_COMMAND, (event)=>{
|
|
343
|
+
if (groupsWithOptions === null || selectedOptionKey === null) {
|
|
344
|
+
return false;
|
|
345
|
+
}
|
|
346
|
+
const allOptions = groupsWithOptions.flatMap((group)=>group.options);
|
|
347
|
+
const selectedOption = allOptions.find((option)=>option.key === selectedOptionKey);
|
|
348
|
+
if (!selectedOption) {
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
351
|
+
if (event !== null) {
|
|
352
|
+
event.preventDefault();
|
|
353
|
+
event.stopImmediatePropagation();
|
|
354
|
+
}
|
|
355
|
+
selectOptionAndCleanUp(selectedOption);
|
|
356
|
+
return true;
|
|
357
|
+
}, _lexical.COMMAND_PRIORITY_LOW));
|
|
358
|
+
}, [
|
|
359
|
+
selectOptionAndCleanUp,
|
|
360
|
+
close,
|
|
361
|
+
editor,
|
|
362
|
+
groupsWithOptions,
|
|
363
|
+
selectedOptionKey,
|
|
364
|
+
updateSelectedOption
|
|
365
|
+
]);
|
|
366
|
+
const listItemProps = (0, _react.useMemo)(()=>({
|
|
367
|
+
groupsWithOptions,
|
|
368
|
+
selectOptionAndCleanUp,
|
|
369
|
+
selectedOptionKey,
|
|
370
|
+
setSelectedOptionKey
|
|
371
|
+
}), [
|
|
372
|
+
selectOptionAndCleanUp,
|
|
373
|
+
selectedOptionKey,
|
|
374
|
+
groupsWithOptions
|
|
375
|
+
]);
|
|
376
|
+
return menuRenderFn(anchorElementRef, listItemProps, resolution.match ? resolution.match.matchingString : '');
|
|
377
|
+
}
|
|
378
|
+
function useMenuAnchorRef(resolution, setResolution, className) {
|
|
379
|
+
const [editor] = (0, _LexicalComposerContext.useLexicalComposerContext)();
|
|
380
|
+
const anchorElementRef = (0, _react.useRef)(document.createElement('div'));
|
|
381
|
+
const positionMenu = (0, _react.useCallback)(()=>{
|
|
382
|
+
const rootElement = editor.getRootElement();
|
|
383
|
+
const containerDiv = anchorElementRef.current;
|
|
384
|
+
const VERTICAL_OFFSET = 32;
|
|
385
|
+
const menuEle = containerDiv.firstChild;
|
|
386
|
+
if (rootElement !== null && resolution !== null) {
|
|
387
|
+
const { height, left, top, width } = resolution.getRect();
|
|
388
|
+
containerDiv.style.top = `${top + window.scrollY + VERTICAL_OFFSET}px`;
|
|
389
|
+
containerDiv.style.left = `${left + window.scrollX}px`;
|
|
390
|
+
containerDiv.style.height = `${height}px`;
|
|
391
|
+
containerDiv.style.width = `${width}px`;
|
|
392
|
+
if (menuEle !== null) {
|
|
393
|
+
const menuRect = menuEle.getBoundingClientRect();
|
|
394
|
+
const menuHeight = menuRect.height;
|
|
395
|
+
const menuWidth = menuRect.width;
|
|
396
|
+
const rootElementRect = rootElement.getBoundingClientRect();
|
|
397
|
+
if (left + menuWidth > rootElementRect.right) {
|
|
398
|
+
containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`;
|
|
399
|
+
}
|
|
400
|
+
const margin = 10;
|
|
401
|
+
if ((top + menuHeight > window.innerHeight || top + menuHeight > rootElementRect.bottom) && top - rootElementRect.top > menuHeight) {
|
|
402
|
+
containerDiv.style.top = `${top + VERTICAL_OFFSET - menuHeight + window.scrollY - (height + margin)}px`;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
if (!containerDiv.isConnected) {
|
|
406
|
+
if (className != null) {
|
|
407
|
+
containerDiv.className = className;
|
|
408
|
+
}
|
|
409
|
+
containerDiv.setAttribute('aria-label', 'Typeahead menu');
|
|
410
|
+
containerDiv.setAttribute('id', 'typeahead-menu');
|
|
411
|
+
containerDiv.setAttribute('role', 'listbox');
|
|
412
|
+
containerDiv.style.display = 'block';
|
|
413
|
+
containerDiv.style.position = 'absolute';
|
|
414
|
+
document.body.append(containerDiv);
|
|
415
|
+
}
|
|
416
|
+
anchorElementRef.current = containerDiv;
|
|
417
|
+
rootElement.setAttribute('aria-controls', 'typeahead-menu');
|
|
418
|
+
}
|
|
419
|
+
}, [
|
|
420
|
+
editor,
|
|
421
|
+
resolution,
|
|
422
|
+
className
|
|
423
|
+
]);
|
|
424
|
+
(0, _react.useEffect)(()=>{
|
|
425
|
+
const rootElement = editor.getRootElement();
|
|
426
|
+
if (resolution !== null) {
|
|
427
|
+
positionMenu();
|
|
428
|
+
return ()=>{
|
|
429
|
+
if (rootElement !== null) {
|
|
430
|
+
rootElement.removeAttribute('aria-controls');
|
|
431
|
+
}
|
|
432
|
+
const containerDiv = anchorElementRef.current;
|
|
433
|
+
if (containerDiv !== null && containerDiv.isConnected) {
|
|
434
|
+
containerDiv.remove();
|
|
435
|
+
}
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
}, [
|
|
439
|
+
editor,
|
|
440
|
+
positionMenu,
|
|
441
|
+
resolution
|
|
442
|
+
]);
|
|
443
|
+
const onVisibilityChange = (0, _react.useCallback)((isInView)=>{
|
|
444
|
+
if (resolution !== null) {
|
|
445
|
+
if (!isInView) {
|
|
446
|
+
setResolution(null);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}, [
|
|
450
|
+
resolution,
|
|
451
|
+
setResolution
|
|
452
|
+
]);
|
|
453
|
+
useDynamicPositioning(resolution, anchorElementRef.current, positionMenu, onVisibilityChange);
|
|
454
|
+
return anchorElementRef;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL0xleGljYWxNZW51LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExleGljYWxDb21tYW5kLCBMZXhpY2FsRWRpdG9yLCBUZXh0Tm9kZSB9IGZyb20gJ2xleGljYWwnXG5pbXBvcnQgdHlwZSB7IE11dGFibGVSZWZPYmplY3QsIFJlYWN0UG9ydGFsIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQgfSBmcm9tICdAbGV4aWNhbC9yZWFjdC9MZXhpY2FsQ29tcG9zZXJDb250ZXh0J1xuaW1wb3J0IHsgbWVyZ2VSZWdpc3RlciB9IGZyb20gJ0BsZXhpY2FsL3V0aWxzJ1xuaW1wb3J0IHtcbiAgJGdldFNlbGVjdGlvbixcbiAgJGlzUmFuZ2VTZWxlY3Rpb24sXG4gIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICBLRVlfQVJST1dfRE9XTl9DT01NQU5ELFxuICBLRVlfQVJST1dfVVBfQ09NTUFORCxcbiAgS0VZX0VOVEVSX0NPTU1BTkQsXG4gIEtFWV9FU0NBUEVfQ09NTUFORCxcbiAgS0VZX1RBQl9DT01NQU5ELFxuICBjcmVhdGVDb21tYW5kLFxufSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmV4cG9ydCB0eXBlIE1lbnVUZXh0TWF0Y2ggPSB7XG4gIGxlYWRPZmZzZXQ6IG51bWJlclxuICBtYXRjaGluZ1N0cmluZzogc3RyaW5nXG4gIHJlcGxhY2VhYmxlU3RyaW5nOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgTWVudVJlc29sdXRpb24gPSB7XG4gIGdldFJlY3Q6ICgpID0+IERPTVJlY3RcbiAgbWF0Y2g/OiBNZW51VGV4dE1hdGNoXG59XG5cbmV4cG9ydCBjb25zdCBQVU5DVFVBVElPTiA9ICdcXFxcLixcXFxcK1xcXFwqXFxcXD9cXFxcJFxcXFxAXFxcXHwje31cXFxcKFxcXFwpXFxcXF5cXFxcLVxcXFxbXFxcXF1cXFxcXFxcXC8hJVxcJ1wifj08Pl86OydcblxuZXhwb3J0IGNsYXNzIFNsYXNoTWVudUdyb3VwIHtcbiAgb3B0aW9uczogQXJyYXk8U2xhc2hNZW51T3B0aW9uPlxuICB0aXRsZTogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBTbGFzaE1lbnVPcHRpb24ge1xuICBJY29uOiBSZWFjdC5GQ1xuXG4gIC8vIEljb24gZm9yIGRpc3BsYXlcbiAga2V5OiBzdHJpbmdcbiAgLy8gVEJEXG4gIGtleWJvYXJkU2hvcnRjdXQ/OiBzdHJpbmdcbiAgLy8gRm9yIGV4dHJhIHNlYXJjaGluZy5cbiAga2V5d29yZHM6IEFycmF5PHN0cmluZz5cbiAgLy8gV2hhdCBoYXBwZW5zIHdoZW4geW91IHNlbGVjdCB0aGlzIG9wdGlvbj9cbiAgb25TZWxlY3Q6ICh7IGVkaXRvciwgcXVlcnlTdHJpbmcgfTogeyBlZGl0b3I6IExleGljYWxFZGl0b3I7IHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfSkgPT4gdm9pZFxuICByZWY/OiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cblxuICAvLyBXaGF0IHNob3dzIHVwIGluIHRoZSBlZGl0b3JcbiAgdGl0bGU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgSWNvbjogUmVhY3QuRkNcbiAgICAgIGtleWJvYXJkU2hvcnRjdXQ/OiBzdHJpbmdcbiAgICAgIGtleXdvcmRzPzogQXJyYXk8c3RyaW5nPlxuICAgICAgb25TZWxlY3Q6ICh7IGVkaXRvciwgcXVlcnlTdHJpbmcgfTogeyBlZGl0b3I6IExleGljYWxFZGl0b3I7IHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfSkgPT4gdm9pZFxuICAgIH0sXG4gICkge1xuICAgIHRoaXMua2V5ID0gdGl0bGVcbiAgICB0aGlzLnJlZiA9IHsgY3VycmVudDogbnVsbCB9XG4gICAgdGhpcy5zZXRSZWZFbGVtZW50ID0gdGhpcy5zZXRSZWZFbGVtZW50LmJpbmQodGhpcylcblxuICAgIHRoaXMudGl0bGUgPSB0aXRsZVxuICAgIHRoaXMua2V5d29yZHMgPSBvcHRpb25zLmtleXdvcmRzIHx8IFtdXG4gICAgdGhpcy5JY29uID0gb3B0aW9ucy5JY29uXG4gICAgdGhpcy5rZXlib2FyZFNob3J0Y3V0ID0gb3B0aW9ucy5rZXlib2FyZFNob3J0Y3V0XG4gICAgdGhpcy5vblNlbGVjdCA9IG9wdGlvbnMub25TZWxlY3QuYmluZCh0aGlzKVxuICB9XG5cbiAgc2V0UmVmRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpIHtcbiAgICB0aGlzLnJlZiA9IHsgY3VycmVudDogZWxlbWVudCB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgTWVudVJlbmRlckZuID0gKFxuICBhbmNob3JFbGVtZW50UmVmOiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD4sXG4gIGl0ZW1Qcm9wczoge1xuICAgIGdyb3Vwc1dpdGhPcHRpb25zOiBBcnJheTxTbGFzaE1lbnVHcm91cD5cbiAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwOiAoc2VsZWN0ZWRPcHRpb246IFNsYXNoTWVudU9wdGlvbikgPT4gdm9pZFxuICAgIHNlbGVjdGVkT3B0aW9uS2V5OiBudWxsIHwgc3RyaW5nXG4gICAgc2V0U2VsZWN0ZWRPcHRpb25LZXk6IChvcHRpb25LZXk6IHN0cmluZykgPT4gdm9pZFxuICB9LFxuICBtYXRjaGluZ1N0cmluZzogbnVsbCB8IHN0cmluZyxcbikgPT4gSlNYLkVsZW1lbnQgfCBSZWFjdFBvcnRhbCB8IG51bGxcblxuY29uc3Qgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA9ICh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gIGNvbnN0IHR5cGVhaGVhZENvbnRhaW5lck5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHlwZWFoZWFkLW1lbnUnKVxuICBpZiAoIXR5cGVhaGVhZENvbnRhaW5lck5vZGUpIHJldHVyblxuXG4gIGNvbnN0IHR5cGVhaGVhZFJlY3QgPSB0eXBlYWhlYWRDb250YWluZXJOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cbiAgaWYgKHR5cGVhaGVhZFJlY3QudG9wICsgdHlwZWFoZWFkUmVjdC5oZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcbiAgICB0eXBlYWhlYWRDb250YWluZXJOb2RlLnNjcm9sbEludG9WaWV3KHtcbiAgICAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICB9KVxuICB9XG5cbiAgaWYgKHR5cGVhaGVhZFJlY3QudG9wIDwgMCkge1xuICAgIHR5cGVhaGVhZENvbnRhaW5lck5vZGUuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgIH0pXG4gIH1cblxuICB0YXJnZXQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pXG59XG5cbi8qKlxuICogV2FsayBiYWNrd2FyZHMgYWxvbmcgdXNlciBpbnB1dCBhbmQgZm9yd2FyZCB0aHJvdWdoIGVudGl0eSB0aXRsZSB0byB0cnlcbiAqIGFuZCByZXBsYWNlIG1vcmUgb2YgdGhlIHVzZXIncyB0ZXh0IHdpdGggZW50aXR5LlxuICovXG5mdW5jdGlvbiBnZXRGdWxsTWF0Y2hPZmZzZXQoZG9jdW1lbnRUZXh0OiBzdHJpbmcsIGVudHJ5VGV4dDogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCB0cmlnZ2VyT2Zmc2V0ID0gb2Zmc2V0XG4gIGZvciAobGV0IGkgPSB0cmlnZ2VyT2Zmc2V0OyBpIDw9IGVudHJ5VGV4dC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudFRleHQuc3Vic3RyKC1pKSA9PT0gZW50cnlUZXh0LnN1YnN0cigwLCBpKSkge1xuICAgICAgdHJpZ2dlck9mZnNldCA9IGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRyaWdnZXJPZmZzZXRcbn1cblxuLyoqXG4gKiBTcGxpdCBMZXhpY2FsIFRleHROb2RlIGFuZCByZXR1cm4gYSBuZXcgVGV4dE5vZGUgb25seSBjb250YWluaW5nIG1hdGNoZWQgdGV4dC5cbiAqIENvbW1vbiB1c2UgY2FzZXMgaW5jbHVkZTogcmVtb3ZpbmcgdGhlIG5vZGUsIHJlcGxhY2luZyB3aXRoIGEgbmV3IG5vZGUuXG4gKi9cbmZ1bmN0aW9uICRzcGxpdE5vZGVDb250YWluaW5nUXVlcnkobWF0Y2g6IE1lbnVUZXh0TWF0Y2gpOiBUZXh0Tm9kZSB8IG51bGwge1xuICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgaWYgKCEkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pIHx8ICFzZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yID0gc2VsZWN0aW9uLmFuY2hvclxuICBpZiAoYW5jaG9yLnR5cGUgIT09ICd0ZXh0Jykge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yTm9kZSA9IGFuY2hvci5nZXROb2RlKClcbiAgaWYgKCFhbmNob3JOb2RlLmlzU2ltcGxlVGV4dCgpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCBzZWxlY3Rpb25PZmZzZXQgPSBhbmNob3Iub2Zmc2V0XG4gIGNvbnN0IHRleHRDb250ZW50ID0gYW5jaG9yTm9kZS5nZXRUZXh0Q29udGVudCgpLnNsaWNlKDAsIHNlbGVjdGlvbk9mZnNldClcbiAgY29uc3QgY2hhcmFjdGVyT2Zmc2V0ID0gbWF0Y2gucmVwbGFjZWFibGVTdHJpbmcubGVuZ3RoXG4gIGNvbnN0IHF1ZXJ5T2Zmc2V0ID0gZ2V0RnVsbE1hdGNoT2Zmc2V0KHRleHRDb250ZW50LCBtYXRjaC5tYXRjaGluZ1N0cmluZywgY2hhcmFjdGVyT2Zmc2V0KVxuICBjb25zdCBzdGFydE9mZnNldCA9IHNlbGVjdGlvbk9mZnNldCAtIHF1ZXJ5T2Zmc2V0XG4gIGlmIChzdGFydE9mZnNldCA8IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGxldCBuZXdOb2RlXG4gIGlmIChzdGFydE9mZnNldCA9PT0gMCkge1xuICAgIDtbbmV3Tm9kZV0gPSBhbmNob3JOb2RlLnNwbGl0VGV4dChzZWxlY3Rpb25PZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgO1ssIG5ld05vZGVdID0gYW5jaG9yTm9kZS5zcGxpdFRleHQoc3RhcnRPZmZzZXQsIHNlbGVjdGlvbk9mZnNldClcbiAgfVxuXG4gIHJldHVybiBuZXdOb2RlXG59XG5cbi8vIEdvdCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MjU0MzkwOC8yMDEzNTgwXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgaW5jbHVkZUhpZGRlbjogYm9vbGVhbixcbik6IEhUTUxCb2R5RWxlbWVudCB8IEhUTUxFbGVtZW50IHtcbiAgbGV0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICBjb25zdCBleGNsdWRlU3RhdGljUGFyZW50ID0gc3R5bGUucG9zaXRpb24gPT09ICdhYnNvbHV0ZSdcbiAgY29uc3Qgb3ZlcmZsb3dSZWdleCA9IGluY2x1ZGVIaWRkZW4gPyAvKGF1dG98c2Nyb2xsfGhpZGRlbikvIDogLyhhdXRvfHNjcm9sbCkvXG4gIGlmIChzdHlsZS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5XG4gIH1cbiAgZm9yIChsZXQgcGFyZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBlbGVtZW50OyAocGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQpOyApIHtcbiAgICBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocGFyZW50KVxuICAgIGlmIChleGNsdWRlU3RhdGljUGFyZW50ICYmIHN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG92ZXJmbG93UmVnZXgudGVzdChzdHlsZS5vdmVyZmxvdyArIHN0eWxlLm92ZXJmbG93WSArIHN0eWxlLm92ZXJmbG93WCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHlcbn1cblxuZnVuY3Rpb24gaXNUcmlnZ2VyVmlzaWJsZUluTmVhcmVzdFNjcm9sbENvbnRhaW5lcihcbiAgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHRSZWN0ID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICBjb25zdCBjUmVjdCA9IGNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgcmV0dXJuIHRSZWN0LnRvcCA+IGNSZWN0LnRvcCAmJiB0UmVjdC50b3AgPCBjUmVjdC5ib3R0b21cbn1cblxuLy8gUmVwb3NpdGlvbiB0aGUgbWVudSBvbiBzY3JvbGwsIHdpbmRvdyByZXNpemUsIGFuZCBlbGVtZW50IHJlc2l6ZS5cbmV4cG9ydCBmdW5jdGlvbiB1c2VEeW5hbWljUG9zaXRpb25pbmcoXG4gIHJlc29sdXRpb246IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCxcbiAgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsLFxuICBvblJlcG9zaXRpb246ICgpID0+IHZvaWQsXG4gIG9uVmlzaWJpbGl0eUNoYW5nZT86IChpc0luVmlldzogYm9vbGVhbikgPT4gdm9pZCxcbikge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0YXJnZXRFbGVtZW50ICE9IG51bGwgJiYgcmVzb2x1dGlvbiAhPSBudWxsKSB7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IGVkaXRvci5nZXRSb290RWxlbWVudCgpXG4gICAgICBjb25zdCByb290U2Nyb2xsUGFyZW50ID1cbiAgICAgICAgcm9vdEVsZW1lbnQgIT0gbnVsbCA/IGdldFNjcm9sbFBhcmVudChyb290RWxlbWVudCwgZmFsc2UpIDogZG9jdW1lbnQuYm9keVxuICAgICAgbGV0IHRpY2tpbmcgPSBmYWxzZVxuICAgICAgbGV0IHByZXZpb3VzSXNJblZpZXcgPSBpc1RyaWdnZXJWaXNpYmxlSW5OZWFyZXN0U2Nyb2xsQ29udGFpbmVyKFxuICAgICAgICB0YXJnZXRFbGVtZW50LFxuICAgICAgICByb290U2Nyb2xsUGFyZW50LFxuICAgICAgKVxuICAgICAgY29uc3QgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRpY2tpbmcpIHtcbiAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9uUmVwb3NpdGlvbigpXG4gICAgICAgICAgICB0aWNraW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRpY2tpbmcgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNJblZpZXcgPSBpc1RyaWdnZXJWaXNpYmxlSW5OZWFyZXN0U2Nyb2xsQ29udGFpbmVyKHRhcmdldEVsZW1lbnQsIHJvb3RTY3JvbGxQYXJlbnQpXG4gICAgICAgIGlmIChpc0luVmlldyAhPT0gcHJldmlvdXNJc0luVmlldykge1xuICAgICAgICAgIHByZXZpb3VzSXNJblZpZXcgPSBpc0luVmlld1xuICAgICAgICAgIGlmIChvblZpc2liaWxpdHlDaGFuZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgb25WaXNpYmlsaXR5Q2hhbmdlKGlzSW5WaWV3KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIob25SZXBvc2l0aW9uKVxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uUmVwb3NpdGlvbilcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCwge1xuICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGFyZ2V0RWxlbWVudClcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0YXJnZXRFbGVtZW50KVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25SZXBvc2l0aW9uKVxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwsIHRydWUpXG4gICAgICB9XG4gICAgfVxuICB9LCBbdGFyZ2V0RWxlbWVudCwgZWRpdG9yLCBvblZpc2liaWxpdHlDaGFuZ2UsIG9uUmVwb3NpdGlvbiwgcmVzb2x1dGlvbl0pXG59XG5cbmV4cG9ydCBjb25zdCBTQ1JPTExfVFlQRUFIRUFEX09QVElPTl9JTlRPX1ZJRVdfQ09NTUFORDogTGV4aWNhbENvbW1hbmQ8e1xuICBpbmRleDogbnVtYmVyXG4gIG9wdGlvbjogU2xhc2hNZW51T3B0aW9uXG59PiA9IGNyZWF0ZUNvbW1hbmQoJ1NDUk9MTF9UWVBFQUhFQURfT1BUSU9OX0lOVE9fVklFV19DT01NQU5EJylcblxuZXhwb3J0IGZ1bmN0aW9uIExleGljYWxNZW51KHtcbiAgYW5jaG9yRWxlbWVudFJlZixcbiAgY2xvc2UsXG4gIGVkaXRvcixcbiAgLy8gZ3JvdXBzV2l0aE9wdGlvbnMgZmlsdGVyaW5nIGlzIGFscmVhZHkgaGFuZGxlZCBpbiBTbGFzaE1lbnUvaW5kZXgudHN4LiBUaHVzLCBncm91cHNXaXRoT3B0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIG1hdGNoaW5nIG9wdGlvbnMuXG4gIGdyb3Vwc1dpdGhPcHRpb25zLFxuICBtZW51UmVuZGVyRm4sXG4gIG9uU2VsZWN0T3B0aW9uLFxuICByZXNvbHV0aW9uLFxuICBzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnkgPSBmYWxzZSxcbn06IHtcbiAgYW5jaG9yRWxlbWVudFJlZjogTXV0YWJsZVJlZk9iamVjdDxIVE1MRWxlbWVudD5cbiAgY2xvc2U6ICgpID0+IHZvaWRcbiAgZWRpdG9yOiBMZXhpY2FsRWRpdG9yXG4gIGdyb3Vwc1dpdGhPcHRpb25zOiBBcnJheTxTbGFzaE1lbnVHcm91cD5cbiAgbWVudVJlbmRlckZuOiBNZW51UmVuZGVyRm5cbiAgb25TZWxlY3RPcHRpb246IChcbiAgICBvcHRpb246IFNsYXNoTWVudU9wdGlvbixcbiAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeTogVGV4dE5vZGUgfCBudWxsLFxuICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICBtYXRjaGluZ1N0cmluZzogc3RyaW5nLFxuICApID0+IHZvaWRcbiAgcmVzb2x1dGlvbjogTWVudVJlc29sdXRpb25cbiAgc2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5PzogYm9vbGVhblxufSk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbktleSwgc2V0U2VsZWN0ZWRPcHRpb25LZXldID0gdXNlU3RhdGU8bnVsbCB8IHN0cmluZz4obnVsbClcblxuICBjb25zdCBtYXRjaGluZ1N0cmluZyA9IChyZXNvbHV0aW9uLm1hdGNoICYmIHJlc29sdXRpb24ubWF0Y2gubWF0Y2hpbmdTdHJpbmcpIHx8ICcnXG5cbiAgY29uc3QgdXBkYXRlU2VsZWN0ZWRPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBTbGFzaE1lbnVPcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbGVtID0gZWRpdG9yLmdldFJvb3RFbGVtZW50KClcbiAgICAgIGlmIChyb290RWxlbSAhPT0gbnVsbCkge1xuICAgICAgICByb290RWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsICd0eXBlYWhlYWQtaXRlbS0nICsgb3B0aW9uLmtleSlcbiAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25LZXkob3B0aW9uLmtleSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtlZGl0b3JdLFxuICApXG5cbiAgY29uc3Qgc2V0U2VsZWN0ZWRPcHRpb25LZXlUb0ZpcnN0TWF0Y2hpbmdPcHRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gc2V0IHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZmlyc3Qgb2YgdGhlIG1hdGNoaW5nIG9uZXNcbiAgICBpZiAoZ3JvdXBzV2l0aE9wdGlvbnMgIT09IG51bGwgJiYgbWF0Y2hpbmdTdHJpbmcgIT0gbnVsbCkge1xuICAgICAgLy8gZ3JvdXBzV2l0aE9wdGlvbnMgZmlsdGVyaW5nIGlzIGFscmVhZHkgaGFuZGxlZCBpbiBTbGFzaE1lbnUvaW5kZXgudHN4LiBUaHVzLCBncm91cHNXaXRoT3B0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIG1hdGNoaW5nIG9wdGlvbnMuXG4gICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG5cbiAgICAgIGlmIChhbGxPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoaW5nT3B0aW9uID0gYWxsT3B0aW9uc1swXVxuICAgICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihmaXJzdE1hdGNoaW5nT3B0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2dyb3Vwc1dpdGhPcHRpb25zLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiwgbWF0Y2hpbmdTdHJpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25LZXlUb0ZpcnN0TWF0Y2hpbmdPcHRpb24oKVxuICB9LCBbbWF0Y2hpbmdTdHJpbmcsIHNldFNlbGVjdGVkT3B0aW9uS2V5VG9GaXJzdE1hdGNoaW5nT3B0aW9uXSlcblxuICBjb25zdCBzZWxlY3RPcHRpb25BbmRDbGVhblVwID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlbGVjdGVkT3B0aW9uOiBTbGFzaE1lbnVPcHRpb24pID0+IHtcbiAgICAgIGVkaXRvci51cGRhdGUoKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeSA9XG4gICAgICAgICAgcmVzb2x1dGlvbi5tYXRjaCAhPSBudWxsICYmIHNob3VsZFNwbGl0Tm9kZVdpdGhRdWVyeVxuICAgICAgICAgICAgPyAkc3BsaXROb2RlQ29udGFpbmluZ1F1ZXJ5KHJlc29sdXRpb24ubWF0Y2gpXG4gICAgICAgICAgICA6IG51bGxcblxuICAgICAgICBvblNlbGVjdE9wdGlvbihcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbixcbiAgICAgICAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeSxcbiAgICAgICAgICBjbG9zZSxcbiAgICAgICAgICByZXNvbHV0aW9uLm1hdGNoID8gcmVzb2x1dGlvbi5tYXRjaC5tYXRjaGluZ1N0cmluZyA6ICcnLFxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2VkaXRvciwgc2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5LCByZXNvbHV0aW9uLm1hdGNoLCBvblNlbGVjdE9wdGlvbiwgY2xvc2VdLFxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsZW0gPSBlZGl0b3IuZ2V0Um9vdEVsZW1lbnQoKVxuICAgICAgaWYgKHJvb3RFbGVtICE9PSBudWxsKSB7XG4gICAgICAgIHJvb3RFbGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JylcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtlZGl0b3JdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGdyb3Vwc1dpdGhPcHRpb25zID09PSBudWxsKSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbktleShudWxsKVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRPcHRpb25LZXkgPT09IG51bGwpIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9uS2V5VG9GaXJzdE1hdGNoaW5nT3B0aW9uKClcbiAgICB9XG4gIH0sIFtcbiAgICBncm91cHNXaXRoT3B0aW9ucyxcbiAgICBzZWxlY3RlZE9wdGlvbktleSxcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICBzZXRTZWxlY3RlZE9wdGlvbktleVRvRmlyc3RNYXRjaGluZ09wdGlvbixcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBtZXJnZVJlZ2lzdGVyKFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgU0NST0xMX1RZUEVBSEVBRF9PUFRJT05fSU5UT19WSUVXX0NPTU1BTkQsXG4gICAgICAgICh7IG9wdGlvbiB9KSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbi5yZWYgJiYgb3B0aW9uLnJlZi5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNjcm9sbEludG9WaWV3SWZOZWVkZWQob3B0aW9uLnJlZi5jdXJyZW50KVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgIClcbiAgfSwgW2VkaXRvciwgdXBkYXRlU2VsZWN0ZWRPcHRpb25dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuIG1lcmdlUmVnaXN0ZXIoXG4gICAgICBlZGl0b3IucmVnaXN0ZXJDb21tYW5kPEtleWJvYXJkRXZlbnQ+KFxuICAgICAgICBLRVlfQVJST1dfRE9XTl9DT01NQU5ELFxuICAgICAgICAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGF5bG9hZFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zICE9PSBudWxsICYmXG4gICAgICAgICAgICBncm91cHNXaXRoT3B0aW9ucy5sZW5ndGggJiZcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uS2V5ICE9PSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gYWxsT3B0aW9ucy5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gc2VsZWN0ZWRPcHRpb25LZXkpXG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4ICE9PSBhbGxPcHRpb25zLmxlbmd0aCAtIDEgPyBzZWxlY3RlZEluZGV4ICsgMSA6IDBcblxuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRPcHRpb24gPSBhbGxPcHRpb25zW25ld1NlbGVjdGVkSW5kZXhdXG5cbiAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKG5ld1NlbGVjdGVkT3B0aW9uKVxuICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGVkT3B0aW9uLnJlZiAhPSBudWxsICYmIG5ld1NlbGVjdGVkT3B0aW9uLnJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgIGVkaXRvci5kaXNwYXRjaENvbW1hbmQoU0NST0xMX1RZUEVBSEVBRF9PUFRJT05fSU5UT19WSUVXX0NPTU1BTkQsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogbmV3U2VsZWN0ZWRJbmRleCxcbiAgICAgICAgICAgICAgICBvcHRpb246IG5ld1NlbGVjdGVkT3B0aW9uLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZDxLZXlib2FyZEV2ZW50PihcbiAgICAgICAgS0VZX0FSUk9XX1VQX0NPTU1BTkQsXG4gICAgICAgIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXZlbnQgPSBwYXlsb2FkXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zLmxlbmd0aCAmJlxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25LZXkgIT09IG51bGxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbE9wdGlvbnMgPSBncm91cHNXaXRoT3B0aW9ucy5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAub3B0aW9ucylcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSBhbGxPcHRpb25zLmZpbmRJbmRleCgob3B0aW9uKSA9PiBvcHRpb24ua2V5ID09PSBzZWxlY3RlZE9wdGlvbktleSlcblxuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkSW5kZXggIT09IDAgPyBzZWxlY3RlZEluZGV4IC0gMSA6IGFsbE9wdGlvbnMubGVuZ3RoIC0gMVxuXG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3RlZE9wdGlvbiA9IGFsbE9wdGlvbnNbbmV3U2VsZWN0ZWRJbmRleF1cblxuICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24obmV3U2VsZWN0ZWRPcHRpb24pXG4gICAgICAgICAgICBpZiAobmV3U2VsZWN0ZWRPcHRpb24ucmVmICE9IG51bGwgJiYgbmV3U2VsZWN0ZWRPcHRpb24ucmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChuZXdTZWxlY3RlZE9wdGlvbi5yZWYuY3VycmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICAgICAgKSxcbiAgICAgIGVkaXRvci5yZWdpc3RlckNvbW1hbmQ8S2V5Ym9hcmRFdmVudD4oXG4gICAgICAgIEtFWV9FU0NBUEVfQ09NTUFORCxcbiAgICAgICAgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICBjb25zdCBldmVudCA9IHBheWxvYWRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICAgICAgICBjbG9zZSgpXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZDxLZXlib2FyZEV2ZW50PihcbiAgICAgICAgS0VZX1RBQl9DT01NQU5ELFxuICAgICAgICAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGF5bG9hZFxuXG4gICAgICAgICAgaWYgKGdyb3Vwc1dpdGhPcHRpb25zID09PSBudWxsIHx8IHNlbGVjdGVkT3B0aW9uS2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYWxsT3B0aW9ucyA9IGdyb3Vwc1dpdGhPcHRpb25zLmZsYXRNYXAoKGdyb3VwKSA9PiBncm91cC5vcHRpb25zKVxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gYWxsT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5rZXkgPT09IHNlbGVjdGVkT3B0aW9uS2V5KVxuICAgICAgICAgIGlmICghc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICAgICAgICAgIHNlbGVjdE9wdGlvbkFuZENsZWFuVXAoc2VsZWN0ZWRPcHRpb24pXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgS0VZX0VOVEVSX0NPTU1BTkQsXG4gICAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCB8IG51bGwpID0+IHtcbiAgICAgICAgICBpZiAoZ3JvdXBzV2l0aE9wdGlvbnMgPT09IG51bGwgfHwgc2VsZWN0ZWRPcHRpb25LZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBhbGxPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gc2VsZWN0ZWRPcHRpb25LZXkpXG4gICAgICAgICAgaWYgKCFzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV2ZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwKHNlbGVjdGVkT3B0aW9uKVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICAgICAgKSxcbiAgICApXG4gIH0sIFtcbiAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwLFxuICAgIGNsb3NlLFxuICAgIGVkaXRvcixcbiAgICBncm91cHNXaXRoT3B0aW9ucyxcbiAgICBzZWxlY3RlZE9wdGlvbktleSxcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgXSlcblxuICBjb25zdCBsaXN0SXRlbVByb3BzID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMsXG4gICAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwLFxuICAgICAgc2VsZWN0ZWRPcHRpb25LZXksXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbktleSxcbiAgICB9KSxcbiAgICBbc2VsZWN0T3B0aW9uQW5kQ2xlYW5VcCwgc2VsZWN0ZWRPcHRpb25LZXksIGdyb3Vwc1dpdGhPcHRpb25zXSxcbiAgKVxuXG4gIHJldHVybiBtZW51UmVuZGVyRm4oXG4gICAgYW5jaG9yRWxlbWVudFJlZixcbiAgICBsaXN0SXRlbVByb3BzLFxuICAgIHJlc29sdXRpb24ubWF0Y2ggPyByZXNvbHV0aW9uLm1hdGNoLm1hdGNoaW5nU3RyaW5nIDogJycsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lbnVBbmNob3JSZWYoXG4gIHJlc29sdXRpb246IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCxcbiAgc2V0UmVzb2x1dGlvbjogKHI6IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCkgPT4gdm9pZCxcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxuKTogTXV0YWJsZVJlZk9iamVjdDxIVE1MRWxlbWVudD4ge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICBjb25zdCBhbmNob3JFbGVtZW50UmVmID0gdXNlUmVmPEhUTUxFbGVtZW50Pihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSlcbiAgY29uc3QgcG9zaXRpb25NZW51ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gZWRpdG9yLmdldFJvb3RFbGVtZW50KClcbiAgICBjb25zdCBjb250YWluZXJEaXYgPSBhbmNob3JFbGVtZW50UmVmLmN1cnJlbnRcblxuICAgIGNvbnN0IFZFUlRJQ0FMX09GRlNFVCA9IDMyIGFzIGNvbnN0XG5cbiAgICBjb25zdCBtZW51RWxlID0gY29udGFpbmVyRGl2LmZpcnN0Q2hpbGQgYXMgRWxlbWVudFxuICAgIGlmIChyb290RWxlbWVudCAhPT0gbnVsbCAmJiByZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGhlaWdodCwgbGVmdCwgdG9wLCB3aWR0aCB9ID0gcmVzb2x1dGlvbi5nZXRSZWN0KClcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS50b3AgPSBgJHt0b3AgKyB3aW5kb3cuc2Nyb2xsWSArIFZFUlRJQ0FMX09GRlNFVH1weGBcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHdpbmRvdy5zY3JvbGxYfXB4YFxuICAgICAgY29udGFpbmVyRGl2LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGBcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YFxuICAgICAgaWYgKG1lbnVFbGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWVudVJlY3QgPSBtZW51RWxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGNvbnN0IG1lbnVIZWlnaHQgPSBtZW51UmVjdC5oZWlnaHRcbiAgICAgICAgY29uc3QgbWVudVdpZHRoID0gbWVudVJlY3Qud2lkdGhcblxuICAgICAgICBjb25zdCByb290RWxlbWVudFJlY3QgPSByb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXG4gICAgICAgIGlmIChsZWZ0ICsgbWVudVdpZHRoID4gcm9vdEVsZW1lbnRSZWN0LnJpZ2h0KSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LnN0eWxlLmxlZnQgPSBgJHtyb290RWxlbWVudFJlY3QucmlnaHQgLSBtZW51V2lkdGggKyB3aW5kb3cuc2Nyb2xsWH1weGBcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXJnaW4gPSAxMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRvcCArIG1lbnVIZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgdG9wICsgbWVudUhlaWdodCA+IHJvb3RFbGVtZW50UmVjdC5ib3R0b20pICYmXG4gICAgICAgICAgdG9wIC0gcm9vdEVsZW1lbnRSZWN0LnRvcCA+IG1lbnVIZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgICAgdG9wICsgVkVSVElDQUxfT0ZGU0VUIC0gbWVudUhlaWdodCArIHdpbmRvdy5zY3JvbGxZIC0gKGhlaWdodCArIG1hcmdpbilcbiAgICAgICAgICB9cHhgXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFjb250YWluZXJEaXYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LmNsYXNzTmFtZSA9IGNsYXNzTmFtZVxuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lckRpdi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnVHlwZWFoZWFkIG1lbnUnKVxuICAgICAgICBjb250YWluZXJEaXYuc2V0QXR0cmlidXRlKCdpZCcsICd0eXBlYWhlYWQtbWVudScpXG4gICAgICAgIGNvbnRhaW5lckRpdi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbGlzdGJveCcpXG4gICAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgICAgICBjb250YWluZXJEaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGNvbnRhaW5lckRpdilcbiAgICAgIH1cbiAgICAgIGFuY2hvckVsZW1lbnRSZWYuY3VycmVudCA9IGNvbnRhaW5lckRpdlxuICAgICAgcm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJywgJ3R5cGVhaGVhZC1tZW51JylcbiAgICB9XG4gIH0sIFtlZGl0b3IsIHJlc29sdXRpb24sIGNsYXNzTmFtZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByb290RWxlbWVudCA9IGVkaXRvci5nZXRSb290RWxlbWVudCgpXG4gICAgaWYgKHJlc29sdXRpb24gIT09IG51bGwpIHtcbiAgICAgIHBvc2l0aW9uTWVudSgpXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAocm9vdEVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICByb290RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGFpbmVyRGl2ID0gYW5jaG9yRWxlbWVudFJlZi5jdXJyZW50XG4gICAgICAgIGlmIChjb250YWluZXJEaXYgIT09IG51bGwgJiYgY29udGFpbmVyRGl2LmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtlZGl0b3IsIHBvc2l0aW9uTWVudSwgcmVzb2x1dGlvbl0pXG5cbiAgY29uc3Qgb25WaXNpYmlsaXR5Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGlzSW5WaWV3OiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAocmVzb2x1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoIWlzSW5WaWV3KSB7XG4gICAgICAgICAgc2V0UmVzb2x1dGlvbihudWxsKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbcmVzb2x1dGlvbiwgc2V0UmVzb2x1dGlvbl0sXG4gIClcblxuICB1c2VEeW5hbWljUG9zaXRpb25pbmcocmVzb2x1dGlvbiwgYW5jaG9yRWxlbWVudFJlZi5jdXJyZW50LCBwb3NpdGlvbk1lbnUsIG9uVmlzaWJpbGl0eUNoYW5nZSlcblxuICByZXR1cm4gYW5jaG9yRWxlbWVudFJlZlxufVxuXG5leHBvcnQgdHlwZSBUcmlnZ2VyRm4gPSAodGV4dDogc3RyaW5nLCBlZGl0b3I6IExleGljYWxFZGl0b3IpID0+IE1lbnVUZXh0TWF0Y2ggfCBudWxsXG4iXSwibmFtZXMiOlsiUFVOQ1RVQVRJT04iLCJTbGFzaE1lbnVHcm91cCIsIlNsYXNoTWVudU9wdGlvbiIsImdldFNjcm9sbFBhcmVudCIsInVzZUR5bmFtaWNQb3NpdGlvbmluZyIsIlNDUk9MTF9UWVBFQUhFQURfT1BUSU9OX0lOVE9fVklFV19DT01NQU5EIiwiTGV4aWNhbE1lbnUiLCJ1c2VNZW51QW5jaG9yUmVmIiwib3B0aW9ucyIsInRpdGxlIiwiSWNvbiIsImtleSIsImtleWJvYXJkU2hvcnRjdXQiLCJrZXl3b3JkcyIsIm9uU2VsZWN0IiwicmVmIiwiY29uc3RydWN0b3IiLCJjdXJyZW50Iiwic2V0UmVmRWxlbWVudCIsImJpbmQiLCJlbGVtZW50Iiwic2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCIsInRhcmdldCIsInR5cGVhaGVhZENvbnRhaW5lck5vZGUiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwidHlwZWFoZWFkUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInRvcCIsImhlaWdodCIsIndpbmRvdyIsImlubmVySGVpZ2h0Iiwic2Nyb2xsSW50b1ZpZXciLCJibG9jayIsImdldEZ1bGxNYXRjaE9mZnNldCIsImRvY3VtZW50VGV4dCIsImVudHJ5VGV4dCIsIm9mZnNldCIsInRyaWdnZXJPZmZzZXQiLCJpIiwibGVuZ3RoIiwic3Vic3RyIiwiJHNwbGl0Tm9kZUNvbnRhaW5pbmdRdWVyeSIsIm1hdGNoIiwic2VsZWN0aW9uIiwiJGdldFNlbGVjdGlvbiIsIiRpc1JhbmdlU2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJhbmNob3IiLCJ0eXBlIiwiYW5jaG9yTm9kZSIsImdldE5vZGUiLCJpc1NpbXBsZVRleHQiLCJzZWxlY3Rpb25PZmZzZXQiLCJ0ZXh0Q29udGVudCIsImdldFRleHRDb250ZW50Iiwic2xpY2UiLCJjaGFyYWN0ZXJPZmZzZXQiLCJyZXBsYWNlYWJsZVN0cmluZyIsInF1ZXJ5T2Zmc2V0IiwibWF0Y2hpbmdTdHJpbmciLCJzdGFydE9mZnNldCIsIm5ld05vZGUiLCJzcGxpdFRleHQiLCJpbmNsdWRlSGlkZGVuIiwic3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiZXhjbHVkZVN0YXRpY1BhcmVudCIsInBvc2l0aW9uIiwib3ZlcmZsb3dSZWdleCIsImJvZHkiLCJwYXJlbnQiLCJwYXJlbnRFbGVtZW50IiwidGVzdCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwiaXNUcmlnZ2VyVmlzaWJsZUluTmVhcmVzdFNjcm9sbENvbnRhaW5lciIsInRhcmdldEVsZW1lbnQiLCJjb250YWluZXJFbGVtZW50IiwidFJlY3QiLCJjUmVjdCIsImJvdHRvbSIsInJlc29sdXRpb24iLCJvblJlcG9zaXRpb24iLCJvblZpc2liaWxpdHlDaGFuZ2UiLCJlZGl0b3IiLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwidXNlRWZmZWN0Iiwicm9vdEVsZW1lbnQiLCJnZXRSb290RWxlbWVudCIsInJvb3RTY3JvbGxQYXJlbnQiLCJ0aWNraW5nIiwicHJldmlvdXNJc0luVmlldyIsImhhbmRsZVNjcm9sbCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImlzSW5WaWV3IiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYXB0dXJlIiwicGFzc2l2ZSIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY3JlYXRlQ29tbWFuZCIsImFuY2hvckVsZW1lbnRSZWYiLCJjbG9zZSIsImdyb3Vwc1dpdGhPcHRpb25zIiwibWVudVJlbmRlckZuIiwib25TZWxlY3RPcHRpb24iLCJzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnkiLCJzZWxlY3RlZE9wdGlvbktleSIsInNldFNlbGVjdGVkT3B0aW9uS2V5IiwidXNlU3RhdGUiLCJ1cGRhdGVTZWxlY3RlZE9wdGlvbiIsInVzZUNhbGxiYWNrIiwib3B0aW9uIiwicm9vdEVsZW0iLCJzZXRBdHRyaWJ1dGUiLCJzZXRTZWxlY3RlZE9wdGlvbktleVRvRmlyc3RNYXRjaGluZ09wdGlvbiIsImFsbE9wdGlvbnMiLCJmbGF0TWFwIiwiZ3JvdXAiLCJmaXJzdE1hdGNoaW5nT3B0aW9uIiwic2VsZWN0T3B0aW9uQW5kQ2xlYW5VcCIsInNlbGVjdGVkT3B0aW9uIiwidXBkYXRlIiwidGV4dE5vZGVDb250YWluaW5nUXVlcnkiLCJyZW1vdmVBdHRyaWJ1dGUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJtZXJnZVJlZ2lzdGVyIiwicmVnaXN0ZXJDb21tYW5kIiwiQ09NTUFORF9QUklPUklUWV9MT1ciLCJLRVlfQVJST1dfRE9XTl9DT01NQU5EIiwicGF5bG9hZCIsImV2ZW50Iiwic2VsZWN0ZWRJbmRleCIsImZpbmRJbmRleCIsIm5ld1NlbGVjdGVkSW5kZXgiLCJuZXdTZWxlY3RlZE9wdGlvbiIsImRpc3BhdGNoQ29tbWFuZCIsImluZGV4IiwicHJldmVudERlZmF1bHQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJLRVlfQVJST1dfVVBfQ09NTUFORCIsIktFWV9FU0NBUEVfQ09NTUFORCIsIktFWV9UQUJfQ09NTUFORCIsImZpbmQiLCJLRVlfRU5URVJfQ09NTUFORCIsImxpc3RJdGVtUHJvcHMiLCJ1c2VNZW1vIiwic2V0UmVzb2x1dGlvbiIsImNsYXNzTmFtZSIsInVzZVJlZiIsImNyZWF0ZUVsZW1lbnQiLCJwb3NpdGlvbk1lbnUiLCJjb250YWluZXJEaXYiLCJWRVJUSUNBTF9PRkZTRVQiLCJtZW51RWxlIiwiZmlyc3RDaGlsZCIsImxlZnQiLCJ3aWR0aCIsImdldFJlY3QiLCJzY3JvbGxZIiwic2Nyb2xsWCIsIm1lbnVSZWN0IiwibWVudUhlaWdodCIsIm1lbnVXaWR0aCIsInJvb3RFbGVtZW50UmVjdCIsInJpZ2h0IiwibWFyZ2luIiwiaXNDb25uZWN0ZWQiLCJkaXNwbGF5IiwiYXBwZW5kIiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQTZCYUEsV0FBVztlQUFYQTs7SUFFQUMsY0FBYztlQUFkQTs7SUFLQUMsZUFBZTtlQUFmQTs7SUEySEdDLGVBQWU7ZUFBZkE7O0lBZ0NBQyxxQkFBcUI7ZUFBckJBOztJQWlESEMseUNBQXlDO2VBQXpDQTs7SUFLR0MsV0FBVztlQUFYQTs7SUE4UEFDLGdCQUFnQjtlQUFoQkE7Ozt3Q0FoZjBCO3VCQUNaO3lCQVd2Qjt1QkFDNEU7QUFhNUUsTUFBTVAsY0FBYztBQUVwQixNQUFNQztJQUNYTyxRQUErQjtJQUMvQkMsTUFBYTtBQUNmO0FBRU8sTUFBTVA7SUFDWFEsS0FBYztJQUVkLG1CQUFtQjtJQUNuQkMsSUFBVztJQUNYLE1BQU07SUFDTkMsaUJBQXlCO0lBQ3pCLHVCQUF1QjtJQUN2QkMsU0FBdUI7SUFDdkIsNENBQTRDO0lBQzVDQyxTQUEyRjtJQUMzRkMsSUFBMEM7SUFFMUMsOEJBQThCO0lBQzlCTixNQUFhO0lBRWJPLFlBQ0VQLEtBQWEsRUFDYkQsT0FLQyxDQUNEO1FBQ0EsSUFBSSxDQUFDRyxHQUFHLEdBQUdGO1FBQ1gsSUFBSSxDQUFDTSxHQUFHLEdBQUc7WUFBRUUsU0FBUztRQUFLO1FBQzNCLElBQUksQ0FBQ0MsYUFBYSxHQUFHLElB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
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { LexicalCommand, TextNode } from 'lexical';
|
|
3
|
+
import type { MenuRenderFn, MenuResolution, MenuTextMatch, SlashMenuGroup, SlashMenuOption, TriggerFn } from './LexicalMenu';
|
|
4
|
+
export declare const PUNCTUATION = "\\.,\\+\\*\\?\\$\\@\\|#{}\\(\\)\\^\\-\\[\\]\\\\/!%'\"~=<>_:;";
|
|
5
|
+
export declare function getScrollParent(element: HTMLElement, includeHidden: boolean): HTMLBodyElement | HTMLElement;
|
|
6
|
+
export { useDynamicPositioning } from './LexicalMenu';
|
|
7
|
+
export declare function useBasicTypeaheadTriggerMatch(trigger: string, { maxLength, minLength }: {
|
|
8
|
+
maxLength?: number;
|
|
9
|
+
minLength?: number;
|
|
10
|
+
}): TriggerFn;
|
|
11
|
+
export type TypeaheadMenuPluginProps = {
|
|
12
|
+
anchorClassName?: string;
|
|
13
|
+
groupsWithOptions: Array<SlashMenuGroup>;
|
|
14
|
+
menuRenderFn: MenuRenderFn;
|
|
15
|
+
onClose?: () => void;
|
|
16
|
+
onOpen?: (resolution: MenuResolution) => void;
|
|
17
|
+
onQueryChange: (matchingString: null | string) => void;
|
|
18
|
+
onSelectOption: (option: SlashMenuOption, textNodeContainingQuery: TextNode | null, closeMenu: () => void, matchingString: string) => void;
|
|
19
|
+
triggerFn: TriggerFn;
|
|
20
|
+
};
|
|
21
|
+
export declare const ENABLE_SLASH_MENU_COMMAND: LexicalCommand<{
|
|
22
|
+
rect: DOMRect;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function LexicalTypeaheadMenuPlugin({ anchorClassName, groupsWithOptions, menuRenderFn, onClose, onOpen, onQueryChange, onSelectOption, triggerFn, }: TypeaheadMenuPluginProps): JSX.Element | null;
|
|
25
|
+
export { MenuRenderFn, MenuResolution, MenuTextMatch, TriggerFn };
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,cAAc,EAAiC,QAAQ,EAAE,MAAM,SAAS,CAAA;AActF,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,SAAS,EACV,MAAM,eAAe,CAAA;AAItB,eAAO,MAAM,WAAW,iEAAiE,CAAA;AA2EzF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,OAAO,GACrB,eAAe,GAAG,WAAW,CAiB/B;AAED,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,EAAE,SAAc,EAAE,SAAa,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E,SAAS,CAgCX;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IACxC,YAAY,EAAE,YAAY,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;IAC7C,aAAa,EAAE,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAA;IACtD,cAAc,EAAE,CACd,MAAM,EAAE,eAAe,EACvB,uBAAuB,EAAE,QAAQ,GAAG,IAAI,EACxC,SAAS,EAAE,MAAM,IAAI,EACrB,cAAc,EAAE,MAAM,KACnB,IAAI,CAAA;IACT,SAAS,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC;IACrD,IAAI,EAAE,OAAO,CAAA;CACd,CAA8C,CAAA;AAE/C,wBAAgB,0BAA0B,CAAC,EACzC,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,MAAM,EACN,aAAa,EACb,cAAc,EACd,SAAS,GACV,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAgH/C;AAED,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA"}
|