@onereach/ui-components 6.2.0-beta.3320.0 → 6.2.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/dist/bundled/{v3/_baseAssignValue-22e630c1.js → v2/_baseAssignValue-2250dbc9.js} +1 -1
- package/dist/bundled/v2/{_baseIsEqual-a1cc156c.js → _baseIsEqual-fe2002b6.js} +5 -5
- package/dist/bundled/v2/_commonjsHelpers-1789f0cf.js +7 -0
- package/dist/bundled/v2/components/OrBottomSheetV3/OrBottomSheet.js +1 -1
- package/dist/bundled/v2/components/OrBottomSheetV3/hooks/useBottomSheetSwipeState.js +1 -1
- package/dist/bundled/v2/components/OrCheckboxTreeV3/OrCheckboxTree.js +1 -1
- package/dist/bundled/v2/components/OrCode/OrCode.js +3 -3
- package/dist/bundled/v2/components/OrCode/index.js +3 -4
- package/dist/bundled/v2/components/OrCode/lang.js +3 -5
- package/dist/bundled/v2/components/OrCode/libs.js +3 -4
- package/dist/bundled/v2/components/OrCode/theme.js +1 -1
- package/dist/bundled/v2/components/OrCodeV3/OrCode.js +30 -46
- package/dist/bundled/v2/components/OrCodeV3/OrCode.vue.d.ts +3 -4
- package/dist/bundled/v2/components/OrCollapse/OrCollapse.js +1 -1
- package/dist/bundled/v2/components/OrColorPicker/OrColorPicker.js +2 -2
- package/dist/bundled/v2/components/OrConfirm/OrConfirm.js +3 -3
- package/dist/bundled/v2/components/OrConfirmV3/OrConfirm.js +3 -3
- package/dist/bundled/v2/components/OrDatePickerV3/OrDatePicker.js +2 -2
- package/dist/bundled/v2/components/OrDateTimePicker/OrDateTimePicker.js +4 -4
- package/dist/bundled/v2/components/OrDateTimePickerV3/OrDateTimePicker.js +3 -3
- package/dist/bundled/v2/components/OrFloating/OrFloating.js +1 -1
- package/dist/bundled/v2/components/OrInlineTextEdit/OrInlineTextEdit.js +2 -2
- package/dist/bundled/v2/components/OrInput/OrInput.js +1 -1
- package/dist/bundled/v2/components/OrList/OrList.js +8 -8
- package/dist/bundled/v2/components/OrLoaderV3/OrLoader.js +1 -1
- package/dist/bundled/v2/components/OrModal/OrModal.js +3 -1347
- package/dist/bundled/v2/components/OrOverflowMenu/OrOverflowMenu.js +2 -2
- package/dist/bundled/v2/components/OrOverlayV3/OrOverlay.js +1 -1
- package/dist/bundled/v2/components/OrPassword/OrPassword.js +1 -1
- package/dist/bundled/v2/components/OrPopoverV3/OrPopover.js +2 -2
- package/dist/bundled/v2/components/OrProgress/OrProgress.js +1 -1
- package/dist/bundled/v2/components/OrProgressV3/OrProgress.js +2 -2
- package/dist/bundled/v2/components/OrRadio/OrRadio.js +2 -2
- package/dist/bundled/v2/components/OrRichTextEditorV3/OrRichTextEditor.js +11640 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/OrRichTextEditor.vue.d.ts +194 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/index.d.ts +2 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/index.js +2 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/props.d.ts +5 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/props.js +7 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/styles.d.ts +6 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/styles.js +38 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/codemirrorNode.d.ts +3 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/codemirrorNode.js +42 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/codemirrorView.d.ts +27 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/codemirrorView.js +183 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/index.d.ts +1 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/index.js +1 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/theme.d.ts +17 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/theme.js +199 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/types.d.ts +19 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/codemirror/types.js +1 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/markdown.d.ts +3 -0
- package/dist/bundled/v2/components/OrRichTextEditorV3/utils/markdown.js +2 -0
- package/dist/bundled/v2/components/OrSearch/OrSearch.js +1 -1
- package/dist/bundled/v2/components/OrSearchV3/OrSearch.js +1 -1
- package/dist/bundled/v2/components/OrSelect/OrSelect.js +7 -7
- package/dist/bundled/v2/components/OrSidebar/OrSidebar.js +1 -1
- package/dist/bundled/v2/components/OrSidebarV3/OrSidebar.js +1 -1
- package/dist/bundled/v2/components/OrSkeletonText/OrSkeletonText.js +1 -1
- package/dist/bundled/v2/components/OrSkeletonTextV3/OrSkeletonText.js +1 -1
- package/dist/bundled/v2/components/OrSlider/OrSlider.js +2 -2
- package/dist/bundled/v2/components/OrTabsV3/OrTabs.js +1 -1
- package/dist/bundled/v2/components/OrTextV3/OrText.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrTextarea/OrTextarea.js +1 -1
- package/dist/bundled/v2/components/OrTextarea/OrTextarea.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrTextareaV3/OrTextarea.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrTextbox/OrTextbox.js +1 -1
- package/dist/bundled/v2/components/OrTextbox/OrTextbox.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrTimePickerV3/OrTimePicker.js +2 -2
- package/dist/bundled/v2/components/OrTimePickerV3/OrTimePicker.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrToast/OrToast.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrToast/Timer.js +1 -1
- package/dist/bundled/v2/components/OrToast/composable/useToastEventBus.js +2 -2
- package/dist/bundled/v2/components/OrToastContainer/OrToastContainer.js +1 -1
- package/dist/bundled/v2/components/OrToastContainerV3/OrToastContainer.js +1 -1
- package/dist/bundled/v2/components/OrToastV3/OrToast.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrToastV3/Timer.js +1 -1
- package/dist/bundled/v2/components/OrToastV3/composable/useToastEventBus.js +2 -2
- package/dist/bundled/v2/components/OrTooltip/OrTooltip.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrTooltipV3/OrTooltip.vue.d.ts +2 -2
- package/dist/bundled/v2/components/OrTreeV3/OrTree.js +1 -1
- package/dist/bundled/v2/components/OrTreeV3/OrTree.vue.d.ts +2 -2
- package/dist/bundled/v2/components/index.d.ts +1 -0
- package/dist/bundled/v2/components/index.js +5 -4
- package/dist/bundled/{v3/dom-bb55b42a.js → v2/dom-cec392f3.js} +2 -2
- package/dist/bundled/v2/{eq-95cd2573.js → eq-44ea4d70.js} +1 -1
- package/dist/bundled/{v3/get-ab1b7d93.js → v2/get-34aa21f4.js} +3 -3
- package/dist/bundled/v2/hooks/useOverflow.js +2 -2
- package/dist/bundled/v2/hooks/usePopoverState.js +1 -1
- package/dist/bundled/v2/hooks/useResponsive/useResponsive.js +1 -1
- package/dist/bundled/v2/{index-ec92055d.js → index-06f6bbe4.js} +1 -1
- package/dist/bundled/{v3/index-b71d76f4.js → v2/index-0c287ab6.js} +3 -3
- package/dist/bundled/v2/index-1b2cfcc1.js +9715 -0
- package/dist/bundled/v2/{index-509d77a1.js → index-2b20f5f5.js} +2 -2
- package/dist/bundled/v2/{index-61aeae22.js → index-3cae2d25.js} +3 -115
- package/dist/bundled/{v3/index-84ea2fc8.js → v2/index-3e178101.js} +471 -32
- package/dist/bundled/v2/index-666dfe59.js +4048 -0
- package/dist/bundled/v2/index-9444e0d2.js +115 -0
- package/dist/bundled/v2/{index-15e8c1f3.js → index-dac0fb7c.js} +1 -1
- package/dist/bundled/v2/{index-5ce3ef85.js → index-de4975a3.js} +14 -3
- package/dist/bundled/v2/index-f671afe5.js +7127 -0
- package/dist/bundled/v2/index.js +7 -6
- package/dist/bundled/{v3/isArrayLike-e46b8eac.js → v2/isArrayLike-e7fb5cae.js} +1 -1
- package/dist/bundled/v2/{isEqual-44382965.js → isEqual-7a8e6106.js} +1 -1
- package/dist/bundled/{v3/isObject-fe8b81fd.js → v2/isObject-b7415fc1.js} +1 -1
- package/dist/bundled/v2/markdown-119394e1.js +15365 -0
- package/dist/bundled/v2/{range-6f26eda4.js → range-82efa3d4.js} +4 -4
- package/dist/bundled/v2/{round-f34440f4.js → round-567ede34.js} +4 -4
- package/dist/bundled/{v3/toFinite-74227610.js → v2/toFinite-bc59ffb0.js} +1 -1
- package/dist/bundled/v2/{toInteger-2fd112a9.js → toInteger-9fa0151c.js} +1 -1
- package/dist/bundled/{v3/toString-f3196832.js → v2/toString-b6e4472a.js} +1 -1
- package/dist/bundled/{v3/OrModal.vue_vue_type_script_lang-7f46b47e.js → v2/useFocusTrap-d1b2c0b4.js} +4 -100
- package/dist/bundled/v2/utils/functions/dom.js +2 -2
- package/dist/bundled/v2/utils/index.js +1 -1
- package/dist/bundled/v3/{OrAvatar.vue_vue_type_script_lang-95fe92f9.js → OrAvatar.vue_vue_type_script_lang-10c2add0.js} +1 -1
- package/dist/bundled/v3/{OrBottomSheet.vue_vue_type_script_lang-4adbc880.js → OrBottomSheet.vue_vue_type_script_lang-aca902f2.js} +2 -2
- package/dist/bundled/v3/{OrButton.vue_vue_type_script_lang-9d4ac135.js → OrButton.vue_vue_type_script_lang-0fb2b270.js} +1 -1
- package/dist/bundled/v3/{OrButton.vue_vue_type_script_lang-22b24f8b.js → OrButton.vue_vue_type_script_lang-db6595f6.js} +1 -1
- package/dist/bundled/v3/{OrCardCollection.vue_vue_type_script_lang-ac7e801f.js → OrCardCollection.vue_vue_type_script_lang-02606ec6.js} +3 -3
- package/dist/bundled/v3/{OrCardCollection.vue_vue_type_script_lang-3c786697.js → OrCardCollection.vue_vue_type_script_lang-bf9018d5.js} +3 -3
- package/dist/bundled/v3/{OrCheckbox.vue_vue_type_script_lang-576b5f5d.js → OrCheckbox.vue_vue_type_script_lang-de28fcaf.js} +1 -1
- package/dist/bundled/v3/{OrCheckboxGroup.vue_vue_type_script_lang-ca6ba786.js → OrCheckboxGroup.vue_vue_type_script_lang-2d4980de.js} +1 -1
- package/dist/bundled/v3/{OrCheckboxTree.vue_vue_type_script_lang-d3ed803b.js → OrCheckboxTree.vue_vue_type_script_lang-8d9ed718.js} +2 -2
- package/dist/bundled/v3/{OrChip.vue_vue_type_script_lang-8ccf3d2d.js → OrChip.vue_vue_type_script_lang-cacd81e5.js} +1 -1
- package/dist/bundled/v3/{OrChips.vue_vue_type_script_lang-70be98b5.js → OrChips.vue_vue_type_script_lang-e1f37564.js} +1 -1
- package/dist/bundled/v3/{OrCode.vue_vue_type_script_lang-8c5b4f6e.js → OrCode.vue_vue_type_script_lang-2300b956.js} +5 -5
- package/dist/bundled/v3/{OrCode.vue_vue_type_script_lang-b46a0f8a.js → OrCode.vue_vue_type_script_lang-52b0ab4c.js} +32 -48
- package/dist/bundled/v3/{OrCollapse.vue_vue_type_script_lang-69503c45.js → OrCollapse.vue_vue_type_script_lang-be1c8c66.js} +1 -1
- package/dist/bundled/v3/{OrColorPicker.vue_vue_type_script_lang-7b6d1e64.js → OrColorPicker.vue_vue_type_script_lang-95d92da0.js} +3 -3
- package/dist/bundled/v3/{OrConfirm.vue_vue_type_script_lang-1c8833a9.js → OrConfirm.vue_vue_type_script_lang-19922dd5.js} +6 -6
- package/dist/bundled/v3/{OrConfirm.vue_vue_type_script_lang-cd1e7075.js → OrConfirm.vue_vue_type_script_lang-4e9966f2.js} +6 -6
- package/dist/bundled/v3/{OrContextMenu.vue_vue_type_script_lang-db980d2e.js → OrContextMenu.vue_vue_type_script_lang-f40c0d92.js} +1 -1
- package/dist/bundled/v3/{OrDatePicker.vue_vue_type_script_lang-715f99d5.js → OrDatePicker.vue_vue_type_script_lang-04273abb.js} +4 -4
- package/dist/bundled/v3/{OrDateTimePicker.vue_vue_type_script_lang-94d71788.js → OrDateTimePicker.vue_vue_type_script_lang-66b3611e.js} +5 -5
- package/dist/bundled/v3/{OrDateTimePicker.vue_vue_type_script_lang-2a292787.js → OrDateTimePicker.vue_vue_type_script_lang-73b5c809.js} +7 -7
- package/dist/bundled/v3/{OrDateTimePickerMonthSelect-f2744b4e.js → OrDateTimePickerMonthSelect-2ff0e8f9.js} +3 -3
- package/dist/bundled/v3/{OrDateTimePickerPopoverHeader-daa7e47b.js → OrDateTimePickerPopoverHeader-135da975.js} +1 -1
- package/dist/bundled/v3/{OrDateTimePickerTimeSelect-96c4d657.js → OrDateTimePickerTimeSelect-fe701e75.js} +1 -1
- package/dist/bundled/v3/{OrFloating.vue_vue_type_script_lang-d579c010.js → OrFloating.vue_vue_type_script_lang-38aa1d83.js} +1 -1
- package/dist/bundled/v3/{OrIcon.vue_vue_type_script_lang-23dad121.js → OrIcon.vue_vue_type_script_lang-f3cbff23.js} +1 -1
- package/dist/bundled/v3/{OrIconButton.vue_vue_type_script_lang-e11abdcc.js → OrIconButton.vue_vue_type_script_lang-64e7b6ab.js} +1 -1
- package/dist/bundled/v3/{OrIconButton.vue_vue_type_script_lang-85c7ef74.js → OrIconButton.vue_vue_type_script_lang-f6bf7dda.js} +2 -2
- package/dist/bundled/v3/{OrInlineInput.vue_vue_type_script_lang-120b4dae.js → OrInlineInput.vue_vue_type_script_lang-0bdbf730.js} +1 -1
- package/dist/bundled/v3/{OrInlineTextEdit.vue_vue_type_script_lang-e5151109.js → OrInlineTextEdit.vue_vue_type_script_lang-72c9e44e.js} +4 -4
- package/dist/bundled/v3/{OrInlineTextarea.vue_vue_type_script_lang-ebe8d51d.js → OrInlineTextarea.vue_vue_type_script_lang-81430067.js} +1 -1
- package/dist/bundled/v3/{OrInput.vue_vue_type_script_lang-7d7ad741.js → OrInput.vue_vue_type_script_lang-39d1a293.js} +2 -2
- package/dist/bundled/v3/{OrInput.vue_vue_type_script_lang-863d3195.js → OrInput.vue_vue_type_script_lang-515ff78a.js} +2 -2
- package/dist/bundled/v3/{OrList.vue_vue_type_script_lang-cb637c9e.js → OrList.vue_vue_type_script_lang-bc49c1ff.js} +11 -11
- package/dist/bundled/v3/{OrListOfInputs.vue_vue_type_script_lang-31f604eb.js → OrListOfInputs.vue_vue_type_script_lang-3d17e3d2.js} +4 -4
- package/dist/bundled/v3/{OrLoader.vue_vue_type_script_lang-0395ad21.js → OrLoader.vue_vue_type_script_lang-0ea76e45.js} +1 -1
- package/dist/bundled/v3/{OrMenu.vue_vue_type_script_lang-97b33dae.js → OrMenu.vue_vue_type_script_lang-edc12857.js} +1 -1
- package/dist/bundled/v3/{OrModal.vue_vue_type_script_lang-8d01d297.js → OrModal.vue_vue_type_script_lang-d2339f74.js} +2 -2
- package/dist/bundled/v3/OrModal.vue_vue_type_script_lang-f1e9175d.js +101 -0
- package/dist/bundled/v3/{OrNotification.vue_vue_type_script_lang-17ae96e3.js → OrNotification.vue_vue_type_script_lang-81d7cfef.js} +2 -2
- package/dist/bundled/v3/{OrNotification.vue_vue_type_script_lang-2bf01716.js → OrNotification.vue_vue_type_script_lang-8dafacd3.js} +1 -1
- package/dist/bundled/v3/{OrNumberInput.vue_vue_type_script_lang-4cc194fc.js → OrNumberInput.vue_vue_type_script_lang-b832e611.js} +1 -1
- package/dist/bundled/v3/{OrOverflowMenu.vue_vue_type_script_lang-f8e4a5b8.js → OrOverflowMenu.vue_vue_type_script_lang-0c84fa14.js} +5 -5
- package/dist/bundled/v3/{OrOverlay.vue_vue_type_script_lang-2da128a3.js → OrOverlay.vue_vue_type_script_lang-2b256188.js} +1 -1
- package/dist/bundled/v3/{OrPagination.vue_vue_type_script_lang-729c913f.js → OrPagination.vue_vue_type_script_lang-91dec212.js} +2 -2
- package/dist/bundled/v3/{OrPassword.vue_vue_type_script_lang-e85c91c4.js → OrPassword.vue_vue_type_script_lang-9228b54e.js} +3 -3
- package/dist/bundled/v3/{OrPopover.vue_vue_type_script_lang-3aed1b31.js → OrPopover.vue_vue_type_script_lang-2fba84de.js} +3 -3
- package/dist/bundled/v3/{OrProgress.vue_vue_type_script_lang-32e6da23.js → OrProgress.vue_vue_type_script_lang-56b4a5da.js} +2 -2
- package/dist/bundled/v3/{OrProgress.vue_vue_type_script_lang-a99362ae.js → OrProgress.vue_vue_type_script_lang-c4bd7133.js} +1 -1
- package/dist/bundled/v3/{OrRadio.vue_vue_type_script_lang-3a551734.js → OrRadio.vue_vue_type_script_lang-a4f043e9.js} +2 -2
- package/dist/bundled/v3/OrRichTextEditor.vue_vue_type_script_lang-b01b8ae3.js +11380 -0
- package/dist/bundled/v3/{OrSearch.vue_vue_type_script_lang-8470f57f.js → OrSearch.vue_vue_type_script_lang-47c2a5b0.js} +2 -2
- package/dist/bundled/v3/{OrSearch.vue_vue_type_script_lang-57162ecf.js → OrSearch.vue_vue_type_script_lang-6a34ea7a.js} +3 -3
- package/dist/bundled/v3/{OrSelect.vue_vue_type_script_lang-e2818b8e.js → OrSelect.vue_vue_type_script_lang-0edae1cf.js} +11 -11
- package/dist/bundled/v3/{OrSelect.vue_vue_type_script_lang-d95a1d66.js → OrSelect.vue_vue_type_script_lang-8b59bb49.js} +5 -5
- package/dist/bundled/v3/{OrSidebar.vue_vue_type_script_lang-81941fe6.js → OrSidebar.vue_vue_type_script_lang-bd864765.js} +1 -1
- package/dist/bundled/v3/{OrSidebar.vue_vue_type_script_lang-b12bca44.js → OrSidebar.vue_vue_type_script_lang-cb96511d.js} +2 -2
- package/dist/bundled/v3/{OrSkeletonText.vue_vue_type_script_lang-26b3cfd1.js → OrSkeletonText.vue_vue_type_script_lang-502607ef.js} +1 -1
- package/dist/bundled/v3/{OrSkeletonText.vue_vue_type_script_lang-c2a5ab96.js → OrSkeletonText.vue_vue_type_script_lang-cfe360bb.js} +1 -1
- package/dist/bundled/v3/{OrSlider.vue_vue_type_script_lang-1632008b.js → OrSlider.vue_vue_type_script_lang-79cca9e2.js} +3 -3
- package/dist/bundled/v3/{OrSorting.vue_vue_type_script_lang-115be0a4.js → OrSorting.vue_vue_type_script_lang-8ea37e10.js} +2 -2
- package/dist/bundled/v3/{OrStepper.vue_vue_type_script_lang-c7f9582b.js → OrStepper.vue_vue_type_script_lang-33639493.js} +1 -1
- package/dist/bundled/v3/{OrSwitch.vue_vue_type_script_lang-a2f28112.js → OrSwitch.vue_vue_type_script_lang-fe6a5512.js} +1 -1
- package/dist/bundled/v3/{OrTabs.vue_vue_type_script_lang-e90c3291.js → OrTabs.vue_vue_type_script_lang-97da5baa.js} +2 -2
- package/dist/bundled/v3/{OrTag.vue_vue_type_script_lang-8fc22835.js → OrTag.vue_vue_type_script_lang-62e1f5a7.js} +1 -1
- package/dist/bundled/v3/{OrTag.vue_vue_type_script_lang-0a36cba8.js → OrTag.vue_vue_type_script_lang-b62c0b79.js} +1 -1
- package/dist/bundled/v3/{OrTagInput.vue_vue_type_script_lang-f453ac36.js → OrTagInput.vue_vue_type_script_lang-bdbe85c7.js} +2 -2
- package/dist/bundled/v3/{OrTags.vue_vue_type_script_lang-422cbf86.js → OrTags.vue_vue_type_script_lang-cb8c3c31.js} +3 -3
- package/dist/bundled/v3/{OrTextarea.vue_vue_type_script_lang-325050eb.js → OrTextarea.vue_vue_type_script_lang-5624556c.js} +2 -2
- package/dist/bundled/v3/{OrTextbox.vue_vue_type_script_lang-5c706917.js → OrTextbox.vue_vue_type_script_lang-d0db6077.js} +3 -3
- package/dist/bundled/v3/{OrTimePicker.vue_vue_type_script_lang-59a1b975.js → OrTimePicker.vue_vue_type_script_lang-25e5dd01.js} +4 -4
- package/dist/bundled/v3/{OrToastContainer.vue_vue_type_script_lang-71a39d2d.js → OrToastContainer.vue_vue_type_script_lang-9a3e66a2.js} +1 -1
- package/dist/bundled/v3/{OrToastContainer.vue_vue_type_script_lang-8544ff72.js → OrToastContainer.vue_vue_type_script_lang-ad659b6a.js} +1 -1
- package/dist/bundled/v3/{OrTooltip.vue_vue_type_script_lang-b201e580.js → OrTooltip.vue_vue_type_script_lang-288c978f.js} +1 -1
- package/dist/bundled/v3/{OrTooltip.vue_vue_type_script_lang-fbacc740.js → OrTooltip.vue_vue_type_script_lang-c0cc67c5.js} +1 -1
- package/dist/bundled/v3/{OrTree.vue_vue_type_script_lang-ffd5fbc3.js → OrTree.vue_vue_type_script_lang-ce5b0577.js} +2 -2
- package/dist/bundled/{v2/_baseAssignValue-22e630c1.js → v3/_baseAssignValue-2250dbc9.js} +1 -1
- package/dist/bundled/v3/{_baseIsEqual-a1cc156c.js → _baseIsEqual-fe2002b6.js} +5 -5
- package/dist/bundled/v3/_commonjsHelpers-1789f0cf.js +7 -0
- package/dist/bundled/v3/components/OrAvatar/OrAvatar.js +2 -2
- package/dist/bundled/v3/components/OrAvatar/OrAvatar.vue.d.ts +26 -11
- package/dist/bundled/v3/components/OrAvatar/index.js +1 -1
- package/dist/bundled/v3/components/OrAvatarV3/OrAvatar.vue.d.ts +22 -7
- package/dist/bundled/v3/components/OrBottomSheetV3/OrBottomSheet.js +2 -2
- package/dist/bundled/v3/components/OrBottomSheetV3/OrBottomSheet.vue.d.ts +568 -25
- package/dist/bundled/v3/components/OrBottomSheetV3/hooks/useBottomSheetSwipeState.d.ts +1 -1
- package/dist/bundled/v3/components/OrBottomSheetV3/hooks/useBottomSheetSwipeState.js +1 -1
- package/dist/bundled/v3/components/OrBottomSheetV3/index.js +1 -1
- package/dist/bundled/v3/components/OrButton/OrButton.vue.d.ts +51 -16
- package/dist/bundled/v3/components/OrButtonV2/OrButton.js +2 -2
- package/dist/bundled/v3/components/OrButtonV2/OrButton.vue.d.ts +57 -20
- package/dist/bundled/v3/components/OrButtonV2/index.js +2 -2
- package/dist/bundled/v3/components/OrButtonV3/OrButton.js +2 -2
- package/dist/bundled/v3/components/OrButtonV3/OrButton.vue.d.ts +35 -15
- package/dist/bundled/v3/components/OrButtonV3/index.js +1 -1
- package/dist/bundled/v3/components/OrCard/OrCard.vue.d.ts +15 -7
- package/dist/bundled/v3/components/OrCardCollection/OrCardCollection.js +2 -2
- package/dist/bundled/v3/components/OrCardCollection/OrCardCollection.vue.d.ts +47 -21
- package/dist/bundled/v3/components/OrCardCollection/index.js +1 -1
- package/dist/bundled/v3/components/OrCardCollectionV3/OrCardCollection.js +2 -2
- package/dist/bundled/v3/components/OrCardCollectionV3/OrCardCollection.vue.d.ts +44 -17
- package/dist/bundled/v3/components/OrCardCollectionV3/index.js +1 -1
- package/dist/bundled/v3/components/OrCardV3/OrCard.vue.d.ts +7 -4
- package/dist/bundled/v3/components/OrCheckbox/OrCheckbox.js +2 -2
- package/dist/bundled/v3/components/OrCheckbox/OrCheckbox.vue.d.ts +35 -15
- package/dist/bundled/v3/components/OrCheckbox/index.js +1 -1
- package/dist/bundled/v3/components/OrCheckboxGroupV3/OrCheckboxGroup.js +2 -2
- package/dist/bundled/v3/components/OrCheckboxGroupV3/OrCheckboxGroup.vue.d.ts +24 -6
- package/dist/bundled/v3/components/OrCheckboxGroupV3/index.js +1 -1
- package/dist/bundled/v3/components/OrCheckboxTreeV3/OrCheckboxTree.js +2 -2
- package/dist/bundled/v3/components/OrCheckboxTreeV3/OrCheckboxTree.vue.d.ts +43 -17
- package/dist/bundled/v3/components/OrCheckboxTreeV3/index.js +1 -1
- package/dist/bundled/v3/components/OrCheckboxV3/OrCheckbox.vue.d.ts +53 -23
- package/dist/bundled/v3/components/OrChip/OrChip.js +2 -2
- package/dist/bundled/v3/components/OrChip/OrChip.vue.d.ts +25 -9
- package/dist/bundled/v3/components/OrChip/index.js +1 -1
- package/dist/bundled/v3/components/OrChips/OrChips.js +2 -2
- package/dist/bundled/v3/components/OrChips/OrChips.vue.d.ts +51 -24
- package/dist/bundled/v3/components/OrChips/index.js +2 -2
- package/dist/bundled/v3/components/OrCode/OrCode.js +2 -2
- package/dist/bundled/v3/components/OrCode/OrCode.vue.d.ts +69 -24
- package/dist/bundled/v3/components/OrCode/index.js +4 -5
- package/dist/bundled/v3/components/OrCode/lang.js +3 -5
- package/dist/bundled/v3/components/OrCode/libs.js +3 -4
- package/dist/bundled/v3/components/OrCode/theme.js +1 -1
- package/dist/bundled/v3/components/OrCodeV3/OrCode.js +2 -2
- package/dist/bundled/v3/components/OrCodeV3/OrCode.vue.d.ts +84 -35
- package/dist/bundled/v3/components/OrCodeV3/index.js +1 -1
- package/dist/bundled/v3/components/OrCollapse/OrCollapse.js +2 -2
- package/dist/bundled/v3/components/OrCollapse/OrCollapse.vue.d.ts +39 -17
- package/dist/bundled/v3/components/OrCollapse/index.js +1 -1
- package/dist/bundled/v3/components/OrColorPicker/OrColorPicker.js +2 -2
- package/dist/bundled/v3/components/OrColorPicker/OrColorPicker.vue.d.ts +31 -13
- package/dist/bundled/v3/components/OrColorPicker/index.js +1 -1
- package/dist/bundled/v3/components/OrCombinedInputV3/OrCombinedInput.vue.d.ts +30 -8
- package/dist/bundled/v3/components/OrConfirm/OrConfirm.js +2 -2
- package/dist/bundled/v3/components/OrConfirm/OrConfirm.vue.d.ts +84 -23
- package/dist/bundled/v3/components/OrConfirm/index.js +1 -1
- package/dist/bundled/v3/components/OrConfirmV3/OrConfirm.js +2 -2
- package/dist/bundled/v3/components/OrConfirmV3/OrConfirm.vue.d.ts +91 -30
- package/dist/bundled/v3/components/OrConfirmV3/index.js +1 -1
- package/dist/bundled/v3/components/OrContextMenuV3/OrContextMenu.js +2 -2
- package/dist/bundled/v3/components/OrContextMenuV3/OrContextMenu.vue.d.ts +27 -13
- package/dist/bundled/v3/components/OrContextMenuV3/index.js +1 -1
- package/dist/bundled/v3/components/OrDatePickerV3/OrDatePicker.js +2 -2
- package/dist/bundled/v3/components/OrDatePickerV3/OrDatePicker.vue.d.ts +83 -88
- package/dist/bundled/v3/components/OrDatePickerV3/index.js +1 -1
- package/dist/bundled/v3/components/OrDateTimePicker/OrDateTimePicker.js +2 -2
- package/dist/bundled/v3/components/OrDateTimePicker/OrDateTimePicker.vue.d.ts +177 -68
- package/dist/bundled/v3/components/OrDateTimePicker/index.js +1 -1
- package/dist/bundled/v3/components/OrDateTimePickerV3/OrDateTimePicker.js +2 -2
- package/dist/bundled/v3/components/OrDateTimePickerV3/OrDateTimePicker.vue.d.ts +109 -94
- package/dist/bundled/v3/components/OrDateTimePickerV3/index.js +1 -1
- package/dist/bundled/v3/components/OrEmptyStateV3/OrEmptyState.vue.d.ts +28 -11
- package/dist/bundled/v3/components/OrError/OrError.vue.d.ts +8 -4
- package/dist/bundled/v3/components/OrErrorTagV3/OrErrorTag.vue.d.ts +7 -4
- package/dist/bundled/v3/components/OrErrorV3/OrError.vue.d.ts +18 -9
- package/dist/bundled/v3/components/OrExpansionPanelV3/OrExpansionPanel.js +2 -2
- package/dist/bundled/v3/components/OrExpansionPanelV3/OrExpansionPanel.vue.d.ts +39 -16
- package/dist/bundled/v3/components/OrExpansionPanelV3/index.js +1 -1
- package/dist/bundled/v3/components/OrFabV3/OrFab.vue.d.ts +20 -8
- package/dist/bundled/v3/components/OrFloating/OrFloating.js +2 -2
- package/dist/bundled/v3/components/OrFloating/OrFloating.vue.d.ts +46 -15
- package/dist/bundled/v3/components/OrFloating/index.js +1 -1
- package/dist/bundled/v3/components/OrFormGroupV3/OrFormGroup.vue.d.ts +30 -10
- package/dist/bundled/v3/components/OrHint/OrHint.vue.d.ts +8 -4
- package/dist/bundled/v3/components/OrHintV3/OrHint.vue.d.ts +18 -9
- package/dist/bundled/v3/components/OrIcon/OrIcon.js +2 -2
- package/dist/bundled/v3/components/OrIcon/OrIcon.vue.d.ts +44 -16
- package/dist/bundled/v3/components/OrIcon/index.js +1 -1
- package/dist/bundled/v3/components/OrIconButtonV2/OrIconButton.js +2 -2
- package/dist/bundled/v3/components/OrIconButtonV2/OrIconButton.vue.d.ts +43 -13
- package/dist/bundled/v3/components/OrIconButtonV2/index.js +1 -1
- package/dist/bundled/v3/components/OrIconButtonV3/OrIconButton.js +2 -2
- package/dist/bundled/v3/components/OrIconButtonV3/OrIconButton.vue.d.ts +54 -16
- package/dist/bundled/v3/components/OrIconButtonV3/index.js +1 -1
- package/dist/bundled/v3/components/OrIconV3/OrIcon.vue.d.ts +18 -7
- package/dist/bundled/v3/components/OrInlineInputBoxV3/OrInlineInputBox.vue.d.ts +16 -7
- package/dist/bundled/v3/components/OrInlineInputV3/OrInlineInput.js +2 -2
- package/dist/bundled/v3/components/OrInlineInputV3/OrInlineInput.vue.d.ts +83 -39
- package/dist/bundled/v3/components/OrInlineInputV3/index.js +1 -1
- package/dist/bundled/v3/components/OrInlineTextEdit/OrInlineTextEdit.js +2 -2
- package/dist/bundled/v3/components/OrInlineTextEdit/OrInlineTextEdit.vue.d.ts +95 -43
- package/dist/bundled/v3/components/OrInlineTextEdit/index.js +1 -1
- package/dist/bundled/v3/components/OrInlineTextareaV3/OrInlineTextarea.js +2 -2
- package/dist/bundled/v3/components/OrInlineTextareaV3/OrInlineTextarea.vue.d.ts +79 -39
- package/dist/bundled/v3/components/OrInlineTextareaV3/index.js +1 -1
- package/dist/bundled/v3/components/OrInput/OrInput.js +2 -2
- package/dist/bundled/v3/components/OrInput/OrInput.vue.d.ts +87 -36
- package/dist/bundled/v3/components/OrInput/index.js +1 -1
- package/dist/bundled/v3/components/OrInputBoxV3/OrInputBox.vue.d.ts +22 -7
- package/dist/bundled/v3/components/OrInputV3/OrInput.js +2 -2
- package/dist/bundled/v3/components/OrInputV3/OrInput.vue.d.ts +88 -38
- package/dist/bundled/v3/components/OrInputV3/index.js +1 -1
- package/dist/bundled/v3/components/OrLabel/OrLabel.vue.d.ts +20 -9
- package/dist/bundled/v3/components/OrLabelV3/OrLabel.vue.d.ts +26 -9
- package/dist/bundled/v3/components/OrLinkV3/OrLink.vue.d.ts +24 -7
- package/dist/bundled/v3/components/OrList/OrList.js +2 -2
- package/dist/bundled/v3/components/OrList/OrList.vue.d.ts +47 -21
- package/dist/bundled/v3/components/OrList/index.js +1 -1
- package/dist/bundled/v3/components/OrListOfInputs/OrListOfInputs.js +2 -2
- package/dist/bundled/v3/components/OrListOfInputs/OrListOfInputs.vue.d.ts +27 -11
- package/dist/bundled/v3/components/OrListOfInputs/index.js +1 -1
- package/dist/bundled/v3/components/OrLoader/OrLoader.vue.d.ts +26 -10
- package/dist/bundled/v3/components/OrLoaderV3/OrLoader.js +2 -2
- package/dist/bundled/v3/components/OrLoaderV3/OrLoader.vue.d.ts +34 -13
- package/dist/bundled/v3/components/OrLoaderV3/index.js +1 -1
- package/dist/bundled/v3/components/OrMenuItemV3/OrMenuItem.vue.d.ts +34 -13
- package/dist/bundled/v3/components/OrMenuV3/OrMenu.js +2 -2
- package/dist/bundled/v3/components/OrMenuV3/OrMenu.vue.d.ts +33 -15
- package/dist/bundled/v3/components/OrMenuV3/index.js +1 -1
- package/dist/bundled/v3/components/OrModal/OrModal.js +2 -2
- package/dist/bundled/v3/components/OrModal/OrModal.vue.d.ts +38 -14
- package/dist/bundled/v3/components/OrModal/index.js +1 -1
- package/dist/bundled/v3/components/OrModalV3/OrModal.js +2 -2
- package/dist/bundled/v3/components/OrModalV3/OrModal.vue.d.ts +25 -13
- package/dist/bundled/v3/components/OrModalV3/index.js +1 -1
- package/dist/bundled/v3/components/OrNotification/OrNotification.js +2 -2
- package/dist/bundled/v3/components/OrNotification/OrNotification.vue.d.ts +27 -9
- package/dist/bundled/v3/components/OrNotification/index.js +1 -1
- package/dist/bundled/v3/components/OrNotificationV3/OrNotification.js +2 -2
- package/dist/bundled/v3/components/OrNotificationV3/OrNotification.vue.d.ts +20 -9
- package/dist/bundled/v3/components/OrNotificationV3/index.js +1 -1
- package/dist/bundled/v3/components/OrNumberInput/OrNumberInput.js +2 -2
- package/dist/bundled/v3/components/OrNumberInput/OrNumberInput.vue.d.ts +70 -24
- package/dist/bundled/v3/components/OrNumberInput/index.js +1 -1
- package/dist/bundled/v3/components/OrOverflowMenu/OrOverflowMenu.js +2 -2
- package/dist/bundled/v3/components/OrOverflowMenu/OrOverflowMenu.vue.d.ts +31 -13
- package/dist/bundled/v3/components/OrOverflowMenu/index.js +1 -1
- package/dist/bundled/v3/components/OrOverlay/OrOverlay.vue.d.ts +16 -6
- package/dist/bundled/v3/components/OrOverlayV3/OrOverlay.js +2 -2
- package/dist/bundled/v3/components/OrOverlayV3/OrOverlay.vue.d.ts +14 -7
- package/dist/bundled/v3/components/OrOverlayV3/index.js +1 -1
- package/dist/bundled/v3/components/OrPaginationV3/OrPagination.js +2 -2
- package/dist/bundled/v3/components/OrPaginationV3/OrPagination.vue.d.ts +75 -27
- package/dist/bundled/v3/components/OrPaginationV3/index.js +1 -1
- package/dist/bundled/v3/components/OrPassword/OrPassword.js +2 -2
- package/dist/bundled/v3/components/OrPassword/OrPassword.vue.d.ts +63 -22
- package/dist/bundled/v3/components/OrPassword/index.js +1 -1
- package/dist/bundled/v3/components/OrPopoverV3/OrPopover.js +2 -2
- package/dist/bundled/v3/components/OrPopoverV3/OrPopover.vue.d.ts +92 -32
- package/dist/bundled/v3/components/OrPopoverV3/index.js +1 -1
- package/dist/bundled/v3/components/OrProgress/OrProgress.js +2 -2
- package/dist/bundled/v3/components/OrProgress/OrProgress.vue.d.ts +56 -20
- package/dist/bundled/v3/components/OrProgress/index.js +1 -1
- package/dist/bundled/v3/components/OrProgressV3/OrProgress.js +2 -2
- package/dist/bundled/v3/components/OrProgressV3/OrProgress.vue.d.ts +62 -25
- package/dist/bundled/v3/components/OrProgressV3/index.js +1 -1
- package/dist/bundled/v3/components/OrRadio/OrRadio.js +2 -2
- package/dist/bundled/v3/components/OrRadio/OrRadio.vue.d.ts +35 -13
- package/dist/bundled/v3/components/OrRadio/index.js +1 -1
- package/dist/bundled/v3/components/OrRadioGroup/OrRadioGroup.vue.d.ts +26 -9
- package/dist/bundled/v3/components/OrRadioGroupV3/OrRadioGroup.vue.d.ts +32 -6
- package/dist/bundled/v3/components/OrRadioV3/OrRadio.vue.d.ts +49 -21
- package/dist/bundled/v3/components/OrRichTextEditorV3/OrRichTextEditor.js +202 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/OrRichTextEditor.vue.d.ts +194 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/index.d.ts +2 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/index.js +2 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/props.d.ts +5 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/props.js +7 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/styles.d.ts +6 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/styles.js +38 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/codemirrorNode.d.ts +3 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/codemirrorNode.js +42 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/codemirrorView.d.ts +27 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/codemirrorView.js +183 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/index.d.ts +1 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/index.js +1 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/theme.d.ts +17 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/theme.js +199 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/types.d.ts +19 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/codemirror/types.js +1 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/markdown.d.ts +3 -0
- package/dist/bundled/v3/components/OrRichTextEditorV3/utils/markdown.js +2 -0
- package/dist/bundled/v3/components/OrSearch/OrSearch.js +2 -2
- package/dist/bundled/v3/components/OrSearch/OrSearch.vue.d.ts +65 -23
- package/dist/bundled/v3/components/OrSearch/index.js +1 -1
- package/dist/bundled/v3/components/OrSearchV3/OrSearch.js +2 -2
- package/dist/bundled/v3/components/OrSearchV3/OrSearch.vue.d.ts +41 -17
- package/dist/bundled/v3/components/OrSearchV3/index.js +1 -1
- package/dist/bundled/v3/components/OrSegmentedControlV3/OrSegmentedControl.vue.d.ts +25 -9
- package/dist/bundled/v3/components/OrSelect/OrSelect.js +2 -2
- package/dist/bundled/v3/components/OrSelect/OrSelect.vue.d.ts +77 -28
- package/dist/bundled/v3/components/OrSelect/index.js +1 -1
- package/dist/bundled/v3/components/OrSelectV3/OrSelect.js +2 -2
- package/dist/bundled/v3/components/OrSelectV3/OrSelect.vue.d.ts +133 -44
- package/dist/bundled/v3/components/OrSelectV3/index.js +1 -1
- package/dist/bundled/v3/components/OrSidebar/OrSidebar.js +2 -2
- package/dist/bundled/v3/components/OrSidebar/OrSidebar.vue.d.ts +33 -14
- package/dist/bundled/v3/components/OrSidebar/index.js +1 -1
- package/dist/bundled/v3/components/OrSidebarV3/OrSidebar.js +2 -2
- package/dist/bundled/v3/components/OrSidebarV3/OrSidebar.vue.d.ts +63 -28
- package/dist/bundled/v3/components/OrSidebarV3/index.js +1 -1
- package/dist/bundled/v3/components/OrSkeleton/index.js +1 -1
- package/dist/bundled/v3/components/OrSkeletonCircle/OrSkeletonCircle.vue.d.ts +20 -9
- package/dist/bundled/v3/components/OrSkeletonCircleV3/OrSkeletonCircle.vue.d.ts +28 -13
- package/dist/bundled/v3/components/OrSkeletonRect/OrSkeletonRect.vue.d.ts +22 -9
- package/dist/bundled/v3/components/OrSkeletonRectV3/OrSkeletonRect.vue.d.ts +26 -11
- package/dist/bundled/v3/components/OrSkeletonText/OrSkeletonText.js +2 -2
- package/dist/bundled/v3/components/OrSkeletonText/OrSkeletonText.vue.d.ts +26 -10
- package/dist/bundled/v3/components/OrSkeletonText/index.js +1 -1
- package/dist/bundled/v3/components/OrSkeletonTextV3/OrSkeletonText.js +2 -2
- package/dist/bundled/v3/components/OrSkeletonTextV3/OrSkeletonText.vue.d.ts +40 -16
- package/dist/bundled/v3/components/OrSkeletonTextV3/index.js +1 -1
- package/dist/bundled/v3/components/OrSkeletonV3/index.js +1 -1
- package/dist/bundled/v3/components/OrSlider/OrSlider.js +2 -2
- package/dist/bundled/v3/components/OrSlider/OrSlider.vue.d.ts +91 -35
- package/dist/bundled/v3/components/OrSlider/index.js +1 -1
- package/dist/bundled/v3/components/OrSortingV3/OrSorting.js +2 -2
- package/dist/bundled/v3/components/OrSortingV3/OrSorting.vue.d.ts +45 -13
- package/dist/bundled/v3/components/OrSortingV3/index.js +1 -1
- package/dist/bundled/v3/components/OrStepper/OrStepper.js +2 -2
- package/dist/bundled/v3/components/OrStepper/OrStepper.vue.d.ts +43 -16
- package/dist/bundled/v3/components/OrStepper/index.js +1 -1
- package/dist/bundled/v3/components/OrSwitch/OrSwitch.vue.d.ts +33 -12
- package/dist/bundled/v3/components/OrSwitchV3/OrSwitch.js +2 -2
- package/dist/bundled/v3/components/OrSwitchV3/OrSwitch.vue.d.ts +53 -22
- package/dist/bundled/v3/components/OrSwitchV3/index.js +1 -1
- package/dist/bundled/v3/components/OrTab/OrTab.vue.d.ts +22 -9
- package/dist/bundled/v3/components/OrTabHeaderItem/OrTabHeaderItem.vue.d.ts +29 -13
- package/dist/bundled/v3/components/OrTabV3/OrTab.vue.d.ts +17 -10
- package/dist/bundled/v3/components/OrTabs/OrTabs.vue.d.ts +17 -4
- package/dist/bundled/v3/components/OrTabsV3/OrTabs.js +2 -2
- package/dist/bundled/v3/components/OrTabsV3/OrTabs.vue.d.ts +73 -26
- package/dist/bundled/v3/components/OrTabsV3/index.js +1 -1
- package/dist/bundled/v3/components/OrTag/OrTag.js +2 -2
- package/dist/bundled/v3/components/OrTag/OrTag.vue.d.ts +27 -10
- package/dist/bundled/v3/components/OrTag/index.js +1 -1
- package/dist/bundled/v3/components/OrTagInputV3/OrTagInput.js +2 -2
- package/dist/bundled/v3/components/OrTagInputV3/OrTagInput.vue.d.ts +85 -37
- package/dist/bundled/v3/components/OrTagInputV3/index.js +1 -1
- package/dist/bundled/v3/components/OrTagV3/OrTag.js +2 -2
- package/dist/bundled/v3/components/OrTagV3/OrTag.vue.d.ts +23 -12
- package/dist/bundled/v3/components/OrTagV3/index.js +1 -1
- package/dist/bundled/v3/components/OrTagsV3/OrTags.js +2 -2
- package/dist/bundled/v3/components/OrTagsV3/OrTags.vue.d.ts +68 -23
- package/dist/bundled/v3/components/OrTagsV3/index.js +1 -1
- package/dist/bundled/v3/components/OrTeleport/OrTeleport.vue3.vue.d.ts +10 -4
- package/dist/bundled/v3/components/OrTeleportV3/OrTeleport.vue3.vue.d.ts +10 -4
- package/dist/bundled/v3/components/OrTextV3/OrText.vue.d.ts +24 -11
- package/dist/bundled/v3/components/OrTextarea/OrTextarea.js +2 -2
- package/dist/bundled/v3/components/OrTextarea/OrTextarea.vue.d.ts +85 -37
- package/dist/bundled/v3/components/OrTextarea/index.js +1 -1
- package/dist/bundled/v3/components/OrTextareaV3/OrTextarea.vue.d.ts +73 -32
- package/dist/bundled/v3/components/OrTextbox/OrTextbox.js +2 -2
- package/dist/bundled/v3/components/OrTextbox/OrTextbox.vue.d.ts +137 -55
- package/dist/bundled/v3/components/OrTextbox/index.js +1 -1
- package/dist/bundled/v3/components/OrTimePickerV3/OrTimePicker.js +2 -2
- package/dist/bundled/v3/components/OrTimePickerV3/OrTimePicker.vue.d.ts +83 -88
- package/dist/bundled/v3/components/OrTimePickerV3/index.js +1 -1
- package/dist/bundled/v3/components/OrToast/OrToast.js +2 -2
- package/dist/bundled/v3/components/OrToast/OrToast.vue.d.ts +31 -11
- package/dist/bundled/v3/components/OrToast/Timer.js +1 -1
- package/dist/bundled/v3/components/OrToast/composable/useToastEventBus.js +2 -2
- package/dist/bundled/v3/components/OrToast/index.js +1 -1
- package/dist/bundled/v3/components/OrToastContainer/OrToastContainer.js +2 -2
- package/dist/bundled/v3/components/OrToastContainer/OrToastContainer.vue.d.ts +55 -25
- package/dist/bundled/v3/components/OrToastContainer/index.js +1 -1
- package/dist/bundled/v3/components/OrToastContainerV3/OrToastContainer.js +2 -2
- package/dist/bundled/v3/components/OrToastContainerV3/OrToastContainer.vue.d.ts +54 -24
- package/dist/bundled/v3/components/OrToastContainerV3/index.js +1 -1
- package/dist/bundled/v3/components/OrToastV3/OrToast.js +2 -2
- package/dist/bundled/v3/components/OrToastV3/OrToast.vue.d.ts +38 -16
- package/dist/bundled/v3/components/OrToastV3/Timer.js +1 -1
- package/dist/bundled/v3/components/OrToastV3/composable/useToastEventBus.js +2 -2
- package/dist/bundled/v3/components/OrToastV3/index.js +1 -1
- package/dist/bundled/v3/components/OrTooltip/OrTooltip.js +2 -2
- package/dist/bundled/v3/components/OrTooltip/OrTooltip.vue.d.ts +33 -14
- package/dist/bundled/v3/components/OrTooltip/index.js +1 -1
- package/dist/bundled/v3/components/OrTooltipContent/OrTooltipContent.vue.d.ts +10 -4
- package/dist/bundled/v3/components/OrTooltipV3/OrTooltip.js +2 -2
- package/dist/bundled/v3/components/OrTooltipV3/OrTooltip.vue.d.ts +33 -15
- package/dist/bundled/v3/components/OrTooltipV3/index.js +1 -1
- package/dist/bundled/v3/components/OrTreeV3/OrTree.js +2 -2
- package/dist/bundled/v3/components/OrTreeV3/OrTree.vue.d.ts +19 -13
- package/dist/bundled/v3/components/OrTreeV3/index.js +1 -1
- package/dist/bundled/v3/components/index.d.ts +1 -0
- package/dist/bundled/v3/components/index.js +78 -77
- package/dist/bundled/v3/directives/dropdown-close.d.ts +1 -3
- package/dist/bundled/v3/directives/dropdown-open.d.ts +1 -3
- package/dist/bundled/{v2/dom-bb55b42a.js → v3/dom-cec392f3.js} +2 -2
- package/dist/bundled/v3/{eq-95cd2573.js → eq-44ea4d70.js} +1 -1
- package/dist/bundled/{v2/get-ab1b7d93.js → v3/get-34aa21f4.js} +3 -3
- package/dist/bundled/v3/hooks/useOverflow.js +2 -2
- package/dist/bundled/v3/hooks/usePopoverState.js +1 -1
- package/dist/bundled/v3/hooks/useResponsive/useResponsive.d.ts +2 -2
- package/dist/bundled/v3/hooks/useResponsive/useResponsive.js +1 -1
- package/dist/bundled/v3/{index-929e224a.js → index-0a01982b.js} +2 -2
- package/dist/bundled/{v2/index-5ee42d1f.js → v3/index-0c287ab6.js} +3 -3
- package/dist/bundled/v3/index-1b2cfcc1.js +9715 -0
- package/dist/bundled/v3/{index-929b54f2.js → index-3cae2d25.js} +3 -115
- package/dist/bundled/{v2/index-5dd41049.js → v3/index-3e178101.js} +471 -32
- package/dist/bundled/v3/{index-f4d8e24c.js → index-40b35d94.js} +1 -1
- package/dist/bundled/v3/index-666dfe59.js +4048 -0
- package/dist/bundled/v3/{index-500b3ace.js → index-749f3444.js} +1 -1
- package/dist/bundled/v3/index-9444e0d2.js +115 -0
- package/dist/bundled/v3/{index-f92296d7.js → index-de4975a3.js} +14 -3
- package/dist/bundled/v3/index-f671afe5.js +7127 -0
- package/dist/bundled/v3/index.js +81 -79
- package/dist/bundled/{v2/isArrayLike-e46b8eac.js → v3/isArrayLike-e7fb5cae.js} +1 -1
- package/dist/bundled/v3/{isEqual-44382965.js → isEqual-7a8e6106.js} +1 -1
- package/dist/bundled/{v2/isObject-fe8b81fd.js → v3/isObject-b7415fc1.js} +1 -1
- package/dist/bundled/v3/markdown-119394e1.js +15365 -0
- package/dist/bundled/v3/{range-6f26eda4.js → range-82efa3d4.js} +4 -4
- package/dist/bundled/v3/{round-f34440f4.js → round-567ede34.js} +4 -4
- package/dist/bundled/{v2/toFinite-74227610.js → v3/toFinite-bc59ffb0.js} +1 -1
- package/dist/bundled/v3/{toInteger-2fd112a9.js → toInteger-9fa0151c.js} +1 -1
- package/dist/bundled/{v2/toString-f3196832.js → v3/toString-b6e4472a.js} +1 -1
- package/dist/bundled/v3/useFocusTrap-2302b843.js +1349 -0
- package/dist/bundled/v3/utils/functions/dom.js +2 -2
- package/dist/bundled/v3/utils/index.js +1 -1
- package/dist/esm/v2/{OrCardCollection-63ab1dc4.js → OrCardCollection-c27ae76f.js} +3 -3
- package/dist/esm/v2/{OrCode-adb9790d.js → OrCode-4501e2df.js} +36 -50
- package/dist/esm/v2/{OrConfirm-f92dc7b5.js → OrConfirm-4841e1eb.js} +1 -1
- package/dist/esm/v2/{OrContextMenu-abf0c884.js → OrContextMenu-01efdb43.js} +2 -2
- package/dist/esm/v2/{OrDatePicker-c93e57ae.js → OrDatePicker-528b55ec.js} +3 -3
- package/dist/esm/v2/{OrDateTimePicker-0bbe653c.js → OrDateTimePicker-80bd401a.js} +1 -1
- package/dist/esm/v2/{OrDateTimePicker.vue_rollup-plugin-vue_script-353b70fe.js → OrDateTimePicker.vue_rollup-plugin-vue_script-8e987b8d.js} +3 -3
- package/dist/esm/v2/{OrDateTimePickerPopoverHeader-6a40de37.js → OrDateTimePickerPopoverHeader-835e4e49.js} +3 -3
- package/dist/esm/v2/{OrIconButton-996aba66.js → OrIconButton-6eda233c.js} +2 -2
- package/dist/esm/v2/{OrInlineInput-c3329db5.js → OrInlineInput-9f88fff9.js} +1 -1
- package/dist/esm/v2/{OrInlineTextarea-e9de4f1e.js → OrInlineTextarea-03e8b8a6.js} +1 -1
- package/dist/esm/v2/{OrInput-0d01816c.js → OrInput-54abe165.js} +1 -1
- package/dist/esm/v2/{OrMenu-c7b05c91.js → OrMenu-c2c6473f.js} +1 -1
- package/dist/esm/v2/{OrModal-c6c922fd.js → OrModal-8ea08182.js} +1 -1
- package/dist/esm/v2/{OrNotification-c119fcff.js → OrNotification-9875c55d.js} +1 -1
- package/dist/esm/v2/{OrPagination-3f1b7a65.js → OrPagination-c5058980.js} +2 -2
- package/dist/esm/v2/{OrPopover-58fefa76.js → OrPopover-f6114169.js} +1 -1
- package/dist/esm/v2/OrRichTextEditor-6fb5d647.js +981 -0
- package/dist/esm/v2/{OrSearch-175c25d3.js → OrSearch-8a834099.js} +1 -1
- package/dist/esm/v2/{OrSelect-85acd45f.js → OrSelect-cd37db8d.js} +4 -4
- package/dist/esm/v2/{OrSidebar-055f2c89.js → OrSidebar-a5608742.js} +1 -1
- package/dist/esm/v2/{OrSidebarCollapseButton-12d111c5.js → OrSidebarCollapseButton-c999d09a.js} +1 -1
- package/dist/esm/v2/{OrSorting-b350c4d3.js → OrSorting-82557def.js} +2 -2
- package/dist/esm/v2/{OrTabs-f736863c.js → OrTabs-92ccb30f.js} +2 -2
- package/dist/esm/v2/{OrTag-8ec63b23.js → OrTag-15cd89e8.js} +1 -1
- package/dist/esm/v2/{OrTagInput-7088d62f.js → OrTagInput-f443f295.js} +2 -2
- package/dist/esm/v2/{OrTags-5ad71efd.js → OrTags-b34c628e.js} +2 -2
- package/dist/esm/v2/{OrTimePicker-3d65dc1b.js → OrTimePicker-e711a256.js} +4 -4
- package/dist/esm/v2/{OrTooltip-17f8a7ff.js → OrTooltip-a4e679bb.js} +1 -1
- package/dist/esm/v2/codemirrorView-020fe885.js +357 -0
- package/dist/esm/v2/components/index.d.ts +1 -0
- package/dist/esm/v2/components/index.js +53 -29
- package/dist/esm/v2/components/or-card-collection-v3/index.js +8 -8
- package/dist/esm/v2/components/or-code-v3/OrCode.vue.d.ts +3 -4
- package/dist/esm/v2/components/or-code-v3/index.js +14 -9
- package/dist/esm/v2/components/or-confirm-v3/index.js +5 -5
- package/dist/esm/v2/components/or-context-menu-v3/index.js +3 -3
- package/dist/esm/v2/components/or-date-picker-v3/index.js +6 -6
- package/dist/esm/v2/components/or-date-time-picker-v3/index.js +7 -7
- package/dist/esm/v2/components/or-icon-button-v3/index.js +3 -3
- package/dist/esm/v2/components/or-inline-input-v3/index.js +4 -4
- package/dist/esm/v2/components/or-inline-textarea-v3/index.js +4 -4
- package/dist/esm/v2/components/or-input-v3/index.js +4 -4
- package/dist/esm/v2/components/or-menu-v3/index.js +2 -2
- package/dist/esm/v2/components/or-modal-v3/index.js +4 -4
- package/dist/esm/v2/components/or-notification-v3/index.js +4 -4
- package/dist/esm/v2/components/or-pagination-v3/index.js +3 -3
- package/dist/esm/v2/components/or-popover-v3/index.js +1 -1
- package/dist/esm/v2/components/or-rich-text-editor-v3/OrRichTextEditor.vue.d.ts +194 -0
- package/dist/esm/v2/components/or-rich-text-editor-v3/index.d.ts +2 -0
- package/dist/esm/v2/components/or-rich-text-editor-v3/index.js +67 -0
- package/dist/esm/v2/components/or-rich-text-editor-v3/props.d.ts +5 -0
- package/dist/esm/v2/components/or-rich-text-editor-v3/styles.d.ts +6 -0
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/codemirror/codemirrorNode.d.ts +3 -0
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/codemirror/codemirrorView.d.ts +27 -0
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/codemirror/index.d.ts +1 -0
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/codemirror/index.js +9 -0
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/codemirror/theme.d.ts +17 -0
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/codemirror/types.d.ts +19 -0
- package/dist/esm/v2/components/or-rich-text-editor-v3/utils/markdown.d.ts +3 -0
- package/dist/esm/v2/components/or-search-v3/index.js +5 -5
- package/dist/esm/v2/components/or-select-v3/index.js +6 -6
- package/dist/esm/v2/components/or-sidebar-v3/index.js +5 -5
- package/dist/esm/v2/components/or-sidebar-v3/partials/index.js +4 -4
- package/dist/esm/v2/components/or-sorting-v3/index.js +3 -3
- package/dist/esm/v2/components/or-tabs-v3/index.js +3 -3
- package/dist/esm/v2/components/or-tag-input-v3/index.js +6 -6
- package/dist/esm/v2/components/or-tag-v3/index.js +4 -4
- package/dist/esm/v2/components/or-tags-v3/index.js +5 -5
- package/dist/esm/v2/components/or-text-v3/OrText.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-textarea/OrTextarea.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-textarea-v3/OrTextarea.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-textbox/OrTextbox.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-time-picker-v3/OrTimePicker.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-time-picker-v3/index.js +7 -7
- package/dist/esm/v2/components/or-toast/OrToast.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-toast/or-toast-container/OrToastContainer.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-toast-v3/OrToast.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-toast-v3/index.js +4 -4
- package/dist/esm/v2/components/or-toast-v3/or-toast-container-v3/OrToastContainer.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-toast-v3/or-toast-container-v3/index.js +4 -4
- package/dist/esm/v2/components/or-tooltip/OrTooltip.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-tooltip/or-tooltip-content/OrTooltipContent.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-tooltip-v3/OrTooltip.vue.d.ts +2 -2
- package/dist/esm/v2/components/or-tooltip-v3/index.js +2 -2
- package/dist/esm/v2/components/or-tree-v3/OrTree.vue.d.ts +2 -2
- package/dist/esm/v2/index.js +53 -29
- package/dist/esm/v2/{types-b3ec7224.js → types-635157b1.js} +1 -1
- package/dist/esm/v3/{OrCardCollection-2b5f1d79.js → OrCardCollection-bddf72ef.js} +3 -3
- package/dist/esm/v3/{OrCode-5457417e.js → OrCode-a63c3a7b.js} +36 -50
- package/dist/esm/v3/{OrConfirm-bf771b4d.js → OrConfirm-d304e9a4.js} +1 -1
- package/dist/esm/v3/{OrContextMenu-2d8d26e9.js → OrContextMenu-bf1e07ae.js} +2 -2
- package/dist/esm/v3/{OrDatePicker-88b59005.js → OrDatePicker-87aef206.js} +3 -3
- package/dist/esm/v3/{OrDateTimePicker-f9e46f7e.js → OrDateTimePicker-738f9cd3.js} +3 -3
- package/dist/esm/v3/{OrDateTimePickerPopoverHeader-d3058267.js → OrDateTimePickerPopoverHeader-03ae7d09.js} +3 -3
- package/dist/esm/v3/{OrIconButton-c72e1a04.js → OrIconButton-a69c7775.js} +2 -2
- package/dist/esm/v3/{OrInlineInput-19a4ac87.js → OrInlineInput-246d88ca.js} +1 -1
- package/dist/esm/v3/{OrInlineTextarea-0853564b.js → OrInlineTextarea-c9febb84.js} +1 -1
- package/dist/esm/v3/{OrInput-7729da3b.js → OrInput-e12b0489.js} +1 -1
- package/dist/esm/v3/{OrMenu-3bcc528b.js → OrMenu-9a82f18f.js} +1 -1
- package/dist/esm/v3/{OrModal-fb37e638.js → OrModal-fc3bb76e.js} +1 -1
- package/dist/esm/v3/{OrNotification-5d385b61.js → OrNotification-c8cd9f3d.js} +1 -1
- package/dist/esm/v3/{OrPagination-d7acbb6b.js → OrPagination-cc0b041a.js} +2 -2
- package/dist/esm/v3/{OrPopover-2132e8b9.js → OrPopover-7b2af064.js} +1 -1
- package/dist/esm/v3/OrRichTextEditor-d21645c2.js +913 -0
- package/dist/esm/v3/{OrSearch-16664742.js → OrSearch-bc259374.js} +1 -1
- package/dist/esm/v3/{OrSelect-9001a22a.js → OrSelect-a7d3c84d.js} +4 -4
- package/dist/esm/v3/{OrSidebar-83432ba3.js → OrSidebar-8837a93e.js} +1 -1
- package/dist/esm/v3/{OrSidebarCollapseButton-463aa3a0.js → OrSidebarCollapseButton-f44951ac.js} +1 -1
- package/dist/esm/v3/{OrSorting-aa200e88.js → OrSorting-6baec1ab.js} +2 -2
- package/dist/esm/v3/{OrTabs-63ce33ae.js → OrTabs-2ab1aefa.js} +2 -2
- package/dist/esm/v3/{OrTag-5d7c0e75.js → OrTag-2a3d7293.js} +1 -1
- package/dist/esm/v3/{OrTagInput-649f9b50.js → OrTagInput-ccb72239.js} +2 -2
- package/dist/esm/v3/{OrTags-cb152033.js → OrTags-69e90412.js} +2 -2
- package/dist/esm/v3/{OrTimePicker-f942db00.js → OrTimePicker-a3870a62.js} +4 -4
- package/dist/esm/v3/{OrTooltip-ad6e08ab.js → OrTooltip-5bf6890a.js} +1 -1
- package/dist/esm/v3/codemirrorView-020fe885.js +357 -0
- package/dist/esm/v3/components/index.d.ts +1 -0
- package/dist/esm/v3/components/index.js +52 -28
- package/dist/esm/v3/components/or-avatar/OrAvatar.vue.d.ts +26 -11
- package/dist/esm/v3/components/or-avatar-v3/OrAvatar.vue.d.ts +22 -7
- package/dist/esm/v3/components/or-bottom-sheet-v3/OrBottomSheet.vue.d.ts +568 -25
- package/dist/esm/v3/components/or-bottom-sheet-v3/hooks/useBottomSheetSwipeState.d.ts +1 -1
- package/dist/esm/v3/components/or-button/OrButton.vue.d.ts +51 -16
- package/dist/esm/v3/components/or-button-v2/OrButton.vue.d.ts +57 -20
- package/dist/esm/v3/components/or-button-v3/OrButton.vue.d.ts +35 -15
- package/dist/esm/v3/components/or-card/OrCard.vue.d.ts +15 -7
- package/dist/esm/v3/components/or-card-collection/OrCardCollection.vue.d.ts +47 -21
- package/dist/esm/v3/components/or-card-collection-v3/OrCardCollection.vue.d.ts +44 -17
- package/dist/esm/v3/components/or-card-collection-v3/index.js +8 -8
- package/dist/esm/v3/components/or-card-collection-v3/partials/OrCardCollectionView.vue3.vue.d.ts +14 -6
- package/dist/esm/v3/components/or-card-v3/OrCard.vue.d.ts +7 -4
- package/dist/esm/v3/components/or-checkbox/OrCheckbox.vue.d.ts +35 -15
- package/dist/esm/v3/components/or-checkbox-group-v3/OrCheckboxGroup.vue.d.ts +24 -6
- package/dist/esm/v3/components/or-checkbox-tree-v3/OrCheckboxTree.vue.d.ts +43 -17
- package/dist/esm/v3/components/or-checkbox-v3/OrCheckbox.vue.d.ts +53 -23
- package/dist/esm/v3/components/or-chips/OrChips.vue.d.ts +51 -24
- package/dist/esm/v3/components/or-chips/or-chip/OrChip.vue.d.ts +25 -9
- package/dist/esm/v3/components/or-chips/partials/OrChipsInput.vue.d.ts +37 -17
- package/dist/esm/v3/components/or-code/OrCode.vue.d.ts +69 -24
- package/dist/esm/v3/components/or-code-v3/OrCode.vue.d.ts +84 -35
- package/dist/esm/v3/components/or-code-v3/index.js +14 -9
- package/dist/esm/v3/components/or-collapse/OrCollapse.vue.d.ts +39 -17
- package/dist/esm/v3/components/or-color-picker/OrColorPicker.vue.d.ts +31 -13
- package/dist/esm/v3/components/or-combined-input-v3/OrCombinedInput.vue.d.ts +30 -8
- package/dist/esm/v3/components/or-confirm/OrConfirm.vue.d.ts +84 -23
- package/dist/esm/v3/components/or-confirm-v3/OrConfirm.vue.d.ts +91 -30
- package/dist/esm/v3/components/or-confirm-v3/index.js +5 -5
- package/dist/esm/v3/components/or-context-menu-v3/OrContextMenu.vue.d.ts +27 -13
- package/dist/esm/v3/components/or-context-menu-v3/index.js +3 -3
- package/dist/esm/v3/components/or-date-picker-v3/OrDatePicker.vue.d.ts +83 -88
- package/dist/esm/v3/components/or-date-picker-v3/index.js +6 -6
- package/dist/esm/v3/components/or-date-time-picker/OrDateTimePicker.vue.d.ts +177 -68
- package/dist/esm/v3/components/or-date-time-picker/partials/OrDateTimePickerCalendarItem.vue.d.ts +33 -12
- package/dist/esm/v3/components/or-date-time-picker-v3/OrDateTimePicker.vue.d.ts +109 -94
- package/dist/esm/v3/components/or-date-time-picker-v3/index.js +6 -6
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-date-control/OrDateTimePickerDateControl.vue.d.ts +28 -11
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-date-select/OrDateTimePickerDateSelect.vue.d.ts +39 -17
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-mobile-control/OrDateTimePickerMobileControl.vue.d.ts +15 -7
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue.d.ts +85 -23
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-popover-footer/OrDateTimePickerPopoverFooter.vue.d.ts +17 -9
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-popover-header/OrDateTimePickerPopoverHeader.vue.d.ts +7 -4
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-time-control/OrDateTimePickerTimeControl.vue.d.ts +30 -11
- package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-time-select/OrDateTimePickerTimeSelect.vue.d.ts +43 -17
- package/dist/esm/v3/components/or-empty-state-v3/OrEmptyState.vue.d.ts +28 -11
- package/dist/esm/v3/components/or-error/OrError.vue.d.ts +8 -4
- package/dist/esm/v3/components/or-error-tag-v3/OrErrorTag.vue.d.ts +7 -4
- package/dist/esm/v3/components/or-error-v3/OrError.vue.d.ts +18 -9
- package/dist/esm/v3/components/or-expansion-panel-v3/OrExpansionPanel.vue.d.ts +39 -16
- package/dist/esm/v3/components/or-fab-v3/OrFab.vue.d.ts +20 -8
- package/dist/esm/v3/components/or-floating/OrFloating.vue.d.ts +46 -15
- package/dist/esm/v3/components/or-form-group-v3/OrFormGroup.vue.d.ts +30 -10
- package/dist/esm/v3/components/or-hint/OrHint.vue.d.ts +8 -4
- package/dist/esm/v3/components/or-hint-v3/OrHint.vue.d.ts +18 -9
- package/dist/esm/v3/components/or-icon/OrIcon.vue.d.ts +44 -16
- package/dist/esm/v3/components/or-icon-button-v2/OrIconButton.vue.d.ts +43 -13
- package/dist/esm/v3/components/or-icon-button-v2/partials/OrTooltipWrapper.vue.d.ts +10 -8
- package/dist/esm/v3/components/or-icon-button-v3/OrIconButton.vue.d.ts +54 -16
- package/dist/esm/v3/components/or-icon-button-v3/index.js +3 -3
- package/dist/esm/v3/components/or-icon-v3/OrIcon.vue.d.ts +18 -7
- package/dist/esm/v3/components/or-inline-input-box-v3/OrInlineInputBox.vue.d.ts +16 -7
- package/dist/esm/v3/components/or-inline-input-v3/OrInlineInput.vue.d.ts +83 -39
- package/dist/esm/v3/components/or-inline-input-v3/index.js +4 -4
- package/dist/esm/v3/components/or-inline-text-edit/OrInlineTextEdit.vue.d.ts +95 -43
- package/dist/esm/v3/components/or-inline-textarea-v3/OrInlineTextarea.vue.d.ts +79 -39
- package/dist/esm/v3/components/or-inline-textarea-v3/index.js +4 -4
- package/dist/esm/v3/components/or-input/OrInput.vue.d.ts +87 -36
- package/dist/esm/v3/components/or-input-box-v3/OrInputBox.vue.d.ts +22 -7
- package/dist/esm/v3/components/or-input-box-v3/partials/or-input-box-addon/OrInputBoxAddon.vue.d.ts +18 -7
- package/dist/esm/v3/components/or-input-v3/OrInput.vue.d.ts +88 -38
- package/dist/esm/v3/components/or-input-v3/index.js +4 -4
- package/dist/esm/v3/components/or-label/OrLabel.vue.d.ts +20 -9
- package/dist/esm/v3/components/or-label-v3/OrLabel.vue.d.ts +26 -9
- package/dist/esm/v3/components/or-link-v3/OrLink.vue.d.ts +24 -7
- package/dist/esm/v3/components/or-list/OrList.vue.d.ts +47 -21
- package/dist/esm/v3/components/or-list-of-inputs/OrListOfInputs.vue.d.ts +27 -11
- package/dist/esm/v3/components/or-loader/OrLoader.vue.d.ts +26 -10
- package/dist/esm/v3/components/or-loader-v3/OrLoader.vue.d.ts +34 -13
- package/dist/esm/v3/components/or-menu-item-v3/OrMenuItem.vue.d.ts +34 -13
- package/dist/esm/v3/components/or-menu-v3/OrMenu.vue.d.ts +33 -15
- package/dist/esm/v3/components/or-menu-v3/index.js +2 -2
- package/dist/esm/v3/components/or-modal/OrModal.vue.d.ts +38 -14
- package/dist/esm/v3/components/or-modal-v3/OrModal.vue.d.ts +25 -13
- package/dist/esm/v3/components/or-modal-v3/index.js +4 -4
- package/dist/esm/v3/components/or-modal-v3/partials/or-modal-content/OrModalContent.vue.d.ts +7 -4
- package/dist/esm/v3/components/or-modal-v3/partials/or-modal-footer/OrModalFooter.vue.d.ts +7 -4
- package/dist/esm/v3/components/or-modal-v3/partials/or-modal-header/OrModalHeader.vue.d.ts +11 -6
- package/dist/esm/v3/components/or-notification/OrNotification.vue.d.ts +27 -9
- package/dist/esm/v3/components/or-notification-v3/OrNotification.vue.d.ts +20 -9
- package/dist/esm/v3/components/or-notification-v3/index.js +4 -4
- package/dist/esm/v3/components/or-number-input/OrNumberInput.vue.d.ts +70 -24
- package/dist/esm/v3/components/or-overflow-menu/OrOverflowMenu.vue.d.ts +31 -13
- package/dist/esm/v3/components/or-overflow-menu/partials/OrOverflowMenuItem.vue.d.ts +23 -7
- package/dist/esm/v3/components/or-overlay/OrOverlay.vue.d.ts +16 -6
- package/dist/esm/v3/components/or-overlay-v3/OrOverlay.vue.d.ts +14 -7
- package/dist/esm/v3/components/or-pagination-v3/OrPagination.vue.d.ts +75 -27
- package/dist/esm/v3/components/or-pagination-v3/index.js +3 -3
- package/dist/esm/v3/components/or-password/OrPassword.vue.d.ts +63 -22
- package/dist/esm/v3/components/or-popover-v3/OrPopover.vue.d.ts +92 -32
- package/dist/esm/v3/components/or-popover-v3/index.js +1 -1
- package/dist/esm/v3/components/or-progress/OrProgress.vue.d.ts +56 -20
- package/dist/esm/v3/components/or-progress-v3/OrProgress.vue.d.ts +62 -25
- package/dist/esm/v3/components/or-radio/OrRadio.vue.d.ts +35 -13
- package/dist/esm/v3/components/or-radio-group/OrRadioGroup.vue.d.ts +26 -9
- package/dist/esm/v3/components/or-radio-group-v3/OrRadioGroup.vue.d.ts +32 -6
- package/dist/esm/v3/components/or-radio-v3/OrRadio.vue.d.ts +49 -21
- package/dist/esm/v3/components/or-rich-text-editor-v3/OrRichTextEditor.vue.d.ts +194 -0
- package/dist/esm/v3/components/or-rich-text-editor-v3/index.d.ts +2 -0
- package/dist/esm/v3/components/or-rich-text-editor-v3/index.js +65 -0
- package/dist/esm/v3/components/or-rich-text-editor-v3/props.d.ts +5 -0
- package/dist/esm/v3/components/or-rich-text-editor-v3/styles.d.ts +6 -0
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/codemirror/codemirrorNode.d.ts +3 -0
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/codemirror/codemirrorView.d.ts +27 -0
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/codemirror/index.d.ts +1 -0
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/codemirror/index.js +9 -0
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/codemirror/theme.d.ts +17 -0
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/codemirror/types.d.ts +19 -0
- package/dist/esm/v3/components/or-rich-text-editor-v3/utils/markdown.d.ts +3 -0
- package/dist/esm/v3/components/or-search/OrSearch.vue.d.ts +65 -23
- package/dist/esm/v3/components/or-search-v3/OrSearch.vue.d.ts +41 -17
- package/dist/esm/v3/components/or-search-v3/index.js +5 -5
- package/dist/esm/v3/components/or-segmented-control-v3/OrSegmentedControl.vue.d.ts +25 -9
- package/dist/esm/v3/components/or-segmented-control-v3/partials/or-segmented-control-item/OrSegmentedControlItem.vue.d.ts +20 -8
- package/dist/esm/v3/components/or-select/OrSelect.vue.d.ts +77 -28
- package/dist/esm/v3/components/or-select/partials/OrSelectContent.vue.d.ts +49 -18
- package/dist/esm/v3/components/or-select/partials/OrSelectContentEmpty.vue.d.ts +16 -4
- package/dist/esm/v3/components/or-select/partials/OrSelectContentOptions.vue.d.ts +67 -13
- package/dist/esm/v3/components/or-select/partials/OrSelectInput.vue.d.ts +41 -16
- package/dist/esm/v3/components/or-select/partials/OrSelectInputValue.vue.d.ts +35 -16
- package/dist/esm/v3/components/or-select/partials/OrSelectMain.vue.d.ts +71 -24
- package/dist/esm/v3/components/or-select/partials/OrSelectOption.vue.d.ts +19 -7
- package/dist/esm/v3/components/or-select/partials/OrSelectSearchOptions.vue.d.ts +24 -11
- package/dist/esm/v3/components/or-select-v3/OrSelect.vue.d.ts +133 -44
- package/dist/esm/v3/components/or-select-v3/index.js +6 -6
- package/dist/esm/v3/components/or-select-v3/partials/or-select-placeholder/OrSelectPlaceholder.vue.d.ts +14 -7
- package/dist/esm/v3/components/or-sidebar/OrSidebar.vue.d.ts +33 -14
- package/dist/esm/v3/components/or-sidebar-v3/OrSidebar.vue.d.ts +63 -28
- package/dist/esm/v3/components/or-sidebar-v3/index.js +5 -5
- package/dist/esm/v3/components/or-sidebar-v3/partials/index.js +4 -4
- package/dist/esm/v3/components/or-sidebar-v3/partials/or-sidebar-collapse-button/OrSidebarCollapseButton.vue.d.ts +23 -10
- package/dist/esm/v3/components/or-skeleton/or-skeleton-circle/OrSkeletonCircle.vue.d.ts +20 -9
- package/dist/esm/v3/components/or-skeleton/or-skeleton-rect/OrSkeletonRect.vue.d.ts +22 -9
- package/dist/esm/v3/components/or-skeleton/or-skeleton-text/OrSkeletonText.vue.d.ts +26 -10
- package/dist/esm/v3/components/or-skeleton-v3/or-skeleton-circle-v3/OrSkeletonCircle.vue.d.ts +28 -13
- package/dist/esm/v3/components/or-skeleton-v3/or-skeleton-rect-v3/OrSkeletonRect.vue.d.ts +26 -11
- package/dist/esm/v3/components/or-skeleton-v3/or-skeleton-text-v3/OrSkeletonText.vue.d.ts +40 -16
- package/dist/esm/v3/components/or-slider/OrSlider.vue.d.ts +91 -35
- package/dist/esm/v3/components/or-sorting-v3/OrSorting.vue.d.ts +45 -13
- package/dist/esm/v3/components/or-sorting-v3/index.js +3 -3
- package/dist/esm/v3/components/or-stepper/OrStepper.vue.d.ts +43 -16
- package/dist/esm/v3/components/or-stepper/partials/OrStepperButtonOptions.vue.d.ts +20 -4
- package/dist/esm/v3/components/or-stepper/partials/OrStepperOptionHorizontal.vue.d.ts +26 -4
- package/dist/esm/v3/components/or-stepper/partials/OrStepperOptionVertical.vue.d.ts +26 -4
- package/dist/esm/v3/components/or-stepper/partials/OrStepperTitle.vue.d.ts +22 -6
- package/dist/esm/v3/components/or-stepper/partials/StatusIcon.vue.d.ts +12 -6
- package/dist/esm/v3/components/or-switch/OrSwitch.vue.d.ts +33 -12
- package/dist/esm/v3/components/or-switch-v3/OrSwitch.vue.d.ts +53 -22
- package/dist/esm/v3/components/or-tab/OrTab.vue.d.ts +22 -9
- package/dist/esm/v3/components/or-tab-header-item/OrTabHeaderItem.vue.d.ts +29 -13
- package/dist/esm/v3/components/or-tab-v3/OrTab.vue.d.ts +17 -10
- package/dist/esm/v3/components/or-tabs/OrTabs.vue.d.ts +17 -4
- package/dist/esm/v3/components/or-tabs-v3/OrTabs.vue.d.ts +73 -26
- package/dist/esm/v3/components/or-tabs-v3/index.js +3 -3
- package/dist/esm/v3/components/or-tag/OrTag.vue.d.ts +27 -10
- package/dist/esm/v3/components/or-tag-input-v3/OrTagInput.vue.d.ts +85 -37
- package/dist/esm/v3/components/or-tag-input-v3/index.js +6 -6
- package/dist/esm/v3/components/or-tag-v3/OrTag.vue.d.ts +23 -12
- package/dist/esm/v3/components/or-tag-v3/index.js +4 -4
- package/dist/esm/v3/components/or-tags-v3/OrTags.vue.d.ts +68 -23
- package/dist/esm/v3/components/or-tags-v3/index.js +5 -5
- package/dist/esm/v3/components/or-teleport/OrTeleport.vue3.vue.d.ts +10 -4
- package/dist/esm/v3/components/or-teleport-v3/OrTeleport.vue3.vue.d.ts +10 -4
- package/dist/esm/v3/components/or-text-v3/OrText.vue.d.ts +24 -11
- package/dist/esm/v3/components/or-textarea/OrTextarea.vue.d.ts +85 -37
- package/dist/esm/v3/components/or-textarea-v3/OrTextarea.vue.d.ts +73 -32
- package/dist/esm/v3/components/or-textbox/OrTextbox.vue.d.ts +137 -55
- package/dist/esm/v3/components/or-time-picker-v3/OrTimePicker.vue.d.ts +83 -88
- package/dist/esm/v3/components/or-time-picker-v3/index.js +7 -7
- package/dist/esm/v3/components/or-toast/OrToast.vue.d.ts +31 -11
- package/dist/esm/v3/components/or-toast/or-toast-container/OrToastContainer.vue.d.ts +55 -25
- package/dist/esm/v3/components/or-toast-v3/OrToast.vue.d.ts +38 -16
- package/dist/esm/v3/components/or-toast-v3/index.js +4 -4
- package/dist/esm/v3/components/or-toast-v3/or-toast-container-v3/OrToastContainer.vue.d.ts +54 -24
- package/dist/esm/v3/components/or-toast-v3/or-toast-container-v3/index.js +4 -4
- package/dist/esm/v3/components/or-tooltip/OrTooltip.vue.d.ts +33 -14
- package/dist/esm/v3/components/or-tooltip/or-tooltip-content/OrTooltipContent.vue.d.ts +10 -4
- package/dist/esm/v3/components/or-tooltip-v3/OrTooltip.vue.d.ts +33 -15
- package/dist/esm/v3/components/or-tooltip-v3/index.js +2 -2
- package/dist/esm/v3/components/or-tree-v3/OrTree.vue.d.ts +19 -13
- package/dist/esm/v3/components/or-tree-v3/partials/or-tree-node/OrTreeNode.vue.d.ts +63 -31
- package/dist/esm/v3/directives/dropdown-close.d.ts +1 -3
- package/dist/esm/v3/directives/dropdown-open.d.ts +1 -3
- package/dist/esm/v3/hooks/useResponsive/useResponsive.d.ts +2 -2
- package/dist/esm/v3/index.js +52 -28
- package/dist/esm/v3/{types-777d6e58.js → types-c4c1e2cc.js} +1 -1
- package/package.json +24 -4
- package/src/components/index.ts +1 -0
- package/src/components/or-code-v3/OrCode.vue +50 -64
- package/src/components/or-popover-v3/OrPopover.vue +1 -1
- package/src/components/or-rich-text-editor-v3/OrRichTextEditor.vue +745 -0
- package/src/components/or-rich-text-editor-v3/index.ts +2 -0
- package/src/components/or-rich-text-editor-v3/props.ts +6 -0
- package/src/components/or-rich-text-editor-v3/styles.ts +53 -0
- package/src/components/or-rich-text-editor-v3/utils/codemirror/codemirrorNode.ts +40 -0
- package/src/components/or-rich-text-editor-v3/utils/codemirror/codemirrorView.ts +254 -0
- package/src/components/or-rich-text-editor-v3/utils/codemirror/index.ts +1 -0
- package/src/components/or-rich-text-editor-v3/utils/codemirror/theme.ts +238 -0
- package/src/components/or-rich-text-editor-v3/utils/codemirror/types.ts +22 -0
- package/src/components/or-rich-text-editor-v3/utils/markdown.ts +172 -0
- package/dist/bundled/v2/index-648acd9e.js +0 -1598
- package/dist/bundled/v2/index-64a3a364.js +0 -759
- package/dist/bundled/v2/index-c26082b9.js +0 -1892
- package/dist/bundled/v2/index-e72fe4a8.js +0 -361
- package/dist/bundled/v2/index-f31843f4.js +0 -94
- package/dist/bundled/v3/index-19d70079.js +0 -94
- package/dist/bundled/v3/index-22f7d3aa.js +0 -759
- package/dist/bundled/v3/index-792c62f6.js +0 -361
- package/dist/bundled/v3/index-bb6d92dd.js +0 -1892
- package/dist/bundled/v3/index-df2529d7.js +0 -1598
- /package/dist/bundled/v2/{OrDateTimePickerMonthSelect-e7037d50.js → OrDateTimePickerMonthSelect-c329e727.js} +0 -0
- /package/dist/bundled/v2/{OrDateTimePickerPopoverHeader-2c7e113b.js → OrDateTimePickerPopoverHeader-146c2f16.js} +0 -0
- /package/dist/bundled/v2/{OrDateTimePickerTimeSelect-7fd83e23.js → OrDateTimePickerTimeSelect-7286977a.js} +0 -0
- /package/dist/bundled/v3/{OrExpansionPanel.vue_vue_type_script_lang-de05b51f.js → OrExpansionPanel.vue_vue_type_script_lang-94976ae9.js} +0 -0
|
@@ -0,0 +1,4048 @@
|
|
|
1
|
+
import { s as syntaxTree, E as EditorView, q as codePointSize, p as codePointAt, b as EditorSelection, t as CharCategory, P as Prec, k as keymap, F as Facet, c as combineConfig, D as Direction, a2 as getTooltip, V as ViewPlugin, y as logException, l as StateEffect, S as StateField, G as showTooltip, a3 as MapMode, a4 as RangeValue, B as RangeSet, u as fromCodePoint, A as Annotation, e as Text, f as indentUnit, o as Decoration, W as WidgetType, a5 as Parser, a6 as NodeSet, a7 as NodeType, a8 as DefaultBufferLength, N as NodeProp, a9 as Tree, aa as IterMode, ab as styleTags, ac as tags, ad as LanguageSupport, ae as LRLanguage, af as indentNodeProp, ag as continuedIndent, ah as flatIndent, ai as delimitedIndent, aj as foldNodeProp, ak as foldInside, al as sublanguageProp, am as defineLanguageFacet, an as NodeWeakMap } from './index-3cae2d25.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
An instance of this is passed to completion source functions.
|
|
5
|
+
*/
|
|
6
|
+
class CompletionContext {
|
|
7
|
+
/**
|
|
8
|
+
Create a new completion context. (Mostly useful for testing
|
|
9
|
+
completion sources—in the editor, the extension will create
|
|
10
|
+
these for you.)
|
|
11
|
+
*/
|
|
12
|
+
constructor(
|
|
13
|
+
/**
|
|
14
|
+
The editor state that the completion happens in.
|
|
15
|
+
*/
|
|
16
|
+
state,
|
|
17
|
+
/**
|
|
18
|
+
The position at which the completion is happening.
|
|
19
|
+
*/
|
|
20
|
+
pos,
|
|
21
|
+
/**
|
|
22
|
+
Indicates whether completion was activated explicitly, or
|
|
23
|
+
implicitly by typing. The usual way to respond to this is to
|
|
24
|
+
only return completions when either there is part of a
|
|
25
|
+
completable entity before the cursor, or `explicit` is true.
|
|
26
|
+
*/
|
|
27
|
+
explicit) {
|
|
28
|
+
this.state = state;
|
|
29
|
+
this.pos = pos;
|
|
30
|
+
this.explicit = explicit;
|
|
31
|
+
/**
|
|
32
|
+
@internal
|
|
33
|
+
*/
|
|
34
|
+
this.abortListeners = [];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
Get the extent, content, and (if there is a token) type of the
|
|
38
|
+
token before `this.pos`.
|
|
39
|
+
*/
|
|
40
|
+
tokenBefore(types) {
|
|
41
|
+
let token = syntaxTree(this.state).resolveInner(this.pos, -1);
|
|
42
|
+
while (token && types.indexOf(token.name) < 0) token = token.parent;
|
|
43
|
+
return token ? {
|
|
44
|
+
from: token.from,
|
|
45
|
+
to: this.pos,
|
|
46
|
+
text: this.state.sliceDoc(token.from, this.pos),
|
|
47
|
+
type: token.type
|
|
48
|
+
} : null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
Get the match of the given expression directly before the
|
|
52
|
+
cursor.
|
|
53
|
+
*/
|
|
54
|
+
matchBefore(expr) {
|
|
55
|
+
let line = this.state.doc.lineAt(this.pos);
|
|
56
|
+
let start = Math.max(line.from, this.pos - 250);
|
|
57
|
+
let str = line.text.slice(start - line.from, this.pos - line.from);
|
|
58
|
+
let found = str.search(ensureAnchor(expr, false));
|
|
59
|
+
return found < 0 ? null : {
|
|
60
|
+
from: start + found,
|
|
61
|
+
to: this.pos,
|
|
62
|
+
text: str.slice(found)
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
Yields true when the query has been aborted. Can be useful in
|
|
67
|
+
asynchronous queries to avoid doing work that will be ignored.
|
|
68
|
+
*/
|
|
69
|
+
get aborted() {
|
|
70
|
+
return this.abortListeners == null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
Allows you to register abort handlers, which will be called when
|
|
74
|
+
the query is
|
|
75
|
+
[aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).
|
|
76
|
+
*/
|
|
77
|
+
addEventListener(type, listener) {
|
|
78
|
+
if (type == "abort" && this.abortListeners) this.abortListeners.push(listener);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function toSet(chars) {
|
|
82
|
+
let flat = Object.keys(chars).join("");
|
|
83
|
+
let words = /\w/.test(flat);
|
|
84
|
+
if (words) flat = flat.replace(/\w/g, "");
|
|
85
|
+
return `[${words ? "\\w" : ""}${flat.replace(/[^\w\s]/g, "\\$&")}]`;
|
|
86
|
+
}
|
|
87
|
+
function prefixMatch(options) {
|
|
88
|
+
let first = Object.create(null),
|
|
89
|
+
rest = Object.create(null);
|
|
90
|
+
for (let {
|
|
91
|
+
label
|
|
92
|
+
} of options) {
|
|
93
|
+
first[label[0]] = true;
|
|
94
|
+
for (let i = 1; i < label.length; i++) rest[label[i]] = true;
|
|
95
|
+
}
|
|
96
|
+
let source = toSet(first) + toSet(rest) + "*$";
|
|
97
|
+
return [new RegExp("^" + source), new RegExp(source)];
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
Given a a fixed array of options, return an autocompleter that
|
|
101
|
+
completes them.
|
|
102
|
+
*/
|
|
103
|
+
function completeFromList(list) {
|
|
104
|
+
let options = list.map(o => typeof o == "string" ? {
|
|
105
|
+
label: o
|
|
106
|
+
} : o);
|
|
107
|
+
let [validFor, match] = options.every(o => /^\w+$/.test(o.label)) ? [/\w*$/, /\w+$/] : prefixMatch(options);
|
|
108
|
+
return context => {
|
|
109
|
+
let token = context.matchBefore(match);
|
|
110
|
+
return token || context.explicit ? {
|
|
111
|
+
from: token ? token.from : context.pos,
|
|
112
|
+
options,
|
|
113
|
+
validFor
|
|
114
|
+
} : null;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
Wrap the given completion source so that it will not fire when the
|
|
119
|
+
cursor is in a syntax node with one of the given names.
|
|
120
|
+
*/
|
|
121
|
+
function ifNotIn(nodes, source) {
|
|
122
|
+
return context => {
|
|
123
|
+
for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {
|
|
124
|
+
if (nodes.indexOf(pos.name) > -1) return null;
|
|
125
|
+
if (pos.type.isTop) break;
|
|
126
|
+
}
|
|
127
|
+
return source(context);
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
class Option {
|
|
131
|
+
constructor(completion, source, match, score) {
|
|
132
|
+
this.completion = completion;
|
|
133
|
+
this.source = source;
|
|
134
|
+
this.match = match;
|
|
135
|
+
this.score = score;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function cur(state) {
|
|
139
|
+
return state.selection.main.from;
|
|
140
|
+
}
|
|
141
|
+
// Make sure the given regexp has a $ at its end and, if `start` is
|
|
142
|
+
// true, a ^ at its start.
|
|
143
|
+
function ensureAnchor(expr, start) {
|
|
144
|
+
var _a;
|
|
145
|
+
let {
|
|
146
|
+
source
|
|
147
|
+
} = expr;
|
|
148
|
+
let addStart = start && source[0] != "^",
|
|
149
|
+
addEnd = source[source.length - 1] != "$";
|
|
150
|
+
if (!addStart && !addEnd) return expr;
|
|
151
|
+
return new RegExp(`${addStart ? "^" : ""}(?:${source})${addEnd ? "$" : ""}`, (_a = expr.flags) !== null && _a !== void 0 ? _a : expr.ignoreCase ? "i" : "");
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
This annotation is added to transactions that are produced by
|
|
155
|
+
picking a completion.
|
|
156
|
+
*/
|
|
157
|
+
const pickedCompletion = /*@__PURE__*/Annotation.define();
|
|
158
|
+
/**
|
|
159
|
+
Helper function that returns a transaction spec which inserts a
|
|
160
|
+
completion's text in the main selection range, and any other
|
|
161
|
+
selection range that has the same text in front of it.
|
|
162
|
+
*/
|
|
163
|
+
function insertCompletionText(state, text, from, to) {
|
|
164
|
+
let {
|
|
165
|
+
main
|
|
166
|
+
} = state.selection,
|
|
167
|
+
fromOff = from - main.from,
|
|
168
|
+
toOff = to - main.from;
|
|
169
|
+
return Object.assign(Object.assign({}, state.changeByRange(range => {
|
|
170
|
+
if (range != main && from != to && state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to)) return {
|
|
171
|
+
range
|
|
172
|
+
};
|
|
173
|
+
return {
|
|
174
|
+
changes: {
|
|
175
|
+
from: range.from + fromOff,
|
|
176
|
+
to: to == main.from ? range.to : range.from + toOff,
|
|
177
|
+
insert: text
|
|
178
|
+
},
|
|
179
|
+
range: EditorSelection.cursor(range.from + fromOff + text.length)
|
|
180
|
+
};
|
|
181
|
+
})), {
|
|
182
|
+
userEvent: "input.complete"
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
const SourceCache = /*@__PURE__*/new WeakMap();
|
|
186
|
+
function asSource(source) {
|
|
187
|
+
if (!Array.isArray(source)) return source;
|
|
188
|
+
let known = SourceCache.get(source);
|
|
189
|
+
if (!known) SourceCache.set(source, known = completeFromList(source));
|
|
190
|
+
return known;
|
|
191
|
+
}
|
|
192
|
+
const startCompletionEffect = /*@__PURE__*/StateEffect.define();
|
|
193
|
+
const closeCompletionEffect = /*@__PURE__*/StateEffect.define();
|
|
194
|
+
|
|
195
|
+
// A pattern matcher for fuzzy completion matching. Create an instance
|
|
196
|
+
// once for a pattern, and then use that to match any number of
|
|
197
|
+
// completions.
|
|
198
|
+
class FuzzyMatcher {
|
|
199
|
+
constructor(pattern) {
|
|
200
|
+
this.pattern = pattern;
|
|
201
|
+
this.chars = [];
|
|
202
|
+
this.folded = [];
|
|
203
|
+
// Buffers reused by calls to `match` to track matched character
|
|
204
|
+
// positions.
|
|
205
|
+
this.any = [];
|
|
206
|
+
this.precise = [];
|
|
207
|
+
this.byWord = [];
|
|
208
|
+
for (let p = 0; p < pattern.length;) {
|
|
209
|
+
let char = codePointAt(pattern, p),
|
|
210
|
+
size = codePointSize(char);
|
|
211
|
+
this.chars.push(char);
|
|
212
|
+
let part = pattern.slice(p, p + size),
|
|
213
|
+
upper = part.toUpperCase();
|
|
214
|
+
this.folded.push(codePointAt(upper == part ? part.toLowerCase() : upper, 0));
|
|
215
|
+
p += size;
|
|
216
|
+
}
|
|
217
|
+
this.astral = pattern.length != this.chars.length;
|
|
218
|
+
}
|
|
219
|
+
// Matches a given word (completion) against the pattern (input).
|
|
220
|
+
// Will return null for no match, and otherwise an array that starts
|
|
221
|
+
// with the match score, followed by any number of `from, to` pairs
|
|
222
|
+
// indicating the matched parts of `word`.
|
|
223
|
+
//
|
|
224
|
+
// The score is a number that is more negative the worse the match
|
|
225
|
+
// is. See `Penalty` above.
|
|
226
|
+
match(word) {
|
|
227
|
+
if (this.pattern.length == 0) return [-100 /* Penalty.NotFull */];
|
|
228
|
+
if (word.length < this.pattern.length) return null;
|
|
229
|
+
let {
|
|
230
|
+
chars,
|
|
231
|
+
folded,
|
|
232
|
+
any,
|
|
233
|
+
precise,
|
|
234
|
+
byWord
|
|
235
|
+
} = this;
|
|
236
|
+
// For single-character queries, only match when they occur right
|
|
237
|
+
// at the start
|
|
238
|
+
if (chars.length == 1) {
|
|
239
|
+
let first = codePointAt(word, 0),
|
|
240
|
+
firstSize = codePointSize(first);
|
|
241
|
+
let score = firstSize == word.length ? 0 : -100 /* Penalty.NotFull */;
|
|
242
|
+
if (first == chars[0]) ;else if (first == folded[0]) score += -200 /* Penalty.CaseFold */;else return null;
|
|
243
|
+
return [score, 0, firstSize];
|
|
244
|
+
}
|
|
245
|
+
let direct = word.indexOf(this.pattern);
|
|
246
|
+
if (direct == 0) return [word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */, 0, this.pattern.length];
|
|
247
|
+
let len = chars.length,
|
|
248
|
+
anyTo = 0;
|
|
249
|
+
if (direct < 0) {
|
|
250
|
+
for (let i = 0, e = Math.min(word.length, 200); i < e && anyTo < len;) {
|
|
251
|
+
let next = codePointAt(word, i);
|
|
252
|
+
if (next == chars[anyTo] || next == folded[anyTo]) any[anyTo++] = i;
|
|
253
|
+
i += codePointSize(next);
|
|
254
|
+
}
|
|
255
|
+
// No match, exit immediately
|
|
256
|
+
if (anyTo < len) return null;
|
|
257
|
+
}
|
|
258
|
+
// This tracks the extent of the precise (non-folded, not
|
|
259
|
+
// necessarily adjacent) match
|
|
260
|
+
let preciseTo = 0;
|
|
261
|
+
// Tracks whether there is a match that hits only characters that
|
|
262
|
+
// appear to be starting words. `byWordFolded` is set to true when
|
|
263
|
+
// a case folded character is encountered in such a match
|
|
264
|
+
let byWordTo = 0,
|
|
265
|
+
byWordFolded = false;
|
|
266
|
+
// If we've found a partial adjacent match, these track its state
|
|
267
|
+
let adjacentTo = 0,
|
|
268
|
+
adjacentStart = -1,
|
|
269
|
+
adjacentEnd = -1;
|
|
270
|
+
let hasLower = /[a-z]/.test(word),
|
|
271
|
+
wordAdjacent = true;
|
|
272
|
+
// Go over the option's text, scanning for the various kinds of matches
|
|
273
|
+
for (let i = 0, e = Math.min(word.length, 200), prevType = 0 /* Tp.NonWord */; i < e && byWordTo < len;) {
|
|
274
|
+
let next = codePointAt(word, i);
|
|
275
|
+
if (direct < 0) {
|
|
276
|
+
if (preciseTo < len && next == chars[preciseTo]) precise[preciseTo++] = i;
|
|
277
|
+
if (adjacentTo < len) {
|
|
278
|
+
if (next == chars[adjacentTo] || next == folded[adjacentTo]) {
|
|
279
|
+
if (adjacentTo == 0) adjacentStart = i;
|
|
280
|
+
adjacentEnd = i + 1;
|
|
281
|
+
adjacentTo++;
|
|
282
|
+
} else {
|
|
283
|
+
adjacentTo = 0;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
let ch,
|
|
288
|
+
type = next < 0xff ? next >= 48 && next <= 57 || next >= 97 && next <= 122 ? 2 /* Tp.Lower */ : next >= 65 && next <= 90 ? 1 /* Tp.Upper */ : 0 /* Tp.NonWord */ : (ch = fromCodePoint(next)) != ch.toLowerCase() ? 1 /* Tp.Upper */ : ch != ch.toUpperCase() ? 2 /* Tp.Lower */ : 0 /* Tp.NonWord */;
|
|
289
|
+
if (!i || type == 1 /* Tp.Upper */ && hasLower || prevType == 0 /* Tp.NonWord */ && type != 0 /* Tp.NonWord */) {
|
|
290
|
+
if (chars[byWordTo] == next || folded[byWordTo] == next && (byWordFolded = true)) byWord[byWordTo++] = i;else if (byWord.length) wordAdjacent = false;
|
|
291
|
+
}
|
|
292
|
+
prevType = type;
|
|
293
|
+
i += codePointSize(next);
|
|
294
|
+
}
|
|
295
|
+
if (byWordTo == len && byWord[0] == 0 && wordAdjacent) return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0), byWord, word);
|
|
296
|
+
if (adjacentTo == len && adjacentStart == 0) return [-200 /* Penalty.CaseFold */ - word.length + (adjacentEnd == word.length ? 0 : -100 /* Penalty.NotFull */), 0, adjacentEnd];
|
|
297
|
+
if (direct > -1) return [-700 /* Penalty.NotStart */ - word.length, direct, direct + this.pattern.length];
|
|
298
|
+
if (adjacentTo == len) return [-200 /* Penalty.CaseFold */ + -700 /* Penalty.NotStart */ - word.length, adjacentStart, adjacentEnd];
|
|
299
|
+
if (byWordTo == len) return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0) + -700 /* Penalty.NotStart */ + (wordAdjacent ? 0 : -1100 /* Penalty.Gap */), byWord, word);
|
|
300
|
+
return chars.length == 2 ? null : this.result((any[0] ? -700 /* Penalty.NotStart */ : 0) + -200 /* Penalty.CaseFold */ + -1100 /* Penalty.Gap */, any, word);
|
|
301
|
+
}
|
|
302
|
+
result(score, positions, word) {
|
|
303
|
+
let result = [score - word.length],
|
|
304
|
+
i = 1;
|
|
305
|
+
for (let pos of positions) {
|
|
306
|
+
let to = pos + (this.astral ? codePointSize(codePointAt(word, pos)) : 1);
|
|
307
|
+
if (i > 1 && result[i - 1] == pos) result[i - 1] = to;else {
|
|
308
|
+
result[i++] = pos;
|
|
309
|
+
result[i++] = to;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return result;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
const completionConfig = /*@__PURE__*/Facet.define({
|
|
316
|
+
combine(configs) {
|
|
317
|
+
return combineConfig(configs, {
|
|
318
|
+
activateOnTyping: true,
|
|
319
|
+
selectOnOpen: true,
|
|
320
|
+
override: null,
|
|
321
|
+
closeOnBlur: true,
|
|
322
|
+
maxRenderedOptions: 100,
|
|
323
|
+
defaultKeymap: true,
|
|
324
|
+
tooltipClass: () => "",
|
|
325
|
+
optionClass: () => "",
|
|
326
|
+
aboveCursor: false,
|
|
327
|
+
icons: true,
|
|
328
|
+
addToOptions: [],
|
|
329
|
+
positionInfo: defaultPositionInfo,
|
|
330
|
+
compareCompletions: (a, b) => a.label.localeCompare(b.label),
|
|
331
|
+
interactionDelay: 75
|
|
332
|
+
}, {
|
|
333
|
+
defaultKeymap: (a, b) => a && b,
|
|
334
|
+
closeOnBlur: (a, b) => a && b,
|
|
335
|
+
icons: (a, b) => a && b,
|
|
336
|
+
tooltipClass: (a, b) => c => joinClass(a(c), b(c)),
|
|
337
|
+
optionClass: (a, b) => c => joinClass(a(c), b(c)),
|
|
338
|
+
addToOptions: (a, b) => a.concat(b)
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
function joinClass(a, b) {
|
|
343
|
+
return a ? b ? a + " " + b : a : b;
|
|
344
|
+
}
|
|
345
|
+
function defaultPositionInfo(view, list, option, info, space) {
|
|
346
|
+
let rtl = view.textDirection == Direction.RTL,
|
|
347
|
+
left = rtl,
|
|
348
|
+
narrow = false;
|
|
349
|
+
let side = "top",
|
|
350
|
+
offset,
|
|
351
|
+
maxWidth;
|
|
352
|
+
let spaceLeft = list.left - space.left,
|
|
353
|
+
spaceRight = space.right - list.right;
|
|
354
|
+
let infoWidth = info.right - info.left,
|
|
355
|
+
infoHeight = info.bottom - info.top;
|
|
356
|
+
if (left && spaceLeft < Math.min(infoWidth, spaceRight)) left = false;else if (!left && spaceRight < Math.min(infoWidth, spaceLeft)) left = true;
|
|
357
|
+
if (infoWidth <= (left ? spaceLeft : spaceRight)) {
|
|
358
|
+
offset = Math.max(space.top, Math.min(option.top, space.bottom - infoHeight)) - list.top;
|
|
359
|
+
maxWidth = Math.min(400 /* Info.Width */, left ? spaceLeft : spaceRight);
|
|
360
|
+
} else {
|
|
361
|
+
narrow = true;
|
|
362
|
+
maxWidth = Math.min(400 /* Info.Width */, (rtl ? list.right : space.right - list.left) - 30 /* Info.Margin */);
|
|
363
|
+
let spaceBelow = space.bottom - list.bottom;
|
|
364
|
+
if (spaceBelow >= infoHeight || spaceBelow > list.top) {
|
|
365
|
+
// Below the completion
|
|
366
|
+
offset = option.bottom - list.top;
|
|
367
|
+
} else {
|
|
368
|
+
// Above it
|
|
369
|
+
side = "bottom";
|
|
370
|
+
offset = list.bottom - option.top;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return {
|
|
374
|
+
style: `${side}: ${offset}px; max-width: ${maxWidth}px`,
|
|
375
|
+
class: "cm-completionInfo-" + (narrow ? rtl ? "left-narrow" : "right-narrow" : left ? "left" : "right")
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
Returns a command that moves the completion selection forward or
|
|
381
|
+
backward by the given amount.
|
|
382
|
+
*/
|
|
383
|
+
function moveCompletionSelection(forward) {
|
|
384
|
+
let by = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "option";
|
|
385
|
+
return view => {
|
|
386
|
+
let cState = view.state.field(completionState, false);
|
|
387
|
+
if (!cState || !cState.open || cState.open.disabled || Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay) return false;
|
|
388
|
+
let step = 1,
|
|
389
|
+
tooltip;
|
|
390
|
+
if (by == "page" && (tooltip = getTooltip(view, cState.open.tooltip))) step = Math.max(2, Math.floor(tooltip.dom.offsetHeight / tooltip.dom.querySelector("li").offsetHeight) - 1);
|
|
391
|
+
let {
|
|
392
|
+
length
|
|
393
|
+
} = cState.open.options;
|
|
394
|
+
let selected = cState.open.selected > -1 ? cState.open.selected + step * (forward ? 1 : -1) : forward ? 0 : length - 1;
|
|
395
|
+
if (selected < 0) selected = by == "page" ? 0 : length - 1;else if (selected >= length) selected = by == "page" ? length - 1 : 0;
|
|
396
|
+
view.dispatch({
|
|
397
|
+
effects: setSelectedEffect.of(selected)
|
|
398
|
+
});
|
|
399
|
+
return true;
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
Accept the current completion.
|
|
404
|
+
*/
|
|
405
|
+
const acceptCompletion = view => {
|
|
406
|
+
let cState = view.state.field(completionState, false);
|
|
407
|
+
if (view.state.readOnly || !cState || !cState.open || cState.open.selected < 0 || Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay) return false;
|
|
408
|
+
if (!cState.open.disabled) return applyCompletion(view, cState.open.options[cState.open.selected]);
|
|
409
|
+
return true;
|
|
410
|
+
};
|
|
411
|
+
/**
|
|
412
|
+
Explicitly start autocompletion.
|
|
413
|
+
*/
|
|
414
|
+
const startCompletion = view => {
|
|
415
|
+
let cState = view.state.field(completionState, false);
|
|
416
|
+
if (!cState) return false;
|
|
417
|
+
view.dispatch({
|
|
418
|
+
effects: startCompletionEffect.of(true)
|
|
419
|
+
});
|
|
420
|
+
return true;
|
|
421
|
+
};
|
|
422
|
+
/**
|
|
423
|
+
Close the currently active completion.
|
|
424
|
+
*/
|
|
425
|
+
const closeCompletion = view => {
|
|
426
|
+
let cState = view.state.field(completionState, false);
|
|
427
|
+
if (!cState || !cState.active.some(a => a.state != 0 /* State.Inactive */)) return false;
|
|
428
|
+
view.dispatch({
|
|
429
|
+
effects: closeCompletionEffect.of(null)
|
|
430
|
+
});
|
|
431
|
+
return true;
|
|
432
|
+
};
|
|
433
|
+
class RunningQuery {
|
|
434
|
+
constructor(active, context) {
|
|
435
|
+
this.active = active;
|
|
436
|
+
this.context = context;
|
|
437
|
+
this.time = Date.now();
|
|
438
|
+
this.updates = [];
|
|
439
|
+
// Note that 'undefined' means 'not done yet', whereas 'null' means
|
|
440
|
+
// 'query returned null'.
|
|
441
|
+
this.done = undefined;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
const DebounceTime = 50,
|
|
445
|
+
MaxUpdateCount = 50,
|
|
446
|
+
MinAbortTime = 1000;
|
|
447
|
+
const completionPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {
|
|
448
|
+
constructor(view) {
|
|
449
|
+
this.view = view;
|
|
450
|
+
this.debounceUpdate = -1;
|
|
451
|
+
this.running = [];
|
|
452
|
+
this.debounceAccept = -1;
|
|
453
|
+
this.composing = 0 /* CompositionState.None */;
|
|
454
|
+
for (let active of view.state.field(completionState).active) if (active.state == 1 /* State.Pending */) this.startQuery(active);
|
|
455
|
+
}
|
|
456
|
+
update(update) {
|
|
457
|
+
let cState = update.state.field(completionState);
|
|
458
|
+
if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState) return;
|
|
459
|
+
let doesReset = update.transactions.some(tr => {
|
|
460
|
+
return (tr.selection || tr.docChanged) && !getUserEvent(tr);
|
|
461
|
+
});
|
|
462
|
+
for (let i = 0; i < this.running.length; i++) {
|
|
463
|
+
let query = this.running[i];
|
|
464
|
+
if (doesReset || query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {
|
|
465
|
+
for (let handler of query.context.abortListeners) {
|
|
466
|
+
try {
|
|
467
|
+
handler();
|
|
468
|
+
} catch (e) {
|
|
469
|
+
logException(this.view.state, e);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
query.context.abortListeners = null;
|
|
473
|
+
this.running.splice(i--, 1);
|
|
474
|
+
} else {
|
|
475
|
+
query.updates.push(...update.transactions);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
if (this.debounceUpdate > -1) clearTimeout(this.debounceUpdate);
|
|
479
|
+
this.debounceUpdate = cState.active.some(a => a.state == 1 /* State.Pending */ && !this.running.some(q => q.active.source == a.source)) ? setTimeout(() => this.startUpdate(), DebounceTime) : -1;
|
|
480
|
+
if (this.composing != 0 /* CompositionState.None */) for (let tr of update.transactions) {
|
|
481
|
+
if (getUserEvent(tr) == "input") this.composing = 2 /* CompositionState.Changed */;else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection) this.composing = 3 /* CompositionState.ChangedAndMoved */;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
startUpdate() {
|
|
486
|
+
this.debounceUpdate = -1;
|
|
487
|
+
let {
|
|
488
|
+
state
|
|
489
|
+
} = this.view,
|
|
490
|
+
cState = state.field(completionState);
|
|
491
|
+
for (let active of cState.active) {
|
|
492
|
+
if (active.state == 1 /* State.Pending */ && !this.running.some(r => r.active.source == active.source)) this.startQuery(active);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
startQuery(active) {
|
|
496
|
+
let {
|
|
497
|
+
state
|
|
498
|
+
} = this.view,
|
|
499
|
+
pos = cur(state);
|
|
500
|
+
let context = new CompletionContext(state, pos, active.explicitPos == pos);
|
|
501
|
+
let pending = new RunningQuery(active, context);
|
|
502
|
+
this.running.push(pending);
|
|
503
|
+
Promise.resolve(active.source(context)).then(result => {
|
|
504
|
+
if (!pending.context.aborted) {
|
|
505
|
+
pending.done = result || null;
|
|
506
|
+
this.scheduleAccept();
|
|
507
|
+
}
|
|
508
|
+
}, err => {
|
|
509
|
+
this.view.dispatch({
|
|
510
|
+
effects: closeCompletionEffect.of(null)
|
|
511
|
+
});
|
|
512
|
+
logException(this.view.state, err);
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
scheduleAccept() {
|
|
516
|
+
if (this.running.every(q => q.done !== undefined)) this.accept();else if (this.debounceAccept < 0) this.debounceAccept = setTimeout(() => this.accept(), DebounceTime);
|
|
517
|
+
}
|
|
518
|
+
// For each finished query in this.running, try to create a result
|
|
519
|
+
// or, if appropriate, restart the query.
|
|
520
|
+
accept() {
|
|
521
|
+
var _a;
|
|
522
|
+
if (this.debounceAccept > -1) clearTimeout(this.debounceAccept);
|
|
523
|
+
this.debounceAccept = -1;
|
|
524
|
+
let updated = [];
|
|
525
|
+
let conf = this.view.state.facet(completionConfig);
|
|
526
|
+
for (let i = 0; i < this.running.length; i++) {
|
|
527
|
+
let query = this.running[i];
|
|
528
|
+
if (query.done === undefined) continue;
|
|
529
|
+
this.running.splice(i--, 1);
|
|
530
|
+
if (query.done) {
|
|
531
|
+
let active = new ActiveResult(query.active.source, query.active.explicitPos, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : cur(query.updates.length ? query.updates[0].startState : this.view.state));
|
|
532
|
+
// Replay the transactions that happened since the start of
|
|
533
|
+
// the request and see if that preserves the result
|
|
534
|
+
for (let tr of query.updates) active = active.update(tr, conf);
|
|
535
|
+
if (active.hasResult()) {
|
|
536
|
+
updated.push(active);
|
|
537
|
+
continue;
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
let current = this.view.state.field(completionState).active.find(a => a.source == query.active.source);
|
|
541
|
+
if (current && current.state == 1 /* State.Pending */) {
|
|
542
|
+
if (query.done == null) {
|
|
543
|
+
// Explicitly failed. Should clear the pending status if it
|
|
544
|
+
// hasn't been re-set in the meantime.
|
|
545
|
+
let active = new ActiveSource(query.active.source, 0 /* State.Inactive */);
|
|
546
|
+
for (let tr of query.updates) active = active.update(tr, conf);
|
|
547
|
+
if (active.state != 1 /* State.Pending */) updated.push(active);
|
|
548
|
+
} else {
|
|
549
|
+
// Cleared by subsequent transactions. Restart.
|
|
550
|
+
this.startQuery(current);
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
if (updated.length) this.view.dispatch({
|
|
555
|
+
effects: setActiveEffect.of(updated)
|
|
556
|
+
});
|
|
557
|
+
}
|
|
558
|
+
}, {
|
|
559
|
+
eventHandlers: {
|
|
560
|
+
blur(event) {
|
|
561
|
+
let state = this.view.state.field(completionState, false);
|
|
562
|
+
if (state && state.tooltip && this.view.state.facet(completionConfig).closeOnBlur) {
|
|
563
|
+
let dialog = state.open && getTooltip(this.view, state.open.tooltip);
|
|
564
|
+
if (!dialog || !dialog.dom.contains(event.relatedTarget)) this.view.dispatch({
|
|
565
|
+
effects: closeCompletionEffect.of(null)
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
},
|
|
569
|
+
compositionstart() {
|
|
570
|
+
this.composing = 1 /* CompositionState.Started */;
|
|
571
|
+
},
|
|
572
|
+
|
|
573
|
+
compositionend() {
|
|
574
|
+
if (this.composing == 3 /* CompositionState.ChangedAndMoved */) {
|
|
575
|
+
// Safari fires compositionend events synchronously, possibly
|
|
576
|
+
// from inside an update, so dispatch asynchronously to avoid reentrancy
|
|
577
|
+
setTimeout(() => this.view.dispatch({
|
|
578
|
+
effects: startCompletionEffect.of(false)
|
|
579
|
+
}), 20);
|
|
580
|
+
}
|
|
581
|
+
this.composing = 0 /* CompositionState.None */;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
});
|
|
585
|
+
|
|
586
|
+
function applyCompletion(view, option) {
|
|
587
|
+
const apply = option.completion.apply || option.completion.label;
|
|
588
|
+
let result = view.state.field(completionState).active.find(a => a.source == option.source);
|
|
589
|
+
if (!(result instanceof ActiveResult)) return false;
|
|
590
|
+
if (typeof apply == "string") view.dispatch(Object.assign(Object.assign({}, insertCompletionText(view.state, apply, result.from, result.to)), {
|
|
591
|
+
annotations: pickedCompletion.of(option.completion)
|
|
592
|
+
}));else apply(view, option.completion, result.from, result.to);
|
|
593
|
+
return true;
|
|
594
|
+
}
|
|
595
|
+
function optionContent(config) {
|
|
596
|
+
let content = config.addToOptions.slice();
|
|
597
|
+
if (config.icons) content.push({
|
|
598
|
+
render(completion) {
|
|
599
|
+
let icon = document.createElement("div");
|
|
600
|
+
icon.classList.add("cm-completionIcon");
|
|
601
|
+
if (completion.type) icon.classList.add(...completion.type.split(/\s+/g).map(cls => "cm-completionIcon-" + cls));
|
|
602
|
+
icon.setAttribute("aria-hidden", "true");
|
|
603
|
+
return icon;
|
|
604
|
+
},
|
|
605
|
+
position: 20
|
|
606
|
+
});
|
|
607
|
+
content.push({
|
|
608
|
+
render(completion, _s, match) {
|
|
609
|
+
let labelElt = document.createElement("span");
|
|
610
|
+
labelElt.className = "cm-completionLabel";
|
|
611
|
+
let {
|
|
612
|
+
label
|
|
613
|
+
} = completion,
|
|
614
|
+
off = 0;
|
|
615
|
+
for (let j = 1; j < match.length;) {
|
|
616
|
+
let from = match[j++],
|
|
617
|
+
to = match[j++];
|
|
618
|
+
if (from > off) labelElt.appendChild(document.createTextNode(label.slice(off, from)));
|
|
619
|
+
let span = labelElt.appendChild(document.createElement("span"));
|
|
620
|
+
span.appendChild(document.createTextNode(label.slice(from, to)));
|
|
621
|
+
span.className = "cm-completionMatchedText";
|
|
622
|
+
off = to;
|
|
623
|
+
}
|
|
624
|
+
if (off < label.length) labelElt.appendChild(document.createTextNode(label.slice(off)));
|
|
625
|
+
return labelElt;
|
|
626
|
+
},
|
|
627
|
+
position: 50
|
|
628
|
+
}, {
|
|
629
|
+
render(completion) {
|
|
630
|
+
if (!completion.detail) return null;
|
|
631
|
+
let detailElt = document.createElement("span");
|
|
632
|
+
detailElt.className = "cm-completionDetail";
|
|
633
|
+
detailElt.textContent = completion.detail;
|
|
634
|
+
return detailElt;
|
|
635
|
+
},
|
|
636
|
+
position: 80
|
|
637
|
+
});
|
|
638
|
+
return content.sort((a, b) => a.position - b.position).map(a => a.render);
|
|
639
|
+
}
|
|
640
|
+
function rangeAroundSelected(total, selected, max) {
|
|
641
|
+
if (total <= max) return {
|
|
642
|
+
from: 0,
|
|
643
|
+
to: total
|
|
644
|
+
};
|
|
645
|
+
if (selected < 0) selected = 0;
|
|
646
|
+
if (selected <= total >> 1) {
|
|
647
|
+
let off = Math.floor(selected / max);
|
|
648
|
+
return {
|
|
649
|
+
from: off * max,
|
|
650
|
+
to: (off + 1) * max
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
let off = Math.floor((total - selected) / max);
|
|
654
|
+
return {
|
|
655
|
+
from: total - (off + 1) * max,
|
|
656
|
+
to: total - off * max
|
|
657
|
+
};
|
|
658
|
+
}
|
|
659
|
+
class CompletionTooltip {
|
|
660
|
+
constructor(view, stateField) {
|
|
661
|
+
this.view = view;
|
|
662
|
+
this.stateField = stateField;
|
|
663
|
+
this.info = null;
|
|
664
|
+
this.placeInfoReq = {
|
|
665
|
+
read: () => this.measureInfo(),
|
|
666
|
+
write: pos => this.placeInfo(pos),
|
|
667
|
+
key: this
|
|
668
|
+
};
|
|
669
|
+
this.space = null;
|
|
670
|
+
this.currentClass = "";
|
|
671
|
+
let cState = view.state.field(stateField);
|
|
672
|
+
let {
|
|
673
|
+
options,
|
|
674
|
+
selected
|
|
675
|
+
} = cState.open;
|
|
676
|
+
let config = view.state.facet(completionConfig);
|
|
677
|
+
this.optionContent = optionContent(config);
|
|
678
|
+
this.optionClass = config.optionClass;
|
|
679
|
+
this.tooltipClass = config.tooltipClass;
|
|
680
|
+
this.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions);
|
|
681
|
+
this.dom = document.createElement("div");
|
|
682
|
+
this.dom.className = "cm-tooltip-autocomplete";
|
|
683
|
+
this.updateTooltipClass(view.state);
|
|
684
|
+
this.dom.addEventListener("mousedown", e => {
|
|
685
|
+
for (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) {
|
|
686
|
+
if (dom.nodeName == "LI" && (match = /-(\d+)$/.exec(dom.id)) && +match[1] < options.length) {
|
|
687
|
+
applyCompletion(view, options[+match[1]]);
|
|
688
|
+
e.preventDefault();
|
|
689
|
+
return;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
});
|
|
693
|
+
this.dom.addEventListener("focusout", e => {
|
|
694
|
+
let state = view.state.field(this.stateField, false);
|
|
695
|
+
if (state && state.tooltip && view.state.facet(completionConfig).closeOnBlur && e.relatedTarget != view.contentDOM) view.dispatch({
|
|
696
|
+
effects: closeCompletionEffect.of(null)
|
|
697
|
+
});
|
|
698
|
+
});
|
|
699
|
+
this.list = this.dom.appendChild(this.createListBox(options, cState.id, this.range));
|
|
700
|
+
this.list.addEventListener("scroll", () => {
|
|
701
|
+
if (this.info) this.view.requestMeasure(this.placeInfoReq);
|
|
702
|
+
});
|
|
703
|
+
}
|
|
704
|
+
mount() {
|
|
705
|
+
this.updateSel();
|
|
706
|
+
}
|
|
707
|
+
update(update) {
|
|
708
|
+
var _a, _b, _c;
|
|
709
|
+
let cState = update.state.field(this.stateField);
|
|
710
|
+
let prevState = update.startState.field(this.stateField);
|
|
711
|
+
this.updateTooltipClass(update.state);
|
|
712
|
+
if (cState != prevState) {
|
|
713
|
+
this.updateSel();
|
|
714
|
+
if (((_a = cState.open) === null || _a === void 0 ? void 0 : _a.disabled) != ((_b = prevState.open) === null || _b === void 0 ? void 0 : _b.disabled)) this.dom.classList.toggle("cm-tooltip-autocomplete-disabled", !!((_c = cState.open) === null || _c === void 0 ? void 0 : _c.disabled));
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
updateTooltipClass(state) {
|
|
718
|
+
let cls = this.tooltipClass(state);
|
|
719
|
+
if (cls != this.currentClass) {
|
|
720
|
+
for (let c of this.currentClass.split(" ")) if (c) this.dom.classList.remove(c);
|
|
721
|
+
for (let c of cls.split(" ")) if (c) this.dom.classList.add(c);
|
|
722
|
+
this.currentClass = cls;
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
positioned(space) {
|
|
726
|
+
this.space = space;
|
|
727
|
+
if (this.info) this.view.requestMeasure(this.placeInfoReq);
|
|
728
|
+
}
|
|
729
|
+
updateSel() {
|
|
730
|
+
let cState = this.view.state.field(this.stateField),
|
|
731
|
+
open = cState.open;
|
|
732
|
+
if (open.selected > -1 && open.selected < this.range.from || open.selected >= this.range.to) {
|
|
733
|
+
this.range = rangeAroundSelected(open.options.length, open.selected, this.view.state.facet(completionConfig).maxRenderedOptions);
|
|
734
|
+
this.list.remove();
|
|
735
|
+
this.list = this.dom.appendChild(this.createListBox(open.options, cState.id, this.range));
|
|
736
|
+
this.list.addEventListener("scroll", () => {
|
|
737
|
+
if (this.info) this.view.requestMeasure(this.placeInfoReq);
|
|
738
|
+
});
|
|
739
|
+
}
|
|
740
|
+
if (this.updateSelectedOption(open.selected)) {
|
|
741
|
+
if (this.info) {
|
|
742
|
+
this.info.remove();
|
|
743
|
+
this.info = null;
|
|
744
|
+
}
|
|
745
|
+
let {
|
|
746
|
+
completion
|
|
747
|
+
} = open.options[open.selected];
|
|
748
|
+
let {
|
|
749
|
+
info
|
|
750
|
+
} = completion;
|
|
751
|
+
if (!info) return;
|
|
752
|
+
let infoResult = typeof info === 'string' ? document.createTextNode(info) : info(completion);
|
|
753
|
+
if (!infoResult) return;
|
|
754
|
+
if ('then' in infoResult) {
|
|
755
|
+
infoResult.then(node => {
|
|
756
|
+
if (node && this.view.state.field(this.stateField, false) == cState) this.addInfoPane(node);
|
|
757
|
+
}).catch(e => logException(this.view.state, e, "completion info"));
|
|
758
|
+
} else {
|
|
759
|
+
this.addInfoPane(infoResult);
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
addInfoPane(content) {
|
|
764
|
+
let dom = this.info = document.createElement("div");
|
|
765
|
+
dom.className = "cm-tooltip cm-completionInfo";
|
|
766
|
+
dom.appendChild(content);
|
|
767
|
+
this.dom.appendChild(dom);
|
|
768
|
+
this.view.requestMeasure(this.placeInfoReq);
|
|
769
|
+
}
|
|
770
|
+
updateSelectedOption(selected) {
|
|
771
|
+
let set = null;
|
|
772
|
+
for (let opt = this.list.firstChild, i = this.range.from; opt; opt = opt.nextSibling, i++) {
|
|
773
|
+
if (opt.nodeName != "LI" || !opt.id) {
|
|
774
|
+
i--; // A section header
|
|
775
|
+
} else if (i == selected) {
|
|
776
|
+
if (!opt.hasAttribute("aria-selected")) {
|
|
777
|
+
opt.setAttribute("aria-selected", "true");
|
|
778
|
+
set = opt;
|
|
779
|
+
}
|
|
780
|
+
} else {
|
|
781
|
+
if (opt.hasAttribute("aria-selected")) opt.removeAttribute("aria-selected");
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
if (set) scrollIntoView(this.list, set);
|
|
785
|
+
return set;
|
|
786
|
+
}
|
|
787
|
+
measureInfo() {
|
|
788
|
+
let sel = this.dom.querySelector("[aria-selected]");
|
|
789
|
+
if (!sel || !this.info) return null;
|
|
790
|
+
let listRect = this.dom.getBoundingClientRect();
|
|
791
|
+
let infoRect = this.info.getBoundingClientRect();
|
|
792
|
+
let selRect = sel.getBoundingClientRect();
|
|
793
|
+
let space = this.space;
|
|
794
|
+
if (!space) {
|
|
795
|
+
let win = this.dom.ownerDocument.defaultView || window;
|
|
796
|
+
space = {
|
|
797
|
+
left: 0,
|
|
798
|
+
top: 0,
|
|
799
|
+
right: win.innerWidth,
|
|
800
|
+
bottom: win.innerHeight
|
|
801
|
+
};
|
|
802
|
+
}
|
|
803
|
+
if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 || selRect.bottom < Math.max(space.top, listRect.top) + 10) return null;
|
|
804
|
+
return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space);
|
|
805
|
+
}
|
|
806
|
+
placeInfo(pos) {
|
|
807
|
+
if (this.info) {
|
|
808
|
+
if (pos) {
|
|
809
|
+
if (pos.style) this.info.style.cssText = pos.style;
|
|
810
|
+
this.info.className = "cm-tooltip cm-completionInfo " + (pos.class || "");
|
|
811
|
+
} else {
|
|
812
|
+
this.info.style.cssText = "top: -1e6px";
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
createListBox(options, id, range) {
|
|
817
|
+
const ul = document.createElement("ul");
|
|
818
|
+
ul.id = id;
|
|
819
|
+
ul.setAttribute("role", "listbox");
|
|
820
|
+
ul.setAttribute("aria-expanded", "true");
|
|
821
|
+
ul.setAttribute("aria-label", this.view.state.phrase("Completions"));
|
|
822
|
+
let curSection = null;
|
|
823
|
+
for (let i = range.from; i < range.to; i++) {
|
|
824
|
+
let {
|
|
825
|
+
completion,
|
|
826
|
+
match
|
|
827
|
+
} = options[i],
|
|
828
|
+
{
|
|
829
|
+
section
|
|
830
|
+
} = completion;
|
|
831
|
+
if (section) {
|
|
832
|
+
let name = typeof section == "string" ? section : section.name;
|
|
833
|
+
if (name != curSection && (i > range.from || range.from == 0)) {
|
|
834
|
+
curSection = name;
|
|
835
|
+
if (typeof section != "string" && section.header) {
|
|
836
|
+
ul.appendChild(section.header(section));
|
|
837
|
+
} else {
|
|
838
|
+
let header = ul.appendChild(document.createElement("completion-section"));
|
|
839
|
+
header.textContent = name;
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
const li = ul.appendChild(document.createElement("li"));
|
|
844
|
+
li.id = id + "-" + i;
|
|
845
|
+
li.setAttribute("role", "option");
|
|
846
|
+
let cls = this.optionClass(completion);
|
|
847
|
+
if (cls) li.className = cls;
|
|
848
|
+
for (let source of this.optionContent) {
|
|
849
|
+
let node = source(completion, this.view.state, match);
|
|
850
|
+
if (node) li.appendChild(node);
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
if (range.from) ul.classList.add("cm-completionListIncompleteTop");
|
|
854
|
+
if (range.to < options.length) ul.classList.add("cm-completionListIncompleteBottom");
|
|
855
|
+
return ul;
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
// We allocate a new function instance every time the completion
|
|
859
|
+
// changes to force redrawing/repositioning of the tooltip
|
|
860
|
+
function completionTooltip(stateField) {
|
|
861
|
+
return view => new CompletionTooltip(view, stateField);
|
|
862
|
+
}
|
|
863
|
+
function scrollIntoView(container, element) {
|
|
864
|
+
let parent = container.getBoundingClientRect();
|
|
865
|
+
let self = element.getBoundingClientRect();
|
|
866
|
+
if (self.top < parent.top) container.scrollTop -= parent.top - self.top;else if (self.bottom > parent.bottom) container.scrollTop += self.bottom - parent.bottom;
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
// Used to pick a preferred option when two options with the same
|
|
870
|
+
// label occur in the result.
|
|
871
|
+
function score(option) {
|
|
872
|
+
return (option.boost || 0) * 100 + (option.apply ? 10 : 0) + (option.info ? 5 : 0) + (option.type ? 1 : 0);
|
|
873
|
+
}
|
|
874
|
+
function sortOptions(active, state) {
|
|
875
|
+
let options = [];
|
|
876
|
+
let sections = null;
|
|
877
|
+
let addOption = option => {
|
|
878
|
+
options.push(option);
|
|
879
|
+
let {
|
|
880
|
+
section
|
|
881
|
+
} = option.completion;
|
|
882
|
+
if (section) {
|
|
883
|
+
if (!sections) sections = [];
|
|
884
|
+
let name = typeof section == "string" ? section : section.name;
|
|
885
|
+
if (!sections.some(s => s.name == name)) sections.push(typeof section == "string" ? {
|
|
886
|
+
name
|
|
887
|
+
} : section);
|
|
888
|
+
}
|
|
889
|
+
};
|
|
890
|
+
for (let a of active) if (a.hasResult()) {
|
|
891
|
+
if (a.result.filter === false) {
|
|
892
|
+
let getMatch = a.result.getMatch;
|
|
893
|
+
for (let option of a.result.options) {
|
|
894
|
+
let match = [1e9 - options.length];
|
|
895
|
+
if (getMatch) for (let n of getMatch(option)) match.push(n);
|
|
896
|
+
addOption(new Option(option, a.source, match, match[0]));
|
|
897
|
+
}
|
|
898
|
+
} else {
|
|
899
|
+
let matcher = new FuzzyMatcher(state.sliceDoc(a.from, a.to)),
|
|
900
|
+
match;
|
|
901
|
+
for (let option of a.result.options) if (match = matcher.match(option.label)) {
|
|
902
|
+
addOption(new Option(option, a.source, match, match[0] + (option.boost || 0)));
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
if (sections) {
|
|
907
|
+
let sectionOrder = Object.create(null),
|
|
908
|
+
pos = 0;
|
|
909
|
+
let cmp = (a, b) => {
|
|
910
|
+
var _a, _b;
|
|
911
|
+
return ((_a = a.rank) !== null && _a !== void 0 ? _a : 1e9) - ((_b = b.rank) !== null && _b !== void 0 ? _b : 1e9) || (a.name < b.name ? -1 : 1);
|
|
912
|
+
};
|
|
913
|
+
for (let s of sections.sort(cmp)) {
|
|
914
|
+
pos -= 1e5;
|
|
915
|
+
sectionOrder[s.name] = pos;
|
|
916
|
+
}
|
|
917
|
+
for (let option of options) {
|
|
918
|
+
let {
|
|
919
|
+
section
|
|
920
|
+
} = option.completion;
|
|
921
|
+
if (section) option.score += sectionOrder[typeof section == "string" ? section : section.name];
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
let result = [],
|
|
925
|
+
prev = null;
|
|
926
|
+
let compare = state.facet(completionConfig).compareCompletions;
|
|
927
|
+
for (let opt of options.sort((a, b) => b.score - a.score || compare(a.completion, b.completion))) {
|
|
928
|
+
if (!prev || prev.label != opt.completion.label || prev.detail != opt.completion.detail || prev.type != null && opt.completion.type != null && prev.type != opt.completion.type || prev.apply != opt.completion.apply) result.push(opt);else if (score(opt.completion) > score(prev)) result[result.length - 1] = opt;
|
|
929
|
+
prev = opt.completion;
|
|
930
|
+
}
|
|
931
|
+
return result;
|
|
932
|
+
}
|
|
933
|
+
class CompletionDialog {
|
|
934
|
+
constructor(options, attrs, tooltip, timestamp, selected, disabled) {
|
|
935
|
+
this.options = options;
|
|
936
|
+
this.attrs = attrs;
|
|
937
|
+
this.tooltip = tooltip;
|
|
938
|
+
this.timestamp = timestamp;
|
|
939
|
+
this.selected = selected;
|
|
940
|
+
this.disabled = disabled;
|
|
941
|
+
}
|
|
942
|
+
setSelected(selected, id) {
|
|
943
|
+
return selected == this.selected || selected >= this.options.length ? this : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);
|
|
944
|
+
}
|
|
945
|
+
static build(active, state, id, prev, conf) {
|
|
946
|
+
let options = sortOptions(active, state);
|
|
947
|
+
if (!options.length) {
|
|
948
|
+
return prev && active.some(a => a.state == 1 /* State.Pending */) ? new CompletionDialog(prev.options, prev.attrs, prev.tooltip, prev.timestamp, prev.selected, true) : null;
|
|
949
|
+
}
|
|
950
|
+
let selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;
|
|
951
|
+
if (prev && prev.selected != selected && prev.selected != -1) {
|
|
952
|
+
let selectedValue = prev.options[prev.selected].completion;
|
|
953
|
+
for (let i = 0; i < options.length; i++) if (options[i].completion == selectedValue) {
|
|
954
|
+
selected = i;
|
|
955
|
+
break;
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
return new CompletionDialog(options, makeAttrs(id, selected), {
|
|
959
|
+
pos: active.reduce((a, b) => b.hasResult() ? Math.min(a, b.from) : a, 1e8),
|
|
960
|
+
create: completionTooltip(completionState),
|
|
961
|
+
above: conf.aboveCursor
|
|
962
|
+
}, prev ? prev.timestamp : Date.now(), selected, false);
|
|
963
|
+
}
|
|
964
|
+
map(changes) {
|
|
965
|
+
return new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), {
|
|
966
|
+
pos: changes.mapPos(this.tooltip.pos)
|
|
967
|
+
}), this.timestamp, this.selected, this.disabled);
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
class CompletionState {
|
|
971
|
+
constructor(active, id, open) {
|
|
972
|
+
this.active = active;
|
|
973
|
+
this.id = id;
|
|
974
|
+
this.open = open;
|
|
975
|
+
}
|
|
976
|
+
static start() {
|
|
977
|
+
return new CompletionState(none, "cm-ac-" + Math.floor(Math.random() * 2e6).toString(36), null);
|
|
978
|
+
}
|
|
979
|
+
update(tr) {
|
|
980
|
+
let {
|
|
981
|
+
state
|
|
982
|
+
} = tr,
|
|
983
|
+
conf = state.facet(completionConfig);
|
|
984
|
+
let sources = conf.override || state.languageDataAt("autocomplete", cur(state)).map(asSource);
|
|
985
|
+
let active = sources.map(source => {
|
|
986
|
+
let value = this.active.find(s => s.source == source) || new ActiveSource(source, this.active.some(a => a.state != 0 /* State.Inactive */) ? 1 /* State.Pending */ : 0 /* State.Inactive */);
|
|
987
|
+
return value.update(tr, conf);
|
|
988
|
+
});
|
|
989
|
+
if (active.length == this.active.length && active.every((a, i) => a == this.active[i])) active = this.active;
|
|
990
|
+
let open = this.open;
|
|
991
|
+
if (open && tr.docChanged) open = open.map(tr.changes);
|
|
992
|
+
if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) || !sameResults(active, this.active)) open = CompletionDialog.build(active, state, this.id, open, conf);else if (open && open.disabled && !active.some(a => a.state == 1 /* State.Pending */)) open = null;
|
|
993
|
+
if (!open && active.every(a => a.state != 1 /* State.Pending */) && active.some(a => a.hasResult())) active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);
|
|
994
|
+
for (let effect of tr.effects) if (effect.is(setSelectedEffect)) open = open && open.setSelected(effect.value, this.id);
|
|
995
|
+
return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);
|
|
996
|
+
}
|
|
997
|
+
get tooltip() {
|
|
998
|
+
return this.open ? this.open.tooltip : null;
|
|
999
|
+
}
|
|
1000
|
+
get attrs() {
|
|
1001
|
+
return this.open ? this.open.attrs : baseAttrs;
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
function sameResults(a, b) {
|
|
1005
|
+
if (a == b) return true;
|
|
1006
|
+
for (let iA = 0, iB = 0;;) {
|
|
1007
|
+
while (iA < a.length && !a[iA].hasResult) iA++;
|
|
1008
|
+
while (iB < b.length && !b[iB].hasResult) iB++;
|
|
1009
|
+
let endA = iA == a.length,
|
|
1010
|
+
endB = iB == b.length;
|
|
1011
|
+
if (endA || endB) return endA == endB;
|
|
1012
|
+
if (a[iA++].result != b[iB++].result) return false;
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
const baseAttrs = {
|
|
1016
|
+
"aria-autocomplete": "list"
|
|
1017
|
+
};
|
|
1018
|
+
function makeAttrs(id, selected) {
|
|
1019
|
+
let result = {
|
|
1020
|
+
"aria-autocomplete": "list",
|
|
1021
|
+
"aria-haspopup": "listbox",
|
|
1022
|
+
"aria-controls": id
|
|
1023
|
+
};
|
|
1024
|
+
if (selected > -1) result["aria-activedescendant"] = id + "-" + selected;
|
|
1025
|
+
return result;
|
|
1026
|
+
}
|
|
1027
|
+
const none = [];
|
|
1028
|
+
function getUserEvent(tr) {
|
|
1029
|
+
return tr.isUserEvent("input.type") ? "input" : tr.isUserEvent("delete.backward") ? "delete" : null;
|
|
1030
|
+
}
|
|
1031
|
+
class ActiveSource {
|
|
1032
|
+
constructor(source, state) {
|
|
1033
|
+
let explicitPos = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
|
|
1034
|
+
this.source = source;
|
|
1035
|
+
this.state = state;
|
|
1036
|
+
this.explicitPos = explicitPos;
|
|
1037
|
+
}
|
|
1038
|
+
hasResult() {
|
|
1039
|
+
return false;
|
|
1040
|
+
}
|
|
1041
|
+
update(tr, conf) {
|
|
1042
|
+
let event = getUserEvent(tr),
|
|
1043
|
+
value = this;
|
|
1044
|
+
if (event) value = value.handleUserEvent(tr, event, conf);else if (tr.docChanged) value = value.handleChange(tr);else if (tr.selection && value.state != 0 /* State.Inactive */) value = new ActiveSource(value.source, 0 /* State.Inactive */);
|
|
1045
|
+
for (let effect of tr.effects) {
|
|
1046
|
+
if (effect.is(startCompletionEffect)) value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value ? cur(tr.state) : -1);else if (effect.is(closeCompletionEffect)) value = new ActiveSource(value.source, 0 /* State.Inactive */);else if (effect.is(setActiveEffect)) for (let active of effect.value) if (active.source == value.source) value = active;
|
|
1047
|
+
}
|
|
1048
|
+
return value;
|
|
1049
|
+
}
|
|
1050
|
+
handleUserEvent(tr, type, conf) {
|
|
1051
|
+
return type == "delete" || !conf.activateOnTyping ? this.map(tr.changes) : new ActiveSource(this.source, 1 /* State.Pending */);
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
handleChange(tr) {
|
|
1055
|
+
return tr.changes.touchesRange(cur(tr.startState)) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);
|
|
1056
|
+
}
|
|
1057
|
+
map(changes) {
|
|
1058
|
+
return changes.empty || this.explicitPos < 0 ? this : new ActiveSource(this.source, this.state, changes.mapPos(this.explicitPos));
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
class ActiveResult extends ActiveSource {
|
|
1062
|
+
constructor(source, explicitPos, result, from, to) {
|
|
1063
|
+
super(source, 2 /* State.Result */, explicitPos);
|
|
1064
|
+
this.result = result;
|
|
1065
|
+
this.from = from;
|
|
1066
|
+
this.to = to;
|
|
1067
|
+
}
|
|
1068
|
+
hasResult() {
|
|
1069
|
+
return true;
|
|
1070
|
+
}
|
|
1071
|
+
handleUserEvent(tr, type, conf) {
|
|
1072
|
+
var _a;
|
|
1073
|
+
let from = tr.changes.mapPos(this.from),
|
|
1074
|
+
to = tr.changes.mapPos(this.to, 1);
|
|
1075
|
+
let pos = cur(tr.state);
|
|
1076
|
+
if ((this.explicitPos < 0 ? pos <= from : pos < this.from) || pos > to || type == "delete" && cur(tr.startState) == this.from) return new ActiveSource(this.source, type == "input" && conf.activateOnTyping ? 1 /* State.Pending */ : 0 /* State.Inactive */);
|
|
1077
|
+
let explicitPos = this.explicitPos < 0 ? -1 : tr.changes.mapPos(this.explicitPos),
|
|
1078
|
+
updated;
|
|
1079
|
+
if (checkValid(this.result.validFor, tr.state, from, to)) return new ActiveResult(this.source, explicitPos, this.result, from, to);
|
|
1080
|
+
if (this.result.update && (updated = this.result.update(this.result, from, to, new CompletionContext(tr.state, pos, explicitPos >= 0)))) return new ActiveResult(this.source, explicitPos, updated, updated.from, (_a = updated.to) !== null && _a !== void 0 ? _a : cur(tr.state));
|
|
1081
|
+
return new ActiveSource(this.source, 1 /* State.Pending */, explicitPos);
|
|
1082
|
+
}
|
|
1083
|
+
handleChange(tr) {
|
|
1084
|
+
return tr.changes.touchesRange(this.from, this.to) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);
|
|
1085
|
+
}
|
|
1086
|
+
map(mapping) {
|
|
1087
|
+
return mapping.empty ? this : new ActiveResult(this.source, this.explicitPos < 0 ? -1 : mapping.mapPos(this.explicitPos), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1090
|
+
function checkValid(validFor, state, from, to) {
|
|
1091
|
+
if (!validFor) return false;
|
|
1092
|
+
let text = state.sliceDoc(from, to);
|
|
1093
|
+
return typeof validFor == "function" ? validFor(text, from, to, state) : ensureAnchor(validFor, true).test(text);
|
|
1094
|
+
}
|
|
1095
|
+
const setActiveEffect = /*@__PURE__*/StateEffect.define({
|
|
1096
|
+
map(sources, mapping) {
|
|
1097
|
+
return sources.map(s => s.map(mapping));
|
|
1098
|
+
}
|
|
1099
|
+
});
|
|
1100
|
+
const setSelectedEffect = /*@__PURE__*/StateEffect.define();
|
|
1101
|
+
const completionState = /*@__PURE__*/StateField.define({
|
|
1102
|
+
create() {
|
|
1103
|
+
return CompletionState.start();
|
|
1104
|
+
},
|
|
1105
|
+
update(value, tr) {
|
|
1106
|
+
return value.update(tr);
|
|
1107
|
+
},
|
|
1108
|
+
provide: f => [showTooltip.from(f, val => val.tooltip), EditorView.contentAttributes.from(f, state => state.attrs)]
|
|
1109
|
+
});
|
|
1110
|
+
const baseTheme = /*@__PURE__*/EditorView.baseTheme({
|
|
1111
|
+
".cm-tooltip.cm-tooltip-autocomplete": {
|
|
1112
|
+
"& > ul": {
|
|
1113
|
+
fontFamily: "monospace",
|
|
1114
|
+
whiteSpace: "nowrap",
|
|
1115
|
+
overflow: "hidden auto",
|
|
1116
|
+
maxWidth_fallback: "700px",
|
|
1117
|
+
maxWidth: "min(700px, 95vw)",
|
|
1118
|
+
minWidth: "250px",
|
|
1119
|
+
maxHeight: "10em",
|
|
1120
|
+
height: "100%",
|
|
1121
|
+
listStyle: "none",
|
|
1122
|
+
margin: 0,
|
|
1123
|
+
padding: 0,
|
|
1124
|
+
"& > li, & > completion-section": {
|
|
1125
|
+
padding: "1px 3px",
|
|
1126
|
+
lineHeight: 1.2
|
|
1127
|
+
},
|
|
1128
|
+
"& > li": {
|
|
1129
|
+
overflowX: "hidden",
|
|
1130
|
+
textOverflow: "ellipsis",
|
|
1131
|
+
cursor: "pointer"
|
|
1132
|
+
},
|
|
1133
|
+
"& > completion-section": {
|
|
1134
|
+
display: "list-item",
|
|
1135
|
+
borderBottom: "1px solid silver",
|
|
1136
|
+
paddingLeft: "0.5em",
|
|
1137
|
+
opacity: 0.7
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1140
|
+
},
|
|
1141
|
+
"&light .cm-tooltip-autocomplete ul li[aria-selected]": {
|
|
1142
|
+
background: "#17c",
|
|
1143
|
+
color: "white"
|
|
1144
|
+
},
|
|
1145
|
+
"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]": {
|
|
1146
|
+
background: "#777"
|
|
1147
|
+
},
|
|
1148
|
+
"&dark .cm-tooltip-autocomplete ul li[aria-selected]": {
|
|
1149
|
+
background: "#347",
|
|
1150
|
+
color: "white"
|
|
1151
|
+
},
|
|
1152
|
+
"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]": {
|
|
1153
|
+
background: "#444"
|
|
1154
|
+
},
|
|
1155
|
+
".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after": {
|
|
1156
|
+
content: '"···"',
|
|
1157
|
+
opacity: 0.5,
|
|
1158
|
+
display: "block",
|
|
1159
|
+
textAlign: "center"
|
|
1160
|
+
},
|
|
1161
|
+
".cm-tooltip.cm-completionInfo": {
|
|
1162
|
+
position: "absolute",
|
|
1163
|
+
padding: "3px 9px",
|
|
1164
|
+
width: "max-content",
|
|
1165
|
+
maxWidth: `${400 /* Info.Width */}px`,
|
|
1166
|
+
boxSizing: "border-box"
|
|
1167
|
+
},
|
|
1168
|
+
".cm-completionInfo.cm-completionInfo-left": {
|
|
1169
|
+
right: "100%"
|
|
1170
|
+
},
|
|
1171
|
+
".cm-completionInfo.cm-completionInfo-right": {
|
|
1172
|
+
left: "100%"
|
|
1173
|
+
},
|
|
1174
|
+
".cm-completionInfo.cm-completionInfo-left-narrow": {
|
|
1175
|
+
right: `${30 /* Info.Margin */}px`
|
|
1176
|
+
},
|
|
1177
|
+
".cm-completionInfo.cm-completionInfo-right-narrow": {
|
|
1178
|
+
left: `${30 /* Info.Margin */}px`
|
|
1179
|
+
},
|
|
1180
|
+
"&light .cm-snippetField": {
|
|
1181
|
+
backgroundColor: "#00000022"
|
|
1182
|
+
},
|
|
1183
|
+
"&dark .cm-snippetField": {
|
|
1184
|
+
backgroundColor: "#ffffff22"
|
|
1185
|
+
},
|
|
1186
|
+
".cm-snippetFieldPosition": {
|
|
1187
|
+
verticalAlign: "text-top",
|
|
1188
|
+
width: 0,
|
|
1189
|
+
height: "1.15em",
|
|
1190
|
+
display: "inline-block",
|
|
1191
|
+
margin: "0 -0.7px -.7em",
|
|
1192
|
+
borderLeft: "1.4px dotted #888"
|
|
1193
|
+
},
|
|
1194
|
+
".cm-completionMatchedText": {
|
|
1195
|
+
textDecoration: "underline"
|
|
1196
|
+
},
|
|
1197
|
+
".cm-completionDetail": {
|
|
1198
|
+
marginLeft: "0.5em",
|
|
1199
|
+
fontStyle: "italic"
|
|
1200
|
+
},
|
|
1201
|
+
".cm-completionIcon": {
|
|
1202
|
+
fontSize: "90%",
|
|
1203
|
+
width: ".8em",
|
|
1204
|
+
display: "inline-block",
|
|
1205
|
+
textAlign: "center",
|
|
1206
|
+
paddingRight: ".6em",
|
|
1207
|
+
opacity: "0.6",
|
|
1208
|
+
boxSizing: "content-box"
|
|
1209
|
+
},
|
|
1210
|
+
".cm-completionIcon-function, .cm-completionIcon-method": {
|
|
1211
|
+
"&:after": {
|
|
1212
|
+
content: "'ƒ'"
|
|
1213
|
+
}
|
|
1214
|
+
},
|
|
1215
|
+
".cm-completionIcon-class": {
|
|
1216
|
+
"&:after": {
|
|
1217
|
+
content: "'○'"
|
|
1218
|
+
}
|
|
1219
|
+
},
|
|
1220
|
+
".cm-completionIcon-interface": {
|
|
1221
|
+
"&:after": {
|
|
1222
|
+
content: "'◌'"
|
|
1223
|
+
}
|
|
1224
|
+
},
|
|
1225
|
+
".cm-completionIcon-variable": {
|
|
1226
|
+
"&:after": {
|
|
1227
|
+
content: "'𝑥'"
|
|
1228
|
+
}
|
|
1229
|
+
},
|
|
1230
|
+
".cm-completionIcon-constant": {
|
|
1231
|
+
"&:after": {
|
|
1232
|
+
content: "'𝐶'"
|
|
1233
|
+
}
|
|
1234
|
+
},
|
|
1235
|
+
".cm-completionIcon-type": {
|
|
1236
|
+
"&:after": {
|
|
1237
|
+
content: "'𝑡'"
|
|
1238
|
+
}
|
|
1239
|
+
},
|
|
1240
|
+
".cm-completionIcon-enum": {
|
|
1241
|
+
"&:after": {
|
|
1242
|
+
content: "'∪'"
|
|
1243
|
+
}
|
|
1244
|
+
},
|
|
1245
|
+
".cm-completionIcon-property": {
|
|
1246
|
+
"&:after": {
|
|
1247
|
+
content: "'□'"
|
|
1248
|
+
}
|
|
1249
|
+
},
|
|
1250
|
+
".cm-completionIcon-keyword": {
|
|
1251
|
+
"&:after": {
|
|
1252
|
+
content: "'🔑\uFE0E'"
|
|
1253
|
+
} // Disable emoji rendering
|
|
1254
|
+
},
|
|
1255
|
+
|
|
1256
|
+
".cm-completionIcon-namespace": {
|
|
1257
|
+
"&:after": {
|
|
1258
|
+
content: "'▢'"
|
|
1259
|
+
}
|
|
1260
|
+
},
|
|
1261
|
+
".cm-completionIcon-text": {
|
|
1262
|
+
"&:after": {
|
|
1263
|
+
content: "'abc'",
|
|
1264
|
+
fontSize: "50%",
|
|
1265
|
+
verticalAlign: "middle"
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
});
|
|
1269
|
+
class FieldPos {
|
|
1270
|
+
constructor(field, line, from, to) {
|
|
1271
|
+
this.field = field;
|
|
1272
|
+
this.line = line;
|
|
1273
|
+
this.from = from;
|
|
1274
|
+
this.to = to;
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
class FieldRange {
|
|
1278
|
+
constructor(field, from, to) {
|
|
1279
|
+
this.field = field;
|
|
1280
|
+
this.from = from;
|
|
1281
|
+
this.to = to;
|
|
1282
|
+
}
|
|
1283
|
+
map(changes) {
|
|
1284
|
+
let from = changes.mapPos(this.from, -1, MapMode.TrackDel);
|
|
1285
|
+
let to = changes.mapPos(this.to, 1, MapMode.TrackDel);
|
|
1286
|
+
return from == null || to == null ? null : new FieldRange(this.field, from, to);
|
|
1287
|
+
}
|
|
1288
|
+
}
|
|
1289
|
+
class Snippet {
|
|
1290
|
+
constructor(lines, fieldPositions) {
|
|
1291
|
+
this.lines = lines;
|
|
1292
|
+
this.fieldPositions = fieldPositions;
|
|
1293
|
+
}
|
|
1294
|
+
instantiate(state, pos) {
|
|
1295
|
+
let text = [],
|
|
1296
|
+
lineStart = [pos];
|
|
1297
|
+
let lineObj = state.doc.lineAt(pos),
|
|
1298
|
+
baseIndent = /^\s*/.exec(lineObj.text)[0];
|
|
1299
|
+
for (let line of this.lines) {
|
|
1300
|
+
if (text.length) {
|
|
1301
|
+
let indent = baseIndent,
|
|
1302
|
+
tabs = /^\t*/.exec(line)[0].length;
|
|
1303
|
+
for (let i = 0; i < tabs; i++) indent += state.facet(indentUnit);
|
|
1304
|
+
lineStart.push(pos + indent.length - tabs);
|
|
1305
|
+
line = indent + line.slice(tabs);
|
|
1306
|
+
}
|
|
1307
|
+
text.push(line);
|
|
1308
|
+
pos += line.length + 1;
|
|
1309
|
+
}
|
|
1310
|
+
let ranges = this.fieldPositions.map(pos => new FieldRange(pos.field, lineStart[pos.line] + pos.from, lineStart[pos.line] + pos.to));
|
|
1311
|
+
return {
|
|
1312
|
+
text,
|
|
1313
|
+
ranges
|
|
1314
|
+
};
|
|
1315
|
+
}
|
|
1316
|
+
static parse(template) {
|
|
1317
|
+
let fields = [];
|
|
1318
|
+
let lines = [],
|
|
1319
|
+
positions = [],
|
|
1320
|
+
m;
|
|
1321
|
+
for (let line of template.split(/\r\n?|\n/)) {
|
|
1322
|
+
while (m = /[#$]\{(?:(\d+)(?::([^}]*))?|([^}]*))\}/.exec(line)) {
|
|
1323
|
+
let seq = m[1] ? +m[1] : null,
|
|
1324
|
+
name = m[2] || m[3] || "",
|
|
1325
|
+
found = -1;
|
|
1326
|
+
for (let i = 0; i < fields.length; i++) {
|
|
1327
|
+
if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false) found = i;
|
|
1328
|
+
}
|
|
1329
|
+
if (found < 0) {
|
|
1330
|
+
let i = 0;
|
|
1331
|
+
while (i < fields.length && (seq == null || fields[i].seq != null && fields[i].seq < seq)) i++;
|
|
1332
|
+
fields.splice(i, 0, {
|
|
1333
|
+
seq,
|
|
1334
|
+
name
|
|
1335
|
+
});
|
|
1336
|
+
found = i;
|
|
1337
|
+
for (let pos of positions) if (pos.field >= found) pos.field++;
|
|
1338
|
+
}
|
|
1339
|
+
positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));
|
|
1340
|
+
line = line.slice(0, m.index) + name + line.slice(m.index + m[0].length);
|
|
1341
|
+
}
|
|
1342
|
+
for (let esc; esc = /\\([{}])/.exec(line);) {
|
|
1343
|
+
line = line.slice(0, esc.index) + esc[1] + line.slice(esc.index + esc[0].length);
|
|
1344
|
+
for (let pos of positions) if (pos.line == lines.length && pos.from > esc.index) {
|
|
1345
|
+
pos.from--;
|
|
1346
|
+
pos.to--;
|
|
1347
|
+
}
|
|
1348
|
+
}
|
|
1349
|
+
lines.push(line);
|
|
1350
|
+
}
|
|
1351
|
+
return new Snippet(lines, positions);
|
|
1352
|
+
}
|
|
1353
|
+
}
|
|
1354
|
+
let fieldMarker = /*@__PURE__*/Decoration.widget({
|
|
1355
|
+
widget: /*@__PURE__*/new class extends WidgetType {
|
|
1356
|
+
toDOM() {
|
|
1357
|
+
let span = document.createElement("span");
|
|
1358
|
+
span.className = "cm-snippetFieldPosition";
|
|
1359
|
+
return span;
|
|
1360
|
+
}
|
|
1361
|
+
ignoreEvent() {
|
|
1362
|
+
return false;
|
|
1363
|
+
}
|
|
1364
|
+
}()
|
|
1365
|
+
});
|
|
1366
|
+
let fieldRange = /*@__PURE__*/Decoration.mark({
|
|
1367
|
+
class: "cm-snippetField"
|
|
1368
|
+
});
|
|
1369
|
+
class ActiveSnippet {
|
|
1370
|
+
constructor(ranges, active) {
|
|
1371
|
+
this.ranges = ranges;
|
|
1372
|
+
this.active = active;
|
|
1373
|
+
this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to)));
|
|
1374
|
+
}
|
|
1375
|
+
map(changes) {
|
|
1376
|
+
let ranges = [];
|
|
1377
|
+
for (let r of this.ranges) {
|
|
1378
|
+
let mapped = r.map(changes);
|
|
1379
|
+
if (!mapped) return null;
|
|
1380
|
+
ranges.push(mapped);
|
|
1381
|
+
}
|
|
1382
|
+
return new ActiveSnippet(ranges, this.active);
|
|
1383
|
+
}
|
|
1384
|
+
selectionInsideField(sel) {
|
|
1385
|
+
return sel.ranges.every(range => this.ranges.some(r => r.field == this.active && r.from <= range.from && r.to >= range.to));
|
|
1386
|
+
}
|
|
1387
|
+
}
|
|
1388
|
+
const setActive = /*@__PURE__*/StateEffect.define({
|
|
1389
|
+
map(value, changes) {
|
|
1390
|
+
return value && value.map(changes);
|
|
1391
|
+
}
|
|
1392
|
+
});
|
|
1393
|
+
const moveToField = /*@__PURE__*/StateEffect.define();
|
|
1394
|
+
const snippetState = /*@__PURE__*/StateField.define({
|
|
1395
|
+
create() {
|
|
1396
|
+
return null;
|
|
1397
|
+
},
|
|
1398
|
+
update(value, tr) {
|
|
1399
|
+
for (let effect of tr.effects) {
|
|
1400
|
+
if (effect.is(setActive)) return effect.value;
|
|
1401
|
+
if (effect.is(moveToField) && value) return new ActiveSnippet(value.ranges, effect.value);
|
|
1402
|
+
}
|
|
1403
|
+
if (value && tr.docChanged) value = value.map(tr.changes);
|
|
1404
|
+
if (value && tr.selection && !value.selectionInsideField(tr.selection)) value = null;
|
|
1405
|
+
return value;
|
|
1406
|
+
},
|
|
1407
|
+
provide: f => EditorView.decorations.from(f, val => val ? val.deco : Decoration.none)
|
|
1408
|
+
});
|
|
1409
|
+
function fieldSelection(ranges, field) {
|
|
1410
|
+
return EditorSelection.create(ranges.filter(r => r.field == field).map(r => EditorSelection.range(r.from, r.to)));
|
|
1411
|
+
}
|
|
1412
|
+
/**
|
|
1413
|
+
Convert a snippet template to a function that can
|
|
1414
|
+
[apply](https://codemirror.net/6/docs/ref/#autocomplete.Completion.apply) it. Snippets are written
|
|
1415
|
+
using syntax like this:
|
|
1416
|
+
|
|
1417
|
+
"for (let ${index} = 0; ${index} < ${end}; ${index}++) {\n\t${}\n}"
|
|
1418
|
+
|
|
1419
|
+
Each `${}` placeholder (you may also use `#{}`) indicates a field
|
|
1420
|
+
that the user can fill in. Its name, if any, will be the default
|
|
1421
|
+
content for the field.
|
|
1422
|
+
|
|
1423
|
+
When the snippet is activated by calling the returned function,
|
|
1424
|
+
the code is inserted at the given position. Newlines in the
|
|
1425
|
+
template are indented by the indentation of the start line, plus
|
|
1426
|
+
one [indent unit](https://codemirror.net/6/docs/ref/#language.indentUnit) per tab character after
|
|
1427
|
+
the newline.
|
|
1428
|
+
|
|
1429
|
+
On activation, (all instances of) the first field are selected.
|
|
1430
|
+
The user can move between fields with Tab and Shift-Tab as long as
|
|
1431
|
+
the fields are active. Moving to the last field or moving the
|
|
1432
|
+
cursor out of the current field deactivates the fields.
|
|
1433
|
+
|
|
1434
|
+
The order of fields defaults to textual order, but you can add
|
|
1435
|
+
numbers to placeholders (`${1}` or `${1:defaultText}`) to provide
|
|
1436
|
+
a custom order.
|
|
1437
|
+
|
|
1438
|
+
To include a literal `{` or `}` in your template, put a backslash
|
|
1439
|
+
in front of it. This will be removed and the brace will not be
|
|
1440
|
+
interpreted as indicating a placeholder.
|
|
1441
|
+
*/
|
|
1442
|
+
function snippet(template) {
|
|
1443
|
+
let snippet = Snippet.parse(template);
|
|
1444
|
+
return (editor, completion, from, to) => {
|
|
1445
|
+
let {
|
|
1446
|
+
text,
|
|
1447
|
+
ranges
|
|
1448
|
+
} = snippet.instantiate(editor.state, from);
|
|
1449
|
+
let spec = {
|
|
1450
|
+
changes: {
|
|
1451
|
+
from,
|
|
1452
|
+
to,
|
|
1453
|
+
insert: Text.of(text)
|
|
1454
|
+
},
|
|
1455
|
+
scrollIntoView: true,
|
|
1456
|
+
annotations: completion ? pickedCompletion.of(completion) : undefined
|
|
1457
|
+
};
|
|
1458
|
+
if (ranges.length) spec.selection = fieldSelection(ranges, 0);
|
|
1459
|
+
if (ranges.length > 1) {
|
|
1460
|
+
let active = new ActiveSnippet(ranges, 0);
|
|
1461
|
+
let effects = spec.effects = [setActive.of(active)];
|
|
1462
|
+
if (editor.state.field(snippetState, false) === undefined) effects.push(StateEffect.appendConfig.of([snippetState, addSnippetKeymap, snippetPointerHandler, baseTheme]));
|
|
1463
|
+
}
|
|
1464
|
+
editor.dispatch(editor.state.update(spec));
|
|
1465
|
+
};
|
|
1466
|
+
}
|
|
1467
|
+
function moveField(dir) {
|
|
1468
|
+
return _ref => {
|
|
1469
|
+
let {
|
|
1470
|
+
state,
|
|
1471
|
+
dispatch
|
|
1472
|
+
} = _ref;
|
|
1473
|
+
let active = state.field(snippetState, false);
|
|
1474
|
+
if (!active || dir < 0 && active.active == 0) return false;
|
|
1475
|
+
let next = active.active + dir,
|
|
1476
|
+
last = dir > 0 && !active.ranges.some(r => r.field == next + dir);
|
|
1477
|
+
dispatch(state.update({
|
|
1478
|
+
selection: fieldSelection(active.ranges, next),
|
|
1479
|
+
effects: setActive.of(last ? null : new ActiveSnippet(active.ranges, next))
|
|
1480
|
+
}));
|
|
1481
|
+
return true;
|
|
1482
|
+
};
|
|
1483
|
+
}
|
|
1484
|
+
/**
|
|
1485
|
+
A command that clears the active snippet, if any.
|
|
1486
|
+
*/
|
|
1487
|
+
const clearSnippet = _ref2 => {
|
|
1488
|
+
let {
|
|
1489
|
+
state,
|
|
1490
|
+
dispatch
|
|
1491
|
+
} = _ref2;
|
|
1492
|
+
let active = state.field(snippetState, false);
|
|
1493
|
+
if (!active) return false;
|
|
1494
|
+
dispatch(state.update({
|
|
1495
|
+
effects: setActive.of(null)
|
|
1496
|
+
}));
|
|
1497
|
+
return true;
|
|
1498
|
+
};
|
|
1499
|
+
/**
|
|
1500
|
+
Move to the next snippet field, if available.
|
|
1501
|
+
*/
|
|
1502
|
+
const nextSnippetField = /*@__PURE__*/moveField(1);
|
|
1503
|
+
/**
|
|
1504
|
+
Move to the previous snippet field, if available.
|
|
1505
|
+
*/
|
|
1506
|
+
const prevSnippetField = /*@__PURE__*/moveField(-1);
|
|
1507
|
+
const defaultSnippetKeymap = [{
|
|
1508
|
+
key: "Tab",
|
|
1509
|
+
run: nextSnippetField,
|
|
1510
|
+
shift: prevSnippetField
|
|
1511
|
+
}, {
|
|
1512
|
+
key: "Escape",
|
|
1513
|
+
run: clearSnippet
|
|
1514
|
+
}];
|
|
1515
|
+
/**
|
|
1516
|
+
A facet that can be used to configure the key bindings used by
|
|
1517
|
+
snippets. The default binds Tab to
|
|
1518
|
+
[`nextSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.nextSnippetField), Shift-Tab to
|
|
1519
|
+
[`prevSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.prevSnippetField), and Escape
|
|
1520
|
+
to [`clearSnippet`](https://codemirror.net/6/docs/ref/#autocomplete.clearSnippet).
|
|
1521
|
+
*/
|
|
1522
|
+
const snippetKeymap = /*@__PURE__*/Facet.define({
|
|
1523
|
+
combine(maps) {
|
|
1524
|
+
return maps.length ? maps[0] : defaultSnippetKeymap;
|
|
1525
|
+
}
|
|
1526
|
+
});
|
|
1527
|
+
const addSnippetKeymap = /*@__PURE__*/Prec.highest( /*@__PURE__*/keymap.compute([snippetKeymap], state => state.facet(snippetKeymap)));
|
|
1528
|
+
/**
|
|
1529
|
+
Create a completion from a snippet. Returns an object with the
|
|
1530
|
+
properties from `completion`, plus an `apply` function that
|
|
1531
|
+
applies the snippet.
|
|
1532
|
+
*/
|
|
1533
|
+
function snippetCompletion(template, completion) {
|
|
1534
|
+
return Object.assign(Object.assign({}, completion), {
|
|
1535
|
+
apply: snippet(template)
|
|
1536
|
+
});
|
|
1537
|
+
}
|
|
1538
|
+
const snippetPointerHandler = /*@__PURE__*/EditorView.domEventHandlers({
|
|
1539
|
+
mousedown(event, view) {
|
|
1540
|
+
let active = view.state.field(snippetState, false),
|
|
1541
|
+
pos;
|
|
1542
|
+
if (!active || (pos = view.posAtCoords({
|
|
1543
|
+
x: event.clientX,
|
|
1544
|
+
y: event.clientY
|
|
1545
|
+
})) == null) return false;
|
|
1546
|
+
let match = active.ranges.find(r => r.from <= pos && r.to >= pos);
|
|
1547
|
+
if (!match || match.field == active.active) return false;
|
|
1548
|
+
view.dispatch({
|
|
1549
|
+
selection: fieldSelection(active.ranges, match.field),
|
|
1550
|
+
effects: setActive.of(active.ranges.some(r => r.field > match.field) ? new ActiveSnippet(active.ranges, match.field) : null)
|
|
1551
|
+
});
|
|
1552
|
+
return true;
|
|
1553
|
+
}
|
|
1554
|
+
});
|
|
1555
|
+
const defaults = {
|
|
1556
|
+
brackets: ["(", "[", "{", "'", '"'],
|
|
1557
|
+
before: ")]}:;>",
|
|
1558
|
+
stringPrefixes: []
|
|
1559
|
+
};
|
|
1560
|
+
const closeBracketEffect = /*@__PURE__*/StateEffect.define({
|
|
1561
|
+
map(value, mapping) {
|
|
1562
|
+
let mapped = mapping.mapPos(value, -1, MapMode.TrackAfter);
|
|
1563
|
+
return mapped == null ? undefined : mapped;
|
|
1564
|
+
}
|
|
1565
|
+
});
|
|
1566
|
+
const closedBracket = /*@__PURE__*/new class extends RangeValue {}();
|
|
1567
|
+
closedBracket.startSide = 1;
|
|
1568
|
+
closedBracket.endSide = -1;
|
|
1569
|
+
const bracketState = /*@__PURE__*/StateField.define({
|
|
1570
|
+
create() {
|
|
1571
|
+
return RangeSet.empty;
|
|
1572
|
+
},
|
|
1573
|
+
update(value, tr) {
|
|
1574
|
+
if (tr.selection) {
|
|
1575
|
+
let lineStart = tr.state.doc.lineAt(tr.selection.main.head).from;
|
|
1576
|
+
let prevLineStart = tr.startState.doc.lineAt(tr.startState.selection.main.head).from;
|
|
1577
|
+
if (lineStart != tr.changes.mapPos(prevLineStart, -1)) value = RangeSet.empty;
|
|
1578
|
+
}
|
|
1579
|
+
value = value.map(tr.changes);
|
|
1580
|
+
for (let effect of tr.effects) if (effect.is(closeBracketEffect)) value = value.update({
|
|
1581
|
+
add: [closedBracket.range(effect.value, effect.value + 1)]
|
|
1582
|
+
});
|
|
1583
|
+
return value;
|
|
1584
|
+
}
|
|
1585
|
+
});
|
|
1586
|
+
/**
|
|
1587
|
+
Extension to enable bracket-closing behavior. When a closeable
|
|
1588
|
+
bracket is typed, its closing bracket is immediately inserted
|
|
1589
|
+
after the cursor. When closing a bracket directly in front of a
|
|
1590
|
+
closing bracket inserted by the extension, the cursor moves over
|
|
1591
|
+
that bracket.
|
|
1592
|
+
*/
|
|
1593
|
+
function closeBrackets() {
|
|
1594
|
+
return [inputHandler, bracketState];
|
|
1595
|
+
}
|
|
1596
|
+
const definedClosing = "()[]{}<>";
|
|
1597
|
+
function closing(ch) {
|
|
1598
|
+
for (let i = 0; i < definedClosing.length; i += 2) if (definedClosing.charCodeAt(i) == ch) return definedClosing.charAt(i + 1);
|
|
1599
|
+
return fromCodePoint(ch < 128 ? ch : ch + 1);
|
|
1600
|
+
}
|
|
1601
|
+
function config(state, pos) {
|
|
1602
|
+
return state.languageDataAt("closeBrackets", pos)[0] || defaults;
|
|
1603
|
+
}
|
|
1604
|
+
const android$1 = typeof navigator == "object" && /*@__PURE__*/ /Android\b/.test(navigator.userAgent);
|
|
1605
|
+
const inputHandler = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, insert) => {
|
|
1606
|
+
if ((android$1 ? view.composing : view.compositionStarted) || view.state.readOnly) return false;
|
|
1607
|
+
let sel = view.state.selection.main;
|
|
1608
|
+
if (insert.length > 2 || insert.length == 2 && codePointSize(codePointAt(insert, 0)) == 1 || from != sel.from || to != sel.to) return false;
|
|
1609
|
+
let tr = insertBracket(view.state, insert);
|
|
1610
|
+
if (!tr) return false;
|
|
1611
|
+
view.dispatch(tr);
|
|
1612
|
+
return true;
|
|
1613
|
+
});
|
|
1614
|
+
/**
|
|
1615
|
+
Command that implements deleting a pair of matching brackets when
|
|
1616
|
+
the cursor is between them.
|
|
1617
|
+
*/
|
|
1618
|
+
const deleteBracketPair = _ref3 => {
|
|
1619
|
+
let {
|
|
1620
|
+
state,
|
|
1621
|
+
dispatch
|
|
1622
|
+
} = _ref3;
|
|
1623
|
+
if (state.readOnly) return false;
|
|
1624
|
+
let conf = config(state, state.selection.main.head);
|
|
1625
|
+
let tokens = conf.brackets || defaults.brackets;
|
|
1626
|
+
let dont = null,
|
|
1627
|
+
changes = state.changeByRange(range => {
|
|
1628
|
+
if (range.empty) {
|
|
1629
|
+
let before = prevChar(state.doc, range.head);
|
|
1630
|
+
for (let token of tokens) {
|
|
1631
|
+
if (token == before && nextChar(state.doc, range.head) == closing(codePointAt(token, 0))) return {
|
|
1632
|
+
changes: {
|
|
1633
|
+
from: range.head - token.length,
|
|
1634
|
+
to: range.head + token.length
|
|
1635
|
+
},
|
|
1636
|
+
range: EditorSelection.cursor(range.head - token.length)
|
|
1637
|
+
};
|
|
1638
|
+
}
|
|
1639
|
+
}
|
|
1640
|
+
return {
|
|
1641
|
+
range: dont = range
|
|
1642
|
+
};
|
|
1643
|
+
});
|
|
1644
|
+
if (!dont) dispatch(state.update(changes, {
|
|
1645
|
+
scrollIntoView: true,
|
|
1646
|
+
userEvent: "delete.backward"
|
|
1647
|
+
}));
|
|
1648
|
+
return !dont;
|
|
1649
|
+
};
|
|
1650
|
+
/**
|
|
1651
|
+
Close-brackets related key bindings. Binds Backspace to
|
|
1652
|
+
[`deleteBracketPair`](https://codemirror.net/6/docs/ref/#autocomplete.deleteBracketPair).
|
|
1653
|
+
*/
|
|
1654
|
+
const closeBracketsKeymap = [{
|
|
1655
|
+
key: "Backspace",
|
|
1656
|
+
run: deleteBracketPair
|
|
1657
|
+
}];
|
|
1658
|
+
/**
|
|
1659
|
+
Implements the extension's behavior on text insertion. If the
|
|
1660
|
+
given string counts as a bracket in the language around the
|
|
1661
|
+
selection, and replacing the selection with it requires custom
|
|
1662
|
+
behavior (inserting a closing version or skipping past a
|
|
1663
|
+
previously-closed bracket), this function returns a transaction
|
|
1664
|
+
representing that custom behavior. (You only need this if you want
|
|
1665
|
+
to programmatically insert brackets—the
|
|
1666
|
+
[`closeBrackets`](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets) extension will
|
|
1667
|
+
take care of running this for user input.)
|
|
1668
|
+
*/
|
|
1669
|
+
function insertBracket(state, bracket) {
|
|
1670
|
+
let conf = config(state, state.selection.main.head);
|
|
1671
|
+
let tokens = conf.brackets || defaults.brackets;
|
|
1672
|
+
for (let tok of tokens) {
|
|
1673
|
+
let closed = closing(codePointAt(tok, 0));
|
|
1674
|
+
if (bracket == tok) return closed == tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1, conf) : handleOpen(state, tok, closed, conf.before || defaults.before);
|
|
1675
|
+
if (bracket == closed && closedBracketAt(state, state.selection.main.from)) return handleClose(state, tok, closed);
|
|
1676
|
+
}
|
|
1677
|
+
return null;
|
|
1678
|
+
}
|
|
1679
|
+
function closedBracketAt(state, pos) {
|
|
1680
|
+
let found = false;
|
|
1681
|
+
state.field(bracketState).between(0, state.doc.length, from => {
|
|
1682
|
+
if (from == pos) found = true;
|
|
1683
|
+
});
|
|
1684
|
+
return found;
|
|
1685
|
+
}
|
|
1686
|
+
function nextChar(doc, pos) {
|
|
1687
|
+
let next = doc.sliceString(pos, pos + 2);
|
|
1688
|
+
return next.slice(0, codePointSize(codePointAt(next, 0)));
|
|
1689
|
+
}
|
|
1690
|
+
function prevChar(doc, pos) {
|
|
1691
|
+
let prev = doc.sliceString(pos - 2, pos);
|
|
1692
|
+
return codePointSize(codePointAt(prev, 0)) == prev.length ? prev : prev.slice(1);
|
|
1693
|
+
}
|
|
1694
|
+
function handleOpen(state, open, close, closeBefore) {
|
|
1695
|
+
let dont = null,
|
|
1696
|
+
changes = state.changeByRange(range => {
|
|
1697
|
+
if (!range.empty) return {
|
|
1698
|
+
changes: [{
|
|
1699
|
+
insert: open,
|
|
1700
|
+
from: range.from
|
|
1701
|
+
}, {
|
|
1702
|
+
insert: close,
|
|
1703
|
+
from: range.to
|
|
1704
|
+
}],
|
|
1705
|
+
effects: closeBracketEffect.of(range.to + open.length),
|
|
1706
|
+
range: EditorSelection.range(range.anchor + open.length, range.head + open.length)
|
|
1707
|
+
};
|
|
1708
|
+
let next = nextChar(state.doc, range.head);
|
|
1709
|
+
if (!next || /\s/.test(next) || closeBefore.indexOf(next) > -1) return {
|
|
1710
|
+
changes: {
|
|
1711
|
+
insert: open + close,
|
|
1712
|
+
from: range.head
|
|
1713
|
+
},
|
|
1714
|
+
effects: closeBracketEffect.of(range.head + open.length),
|
|
1715
|
+
range: EditorSelection.cursor(range.head + open.length)
|
|
1716
|
+
};
|
|
1717
|
+
return {
|
|
1718
|
+
range: dont = range
|
|
1719
|
+
};
|
|
1720
|
+
});
|
|
1721
|
+
return dont ? null : state.update(changes, {
|
|
1722
|
+
scrollIntoView: true,
|
|
1723
|
+
userEvent: "input.type"
|
|
1724
|
+
});
|
|
1725
|
+
}
|
|
1726
|
+
function handleClose(state, _open, close) {
|
|
1727
|
+
let dont = null,
|
|
1728
|
+
changes = state.changeByRange(range => {
|
|
1729
|
+
if (range.empty && nextChar(state.doc, range.head) == close) return {
|
|
1730
|
+
changes: {
|
|
1731
|
+
from: range.head,
|
|
1732
|
+
to: range.head + close.length,
|
|
1733
|
+
insert: close
|
|
1734
|
+
},
|
|
1735
|
+
range: EditorSelection.cursor(range.head + close.length)
|
|
1736
|
+
};
|
|
1737
|
+
return dont = {
|
|
1738
|
+
range
|
|
1739
|
+
};
|
|
1740
|
+
});
|
|
1741
|
+
return dont ? null : state.update(changes, {
|
|
1742
|
+
scrollIntoView: true,
|
|
1743
|
+
userEvent: "input.type"
|
|
1744
|
+
});
|
|
1745
|
+
}
|
|
1746
|
+
// Handles cases where the open and close token are the same, and
|
|
1747
|
+
// possibly triple quotes (as in `"""abc"""`-style quoting).
|
|
1748
|
+
function handleSame(state, token, allowTriple, config) {
|
|
1749
|
+
let stringPrefixes = config.stringPrefixes || defaults.stringPrefixes;
|
|
1750
|
+
let dont = null,
|
|
1751
|
+
changes = state.changeByRange(range => {
|
|
1752
|
+
if (!range.empty) return {
|
|
1753
|
+
changes: [{
|
|
1754
|
+
insert: token,
|
|
1755
|
+
from: range.from
|
|
1756
|
+
}, {
|
|
1757
|
+
insert: token,
|
|
1758
|
+
from: range.to
|
|
1759
|
+
}],
|
|
1760
|
+
effects: closeBracketEffect.of(range.to + token.length),
|
|
1761
|
+
range: EditorSelection.range(range.anchor + token.length, range.head + token.length)
|
|
1762
|
+
};
|
|
1763
|
+
let pos = range.head,
|
|
1764
|
+
next = nextChar(state.doc, pos),
|
|
1765
|
+
start;
|
|
1766
|
+
if (next == token) {
|
|
1767
|
+
if (nodeStart(state, pos)) {
|
|
1768
|
+
return {
|
|
1769
|
+
changes: {
|
|
1770
|
+
insert: token + token,
|
|
1771
|
+
from: pos
|
|
1772
|
+
},
|
|
1773
|
+
effects: closeBracketEffect.of(pos + token.length),
|
|
1774
|
+
range: EditorSelection.cursor(pos + token.length)
|
|
1775
|
+
};
|
|
1776
|
+
} else if (closedBracketAt(state, pos)) {
|
|
1777
|
+
let isTriple = allowTriple && state.sliceDoc(pos, pos + token.length * 3) == token + token + token;
|
|
1778
|
+
let content = isTriple ? token + token + token : token;
|
|
1779
|
+
return {
|
|
1780
|
+
changes: {
|
|
1781
|
+
from: pos,
|
|
1782
|
+
to: pos + content.length,
|
|
1783
|
+
insert: content
|
|
1784
|
+
},
|
|
1785
|
+
range: EditorSelection.cursor(pos + content.length)
|
|
1786
|
+
};
|
|
1787
|
+
}
|
|
1788
|
+
} else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token && (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 && nodeStart(state, start)) {
|
|
1789
|
+
return {
|
|
1790
|
+
changes: {
|
|
1791
|
+
insert: token + token + token + token,
|
|
1792
|
+
from: pos
|
|
1793
|
+
},
|
|
1794
|
+
effects: closeBracketEffect.of(pos + token.length),
|
|
1795
|
+
range: EditorSelection.cursor(pos + token.length)
|
|
1796
|
+
};
|
|
1797
|
+
} else if (state.charCategorizer(pos)(next) != CharCategory.Word) {
|
|
1798
|
+
if (canStartStringAt(state, pos, stringPrefixes) > -1 && !probablyInString(state, pos, token, stringPrefixes)) return {
|
|
1799
|
+
changes: {
|
|
1800
|
+
insert: token + token,
|
|
1801
|
+
from: pos
|
|
1802
|
+
},
|
|
1803
|
+
effects: closeBracketEffect.of(pos + token.length),
|
|
1804
|
+
range: EditorSelection.cursor(pos + token.length)
|
|
1805
|
+
};
|
|
1806
|
+
}
|
|
1807
|
+
return {
|
|
1808
|
+
range: dont = range
|
|
1809
|
+
};
|
|
1810
|
+
});
|
|
1811
|
+
return dont ? null : state.update(changes, {
|
|
1812
|
+
scrollIntoView: true,
|
|
1813
|
+
userEvent: "input.type"
|
|
1814
|
+
});
|
|
1815
|
+
}
|
|
1816
|
+
function nodeStart(state, pos) {
|
|
1817
|
+
let tree = syntaxTree(state).resolveInner(pos + 1);
|
|
1818
|
+
return tree.parent && tree.from == pos;
|
|
1819
|
+
}
|
|
1820
|
+
function probablyInString(state, pos, quoteToken, prefixes) {
|
|
1821
|
+
let node = syntaxTree(state).resolveInner(pos, -1);
|
|
1822
|
+
let maxPrefix = prefixes.reduce((m, p) => Math.max(m, p.length), 0);
|
|
1823
|
+
for (let i = 0; i < 5; i++) {
|
|
1824
|
+
let start = state.sliceDoc(node.from, Math.min(node.to, node.from + quoteToken.length + maxPrefix));
|
|
1825
|
+
let quotePos = start.indexOf(quoteToken);
|
|
1826
|
+
if (!quotePos || quotePos > -1 && prefixes.indexOf(start.slice(0, quotePos)) > -1) {
|
|
1827
|
+
let first = node.firstChild;
|
|
1828
|
+
while (first && first.from == node.from && first.to - first.from > quoteToken.length + quotePos) {
|
|
1829
|
+
if (state.sliceDoc(first.to - quoteToken.length, first.to) == quoteToken) return false;
|
|
1830
|
+
first = first.firstChild;
|
|
1831
|
+
}
|
|
1832
|
+
return true;
|
|
1833
|
+
}
|
|
1834
|
+
let parent = node.to == pos && node.parent;
|
|
1835
|
+
if (!parent) break;
|
|
1836
|
+
node = parent;
|
|
1837
|
+
}
|
|
1838
|
+
return false;
|
|
1839
|
+
}
|
|
1840
|
+
function canStartStringAt(state, pos, prefixes) {
|
|
1841
|
+
let charCat = state.charCategorizer(pos);
|
|
1842
|
+
if (charCat(state.sliceDoc(pos - 1, pos)) != CharCategory.Word) return pos;
|
|
1843
|
+
for (let prefix of prefixes) {
|
|
1844
|
+
let start = pos - prefix.length;
|
|
1845
|
+
if (state.sliceDoc(start, pos) == prefix && charCat(state.sliceDoc(start - 1, start)) != CharCategory.Word) return start;
|
|
1846
|
+
}
|
|
1847
|
+
return -1;
|
|
1848
|
+
}
|
|
1849
|
+
|
|
1850
|
+
/**
|
|
1851
|
+
Returns an extension that enables autocompletion.
|
|
1852
|
+
*/
|
|
1853
|
+
function autocompletion() {
|
|
1854
|
+
let config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
1855
|
+
return [completionState, completionConfig.of(config), completionPlugin, completionKeymapExt, baseTheme];
|
|
1856
|
+
}
|
|
1857
|
+
/**
|
|
1858
|
+
Basic keybindings for autocompletion.
|
|
1859
|
+
|
|
1860
|
+
- Ctrl-Space: [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)
|
|
1861
|
+
- Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)
|
|
1862
|
+
- ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`
|
|
1863
|
+
- ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`
|
|
1864
|
+
- PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, "page")`
|
|
1865
|
+
- PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, "page")`
|
|
1866
|
+
- Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)
|
|
1867
|
+
*/
|
|
1868
|
+
const completionKeymap = [{
|
|
1869
|
+
key: "Ctrl-Space",
|
|
1870
|
+
run: startCompletion
|
|
1871
|
+
}, {
|
|
1872
|
+
key: "Escape",
|
|
1873
|
+
run: closeCompletion
|
|
1874
|
+
}, {
|
|
1875
|
+
key: "ArrowDown",
|
|
1876
|
+
run: /*@__PURE__*/moveCompletionSelection(true)
|
|
1877
|
+
}, {
|
|
1878
|
+
key: "ArrowUp",
|
|
1879
|
+
run: /*@__PURE__*/moveCompletionSelection(false)
|
|
1880
|
+
}, {
|
|
1881
|
+
key: "PageDown",
|
|
1882
|
+
run: /*@__PURE__*/moveCompletionSelection(true, "page")
|
|
1883
|
+
}, {
|
|
1884
|
+
key: "PageUp",
|
|
1885
|
+
run: /*@__PURE__*/moveCompletionSelection(false, "page")
|
|
1886
|
+
}, {
|
|
1887
|
+
key: "Enter",
|
|
1888
|
+
run: acceptCompletion
|
|
1889
|
+
}];
|
|
1890
|
+
const completionKeymapExt = /*@__PURE__*/Prec.highest( /*@__PURE__*/keymap.computeN([completionConfig], state => state.facet(completionConfig).defaultKeymap ? [completionKeymap] : []));
|
|
1891
|
+
|
|
1892
|
+
/// A parse stack. These are used internally by the parser to track
|
|
1893
|
+
/// parsing progress. They also provide some properties and methods
|
|
1894
|
+
/// that external code such as a tokenizer can use to get information
|
|
1895
|
+
/// about the parse state.
|
|
1896
|
+
class Stack {
|
|
1897
|
+
/// @internal
|
|
1898
|
+
constructor(
|
|
1899
|
+
/// The parse that this stack is part of @internal
|
|
1900
|
+
p,
|
|
1901
|
+
/// Holds state, input pos, buffer index triplets for all but the
|
|
1902
|
+
/// top state @internal
|
|
1903
|
+
stack,
|
|
1904
|
+
/// The current parse state @internal
|
|
1905
|
+
state,
|
|
1906
|
+
// The position at which the next reduce should take place. This
|
|
1907
|
+
// can be less than `this.pos` when skipped expressions have been
|
|
1908
|
+
// added to the stack (which should be moved outside of the next
|
|
1909
|
+
// reduction)
|
|
1910
|
+
/// @internal
|
|
1911
|
+
reducePos,
|
|
1912
|
+
/// The input position up to which this stack has parsed.
|
|
1913
|
+
pos,
|
|
1914
|
+
/// The dynamic score of the stack, including dynamic precedence
|
|
1915
|
+
/// and error-recovery penalties
|
|
1916
|
+
/// @internal
|
|
1917
|
+
score,
|
|
1918
|
+
// The output buffer. Holds (type, start, end, size) quads
|
|
1919
|
+
// representing nodes created by the parser, where `size` is
|
|
1920
|
+
// amount of buffer array entries covered by this node.
|
|
1921
|
+
/// @internal
|
|
1922
|
+
buffer,
|
|
1923
|
+
// The base offset of the buffer. When stacks are split, the split
|
|
1924
|
+
// instance shared the buffer history with its parent up to
|
|
1925
|
+
// `bufferBase`, which is the absolute offset (including the
|
|
1926
|
+
// offset of previous splits) into the buffer at which this stack
|
|
1927
|
+
// starts writing.
|
|
1928
|
+
/// @internal
|
|
1929
|
+
bufferBase,
|
|
1930
|
+
/// @internal
|
|
1931
|
+
curContext) {
|
|
1932
|
+
let lookAhead = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 0;
|
|
1933
|
+
let
|
|
1934
|
+
// A parent stack from which this was split off, if any. This is
|
|
1935
|
+
// set up so that it always points to a stack that has some
|
|
1936
|
+
// additional buffer content, never to a stack with an equal
|
|
1937
|
+
// `bufferBase`.
|
|
1938
|
+
/// @internal
|
|
1939
|
+
parent = arguments.length > 10 ? arguments[10] : undefined;
|
|
1940
|
+
this.p = p;
|
|
1941
|
+
this.stack = stack;
|
|
1942
|
+
this.state = state;
|
|
1943
|
+
this.reducePos = reducePos;
|
|
1944
|
+
this.pos = pos;
|
|
1945
|
+
this.score = score;
|
|
1946
|
+
this.buffer = buffer;
|
|
1947
|
+
this.bufferBase = bufferBase;
|
|
1948
|
+
this.curContext = curContext;
|
|
1949
|
+
this.lookAhead = lookAhead;
|
|
1950
|
+
this.parent = parent;
|
|
1951
|
+
}
|
|
1952
|
+
/// @internal
|
|
1953
|
+
toString() {
|
|
1954
|
+
return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? "!" + this.score : ""}`;
|
|
1955
|
+
}
|
|
1956
|
+
// Start an empty stack
|
|
1957
|
+
/// @internal
|
|
1958
|
+
static start(p, state) {
|
|
1959
|
+
let pos = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
1960
|
+
let cx = p.parser.context;
|
|
1961
|
+
return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null);
|
|
1962
|
+
}
|
|
1963
|
+
/// The stack's current [context](#lr.ContextTracker) value, if
|
|
1964
|
+
/// any. Its type will depend on the context tracker's type
|
|
1965
|
+
/// parameter, or it will be `null` if there is no context
|
|
1966
|
+
/// tracker.
|
|
1967
|
+
get context() {
|
|
1968
|
+
return this.curContext ? this.curContext.context : null;
|
|
1969
|
+
}
|
|
1970
|
+
// Push a state onto the stack, tracking its start position as well
|
|
1971
|
+
// as the buffer base at that point.
|
|
1972
|
+
/// @internal
|
|
1973
|
+
pushState(state, start) {
|
|
1974
|
+
this.stack.push(this.state, start, this.bufferBase + this.buffer.length);
|
|
1975
|
+
this.state = state;
|
|
1976
|
+
}
|
|
1977
|
+
// Apply a reduce action
|
|
1978
|
+
/// @internal
|
|
1979
|
+
reduce(action) {
|
|
1980
|
+
var _a;
|
|
1981
|
+
let depth = action >> 19 /* Action.ReduceDepthShift */,
|
|
1982
|
+
type = action & 65535 /* Action.ValueMask */;
|
|
1983
|
+
let {
|
|
1984
|
+
parser
|
|
1985
|
+
} = this.p;
|
|
1986
|
+
let dPrec = parser.dynamicPrecedence(type);
|
|
1987
|
+
if (dPrec) this.score += dPrec;
|
|
1988
|
+
if (depth == 0) {
|
|
1989
|
+
this.pushState(parser.getGoto(this.state, type, true), this.reducePos);
|
|
1990
|
+
// Zero-depth reductions are a special case—they add stuff to
|
|
1991
|
+
// the stack without popping anything off.
|
|
1992
|
+
if (type < parser.minRepeatTerm) this.storeNode(type, this.reducePos, this.reducePos, 4, true);
|
|
1993
|
+
this.reduceContext(type, this.reducePos);
|
|
1994
|
+
return;
|
|
1995
|
+
}
|
|
1996
|
+
// Find the base index into `this.stack`, content after which will
|
|
1997
|
+
// be dropped. Note that with `StayFlag` reductions we need to
|
|
1998
|
+
// consume two extra frames (the dummy parent node for the skipped
|
|
1999
|
+
// expression and the state that we'll be staying in, which should
|
|
2000
|
+
// be moved to `this.state`).
|
|
2001
|
+
let base = this.stack.length - (depth - 1) * 3 - (action & 262144 /* Action.StayFlag */ ? 6 : 0);
|
|
2002
|
+
let start = base ? this.stack[base - 2] : this.p.ranges[0].from,
|
|
2003
|
+
size = this.reducePos - start;
|
|
2004
|
+
// This is a kludge to try and detect overly deep left-associative
|
|
2005
|
+
// trees, which will not increase the parse stack depth and thus
|
|
2006
|
+
// won't be caught by the regular stack-depth limit check.
|
|
2007
|
+
if (size >= 2000 /* Recover.MinBigReduction */ && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) {
|
|
2008
|
+
if (start == this.p.lastBigReductionStart) {
|
|
2009
|
+
this.p.bigReductionCount++;
|
|
2010
|
+
this.p.lastBigReductionSize = size;
|
|
2011
|
+
} else if (this.p.lastBigReductionSize < size) {
|
|
2012
|
+
this.p.bigReductionCount = 1;
|
|
2013
|
+
this.p.lastBigReductionStart = start;
|
|
2014
|
+
this.p.lastBigReductionSize = size;
|
|
2015
|
+
}
|
|
2016
|
+
}
|
|
2017
|
+
let bufferBase = base ? this.stack[base - 1] : 0,
|
|
2018
|
+
count = this.bufferBase + this.buffer.length - bufferBase;
|
|
2019
|
+
// Store normal terms or `R -> R R` repeat reductions
|
|
2020
|
+
if (type < parser.minRepeatTerm || action & 131072 /* Action.RepeatFlag */) {
|
|
2021
|
+
let pos = parser.stateFlag(this.state, 1 /* StateFlag.Skipped */) ? this.pos : this.reducePos;
|
|
2022
|
+
this.storeNode(type, start, pos, count + 4, true);
|
|
2023
|
+
}
|
|
2024
|
+
if (action & 262144 /* Action.StayFlag */) {
|
|
2025
|
+
this.state = this.stack[base];
|
|
2026
|
+
} else {
|
|
2027
|
+
let baseStateID = this.stack[base - 3];
|
|
2028
|
+
this.state = parser.getGoto(baseStateID, type, true);
|
|
2029
|
+
}
|
|
2030
|
+
while (this.stack.length > base) this.stack.pop();
|
|
2031
|
+
this.reduceContext(type, start);
|
|
2032
|
+
}
|
|
2033
|
+
// Shift a value into the buffer
|
|
2034
|
+
/// @internal
|
|
2035
|
+
storeNode(term, start, end) {
|
|
2036
|
+
let size = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 4;
|
|
2037
|
+
let isReduce = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
2038
|
+
if (term == 0 /* Term.Err */ && (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {
|
|
2039
|
+
// Try to omit/merge adjacent error nodes
|
|
2040
|
+
let cur = this,
|
|
2041
|
+
top = this.buffer.length;
|
|
2042
|
+
if (top == 0 && cur.parent) {
|
|
2043
|
+
top = cur.bufferBase - cur.parent.bufferBase;
|
|
2044
|
+
cur = cur.parent;
|
|
2045
|
+
}
|
|
2046
|
+
if (top > 0 && cur.buffer[top - 4] == 0 /* Term.Err */ && cur.buffer[top - 1] > -1) {
|
|
2047
|
+
if (start == end) return;
|
|
2048
|
+
if (cur.buffer[top - 2] >= start) {
|
|
2049
|
+
cur.buffer[top - 2] = end;
|
|
2050
|
+
return;
|
|
2051
|
+
}
|
|
2052
|
+
}
|
|
2053
|
+
}
|
|
2054
|
+
if (!isReduce || this.pos == end) {
|
|
2055
|
+
// Simple case, just append
|
|
2056
|
+
this.buffer.push(term, start, end, size);
|
|
2057
|
+
} else {
|
|
2058
|
+
// There may be skipped nodes that have to be moved forward
|
|
2059
|
+
let index = this.buffer.length;
|
|
2060
|
+
if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */) while (index > 0 && this.buffer[index - 2] > end) {
|
|
2061
|
+
// Move this record forward
|
|
2062
|
+
this.buffer[index] = this.buffer[index - 4];
|
|
2063
|
+
this.buffer[index + 1] = this.buffer[index - 3];
|
|
2064
|
+
this.buffer[index + 2] = this.buffer[index - 2];
|
|
2065
|
+
this.buffer[index + 3] = this.buffer[index - 1];
|
|
2066
|
+
index -= 4;
|
|
2067
|
+
if (size > 4) size -= 4;
|
|
2068
|
+
}
|
|
2069
|
+
this.buffer[index] = term;
|
|
2070
|
+
this.buffer[index + 1] = start;
|
|
2071
|
+
this.buffer[index + 2] = end;
|
|
2072
|
+
this.buffer[index + 3] = size;
|
|
2073
|
+
}
|
|
2074
|
+
}
|
|
2075
|
+
// Apply a shift action
|
|
2076
|
+
/// @internal
|
|
2077
|
+
shift(action, next, nextEnd) {
|
|
2078
|
+
let start = this.pos;
|
|
2079
|
+
if (action & 131072 /* Action.GotoFlag */) {
|
|
2080
|
+
this.pushState(action & 65535 /* Action.ValueMask */, this.pos);
|
|
2081
|
+
} else if ((action & 262144 /* Action.StayFlag */) == 0) {
|
|
2082
|
+
// Regular shift
|
|
2083
|
+
let nextState = action,
|
|
2084
|
+
{
|
|
2085
|
+
parser
|
|
2086
|
+
} = this.p;
|
|
2087
|
+
if (nextEnd > this.pos || next <= parser.maxNode) {
|
|
2088
|
+
this.pos = nextEnd;
|
|
2089
|
+
if (!parser.stateFlag(nextState, 1 /* StateFlag.Skipped */)) this.reducePos = nextEnd;
|
|
2090
|
+
}
|
|
2091
|
+
this.pushState(nextState, start);
|
|
2092
|
+
this.shiftContext(next, start);
|
|
2093
|
+
if (next <= parser.maxNode) this.buffer.push(next, start, nextEnd, 4);
|
|
2094
|
+
} else {
|
|
2095
|
+
// Shift-and-stay, which means this is a skipped token
|
|
2096
|
+
this.pos = nextEnd;
|
|
2097
|
+
this.shiftContext(next, start);
|
|
2098
|
+
if (next <= this.p.parser.maxNode) this.buffer.push(next, start, nextEnd, 4);
|
|
2099
|
+
}
|
|
2100
|
+
}
|
|
2101
|
+
// Apply an action
|
|
2102
|
+
/// @internal
|
|
2103
|
+
apply(action, next, nextEnd) {
|
|
2104
|
+
if (action & 65536 /* Action.ReduceFlag */) this.reduce(action);else this.shift(action, next, nextEnd);
|
|
2105
|
+
}
|
|
2106
|
+
// Add a prebuilt (reused) node into the buffer.
|
|
2107
|
+
/// @internal
|
|
2108
|
+
useNode(value, next) {
|
|
2109
|
+
let index = this.p.reused.length - 1;
|
|
2110
|
+
if (index < 0 || this.p.reused[index] != value) {
|
|
2111
|
+
this.p.reused.push(value);
|
|
2112
|
+
index++;
|
|
2113
|
+
}
|
|
2114
|
+
let start = this.pos;
|
|
2115
|
+
this.reducePos = this.pos = start + value.length;
|
|
2116
|
+
this.pushState(next, start);
|
|
2117
|
+
this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */);
|
|
2118
|
+
if (this.curContext) this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length)));
|
|
2119
|
+
}
|
|
2120
|
+
// Split the stack. Due to the buffer sharing and the fact
|
|
2121
|
+
// that `this.stack` tends to stay quite shallow, this isn't very
|
|
2122
|
+
// expensive.
|
|
2123
|
+
/// @internal
|
|
2124
|
+
split() {
|
|
2125
|
+
let parent = this;
|
|
2126
|
+
let off = parent.buffer.length;
|
|
2127
|
+
// Because the top of the buffer (after this.pos) may be mutated
|
|
2128
|
+
// to reorder reductions and skipped tokens, and shared buffers
|
|
2129
|
+
// should be immutable, this copies any outstanding skipped tokens
|
|
2130
|
+
// to the new buffer, and puts the base pointer before them.
|
|
2131
|
+
while (off > 0 && parent.buffer[off - 2] > parent.reducePos) off -= 4;
|
|
2132
|
+
let buffer = parent.buffer.slice(off),
|
|
2133
|
+
base = parent.bufferBase + off;
|
|
2134
|
+
// Make sure parent points to an actual parent with content, if there is such a parent.
|
|
2135
|
+
while (parent && base == parent.bufferBase) parent = parent.parent;
|
|
2136
|
+
return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent);
|
|
2137
|
+
}
|
|
2138
|
+
// Try to recover from an error by 'deleting' (ignoring) one token.
|
|
2139
|
+
/// @internal
|
|
2140
|
+
recoverByDelete(next, nextEnd) {
|
|
2141
|
+
let isNode = next <= this.p.parser.maxNode;
|
|
2142
|
+
if (isNode) this.storeNode(next, this.pos, nextEnd, 4);
|
|
2143
|
+
this.storeNode(0 /* Term.Err */, this.pos, nextEnd, isNode ? 8 : 4);
|
|
2144
|
+
this.pos = this.reducePos = nextEnd;
|
|
2145
|
+
this.score -= 190 /* Recover.Delete */;
|
|
2146
|
+
}
|
|
2147
|
+
/// Check if the given term would be able to be shifted (optionally
|
|
2148
|
+
/// after some reductions) on this stack. This can be useful for
|
|
2149
|
+
/// external tokenizers that want to make sure they only provide a
|
|
2150
|
+
/// given token when it applies.
|
|
2151
|
+
canShift(term) {
|
|
2152
|
+
for (let sim = new SimulatedStack(this);;) {
|
|
2153
|
+
let action = this.p.parser.stateSlot(sim.state, 4 /* ParseState.DefaultReduce */) || this.p.parser.hasAction(sim.state, term);
|
|
2154
|
+
if (action == 0) return false;
|
|
2155
|
+
if ((action & 65536 /* Action.ReduceFlag */) == 0) return true;
|
|
2156
|
+
sim.reduce(action);
|
|
2157
|
+
}
|
|
2158
|
+
}
|
|
2159
|
+
// Apply up to Recover.MaxNext recovery actions that conceptually
|
|
2160
|
+
// inserts some missing token or rule.
|
|
2161
|
+
/// @internal
|
|
2162
|
+
recoverByInsert(next) {
|
|
2163
|
+
if (this.stack.length >= 300 /* Recover.MaxInsertStackDepth */) return [];
|
|
2164
|
+
let nextStates = this.p.parser.nextStates(this.state);
|
|
2165
|
+
if (nextStates.length > 4 /* Recover.MaxNext */ << 1 || this.stack.length >= 120 /* Recover.DampenInsertStackDepth */) {
|
|
2166
|
+
let best = [];
|
|
2167
|
+
for (let i = 0, s; i < nextStates.length; i += 2) {
|
|
2168
|
+
if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next)) best.push(nextStates[i], s);
|
|
2169
|
+
}
|
|
2170
|
+
if (this.stack.length < 120 /* Recover.DampenInsertStackDepth */) for (let i = 0; best.length < 4 /* Recover.MaxNext */ << 1 && i < nextStates.length; i += 2) {
|
|
2171
|
+
let s = nextStates[i + 1];
|
|
2172
|
+
if (!best.some((v, i) => i & 1 && v == s)) best.push(nextStates[i], s);
|
|
2173
|
+
}
|
|
2174
|
+
nextStates = best;
|
|
2175
|
+
}
|
|
2176
|
+
let result = [];
|
|
2177
|
+
for (let i = 0; i < nextStates.length && result.length < 4 /* Recover.MaxNext */; i += 2) {
|
|
2178
|
+
let s = nextStates[i + 1];
|
|
2179
|
+
if (s == this.state) continue;
|
|
2180
|
+
let stack = this.split();
|
|
2181
|
+
stack.pushState(s, this.pos);
|
|
2182
|
+
stack.storeNode(0 /* Term.Err */, stack.pos, stack.pos, 4, true);
|
|
2183
|
+
stack.shiftContext(nextStates[i], this.pos);
|
|
2184
|
+
stack.score -= 200 /* Recover.Insert */;
|
|
2185
|
+
result.push(stack);
|
|
2186
|
+
}
|
|
2187
|
+
return result;
|
|
2188
|
+
}
|
|
2189
|
+
// Force a reduce, if possible. Return false if that can't
|
|
2190
|
+
// be done.
|
|
2191
|
+
/// @internal
|
|
2192
|
+
forceReduce() {
|
|
2193
|
+
let reduce = this.p.parser.stateSlot(this.state, 5 /* ParseState.ForcedReduce */);
|
|
2194
|
+
if ((reduce & 65536 /* Action.ReduceFlag */) == 0) return false;
|
|
2195
|
+
let {
|
|
2196
|
+
parser
|
|
2197
|
+
} = this.p;
|
|
2198
|
+
if (!parser.validAction(this.state, reduce)) {
|
|
2199
|
+
let depth = reduce >> 19 /* Action.ReduceDepthShift */,
|
|
2200
|
+
term = reduce & 65535 /* Action.ValueMask */;
|
|
2201
|
+
let target = this.stack.length - depth * 3;
|
|
2202
|
+
if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) return false;
|
|
2203
|
+
this.storeNode(0 /* Term.Err */, this.reducePos, this.reducePos, 4, true);
|
|
2204
|
+
this.score -= 100 /* Recover.Reduce */;
|
|
2205
|
+
}
|
|
2206
|
+
|
|
2207
|
+
this.reducePos = this.pos;
|
|
2208
|
+
this.reduce(reduce);
|
|
2209
|
+
return true;
|
|
2210
|
+
}
|
|
2211
|
+
/// @internal
|
|
2212
|
+
forceAll() {
|
|
2213
|
+
while (!this.p.parser.stateFlag(this.state, 2 /* StateFlag.Accepting */)) {
|
|
2214
|
+
if (!this.forceReduce()) {
|
|
2215
|
+
this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);
|
|
2216
|
+
break;
|
|
2217
|
+
}
|
|
2218
|
+
}
|
|
2219
|
+
return this;
|
|
2220
|
+
}
|
|
2221
|
+
/// Check whether this state has no further actions (assumed to be a direct descendant of the
|
|
2222
|
+
/// top state, since any other states must be able to continue
|
|
2223
|
+
/// somehow). @internal
|
|
2224
|
+
get deadEnd() {
|
|
2225
|
+
if (this.stack.length != 3) return false;
|
|
2226
|
+
let {
|
|
2227
|
+
parser
|
|
2228
|
+
} = this.p;
|
|
2229
|
+
return parser.data[parser.stateSlot(this.state, 1 /* ParseState.Actions */)] == 65535 /* Seq.End */ && !parser.stateSlot(this.state, 4 /* ParseState.DefaultReduce */);
|
|
2230
|
+
}
|
|
2231
|
+
/// Restart the stack (put it back in its start state). Only safe
|
|
2232
|
+
/// when this.stack.length == 3 (state is directly below the top
|
|
2233
|
+
/// state). @internal
|
|
2234
|
+
restart() {
|
|
2235
|
+
this.state = this.stack[0];
|
|
2236
|
+
this.stack.length = 0;
|
|
2237
|
+
}
|
|
2238
|
+
/// @internal
|
|
2239
|
+
sameState(other) {
|
|
2240
|
+
if (this.state != other.state || this.stack.length != other.stack.length) return false;
|
|
2241
|
+
for (let i = 0; i < this.stack.length; i += 3) if (this.stack[i] != other.stack[i]) return false;
|
|
2242
|
+
return true;
|
|
2243
|
+
}
|
|
2244
|
+
/// Get the parser used by this stack.
|
|
2245
|
+
get parser() {
|
|
2246
|
+
return this.p.parser;
|
|
2247
|
+
}
|
|
2248
|
+
/// Test whether a given dialect (by numeric ID, as exported from
|
|
2249
|
+
/// the terms file) is enabled.
|
|
2250
|
+
dialectEnabled(dialectID) {
|
|
2251
|
+
return this.p.parser.dialect.flags[dialectID];
|
|
2252
|
+
}
|
|
2253
|
+
shiftContext(term, start) {
|
|
2254
|
+
if (this.curContext) this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start)));
|
|
2255
|
+
}
|
|
2256
|
+
reduceContext(term, start) {
|
|
2257
|
+
if (this.curContext) this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start)));
|
|
2258
|
+
}
|
|
2259
|
+
/// @internal
|
|
2260
|
+
emitContext() {
|
|
2261
|
+
let last = this.buffer.length - 1;
|
|
2262
|
+
if (last < 0 || this.buffer[last] != -3) this.buffer.push(this.curContext.hash, this.reducePos, this.reducePos, -3);
|
|
2263
|
+
}
|
|
2264
|
+
/// @internal
|
|
2265
|
+
emitLookAhead() {
|
|
2266
|
+
let last = this.buffer.length - 1;
|
|
2267
|
+
if (last < 0 || this.buffer[last] != -4) this.buffer.push(this.lookAhead, this.reducePos, this.reducePos, -4);
|
|
2268
|
+
}
|
|
2269
|
+
updateContext(context) {
|
|
2270
|
+
if (context != this.curContext.context) {
|
|
2271
|
+
let newCx = new StackContext(this.curContext.tracker, context);
|
|
2272
|
+
if (newCx.hash != this.curContext.hash) this.emitContext();
|
|
2273
|
+
this.curContext = newCx;
|
|
2274
|
+
}
|
|
2275
|
+
}
|
|
2276
|
+
/// @internal
|
|
2277
|
+
setLookAhead(lookAhead) {
|
|
2278
|
+
if (lookAhead > this.lookAhead) {
|
|
2279
|
+
this.emitLookAhead();
|
|
2280
|
+
this.lookAhead = lookAhead;
|
|
2281
|
+
}
|
|
2282
|
+
}
|
|
2283
|
+
/// @internal
|
|
2284
|
+
close() {
|
|
2285
|
+
if (this.curContext && this.curContext.tracker.strict) this.emitContext();
|
|
2286
|
+
if (this.lookAhead > 0) this.emitLookAhead();
|
|
2287
|
+
}
|
|
2288
|
+
}
|
|
2289
|
+
class StackContext {
|
|
2290
|
+
constructor(tracker, context) {
|
|
2291
|
+
this.tracker = tracker;
|
|
2292
|
+
this.context = context;
|
|
2293
|
+
this.hash = tracker.strict ? tracker.hash(context) : 0;
|
|
2294
|
+
}
|
|
2295
|
+
}
|
|
2296
|
+
var Recover;
|
|
2297
|
+
(function (Recover) {
|
|
2298
|
+
Recover[Recover["Insert"] = 200] = "Insert";
|
|
2299
|
+
Recover[Recover["Delete"] = 190] = "Delete";
|
|
2300
|
+
Recover[Recover["Reduce"] = 100] = "Reduce";
|
|
2301
|
+
Recover[Recover["MaxNext"] = 4] = "MaxNext";
|
|
2302
|
+
Recover[Recover["MaxInsertStackDepth"] = 300] = "MaxInsertStackDepth";
|
|
2303
|
+
Recover[Recover["DampenInsertStackDepth"] = 120] = "DampenInsertStackDepth";
|
|
2304
|
+
Recover[Recover["MinBigReduction"] = 2000] = "MinBigReduction";
|
|
2305
|
+
})(Recover || (Recover = {}));
|
|
2306
|
+
// Used to cheaply run some reductions to scan ahead without mutating
|
|
2307
|
+
// an entire stack
|
|
2308
|
+
class SimulatedStack {
|
|
2309
|
+
constructor(start) {
|
|
2310
|
+
this.start = start;
|
|
2311
|
+
this.state = start.state;
|
|
2312
|
+
this.stack = start.stack;
|
|
2313
|
+
this.base = this.stack.length;
|
|
2314
|
+
}
|
|
2315
|
+
reduce(action) {
|
|
2316
|
+
let term = action & 65535 /* Action.ValueMask */,
|
|
2317
|
+
depth = action >> 19 /* Action.ReduceDepthShift */;
|
|
2318
|
+
if (depth == 0) {
|
|
2319
|
+
if (this.stack == this.start.stack) this.stack = this.stack.slice();
|
|
2320
|
+
this.stack.push(this.state, 0, 0);
|
|
2321
|
+
this.base += 3;
|
|
2322
|
+
} else {
|
|
2323
|
+
this.base -= (depth - 1) * 3;
|
|
2324
|
+
}
|
|
2325
|
+
let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true);
|
|
2326
|
+
this.state = goto;
|
|
2327
|
+
}
|
|
2328
|
+
}
|
|
2329
|
+
// This is given to `Tree.build` to build a buffer, and encapsulates
|
|
2330
|
+
// the parent-stack-walking necessary to read the nodes.
|
|
2331
|
+
class StackBufferCursor {
|
|
2332
|
+
constructor(stack, pos, index) {
|
|
2333
|
+
this.stack = stack;
|
|
2334
|
+
this.pos = pos;
|
|
2335
|
+
this.index = index;
|
|
2336
|
+
this.buffer = stack.buffer;
|
|
2337
|
+
if (this.index == 0) this.maybeNext();
|
|
2338
|
+
}
|
|
2339
|
+
static create(stack) {
|
|
2340
|
+
let pos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : stack.bufferBase + stack.buffer.length;
|
|
2341
|
+
return new StackBufferCursor(stack, pos, pos - stack.bufferBase);
|
|
2342
|
+
}
|
|
2343
|
+
maybeNext() {
|
|
2344
|
+
let next = this.stack.parent;
|
|
2345
|
+
if (next != null) {
|
|
2346
|
+
this.index = this.stack.bufferBase - next.bufferBase;
|
|
2347
|
+
this.stack = next;
|
|
2348
|
+
this.buffer = next.buffer;
|
|
2349
|
+
}
|
|
2350
|
+
}
|
|
2351
|
+
get id() {
|
|
2352
|
+
return this.buffer[this.index - 4];
|
|
2353
|
+
}
|
|
2354
|
+
get start() {
|
|
2355
|
+
return this.buffer[this.index - 3];
|
|
2356
|
+
}
|
|
2357
|
+
get end() {
|
|
2358
|
+
return this.buffer[this.index - 2];
|
|
2359
|
+
}
|
|
2360
|
+
get size() {
|
|
2361
|
+
return this.buffer[this.index - 1];
|
|
2362
|
+
}
|
|
2363
|
+
next() {
|
|
2364
|
+
this.index -= 4;
|
|
2365
|
+
this.pos -= 4;
|
|
2366
|
+
if (this.index == 0) this.maybeNext();
|
|
2367
|
+
}
|
|
2368
|
+
fork() {
|
|
2369
|
+
return new StackBufferCursor(this.stack, this.pos, this.index);
|
|
2370
|
+
}
|
|
2371
|
+
}
|
|
2372
|
+
|
|
2373
|
+
// See lezer-generator/src/encode.ts for comments about the encoding
|
|
2374
|
+
// used here
|
|
2375
|
+
function decodeArray(input) {
|
|
2376
|
+
let Type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Uint16Array;
|
|
2377
|
+
if (typeof input != "string") return input;
|
|
2378
|
+
let array = null;
|
|
2379
|
+
for (let pos = 0, out = 0; pos < input.length;) {
|
|
2380
|
+
let value = 0;
|
|
2381
|
+
for (;;) {
|
|
2382
|
+
let next = input.charCodeAt(pos++),
|
|
2383
|
+
stop = false;
|
|
2384
|
+
if (next == 126 /* Encode.BigValCode */) {
|
|
2385
|
+
value = 65535 /* Encode.BigVal */;
|
|
2386
|
+
break;
|
|
2387
|
+
}
|
|
2388
|
+
if (next >= 92 /* Encode.Gap2 */) next--;
|
|
2389
|
+
if (next >= 34 /* Encode.Gap1 */) next--;
|
|
2390
|
+
let digit = next - 32 /* Encode.Start */;
|
|
2391
|
+
if (digit >= 46 /* Encode.Base */) {
|
|
2392
|
+
digit -= 46 /* Encode.Base */;
|
|
2393
|
+
stop = true;
|
|
2394
|
+
}
|
|
2395
|
+
value += digit;
|
|
2396
|
+
if (stop) break;
|
|
2397
|
+
value *= 46 /* Encode.Base */;
|
|
2398
|
+
}
|
|
2399
|
+
|
|
2400
|
+
if (array) array[out++] = value;else array = new Type(value);
|
|
2401
|
+
}
|
|
2402
|
+
return array;
|
|
2403
|
+
}
|
|
2404
|
+
class CachedToken {
|
|
2405
|
+
constructor() {
|
|
2406
|
+
this.start = -1;
|
|
2407
|
+
this.value = -1;
|
|
2408
|
+
this.end = -1;
|
|
2409
|
+
this.extended = -1;
|
|
2410
|
+
this.lookAhead = 0;
|
|
2411
|
+
this.mask = 0;
|
|
2412
|
+
this.context = 0;
|
|
2413
|
+
}
|
|
2414
|
+
}
|
|
2415
|
+
const nullToken = new CachedToken();
|
|
2416
|
+
/// [Tokenizers](#lr.ExternalTokenizer) interact with the input
|
|
2417
|
+
/// through this interface. It presents the input as a stream of
|
|
2418
|
+
/// characters, tracking lookahead and hiding the complexity of
|
|
2419
|
+
/// [ranges](#common.Parser.parse^ranges) from tokenizer code.
|
|
2420
|
+
class InputStream {
|
|
2421
|
+
/// @internal
|
|
2422
|
+
constructor(
|
|
2423
|
+
/// @internal
|
|
2424
|
+
input,
|
|
2425
|
+
/// @internal
|
|
2426
|
+
ranges) {
|
|
2427
|
+
this.input = input;
|
|
2428
|
+
this.ranges = ranges;
|
|
2429
|
+
/// @internal
|
|
2430
|
+
this.chunk = "";
|
|
2431
|
+
/// @internal
|
|
2432
|
+
this.chunkOff = 0;
|
|
2433
|
+
/// Backup chunk
|
|
2434
|
+
this.chunk2 = "";
|
|
2435
|
+
this.chunk2Pos = 0;
|
|
2436
|
+
/// The character code of the next code unit in the input, or -1
|
|
2437
|
+
/// when the stream is at the end of the input.
|
|
2438
|
+
this.next = -1;
|
|
2439
|
+
/// @internal
|
|
2440
|
+
this.token = nullToken;
|
|
2441
|
+
this.rangeIndex = 0;
|
|
2442
|
+
this.pos = this.chunkPos = ranges[0].from;
|
|
2443
|
+
this.range = ranges[0];
|
|
2444
|
+
this.end = ranges[ranges.length - 1].to;
|
|
2445
|
+
this.readNext();
|
|
2446
|
+
}
|
|
2447
|
+
/// @internal
|
|
2448
|
+
resolveOffset(offset, assoc) {
|
|
2449
|
+
let range = this.range,
|
|
2450
|
+
index = this.rangeIndex;
|
|
2451
|
+
let pos = this.pos + offset;
|
|
2452
|
+
while (pos < range.from) {
|
|
2453
|
+
if (!index) return null;
|
|
2454
|
+
let next = this.ranges[--index];
|
|
2455
|
+
pos -= range.from - next.to;
|
|
2456
|
+
range = next;
|
|
2457
|
+
}
|
|
2458
|
+
while (assoc < 0 ? pos > range.to : pos >= range.to) {
|
|
2459
|
+
if (index == this.ranges.length - 1) return null;
|
|
2460
|
+
let next = this.ranges[++index];
|
|
2461
|
+
pos += next.from - range.to;
|
|
2462
|
+
range = next;
|
|
2463
|
+
}
|
|
2464
|
+
return pos;
|
|
2465
|
+
}
|
|
2466
|
+
/// @internal
|
|
2467
|
+
clipPos(pos) {
|
|
2468
|
+
if (pos >= this.range.from && pos < this.range.to) return pos;
|
|
2469
|
+
for (let range of this.ranges) if (range.to > pos) return Math.max(pos, range.from);
|
|
2470
|
+
return this.end;
|
|
2471
|
+
}
|
|
2472
|
+
/// Look at a code unit near the stream position. `.peek(0)` equals
|
|
2473
|
+
/// `.next`, `.peek(-1)` gives you the previous character, and so
|
|
2474
|
+
/// on.
|
|
2475
|
+
///
|
|
2476
|
+
/// Note that looking around during tokenizing creates dependencies
|
|
2477
|
+
/// on potentially far-away content, which may reduce the
|
|
2478
|
+
/// effectiveness incremental parsing—when looking forward—or even
|
|
2479
|
+
/// cause invalid reparses when looking backward more than 25 code
|
|
2480
|
+
/// units, since the library does not track lookbehind.
|
|
2481
|
+
peek(offset) {
|
|
2482
|
+
let idx = this.chunkOff + offset,
|
|
2483
|
+
pos,
|
|
2484
|
+
result;
|
|
2485
|
+
if (idx >= 0 && idx < this.chunk.length) {
|
|
2486
|
+
pos = this.pos + offset;
|
|
2487
|
+
result = this.chunk.charCodeAt(idx);
|
|
2488
|
+
} else {
|
|
2489
|
+
let resolved = this.resolveOffset(offset, 1);
|
|
2490
|
+
if (resolved == null) return -1;
|
|
2491
|
+
pos = resolved;
|
|
2492
|
+
if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) {
|
|
2493
|
+
result = this.chunk2.charCodeAt(pos - this.chunk2Pos);
|
|
2494
|
+
} else {
|
|
2495
|
+
let i = this.rangeIndex,
|
|
2496
|
+
range = this.range;
|
|
2497
|
+
while (range.to <= pos) range = this.ranges[++i];
|
|
2498
|
+
this.chunk2 = this.input.chunk(this.chunk2Pos = pos);
|
|
2499
|
+
if (pos + this.chunk2.length > range.to) this.chunk2 = this.chunk2.slice(0, range.to - pos);
|
|
2500
|
+
result = this.chunk2.charCodeAt(0);
|
|
2501
|
+
}
|
|
2502
|
+
}
|
|
2503
|
+
if (pos >= this.token.lookAhead) this.token.lookAhead = pos + 1;
|
|
2504
|
+
return result;
|
|
2505
|
+
}
|
|
2506
|
+
/// Accept a token. By default, the end of the token is set to the
|
|
2507
|
+
/// current stream position, but you can pass an offset (relative to
|
|
2508
|
+
/// the stream position) to change that.
|
|
2509
|
+
acceptToken(token) {
|
|
2510
|
+
let endOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
2511
|
+
let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos;
|
|
2512
|
+
if (end == null || end < this.token.start) throw new RangeError("Token end out of bounds");
|
|
2513
|
+
this.token.value = token;
|
|
2514
|
+
this.token.end = end;
|
|
2515
|
+
}
|
|
2516
|
+
getChunk() {
|
|
2517
|
+
if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) {
|
|
2518
|
+
let {
|
|
2519
|
+
chunk,
|
|
2520
|
+
chunkPos
|
|
2521
|
+
} = this;
|
|
2522
|
+
this.chunk = this.chunk2;
|
|
2523
|
+
this.chunkPos = this.chunk2Pos;
|
|
2524
|
+
this.chunk2 = chunk;
|
|
2525
|
+
this.chunk2Pos = chunkPos;
|
|
2526
|
+
this.chunkOff = this.pos - this.chunkPos;
|
|
2527
|
+
} else {
|
|
2528
|
+
this.chunk2 = this.chunk;
|
|
2529
|
+
this.chunk2Pos = this.chunkPos;
|
|
2530
|
+
let nextChunk = this.input.chunk(this.pos);
|
|
2531
|
+
let end = this.pos + nextChunk.length;
|
|
2532
|
+
this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk;
|
|
2533
|
+
this.chunkPos = this.pos;
|
|
2534
|
+
this.chunkOff = 0;
|
|
2535
|
+
}
|
|
2536
|
+
}
|
|
2537
|
+
readNext() {
|
|
2538
|
+
if (this.chunkOff >= this.chunk.length) {
|
|
2539
|
+
this.getChunk();
|
|
2540
|
+
if (this.chunkOff == this.chunk.length) return this.next = -1;
|
|
2541
|
+
}
|
|
2542
|
+
return this.next = this.chunk.charCodeAt(this.chunkOff);
|
|
2543
|
+
}
|
|
2544
|
+
/// Move the stream forward N (defaults to 1) code units. Returns
|
|
2545
|
+
/// the new value of [`next`](#lr.InputStream.next).
|
|
2546
|
+
advance() {
|
|
2547
|
+
let n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
|
2548
|
+
this.chunkOff += n;
|
|
2549
|
+
while (this.pos + n >= this.range.to) {
|
|
2550
|
+
if (this.rangeIndex == this.ranges.length - 1) return this.setDone();
|
|
2551
|
+
n -= this.range.to - this.pos;
|
|
2552
|
+
this.range = this.ranges[++this.rangeIndex];
|
|
2553
|
+
this.pos = this.range.from;
|
|
2554
|
+
}
|
|
2555
|
+
this.pos += n;
|
|
2556
|
+
if (this.pos >= this.token.lookAhead) this.token.lookAhead = this.pos + 1;
|
|
2557
|
+
return this.readNext();
|
|
2558
|
+
}
|
|
2559
|
+
setDone() {
|
|
2560
|
+
this.pos = this.chunkPos = this.end;
|
|
2561
|
+
this.range = this.ranges[this.rangeIndex = this.ranges.length - 1];
|
|
2562
|
+
this.chunk = "";
|
|
2563
|
+
return this.next = -1;
|
|
2564
|
+
}
|
|
2565
|
+
/// @internal
|
|
2566
|
+
reset(pos, token) {
|
|
2567
|
+
if (token) {
|
|
2568
|
+
this.token = token;
|
|
2569
|
+
token.start = pos;
|
|
2570
|
+
token.lookAhead = pos + 1;
|
|
2571
|
+
token.value = token.extended = -1;
|
|
2572
|
+
} else {
|
|
2573
|
+
this.token = nullToken;
|
|
2574
|
+
}
|
|
2575
|
+
if (this.pos != pos) {
|
|
2576
|
+
this.pos = pos;
|
|
2577
|
+
if (pos == this.end) {
|
|
2578
|
+
this.setDone();
|
|
2579
|
+
return this;
|
|
2580
|
+
}
|
|
2581
|
+
while (pos < this.range.from) this.range = this.ranges[--this.rangeIndex];
|
|
2582
|
+
while (pos >= this.range.to) this.range = this.ranges[++this.rangeIndex];
|
|
2583
|
+
if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) {
|
|
2584
|
+
this.chunkOff = pos - this.chunkPos;
|
|
2585
|
+
} else {
|
|
2586
|
+
this.chunk = "";
|
|
2587
|
+
this.chunkOff = 0;
|
|
2588
|
+
}
|
|
2589
|
+
this.readNext();
|
|
2590
|
+
}
|
|
2591
|
+
return this;
|
|
2592
|
+
}
|
|
2593
|
+
/// @internal
|
|
2594
|
+
read(from, to) {
|
|
2595
|
+
if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length) return this.chunk.slice(from - this.chunkPos, to - this.chunkPos);
|
|
2596
|
+
if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length) return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos);
|
|
2597
|
+
if (from >= this.range.from && to <= this.range.to) return this.input.read(from, to);
|
|
2598
|
+
let result = "";
|
|
2599
|
+
for (let r of this.ranges) {
|
|
2600
|
+
if (r.from >= to) break;
|
|
2601
|
+
if (r.to > from) result += this.input.read(Math.max(r.from, from), Math.min(r.to, to));
|
|
2602
|
+
}
|
|
2603
|
+
return result;
|
|
2604
|
+
}
|
|
2605
|
+
}
|
|
2606
|
+
/// @internal
|
|
2607
|
+
class TokenGroup {
|
|
2608
|
+
constructor(data, id) {
|
|
2609
|
+
this.data = data;
|
|
2610
|
+
this.id = id;
|
|
2611
|
+
}
|
|
2612
|
+
token(input, stack) {
|
|
2613
|
+
let {
|
|
2614
|
+
parser
|
|
2615
|
+
} = stack.p;
|
|
2616
|
+
readToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable);
|
|
2617
|
+
}
|
|
2618
|
+
}
|
|
2619
|
+
TokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;
|
|
2620
|
+
/// @hide
|
|
2621
|
+
class LocalTokenGroup {
|
|
2622
|
+
constructor(data, precTable, elseToken) {
|
|
2623
|
+
this.precTable = precTable;
|
|
2624
|
+
this.elseToken = elseToken;
|
|
2625
|
+
this.data = typeof data == "string" ? decodeArray(data) : data;
|
|
2626
|
+
}
|
|
2627
|
+
token(input, stack) {
|
|
2628
|
+
let start = input.pos,
|
|
2629
|
+
skipped = 0;
|
|
2630
|
+
for (;;) {
|
|
2631
|
+
readToken(this.data, input, stack, 0, this.data, this.precTable);
|
|
2632
|
+
if (input.token.value > -1) break;
|
|
2633
|
+
if (this.elseToken == null) return;
|
|
2634
|
+
if (input.next < 0) break;
|
|
2635
|
+
input.advance();
|
|
2636
|
+
input.reset(input.pos, input.token);
|
|
2637
|
+
skipped++;
|
|
2638
|
+
}
|
|
2639
|
+
if (skipped) {
|
|
2640
|
+
input.reset(start, input.token);
|
|
2641
|
+
input.acceptToken(this.elseToken, skipped);
|
|
2642
|
+
}
|
|
2643
|
+
}
|
|
2644
|
+
}
|
|
2645
|
+
LocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;
|
|
2646
|
+
/// `@external tokens` declarations in the grammar should resolve to
|
|
2647
|
+
/// an instance of this class.
|
|
2648
|
+
class ExternalTokenizer {
|
|
2649
|
+
/// Create a tokenizer. The first argument is the function that,
|
|
2650
|
+
/// given an input stream, scans for the types of tokens it
|
|
2651
|
+
/// recognizes at the stream's position, and calls
|
|
2652
|
+
/// [`acceptToken`](#lr.InputStream.acceptToken) when it finds
|
|
2653
|
+
/// one.
|
|
2654
|
+
constructor(
|
|
2655
|
+
/// @internal
|
|
2656
|
+
token) {
|
|
2657
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
2658
|
+
this.token = token;
|
|
2659
|
+
this.contextual = !!options.contextual;
|
|
2660
|
+
this.fallback = !!options.fallback;
|
|
2661
|
+
this.extend = !!options.extend;
|
|
2662
|
+
}
|
|
2663
|
+
}
|
|
2664
|
+
// Tokenizer data is stored a big uint16 array containing, for each
|
|
2665
|
+
// state:
|
|
2666
|
+
//
|
|
2667
|
+
// - A group bitmask, indicating what token groups are reachable from
|
|
2668
|
+
// this state, so that paths that can only lead to tokens not in
|
|
2669
|
+
// any of the current groups can be cut off early.
|
|
2670
|
+
//
|
|
2671
|
+
// - The position of the end of the state's sequence of accepting
|
|
2672
|
+
// tokens
|
|
2673
|
+
//
|
|
2674
|
+
// - The number of outgoing edges for the state
|
|
2675
|
+
//
|
|
2676
|
+
// - The accepting tokens, as (token id, group mask) pairs
|
|
2677
|
+
//
|
|
2678
|
+
// - The outgoing edges, as (start character, end character, state
|
|
2679
|
+
// index) triples, with end character being exclusive
|
|
2680
|
+
//
|
|
2681
|
+
// This function interprets that data, running through a stream as
|
|
2682
|
+
// long as new states with the a matching group mask can be reached,
|
|
2683
|
+
// and updating `input.token` when it matches a token.
|
|
2684
|
+
function readToken(data, input, stack, group, precTable, precOffset) {
|
|
2685
|
+
let state = 0,
|
|
2686
|
+
groupMask = 1 << group,
|
|
2687
|
+
{
|
|
2688
|
+
dialect
|
|
2689
|
+
} = stack.p.parser;
|
|
2690
|
+
scan: for (;;) {
|
|
2691
|
+
if ((groupMask & data[state]) == 0) break;
|
|
2692
|
+
let accEnd = data[state + 1];
|
|
2693
|
+
// Check whether this state can lead to a token in the current group
|
|
2694
|
+
// Accept tokens in this state, possibly overwriting
|
|
2695
|
+
// lower-precedence / shorter tokens
|
|
2696
|
+
for (let i = state + 3; i < accEnd; i += 2) if ((data[i + 1] & groupMask) > 0) {
|
|
2697
|
+
let term = data[i];
|
|
2698
|
+
if (dialect.allows(term) && (input.token.value == -1 || input.token.value == term || overrides(term, input.token.value, precTable, precOffset))) {
|
|
2699
|
+
input.acceptToken(term);
|
|
2700
|
+
break;
|
|
2701
|
+
}
|
|
2702
|
+
}
|
|
2703
|
+
let next = input.next,
|
|
2704
|
+
low = 0,
|
|
2705
|
+
high = data[state + 2];
|
|
2706
|
+
// Special case for EOF
|
|
2707
|
+
if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */ && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */) {
|
|
2708
|
+
state = data[accEnd + high * 3 - 1];
|
|
2709
|
+
continue scan;
|
|
2710
|
+
}
|
|
2711
|
+
// Do a binary search on the state's edges
|
|
2712
|
+
for (; low < high;) {
|
|
2713
|
+
let mid = low + high >> 1;
|
|
2714
|
+
let index = accEnd + mid + (mid << 1);
|
|
2715
|
+
let from = data[index],
|
|
2716
|
+
to = data[index + 1] || 0x10000;
|
|
2717
|
+
if (next < from) high = mid;else if (next >= to) low = mid + 1;else {
|
|
2718
|
+
state = data[index + 2];
|
|
2719
|
+
input.advance();
|
|
2720
|
+
continue scan;
|
|
2721
|
+
}
|
|
2722
|
+
}
|
|
2723
|
+
break;
|
|
2724
|
+
}
|
|
2725
|
+
}
|
|
2726
|
+
function findOffset(data, start, term) {
|
|
2727
|
+
for (let i = start, next; (next = data[i]) != 65535 /* Seq.End */; i++) if (next == term) return i - start;
|
|
2728
|
+
return -1;
|
|
2729
|
+
}
|
|
2730
|
+
function overrides(token, prev, tableData, tableOffset) {
|
|
2731
|
+
let iPrev = findOffset(tableData, tableOffset, prev);
|
|
2732
|
+
return iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev;
|
|
2733
|
+
}
|
|
2734
|
+
|
|
2735
|
+
// Environment variable used to control console output
|
|
2736
|
+
const verbose = typeof process != "undefined" && process.env && /\bparse\b/.test(process.env.LOG);
|
|
2737
|
+
let stackIDs = null;
|
|
2738
|
+
var Safety;
|
|
2739
|
+
(function (Safety) {
|
|
2740
|
+
Safety[Safety["Margin"] = 25] = "Margin";
|
|
2741
|
+
})(Safety || (Safety = {}));
|
|
2742
|
+
function cutAt(tree, pos, side) {
|
|
2743
|
+
let cursor = tree.cursor(IterMode.IncludeAnonymous);
|
|
2744
|
+
cursor.moveTo(pos);
|
|
2745
|
+
for (;;) {
|
|
2746
|
+
if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos))) for (;;) {
|
|
2747
|
+
if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError) return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Safety.Margin */)) : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Safety.Margin */));
|
|
2748
|
+
if (side < 0 ? cursor.prevSibling() : cursor.nextSibling()) break;
|
|
2749
|
+
if (!cursor.parent()) return side < 0 ? 0 : tree.length;
|
|
2750
|
+
}
|
|
2751
|
+
}
|
|
2752
|
+
}
|
|
2753
|
+
class FragmentCursor {
|
|
2754
|
+
constructor(fragments, nodeSet) {
|
|
2755
|
+
this.fragments = fragments;
|
|
2756
|
+
this.nodeSet = nodeSet;
|
|
2757
|
+
this.i = 0;
|
|
2758
|
+
this.fragment = null;
|
|
2759
|
+
this.safeFrom = -1;
|
|
2760
|
+
this.safeTo = -1;
|
|
2761
|
+
this.trees = [];
|
|
2762
|
+
this.start = [];
|
|
2763
|
+
this.index = [];
|
|
2764
|
+
this.nextFragment();
|
|
2765
|
+
}
|
|
2766
|
+
nextFragment() {
|
|
2767
|
+
let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];
|
|
2768
|
+
if (fr) {
|
|
2769
|
+
this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from;
|
|
2770
|
+
this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to;
|
|
2771
|
+
while (this.trees.length) {
|
|
2772
|
+
this.trees.pop();
|
|
2773
|
+
this.start.pop();
|
|
2774
|
+
this.index.pop();
|
|
2775
|
+
}
|
|
2776
|
+
this.trees.push(fr.tree);
|
|
2777
|
+
this.start.push(-fr.offset);
|
|
2778
|
+
this.index.push(0);
|
|
2779
|
+
this.nextStart = this.safeFrom;
|
|
2780
|
+
} else {
|
|
2781
|
+
this.nextStart = 1e9;
|
|
2782
|
+
}
|
|
2783
|
+
}
|
|
2784
|
+
// `pos` must be >= any previously given `pos` for this cursor
|
|
2785
|
+
nodeAt(pos) {
|
|
2786
|
+
if (pos < this.nextStart) return null;
|
|
2787
|
+
while (this.fragment && this.safeTo <= pos) this.nextFragment();
|
|
2788
|
+
if (!this.fragment) return null;
|
|
2789
|
+
for (;;) {
|
|
2790
|
+
let last = this.trees.length - 1;
|
|
2791
|
+
if (last < 0) {
|
|
2792
|
+
// End of tree
|
|
2793
|
+
this.nextFragment();
|
|
2794
|
+
return null;
|
|
2795
|
+
}
|
|
2796
|
+
let top = this.trees[last],
|
|
2797
|
+
index = this.index[last];
|
|
2798
|
+
if (index == top.children.length) {
|
|
2799
|
+
this.trees.pop();
|
|
2800
|
+
this.start.pop();
|
|
2801
|
+
this.index.pop();
|
|
2802
|
+
continue;
|
|
2803
|
+
}
|
|
2804
|
+
let next = top.children[index];
|
|
2805
|
+
let start = this.start[last] + top.positions[index];
|
|
2806
|
+
if (start > pos) {
|
|
2807
|
+
this.nextStart = start;
|
|
2808
|
+
return null;
|
|
2809
|
+
}
|
|
2810
|
+
if (next instanceof Tree) {
|
|
2811
|
+
if (start == pos) {
|
|
2812
|
+
if (start < this.safeFrom) return null;
|
|
2813
|
+
let end = start + next.length;
|
|
2814
|
+
if (end <= this.safeTo) {
|
|
2815
|
+
let lookAhead = next.prop(NodeProp.lookAhead);
|
|
2816
|
+
if (!lookAhead || end + lookAhead < this.fragment.to) return next;
|
|
2817
|
+
}
|
|
2818
|
+
}
|
|
2819
|
+
this.index[last]++;
|
|
2820
|
+
if (start + next.length >= Math.max(this.safeFrom, pos)) {
|
|
2821
|
+
// Enter this node
|
|
2822
|
+
this.trees.push(next);
|
|
2823
|
+
this.start.push(start);
|
|
2824
|
+
this.index.push(0);
|
|
2825
|
+
}
|
|
2826
|
+
} else {
|
|
2827
|
+
this.index[last]++;
|
|
2828
|
+
this.nextStart = start + next.length;
|
|
2829
|
+
}
|
|
2830
|
+
}
|
|
2831
|
+
}
|
|
2832
|
+
}
|
|
2833
|
+
class TokenCache {
|
|
2834
|
+
constructor(parser, stream) {
|
|
2835
|
+
this.stream = stream;
|
|
2836
|
+
this.tokens = [];
|
|
2837
|
+
this.mainToken = null;
|
|
2838
|
+
this.actions = [];
|
|
2839
|
+
this.tokens = parser.tokenizers.map(_ => new CachedToken());
|
|
2840
|
+
}
|
|
2841
|
+
getActions(stack) {
|
|
2842
|
+
let actionIndex = 0;
|
|
2843
|
+
let main = null;
|
|
2844
|
+
let {
|
|
2845
|
+
parser
|
|
2846
|
+
} = stack.p,
|
|
2847
|
+
{
|
|
2848
|
+
tokenizers
|
|
2849
|
+
} = parser;
|
|
2850
|
+
let mask = parser.stateSlot(stack.state, 3 /* ParseState.TokenizerMask */);
|
|
2851
|
+
let context = stack.curContext ? stack.curContext.hash : 0;
|
|
2852
|
+
let lookAhead = 0;
|
|
2853
|
+
for (let i = 0; i < tokenizers.length; i++) {
|
|
2854
|
+
if ((1 << i & mask) == 0) continue;
|
|
2855
|
+
let tokenizer = tokenizers[i],
|
|
2856
|
+
token = this.tokens[i];
|
|
2857
|
+
if (main && !tokenizer.fallback) continue;
|
|
2858
|
+
if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {
|
|
2859
|
+
this.updateCachedToken(token, tokenizer, stack);
|
|
2860
|
+
token.mask = mask;
|
|
2861
|
+
token.context = context;
|
|
2862
|
+
}
|
|
2863
|
+
if (token.lookAhead > token.end + 25 /* Safety.Margin */) lookAhead = Math.max(token.lookAhead, lookAhead);
|
|
2864
|
+
if (token.value != 0 /* Term.Err */) {
|
|
2865
|
+
let startIndex = actionIndex;
|
|
2866
|
+
if (token.extended > -1) actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);
|
|
2867
|
+
actionIndex = this.addActions(stack, token.value, token.end, actionIndex);
|
|
2868
|
+
if (!tokenizer.extend) {
|
|
2869
|
+
main = token;
|
|
2870
|
+
if (actionIndex > startIndex) break;
|
|
2871
|
+
}
|
|
2872
|
+
}
|
|
2873
|
+
}
|
|
2874
|
+
while (this.actions.length > actionIndex) this.actions.pop();
|
|
2875
|
+
if (lookAhead) stack.setLookAhead(lookAhead);
|
|
2876
|
+
if (!main && stack.pos == this.stream.end) {
|
|
2877
|
+
main = new CachedToken();
|
|
2878
|
+
main.value = stack.p.parser.eofTerm;
|
|
2879
|
+
main.start = main.end = stack.pos;
|
|
2880
|
+
actionIndex = this.addActions(stack, main.value, main.end, actionIndex);
|
|
2881
|
+
}
|
|
2882
|
+
this.mainToken = main;
|
|
2883
|
+
return this.actions;
|
|
2884
|
+
}
|
|
2885
|
+
getMainToken(stack) {
|
|
2886
|
+
if (this.mainToken) return this.mainToken;
|
|
2887
|
+
let main = new CachedToken(),
|
|
2888
|
+
{
|
|
2889
|
+
pos,
|
|
2890
|
+
p
|
|
2891
|
+
} = stack;
|
|
2892
|
+
main.start = pos;
|
|
2893
|
+
main.end = Math.min(pos + 1, p.stream.end);
|
|
2894
|
+
main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Term.Err */;
|
|
2895
|
+
return main;
|
|
2896
|
+
}
|
|
2897
|
+
updateCachedToken(token, tokenizer, stack) {
|
|
2898
|
+
let start = this.stream.clipPos(stack.pos);
|
|
2899
|
+
tokenizer.token(this.stream.reset(start, token), stack);
|
|
2900
|
+
if (token.value > -1) {
|
|
2901
|
+
let {
|
|
2902
|
+
parser
|
|
2903
|
+
} = stack.p;
|
|
2904
|
+
for (let i = 0; i < parser.specialized.length; i++) if (parser.specialized[i] == token.value) {
|
|
2905
|
+
let result = parser.specializers[i](this.stream.read(token.start, token.end), stack);
|
|
2906
|
+
if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {
|
|
2907
|
+
if ((result & 1) == 0 /* Specialize.Specialize */) token.value = result >> 1;else token.extended = result >> 1;
|
|
2908
|
+
break;
|
|
2909
|
+
}
|
|
2910
|
+
}
|
|
2911
|
+
} else {
|
|
2912
|
+
token.value = 0 /* Term.Err */;
|
|
2913
|
+
token.end = this.stream.clipPos(start + 1);
|
|
2914
|
+
}
|
|
2915
|
+
}
|
|
2916
|
+
putAction(action, token, end, index) {
|
|
2917
|
+
// Don't add duplicate actions
|
|
2918
|
+
for (let i = 0; i < index; i += 3) if (this.actions[i] == action) return index;
|
|
2919
|
+
this.actions[index++] = action;
|
|
2920
|
+
this.actions[index++] = token;
|
|
2921
|
+
this.actions[index++] = end;
|
|
2922
|
+
return index;
|
|
2923
|
+
}
|
|
2924
|
+
addActions(stack, token, end, index) {
|
|
2925
|
+
let {
|
|
2926
|
+
state
|
|
2927
|
+
} = stack,
|
|
2928
|
+
{
|
|
2929
|
+
parser
|
|
2930
|
+
} = stack.p,
|
|
2931
|
+
{
|
|
2932
|
+
data
|
|
2933
|
+
} = parser;
|
|
2934
|
+
for (let set = 0; set < 2; set++) {
|
|
2935
|
+
for (let i = parser.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */);; i += 3) {
|
|
2936
|
+
if (data[i] == 65535 /* Seq.End */) {
|
|
2937
|
+
if (data[i + 1] == 1 /* Seq.Next */) {
|
|
2938
|
+
i = pair(data, i + 2);
|
|
2939
|
+
} else {
|
|
2940
|
+
if (index == 0 && data[i + 1] == 2 /* Seq.Other */) index = this.putAction(pair(data, i + 2), token, end, index);
|
|
2941
|
+
break;
|
|
2942
|
+
}
|
|
2943
|
+
}
|
|
2944
|
+
if (data[i] == token) index = this.putAction(pair(data, i + 1), token, end, index);
|
|
2945
|
+
}
|
|
2946
|
+
}
|
|
2947
|
+
return index;
|
|
2948
|
+
}
|
|
2949
|
+
}
|
|
2950
|
+
var Rec;
|
|
2951
|
+
(function (Rec) {
|
|
2952
|
+
Rec[Rec["Distance"] = 5] = "Distance";
|
|
2953
|
+
Rec[Rec["MaxRemainingPerStep"] = 3] = "MaxRemainingPerStep";
|
|
2954
|
+
// When two stacks have been running independently long enough to
|
|
2955
|
+
// add this many elements to their buffers, prune one.
|
|
2956
|
+
Rec[Rec["MinBufferLengthPrune"] = 500] = "MinBufferLengthPrune";
|
|
2957
|
+
Rec[Rec["ForceReduceLimit"] = 10] = "ForceReduceLimit";
|
|
2958
|
+
// Once a stack reaches this depth (in .stack.length) force-reduce
|
|
2959
|
+
// it back to CutTo to avoid creating trees that overflow the stack
|
|
2960
|
+
// on recursive traversal.
|
|
2961
|
+
Rec[Rec["CutDepth"] = 15000] = "CutDepth";
|
|
2962
|
+
Rec[Rec["CutTo"] = 9000] = "CutTo";
|
|
2963
|
+
Rec[Rec["MaxLeftAssociativeReductionCount"] = 300] = "MaxLeftAssociativeReductionCount";
|
|
2964
|
+
// The maximum number of non-recovering stacks to explore (to avoid
|
|
2965
|
+
// getting bogged down with exponentially multiplying stacks in
|
|
2966
|
+
// ambiguous content)
|
|
2967
|
+
Rec[Rec["MaxStackCount"] = 12] = "MaxStackCount";
|
|
2968
|
+
})(Rec || (Rec = {}));
|
|
2969
|
+
class Parse {
|
|
2970
|
+
constructor(parser, input, fragments, ranges) {
|
|
2971
|
+
this.parser = parser;
|
|
2972
|
+
this.input = input;
|
|
2973
|
+
this.ranges = ranges;
|
|
2974
|
+
this.recovering = 0;
|
|
2975
|
+
this.nextStackID = 0x2654; // ♔, ♕, ♖, ♗, ♘, ♙, ♠, ♡, ♢, ♣, ♤, ♥, ♦, ♧
|
|
2976
|
+
this.minStackPos = 0;
|
|
2977
|
+
this.reused = [];
|
|
2978
|
+
this.stoppedAt = null;
|
|
2979
|
+
this.lastBigReductionStart = -1;
|
|
2980
|
+
this.lastBigReductionSize = 0;
|
|
2981
|
+
this.bigReductionCount = 0;
|
|
2982
|
+
this.stream = new InputStream(input, ranges);
|
|
2983
|
+
this.tokens = new TokenCache(parser, this.stream);
|
|
2984
|
+
this.topTerm = parser.top[1];
|
|
2985
|
+
let {
|
|
2986
|
+
from
|
|
2987
|
+
} = ranges[0];
|
|
2988
|
+
this.stacks = [Stack.start(this, parser.top[0], from)];
|
|
2989
|
+
this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4 ? new FragmentCursor(fragments, parser.nodeSet) : null;
|
|
2990
|
+
}
|
|
2991
|
+
get parsedPos() {
|
|
2992
|
+
return this.minStackPos;
|
|
2993
|
+
}
|
|
2994
|
+
// Move the parser forward. This will process all parse stacks at
|
|
2995
|
+
// `this.pos` and try to advance them to a further position. If no
|
|
2996
|
+
// stack for such a position is found, it'll start error-recovery.
|
|
2997
|
+
//
|
|
2998
|
+
// When the parse is finished, this will return a syntax tree. When
|
|
2999
|
+
// not, it returns `null`.
|
|
3000
|
+
advance() {
|
|
3001
|
+
let stacks = this.stacks,
|
|
3002
|
+
pos = this.minStackPos;
|
|
3003
|
+
// This will hold stacks beyond `pos`.
|
|
3004
|
+
let newStacks = this.stacks = [];
|
|
3005
|
+
let stopped, stoppedTokens;
|
|
3006
|
+
// If a large amount of reductions happened with the same start
|
|
3007
|
+
// position, force the stack out of that production in order to
|
|
3008
|
+
// avoid creating a tree too deep to recurse through.
|
|
3009
|
+
// (This is an ugly kludge, because unfortunately there is no
|
|
3010
|
+
// straightforward, cheap way to check for this happening, due to
|
|
3011
|
+
// the history of reductions only being available in an
|
|
3012
|
+
// expensive-to-access format in the stack buffers.)
|
|
3013
|
+
if (this.bigReductionCount > 300 /* Rec.MaxLeftAssociativeReductionCount */ && stacks.length == 1) {
|
|
3014
|
+
let [s] = stacks;
|
|
3015
|
+
while (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart) {}
|
|
3016
|
+
this.bigReductionCount = this.lastBigReductionSize = 0;
|
|
3017
|
+
}
|
|
3018
|
+
// Keep advancing any stacks at `pos` until they either move
|
|
3019
|
+
// forward or can't be advanced. Gather stacks that can't be
|
|
3020
|
+
// advanced further in `stopped`.
|
|
3021
|
+
for (let i = 0; i < stacks.length; i++) {
|
|
3022
|
+
let stack = stacks[i];
|
|
3023
|
+
for (;;) {
|
|
3024
|
+
this.tokens.mainToken = null;
|
|
3025
|
+
if (stack.pos > pos) {
|
|
3026
|
+
newStacks.push(stack);
|
|
3027
|
+
} else if (this.advanceStack(stack, newStacks, stacks)) {
|
|
3028
|
+
continue;
|
|
3029
|
+
} else {
|
|
3030
|
+
if (!stopped) {
|
|
3031
|
+
stopped = [];
|
|
3032
|
+
stoppedTokens = [];
|
|
3033
|
+
}
|
|
3034
|
+
stopped.push(stack);
|
|
3035
|
+
let tok = this.tokens.getMainToken(stack);
|
|
3036
|
+
stoppedTokens.push(tok.value, tok.end);
|
|
3037
|
+
}
|
|
3038
|
+
break;
|
|
3039
|
+
}
|
|
3040
|
+
}
|
|
3041
|
+
if (!newStacks.length) {
|
|
3042
|
+
let finished = stopped && findFinished(stopped);
|
|
3043
|
+
if (finished) return this.stackToTree(finished);
|
|
3044
|
+
if (this.parser.strict) {
|
|
3045
|
+
if (verbose && stopped) console.log("Stuck with token " + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : "none"));
|
|
3046
|
+
throw new SyntaxError("No parse at " + pos);
|
|
3047
|
+
}
|
|
3048
|
+
if (!this.recovering) this.recovering = 5 /* Rec.Distance */;
|
|
3049
|
+
}
|
|
3050
|
+
|
|
3051
|
+
if (this.recovering && stopped) {
|
|
3052
|
+
let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0] : this.runRecovery(stopped, stoppedTokens, newStacks);
|
|
3053
|
+
if (finished) return this.stackToTree(finished.forceAll());
|
|
3054
|
+
}
|
|
3055
|
+
if (this.recovering) {
|
|
3056
|
+
let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* Rec.MaxRemainingPerStep */;
|
|
3057
|
+
if (newStacks.length > maxRemaining) {
|
|
3058
|
+
newStacks.sort((a, b) => b.score - a.score);
|
|
3059
|
+
while (newStacks.length > maxRemaining) newStacks.pop();
|
|
3060
|
+
}
|
|
3061
|
+
if (newStacks.some(s => s.reducePos > pos)) this.recovering--;
|
|
3062
|
+
} else if (newStacks.length > 1) {
|
|
3063
|
+
// Prune stacks that are in the same state, or that have been
|
|
3064
|
+
// running without splitting for a while, to avoid getting stuck
|
|
3065
|
+
// with multiple successful stacks running endlessly on.
|
|
3066
|
+
outer: for (let i = 0; i < newStacks.length - 1; i++) {
|
|
3067
|
+
let stack = newStacks[i];
|
|
3068
|
+
for (let j = i + 1; j < newStacks.length; j++) {
|
|
3069
|
+
let other = newStacks[j];
|
|
3070
|
+
if (stack.sameState(other) || stack.buffer.length > 500 /* Rec.MinBufferLengthPrune */ && other.buffer.length > 500 /* Rec.MinBufferLengthPrune */) {
|
|
3071
|
+
if ((stack.score - other.score || stack.buffer.length - other.buffer.length) > 0) {
|
|
3072
|
+
newStacks.splice(j--, 1);
|
|
3073
|
+
} else {
|
|
3074
|
+
newStacks.splice(i--, 1);
|
|
3075
|
+
continue outer;
|
|
3076
|
+
}
|
|
3077
|
+
}
|
|
3078
|
+
}
|
|
3079
|
+
}
|
|
3080
|
+
if (newStacks.length > 12 /* Rec.MaxStackCount */) newStacks.splice(12 /* Rec.MaxStackCount */, newStacks.length - 12 /* Rec.MaxStackCount */);
|
|
3081
|
+
}
|
|
3082
|
+
|
|
3083
|
+
this.minStackPos = newStacks[0].pos;
|
|
3084
|
+
for (let i = 1; i < newStacks.length; i++) if (newStacks[i].pos < this.minStackPos) this.minStackPos = newStacks[i].pos;
|
|
3085
|
+
return null;
|
|
3086
|
+
}
|
|
3087
|
+
stopAt(pos) {
|
|
3088
|
+
if (this.stoppedAt != null && this.stoppedAt < pos) throw new RangeError("Can't move stoppedAt forward");
|
|
3089
|
+
this.stoppedAt = pos;
|
|
3090
|
+
}
|
|
3091
|
+
// Returns an updated version of the given stack, or null if the
|
|
3092
|
+
// stack can't advance normally. When `split` and `stacks` are
|
|
3093
|
+
// given, stacks split off by ambiguous operations will be pushed to
|
|
3094
|
+
// `split`, or added to `stacks` if they move `pos` forward.
|
|
3095
|
+
advanceStack(stack, stacks, split) {
|
|
3096
|
+
let start = stack.pos,
|
|
3097
|
+
{
|
|
3098
|
+
parser
|
|
3099
|
+
} = this;
|
|
3100
|
+
let base = verbose ? this.stackID(stack) + " -> " : "";
|
|
3101
|
+
if (this.stoppedAt != null && start > this.stoppedAt) return stack.forceReduce() ? stack : null;
|
|
3102
|
+
if (this.fragments) {
|
|
3103
|
+
let strictCx = stack.curContext && stack.curContext.tracker.strict,
|
|
3104
|
+
cxHash = strictCx ? stack.curContext.hash : 0;
|
|
3105
|
+
for (let cached = this.fragments.nodeAt(start); cached;) {
|
|
3106
|
+
let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1;
|
|
3107
|
+
if (match > -1 && cached.length && (!strictCx || (cached.prop(NodeProp.contextHash) || 0) == cxHash)) {
|
|
3108
|
+
stack.useNode(cached, match);
|
|
3109
|
+
if (verbose) console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`);
|
|
3110
|
+
return true;
|
|
3111
|
+
}
|
|
3112
|
+
if (!(cached instanceof Tree) || cached.children.length == 0 || cached.positions[0] > 0) break;
|
|
3113
|
+
let inner = cached.children[0];
|
|
3114
|
+
if (inner instanceof Tree && cached.positions[0] == 0) cached = inner;else break;
|
|
3115
|
+
}
|
|
3116
|
+
}
|
|
3117
|
+
let defaultReduce = parser.stateSlot(stack.state, 4 /* ParseState.DefaultReduce */);
|
|
3118
|
+
if (defaultReduce > 0) {
|
|
3119
|
+
stack.reduce(defaultReduce);
|
|
3120
|
+
if (verbose) console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* Action.ValueMask */)})`);
|
|
3121
|
+
return true;
|
|
3122
|
+
}
|
|
3123
|
+
if (stack.stack.length >= 15000 /* Rec.CutDepth */) {
|
|
3124
|
+
while (stack.stack.length > 9000 /* Rec.CutTo */ && stack.forceReduce()) {}
|
|
3125
|
+
}
|
|
3126
|
+
let actions = this.tokens.getActions(stack);
|
|
3127
|
+
for (let i = 0; i < actions.length;) {
|
|
3128
|
+
let action = actions[i++],
|
|
3129
|
+
term = actions[i++],
|
|
3130
|
+
end = actions[i++];
|
|
3131
|
+
let last = i == actions.length || !split;
|
|
3132
|
+
let localStack = last ? stack : stack.split();
|
|
3133
|
+
localStack.apply(action, term, end);
|
|
3134
|
+
if (verbose) console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* Action.ReduceFlag */) == 0 ? "shift" : `reduce of ${parser.getName(action & 65535 /* Action.ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? "" : ", split"})`);
|
|
3135
|
+
if (last) return true;else if (localStack.pos > start) stacks.push(localStack);else split.push(localStack);
|
|
3136
|
+
}
|
|
3137
|
+
return false;
|
|
3138
|
+
}
|
|
3139
|
+
// Advance a given stack forward as far as it will go. Returns the
|
|
3140
|
+
// (possibly updated) stack if it got stuck, or null if it moved
|
|
3141
|
+
// forward and was given to `pushStackDedup`.
|
|
3142
|
+
advanceFully(stack, newStacks) {
|
|
3143
|
+
let pos = stack.pos;
|
|
3144
|
+
for (;;) {
|
|
3145
|
+
if (!this.advanceStack(stack, null, null)) return false;
|
|
3146
|
+
if (stack.pos > pos) {
|
|
3147
|
+
pushStackDedup(stack, newStacks);
|
|
3148
|
+
return true;
|
|
3149
|
+
}
|
|
3150
|
+
}
|
|
3151
|
+
}
|
|
3152
|
+
runRecovery(stacks, tokens, newStacks) {
|
|
3153
|
+
let finished = null,
|
|
3154
|
+
restarted = false;
|
|
3155
|
+
for (let i = 0; i < stacks.length; i++) {
|
|
3156
|
+
let stack = stacks[i],
|
|
3157
|
+
token = tokens[i << 1],
|
|
3158
|
+
tokenEnd = tokens[(i << 1) + 1];
|
|
3159
|
+
let base = verbose ? this.stackID(stack) + " -> " : "";
|
|
3160
|
+
if (stack.deadEnd) {
|
|
3161
|
+
if (restarted) continue;
|
|
3162
|
+
restarted = true;
|
|
3163
|
+
stack.restart();
|
|
3164
|
+
if (verbose) console.log(base + this.stackID(stack) + " (restarted)");
|
|
3165
|
+
let done = this.advanceFully(stack, newStacks);
|
|
3166
|
+
if (done) continue;
|
|
3167
|
+
}
|
|
3168
|
+
let force = stack.split(),
|
|
3169
|
+
forceBase = base;
|
|
3170
|
+
for (let j = 0; force.forceReduce() && j < 10 /* Rec.ForceReduceLimit */; j++) {
|
|
3171
|
+
if (verbose) console.log(forceBase + this.stackID(force) + " (via force-reduce)");
|
|
3172
|
+
let done = this.advanceFully(force, newStacks);
|
|
3173
|
+
if (done) break;
|
|
3174
|
+
if (verbose) forceBase = this.stackID(force) + " -> ";
|
|
3175
|
+
}
|
|
3176
|
+
for (let insert of stack.recoverByInsert(token)) {
|
|
3177
|
+
if (verbose) console.log(base + this.stackID(insert) + " (via recover-insert)");
|
|
3178
|
+
this.advanceFully(insert, newStacks);
|
|
3179
|
+
}
|
|
3180
|
+
if (this.stream.end > stack.pos) {
|
|
3181
|
+
if (tokenEnd == stack.pos) {
|
|
3182
|
+
tokenEnd++;
|
|
3183
|
+
token = 0 /* Term.Err */;
|
|
3184
|
+
}
|
|
3185
|
+
|
|
3186
|
+
stack.recoverByDelete(token, tokenEnd);
|
|
3187
|
+
if (verbose) console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);
|
|
3188
|
+
pushStackDedup(stack, newStacks);
|
|
3189
|
+
} else if (!finished || finished.score < stack.score) {
|
|
3190
|
+
finished = stack;
|
|
3191
|
+
}
|
|
3192
|
+
}
|
|
3193
|
+
return finished;
|
|
3194
|
+
}
|
|
3195
|
+
// Convert the stack's buffer to a syntax tree.
|
|
3196
|
+
stackToTree(stack) {
|
|
3197
|
+
stack.close();
|
|
3198
|
+
return Tree.build({
|
|
3199
|
+
buffer: StackBufferCursor.create(stack),
|
|
3200
|
+
nodeSet: this.parser.nodeSet,
|
|
3201
|
+
topID: this.topTerm,
|
|
3202
|
+
maxBufferLength: this.parser.bufferLength,
|
|
3203
|
+
reused: this.reused,
|
|
3204
|
+
start: this.ranges[0].from,
|
|
3205
|
+
length: stack.pos - this.ranges[0].from,
|
|
3206
|
+
minRepeatType: this.parser.minRepeatTerm
|
|
3207
|
+
});
|
|
3208
|
+
}
|
|
3209
|
+
stackID(stack) {
|
|
3210
|
+
let id = (stackIDs || (stackIDs = new WeakMap())).get(stack);
|
|
3211
|
+
if (!id) stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++));
|
|
3212
|
+
return id + stack;
|
|
3213
|
+
}
|
|
3214
|
+
}
|
|
3215
|
+
function pushStackDedup(stack, newStacks) {
|
|
3216
|
+
for (let i = 0; i < newStacks.length; i++) {
|
|
3217
|
+
let other = newStacks[i];
|
|
3218
|
+
if (other.pos == stack.pos && other.sameState(stack)) {
|
|
3219
|
+
if (newStacks[i].score < stack.score) newStacks[i] = stack;
|
|
3220
|
+
return;
|
|
3221
|
+
}
|
|
3222
|
+
}
|
|
3223
|
+
newStacks.push(stack);
|
|
3224
|
+
}
|
|
3225
|
+
class Dialect {
|
|
3226
|
+
constructor(source, flags, disabled) {
|
|
3227
|
+
this.source = source;
|
|
3228
|
+
this.flags = flags;
|
|
3229
|
+
this.disabled = disabled;
|
|
3230
|
+
}
|
|
3231
|
+
allows(term) {
|
|
3232
|
+
return !this.disabled || this.disabled[term] == 0;
|
|
3233
|
+
}
|
|
3234
|
+
}
|
|
3235
|
+
const id = x => x;
|
|
3236
|
+
/// Context trackers are used to track stateful context (such as
|
|
3237
|
+
/// indentation in the Python grammar, or parent elements in the XML
|
|
3238
|
+
/// grammar) needed by external tokenizers. You declare them in a
|
|
3239
|
+
/// grammar file as `@context exportName from "module"`.
|
|
3240
|
+
///
|
|
3241
|
+
/// Context values should be immutable, and can be updated (replaced)
|
|
3242
|
+
/// on shift or reduce actions.
|
|
3243
|
+
///
|
|
3244
|
+
/// The export used in a `@context` declaration should be of this
|
|
3245
|
+
/// type.
|
|
3246
|
+
class ContextTracker {
|
|
3247
|
+
/// Define a context tracker.
|
|
3248
|
+
constructor(spec) {
|
|
3249
|
+
this.start = spec.start;
|
|
3250
|
+
this.shift = spec.shift || id;
|
|
3251
|
+
this.reduce = spec.reduce || id;
|
|
3252
|
+
this.reuse = spec.reuse || id;
|
|
3253
|
+
this.hash = spec.hash || (() => 0);
|
|
3254
|
+
this.strict = spec.strict !== false;
|
|
3255
|
+
}
|
|
3256
|
+
}
|
|
3257
|
+
/// Holds the parse tables for a given grammar, as generated by
|
|
3258
|
+
/// `lezer-generator`, and provides [methods](#common.Parser) to parse
|
|
3259
|
+
/// content with.
|
|
3260
|
+
class LRParser extends Parser {
|
|
3261
|
+
/// @internal
|
|
3262
|
+
constructor(spec) {
|
|
3263
|
+
super();
|
|
3264
|
+
/// @internal
|
|
3265
|
+
this.wrappers = [];
|
|
3266
|
+
if (spec.version != 14 /* File.Version */) throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* File.Version */})`);
|
|
3267
|
+
let nodeNames = spec.nodeNames.split(" ");
|
|
3268
|
+
this.minRepeatTerm = nodeNames.length;
|
|
3269
|
+
for (let i = 0; i < spec.repeatNodeCount; i++) nodeNames.push("");
|
|
3270
|
+
let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]);
|
|
3271
|
+
let nodeProps = [];
|
|
3272
|
+
for (let i = 0; i < nodeNames.length; i++) nodeProps.push([]);
|
|
3273
|
+
function setProp(nodeID, prop, value) {
|
|
3274
|
+
nodeProps[nodeID].push([prop, prop.deserialize(String(value))]);
|
|
3275
|
+
}
|
|
3276
|
+
if (spec.nodeProps) for (let propSpec of spec.nodeProps) {
|
|
3277
|
+
let prop = propSpec[0];
|
|
3278
|
+
if (typeof prop == "string") prop = NodeProp[prop];
|
|
3279
|
+
for (let i = 1; i < propSpec.length;) {
|
|
3280
|
+
let next = propSpec[i++];
|
|
3281
|
+
if (next >= 0) {
|
|
3282
|
+
setProp(next, prop, propSpec[i++]);
|
|
3283
|
+
} else {
|
|
3284
|
+
let value = propSpec[i + -next];
|
|
3285
|
+
for (let j = -next; j > 0; j--) setProp(propSpec[i++], prop, value);
|
|
3286
|
+
i++;
|
|
3287
|
+
}
|
|
3288
|
+
}
|
|
3289
|
+
}
|
|
3290
|
+
this.nodeSet = new NodeSet(nodeNames.map((name, i) => NodeType.define({
|
|
3291
|
+
name: i >= this.minRepeatTerm ? undefined : name,
|
|
3292
|
+
id: i,
|
|
3293
|
+
props: nodeProps[i],
|
|
3294
|
+
top: topTerms.indexOf(i) > -1,
|
|
3295
|
+
error: i == 0,
|
|
3296
|
+
skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1
|
|
3297
|
+
})));
|
|
3298
|
+
if (spec.propSources) this.nodeSet = this.nodeSet.extend(...spec.propSources);
|
|
3299
|
+
this.strict = false;
|
|
3300
|
+
this.bufferLength = DefaultBufferLength;
|
|
3301
|
+
let tokenArray = decodeArray(spec.tokenData);
|
|
3302
|
+
this.context = spec.context;
|
|
3303
|
+
this.specializerSpecs = spec.specialized || [];
|
|
3304
|
+
this.specialized = new Uint16Array(this.specializerSpecs.length);
|
|
3305
|
+
for (let i = 0; i < this.specializerSpecs.length; i++) this.specialized[i] = this.specializerSpecs[i].term;
|
|
3306
|
+
this.specializers = this.specializerSpecs.map(getSpecializer);
|
|
3307
|
+
this.states = decodeArray(spec.states, Uint32Array);
|
|
3308
|
+
this.data = decodeArray(spec.stateData);
|
|
3309
|
+
this.goto = decodeArray(spec.goto);
|
|
3310
|
+
this.maxTerm = spec.maxTerm;
|
|
3311
|
+
this.tokenizers = spec.tokenizers.map(value => typeof value == "number" ? new TokenGroup(tokenArray, value) : value);
|
|
3312
|
+
this.topRules = spec.topRules;
|
|
3313
|
+
this.dialects = spec.dialects || {};
|
|
3314
|
+
this.dynamicPrecedences = spec.dynamicPrecedences || null;
|
|
3315
|
+
this.tokenPrecTable = spec.tokenPrec;
|
|
3316
|
+
this.termNames = spec.termNames || null;
|
|
3317
|
+
this.maxNode = this.nodeSet.types.length - 1;
|
|
3318
|
+
this.dialect = this.parseDialect();
|
|
3319
|
+
this.top = this.topRules[Object.keys(this.topRules)[0]];
|
|
3320
|
+
}
|
|
3321
|
+
createParse(input, fragments, ranges) {
|
|
3322
|
+
let parse = new Parse(this, input, fragments, ranges);
|
|
3323
|
+
for (let w of this.wrappers) parse = w(parse, input, fragments, ranges);
|
|
3324
|
+
return parse;
|
|
3325
|
+
}
|
|
3326
|
+
/// Get a goto table entry @internal
|
|
3327
|
+
getGoto(state, term) {
|
|
3328
|
+
let loose = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
3329
|
+
let table = this.goto;
|
|
3330
|
+
if (term >= table[0]) return -1;
|
|
3331
|
+
for (let pos = table[term + 1];;) {
|
|
3332
|
+
let groupTag = table[pos++],
|
|
3333
|
+
last = groupTag & 1;
|
|
3334
|
+
let target = table[pos++];
|
|
3335
|
+
if (last && loose) return target;
|
|
3336
|
+
for (let end = pos + (groupTag >> 1); pos < end; pos++) if (table[pos] == state) return target;
|
|
3337
|
+
if (last) return -1;
|
|
3338
|
+
}
|
|
3339
|
+
}
|
|
3340
|
+
/// Check if this state has an action for a given terminal @internal
|
|
3341
|
+
hasAction(state, terminal) {
|
|
3342
|
+
let data = this.data;
|
|
3343
|
+
for (let set = 0; set < 2; set++) {
|
|
3344
|
+
for (let i = this.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */), next;; i += 3) {
|
|
3345
|
+
if ((next = data[i]) == 65535 /* Seq.End */) {
|
|
3346
|
+
if (data[i + 1] == 1 /* Seq.Next */) next = data[i = pair(data, i + 2)];else if (data[i + 1] == 2 /* Seq.Other */) return pair(data, i + 2);else break;
|
|
3347
|
+
}
|
|
3348
|
+
if (next == terminal || next == 0 /* Term.Err */) return pair(data, i + 1);
|
|
3349
|
+
}
|
|
3350
|
+
}
|
|
3351
|
+
return 0;
|
|
3352
|
+
}
|
|
3353
|
+
/// @internal
|
|
3354
|
+
stateSlot(state, slot) {
|
|
3355
|
+
return this.states[state * 6 /* ParseState.Size */ + slot];
|
|
3356
|
+
}
|
|
3357
|
+
/// @internal
|
|
3358
|
+
stateFlag(state, flag) {
|
|
3359
|
+
return (this.stateSlot(state, 0 /* ParseState.Flags */) & flag) > 0;
|
|
3360
|
+
}
|
|
3361
|
+
/// @internal
|
|
3362
|
+
validAction(state, action) {
|
|
3363
|
+
if (action == this.stateSlot(state, 4 /* ParseState.DefaultReduce */)) return true;
|
|
3364
|
+
for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) {
|
|
3365
|
+
if (this.data[i] == 65535 /* Seq.End */) {
|
|
3366
|
+
if (this.data[i + 1] == 1 /* Seq.Next */) i = pair(this.data, i + 2);else return false;
|
|
3367
|
+
}
|
|
3368
|
+
if (action == pair(this.data, i + 1)) return true;
|
|
3369
|
+
}
|
|
3370
|
+
}
|
|
3371
|
+
/// Get the states that can follow this one through shift actions or
|
|
3372
|
+
/// goto jumps. @internal
|
|
3373
|
+
nextStates(state) {
|
|
3374
|
+
let result = [];
|
|
3375
|
+
for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) {
|
|
3376
|
+
if (this.data[i] == 65535 /* Seq.End */) {
|
|
3377
|
+
if (this.data[i + 1] == 1 /* Seq.Next */) i = pair(this.data, i + 2);else break;
|
|
3378
|
+
}
|
|
3379
|
+
if ((this.data[i + 2] & 65536 /* Action.ReduceFlag */ >> 16) == 0) {
|
|
3380
|
+
let value = this.data[i + 1];
|
|
3381
|
+
if (!result.some((v, i) => i & 1 && v == value)) result.push(this.data[i], value);
|
|
3382
|
+
}
|
|
3383
|
+
}
|
|
3384
|
+
return result;
|
|
3385
|
+
}
|
|
3386
|
+
/// Configure the parser. Returns a new parser instance that has the
|
|
3387
|
+
/// given settings modified. Settings not provided in `config` are
|
|
3388
|
+
/// kept from the original parser.
|
|
3389
|
+
configure(config) {
|
|
3390
|
+
// Hideous reflection-based kludge to make it easy to create a
|
|
3391
|
+
// slightly modified copy of a parser.
|
|
3392
|
+
let copy = Object.assign(Object.create(LRParser.prototype), this);
|
|
3393
|
+
if (config.props) copy.nodeSet = this.nodeSet.extend(...config.props);
|
|
3394
|
+
if (config.top) {
|
|
3395
|
+
let info = this.topRules[config.top];
|
|
3396
|
+
if (!info) throw new RangeError(`Invalid top rule name ${config.top}`);
|
|
3397
|
+
copy.top = info;
|
|
3398
|
+
}
|
|
3399
|
+
if (config.tokenizers) copy.tokenizers = this.tokenizers.map(t => {
|
|
3400
|
+
let found = config.tokenizers.find(r => r.from == t);
|
|
3401
|
+
return found ? found.to : t;
|
|
3402
|
+
});
|
|
3403
|
+
if (config.specializers) {
|
|
3404
|
+
copy.specializers = this.specializers.slice();
|
|
3405
|
+
copy.specializerSpecs = this.specializerSpecs.map((s, i) => {
|
|
3406
|
+
let found = config.specializers.find(r => r.from == s.external);
|
|
3407
|
+
if (!found) return s;
|
|
3408
|
+
let spec = Object.assign(Object.assign({}, s), {
|
|
3409
|
+
external: found.to
|
|
3410
|
+
});
|
|
3411
|
+
copy.specializers[i] = getSpecializer(spec);
|
|
3412
|
+
return spec;
|
|
3413
|
+
});
|
|
3414
|
+
}
|
|
3415
|
+
if (config.contextTracker) copy.context = config.contextTracker;
|
|
3416
|
+
if (config.dialect) copy.dialect = this.parseDialect(config.dialect);
|
|
3417
|
+
if (config.strict != null) copy.strict = config.strict;
|
|
3418
|
+
if (config.wrap) copy.wrappers = copy.wrappers.concat(config.wrap);
|
|
3419
|
+
if (config.bufferLength != null) copy.bufferLength = config.bufferLength;
|
|
3420
|
+
return copy;
|
|
3421
|
+
}
|
|
3422
|
+
/// Tells you whether any [parse wrappers](#lr.ParserConfig.wrap)
|
|
3423
|
+
/// are registered for this parser.
|
|
3424
|
+
hasWrappers() {
|
|
3425
|
+
return this.wrappers.length > 0;
|
|
3426
|
+
}
|
|
3427
|
+
/// Returns the name associated with a given term. This will only
|
|
3428
|
+
/// work for all terms when the parser was generated with the
|
|
3429
|
+
/// `--names` option. By default, only the names of tagged terms are
|
|
3430
|
+
/// stored.
|
|
3431
|
+
getName(term) {
|
|
3432
|
+
return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term);
|
|
3433
|
+
}
|
|
3434
|
+
/// The eof term id is always allocated directly after the node
|
|
3435
|
+
/// types. @internal
|
|
3436
|
+
get eofTerm() {
|
|
3437
|
+
return this.maxNode + 1;
|
|
3438
|
+
}
|
|
3439
|
+
/// The type of top node produced by the parser.
|
|
3440
|
+
get topNode() {
|
|
3441
|
+
return this.nodeSet.types[this.top[1]];
|
|
3442
|
+
}
|
|
3443
|
+
/// @internal
|
|
3444
|
+
dynamicPrecedence(term) {
|
|
3445
|
+
let prec = this.dynamicPrecedences;
|
|
3446
|
+
return prec == null ? 0 : prec[term] || 0;
|
|
3447
|
+
}
|
|
3448
|
+
/// @internal
|
|
3449
|
+
parseDialect(dialect) {
|
|
3450
|
+
let values = Object.keys(this.dialects),
|
|
3451
|
+
flags = values.map(() => false);
|
|
3452
|
+
if (dialect) for (let part of dialect.split(" ")) {
|
|
3453
|
+
let id = values.indexOf(part);
|
|
3454
|
+
if (id >= 0) flags[id] = true;
|
|
3455
|
+
}
|
|
3456
|
+
let disabled = null;
|
|
3457
|
+
for (let i = 0; i < values.length; i++) if (!flags[i]) {
|
|
3458
|
+
for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* Seq.End */;) (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1;
|
|
3459
|
+
}
|
|
3460
|
+
return new Dialect(dialect, flags, disabled);
|
|
3461
|
+
}
|
|
3462
|
+
/// Used by the output of the parser generator. Not available to
|
|
3463
|
+
/// user code. @hide
|
|
3464
|
+
static deserialize(spec) {
|
|
3465
|
+
return new LRParser(spec);
|
|
3466
|
+
}
|
|
3467
|
+
}
|
|
3468
|
+
function pair(data, off) {
|
|
3469
|
+
return data[off] | data[off + 1] << 16;
|
|
3470
|
+
}
|
|
3471
|
+
function findFinished(stacks) {
|
|
3472
|
+
let best = null;
|
|
3473
|
+
for (let stack of stacks) {
|
|
3474
|
+
let stopped = stack.p.stoppedAt;
|
|
3475
|
+
if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) && stack.p.parser.stateFlag(stack.state, 2 /* StateFlag.Accepting */) && (!best || best.score < stack.score)) best = stack;
|
|
3476
|
+
}
|
|
3477
|
+
return best;
|
|
3478
|
+
}
|
|
3479
|
+
function getSpecializer(spec) {
|
|
3480
|
+
if (spec.external) {
|
|
3481
|
+
let mask = spec.extend ? 1 /* Specialize.Extend */ : 0 /* Specialize.Specialize */;
|
|
3482
|
+
return (value, stack) => spec.external(value, stack) << 1 | mask;
|
|
3483
|
+
}
|
|
3484
|
+
return spec.get;
|
|
3485
|
+
}
|
|
3486
|
+
|
|
3487
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
3488
|
+
const noSemi = 302,
|
|
3489
|
+
incdec = 1,
|
|
3490
|
+
incdecPrefix = 2,
|
|
3491
|
+
insertSemi = 303,
|
|
3492
|
+
spaces = 305,
|
|
3493
|
+
newline = 306,
|
|
3494
|
+
LineComment = 3,
|
|
3495
|
+
BlockComment = 4;
|
|
3496
|
+
|
|
3497
|
+
/* Hand-written tokenizers for JavaScript tokens that can't be
|
|
3498
|
+
expressed by lezer's built-in tokenizer. */
|
|
3499
|
+
|
|
3500
|
+
const space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];
|
|
3501
|
+
const braceR = 125,
|
|
3502
|
+
semicolon = 59,
|
|
3503
|
+
slash = 47,
|
|
3504
|
+
star = 42,
|
|
3505
|
+
plus = 43,
|
|
3506
|
+
minus = 45;
|
|
3507
|
+
const trackNewline = new ContextTracker({
|
|
3508
|
+
start: false,
|
|
3509
|
+
shift(context, term) {
|
|
3510
|
+
return term == LineComment || term == BlockComment || term == spaces ? context : term == newline;
|
|
3511
|
+
},
|
|
3512
|
+
strict: false
|
|
3513
|
+
});
|
|
3514
|
+
const insertSemicolon = new ExternalTokenizer((input, stack) => {
|
|
3515
|
+
let {
|
|
3516
|
+
next
|
|
3517
|
+
} = input;
|
|
3518
|
+
if ((next == braceR || next == -1 || stack.context) && stack.canShift(insertSemi)) input.acceptToken(insertSemi);
|
|
3519
|
+
}, {
|
|
3520
|
+
contextual: true,
|
|
3521
|
+
fallback: true
|
|
3522
|
+
});
|
|
3523
|
+
const noSemicolon = new ExternalTokenizer((input, stack) => {
|
|
3524
|
+
let {
|
|
3525
|
+
next
|
|
3526
|
+
} = input,
|
|
3527
|
+
after;
|
|
3528
|
+
if (space.indexOf(next) > -1) return;
|
|
3529
|
+
if (next == slash && ((after = input.peek(1)) == slash || after == star)) return;
|
|
3530
|
+
if (next != braceR && next != semicolon && next != -1 && !stack.context && stack.canShift(noSemi)) input.acceptToken(noSemi);
|
|
3531
|
+
}, {
|
|
3532
|
+
contextual: true
|
|
3533
|
+
});
|
|
3534
|
+
const incdecToken = new ExternalTokenizer((input, stack) => {
|
|
3535
|
+
let {
|
|
3536
|
+
next
|
|
3537
|
+
} = input;
|
|
3538
|
+
if (next == plus || next == minus) {
|
|
3539
|
+
input.advance();
|
|
3540
|
+
if (next == input.next) {
|
|
3541
|
+
input.advance();
|
|
3542
|
+
let mayPostfix = !stack.context && stack.canShift(incdec);
|
|
3543
|
+
input.acceptToken(mayPostfix ? incdec : incdecPrefix);
|
|
3544
|
+
}
|
|
3545
|
+
}
|
|
3546
|
+
}, {
|
|
3547
|
+
contextual: true
|
|
3548
|
+
});
|
|
3549
|
+
const jsHighlight = styleTags({
|
|
3550
|
+
"get set async static": tags.modifier,
|
|
3551
|
+
"for while do if else switch try catch finally return throw break continue default case": tags.controlKeyword,
|
|
3552
|
+
"in of await yield void typeof delete instanceof": tags.operatorKeyword,
|
|
3553
|
+
"let var const function class extends": tags.definitionKeyword,
|
|
3554
|
+
"import export from": tags.moduleKeyword,
|
|
3555
|
+
"with debugger as new": tags.keyword,
|
|
3556
|
+
TemplateString: tags.special(tags.string),
|
|
3557
|
+
super: tags.atom,
|
|
3558
|
+
BooleanLiteral: tags.bool,
|
|
3559
|
+
this: tags.self,
|
|
3560
|
+
null: tags.null,
|
|
3561
|
+
Star: tags.modifier,
|
|
3562
|
+
VariableName: tags.variableName,
|
|
3563
|
+
"CallExpression/VariableName TaggedTemplateExpression/VariableName": tags.function(tags.variableName),
|
|
3564
|
+
VariableDefinition: tags.definition(tags.variableName),
|
|
3565
|
+
Label: tags.labelName,
|
|
3566
|
+
PropertyName: tags.propertyName,
|
|
3567
|
+
PrivatePropertyName: tags.special(tags.propertyName),
|
|
3568
|
+
"CallExpression/MemberExpression/PropertyName": tags.function(tags.propertyName),
|
|
3569
|
+
"FunctionDeclaration/VariableDefinition": tags.function(tags.definition(tags.variableName)),
|
|
3570
|
+
"ClassDeclaration/VariableDefinition": tags.definition(tags.className),
|
|
3571
|
+
PropertyDefinition: tags.definition(tags.propertyName),
|
|
3572
|
+
PrivatePropertyDefinition: tags.definition(tags.special(tags.propertyName)),
|
|
3573
|
+
UpdateOp: tags.updateOperator,
|
|
3574
|
+
LineComment: tags.lineComment,
|
|
3575
|
+
BlockComment: tags.blockComment,
|
|
3576
|
+
Number: tags.number,
|
|
3577
|
+
String: tags.string,
|
|
3578
|
+
Escape: tags.escape,
|
|
3579
|
+
ArithOp: tags.arithmeticOperator,
|
|
3580
|
+
LogicOp: tags.logicOperator,
|
|
3581
|
+
BitOp: tags.bitwiseOperator,
|
|
3582
|
+
CompareOp: tags.compareOperator,
|
|
3583
|
+
RegExp: tags.regexp,
|
|
3584
|
+
Equals: tags.definitionOperator,
|
|
3585
|
+
Arrow: tags.function(tags.punctuation),
|
|
3586
|
+
": Spread": tags.punctuation,
|
|
3587
|
+
"( )": tags.paren,
|
|
3588
|
+
"[ ]": tags.squareBracket,
|
|
3589
|
+
"{ }": tags.brace,
|
|
3590
|
+
"InterpolationStart InterpolationEnd": tags.special(tags.brace),
|
|
3591
|
+
".": tags.derefOperator,
|
|
3592
|
+
", ;": tags.separator,
|
|
3593
|
+
"@": tags.meta,
|
|
3594
|
+
TypeName: tags.typeName,
|
|
3595
|
+
TypeDefinition: tags.definition(tags.typeName),
|
|
3596
|
+
"type enum interface implements namespace module declare": tags.definitionKeyword,
|
|
3597
|
+
"abstract global Privacy readonly override": tags.modifier,
|
|
3598
|
+
"is keyof unique infer": tags.operatorKeyword,
|
|
3599
|
+
JSXAttributeValue: tags.attributeValue,
|
|
3600
|
+
JSXText: tags.content,
|
|
3601
|
+
"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag": tags.angleBracket,
|
|
3602
|
+
"JSXIdentifier JSXNameSpacedName": tags.tagName,
|
|
3603
|
+
"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName": tags.attributeName,
|
|
3604
|
+
"JSXBuiltin/JSXIdentifier": tags.standard(tags.tagName)
|
|
3605
|
+
});
|
|
3606
|
+
|
|
3607
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
3608
|
+
const spec_identifier = {
|
|
3609
|
+
__proto__: null,
|
|
3610
|
+
export: 14,
|
|
3611
|
+
as: 19,
|
|
3612
|
+
from: 27,
|
|
3613
|
+
default: 30,
|
|
3614
|
+
async: 35,
|
|
3615
|
+
function: 36,
|
|
3616
|
+
extends: 46,
|
|
3617
|
+
this: 50,
|
|
3618
|
+
true: 58,
|
|
3619
|
+
false: 58,
|
|
3620
|
+
null: 70,
|
|
3621
|
+
void: 74,
|
|
3622
|
+
typeof: 78,
|
|
3623
|
+
super: 96,
|
|
3624
|
+
new: 130,
|
|
3625
|
+
delete: 146,
|
|
3626
|
+
yield: 155,
|
|
3627
|
+
await: 159,
|
|
3628
|
+
class: 164,
|
|
3629
|
+
public: 221,
|
|
3630
|
+
private: 221,
|
|
3631
|
+
protected: 221,
|
|
3632
|
+
readonly: 223,
|
|
3633
|
+
instanceof: 242,
|
|
3634
|
+
satisfies: 245,
|
|
3635
|
+
in: 246,
|
|
3636
|
+
const: 248,
|
|
3637
|
+
import: 280,
|
|
3638
|
+
keyof: 335,
|
|
3639
|
+
unique: 339,
|
|
3640
|
+
infer: 345,
|
|
3641
|
+
is: 381,
|
|
3642
|
+
abstract: 401,
|
|
3643
|
+
implements: 403,
|
|
3644
|
+
type: 405,
|
|
3645
|
+
let: 408,
|
|
3646
|
+
var: 410,
|
|
3647
|
+
interface: 417,
|
|
3648
|
+
enum: 421,
|
|
3649
|
+
namespace: 427,
|
|
3650
|
+
module: 429,
|
|
3651
|
+
declare: 433,
|
|
3652
|
+
global: 437,
|
|
3653
|
+
for: 456,
|
|
3654
|
+
of: 465,
|
|
3655
|
+
while: 468,
|
|
3656
|
+
with: 472,
|
|
3657
|
+
do: 476,
|
|
3658
|
+
if: 480,
|
|
3659
|
+
else: 482,
|
|
3660
|
+
switch: 486,
|
|
3661
|
+
case: 492,
|
|
3662
|
+
try: 498,
|
|
3663
|
+
catch: 502,
|
|
3664
|
+
finally: 506,
|
|
3665
|
+
return: 510,
|
|
3666
|
+
throw: 514,
|
|
3667
|
+
break: 518,
|
|
3668
|
+
continue: 522,
|
|
3669
|
+
debugger: 526
|
|
3670
|
+
};
|
|
3671
|
+
const spec_word = {
|
|
3672
|
+
__proto__: null,
|
|
3673
|
+
async: 117,
|
|
3674
|
+
get: 119,
|
|
3675
|
+
set: 121,
|
|
3676
|
+
declare: 181,
|
|
3677
|
+
public: 183,
|
|
3678
|
+
private: 183,
|
|
3679
|
+
protected: 183,
|
|
3680
|
+
static: 185,
|
|
3681
|
+
abstract: 187,
|
|
3682
|
+
override: 189,
|
|
3683
|
+
readonly: 195,
|
|
3684
|
+
accessor: 197,
|
|
3685
|
+
new: 385
|
|
3686
|
+
};
|
|
3687
|
+
const spec_LessThan = {
|
|
3688
|
+
__proto__: null,
|
|
3689
|
+
"<": 137
|
|
3690
|
+
};
|
|
3691
|
+
const parser = LRParser.deserialize({
|
|
3692
|
+
version: 14,
|
|
3693
|
+
states: "$6[O`QUOOO%QQUOOO'TQWOOP(bOSOOO*pQ(CjO'#CfO*wOpO'#CgO+VO!bO'#CgO+eO07`O'#DZO-vQUO'#DaO.WQUO'#DlO%QQUO'#DvO0[QUO'#EOOOQ(CY'#EW'#EWO0uQSO'#ETOOQO'#Ei'#EiOOQO'#Ib'#IbO0}QSO'#GkO1YQSO'#EhO1_QSO'#EhO3aQ(CjO'#JcO6QQ(CjO'#JdO6nQSO'#FWO6sQ#tO'#FoOOQ(CY'#F`'#F`O7OO&jO'#F`O7^Q,UO'#FvO8tQSO'#FuOOQ(CY'#Jd'#JdOOQ(CW'#Jc'#JcOOQQ'#KO'#KOO8yQSO'#IOO9OQ(C[O'#IPOOQQ'#JP'#JPOOQQ'#IT'#ITQ`QUOOO%QQUO'#DnO9WQUO'#DzO%QQUO'#D|O9_QSO'#GkO9dQ,UO'#ClO9rQSO'#EgO9}QSO'#ErO:SQ,UO'#F_O:qQSO'#GkO:vQSO'#GoO;RQSO'#GoO;aQSO'#GrO;aQSO'#GsO;aQSO'#GuO9_QSO'#GxO<QQSO'#G{O=cQSO'#CbO=sQSO'#HXO={QSO'#H_O={QSO'#HaO`QUO'#HcO={QSO'#HeO={QSO'#HhO>QQSO'#HnO>VQ(C]O'#HtO%QQUO'#HvO>bQ(C]O'#HxO>mQ(C]O'#HzO9OQ(C[O'#H|O>xQ(CjO'#CfO?zQWO'#DfQOQSOOO@bQSO'#EPO9dQ,UO'#EgO@mQSO'#EgO@xQ`O'#F_OOQQ'#Cd'#CdOOQ(CW'#Dk'#DkOOQ(CW'#Jg'#JgO%QQUO'#JgOOQO'#Jk'#JkOOQO'#I_'#I_OAxQWO'#E`OOQ(CW'#E_'#E_OBtQ(C`O'#E`OCOQWO'#ESOOQO'#Jj'#JjOCdQWO'#JkODqQWO'#ESOCOQWO'#E`PEOO?MpO'#C`POOO)CDn)CDnOOOO'#IU'#IUOEZOpO,59ROOQ(CY,59R,59ROOOO'#IV'#IVOEiO!bO,59RO%QQUO'#D]OOOO'#IX'#IXOEwO07`O,59uOOQ(CY,59u,59uOFVQUO'#IYOFjQSO'#JeOHlQbO'#JeO+sQUO'#JeOHsQSO,59{OIZQSO'#EiOIhQSO'#JsOIsQSO'#JrOIsQSO'#JrOI{QSO,5;VOJQQSO'#JqOOQ(CY,5:W,5:WOJXQUO,5:WOLYQ(CjO,5:bOLyQSO,5:jOMdQ(C[O'#JpOMkQSO'#JoO:vQSO'#JoONPQSO'#JoONXQSO,5;UON^QSO'#JoO!!fQbO'#JdOOQ(CY'#Cf'#CfO%QQUO'#EOO!#UQ`O,5:oOOQO'#Jl'#JlOOQO-E<`-E<`O9_QSO,5=VO!#lQSO,5=VO!#qQUO,5;SO!%tQ,UO'#EdO!'XQSO,5;SO!(qQ,UO'#DpO!(xQUO'#DuO!)SQWO,5;]O!)[QWO,5;]O%QQUO,5;]OOQQ'#FO'#FOOOQQ'#FQ'#FQO%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^O%QQUO,5;^OOQQ'#FU'#FUO!)jQUO,5;oOOQ(CY,5;t,5;tOOQ(CY,5;u,5;uO!+mQSO,5;uOOQ(CY,5;v,5;vO%QQUO'#IfO!+uQ(C[O,5<cO!%tQ,UO,5;^O!,dQ,UO,5;^O%QQUO,5;rO!,kQ#tO'#FeO!-hQ#tO'#JwO!-SQ#tO'#JwO!-oQ#tO'#JwOOQO'#Jw'#JwO!.TQ#tO,5;}OOOO,5<Z,5<ZO!.fQUO'#FqOOOO'#Ie'#IeO7OO&jO,5;zO!.mQ#tO'#FsOOQ(CY,5;z,5;zO!/^Q7[O'#CrOOQ(CY'#Cv'#CvO!/qQSO'#CvO!/vO07`O'#CzO!0dQ,UO,5<`O!0kQSO,5<bO!2QQMhO'#GQO!2_QSO'#GRO!2dQSO'#GRO!2iQMhO'#GVO!3hQWO'#GZO!4ZQ7[O'#J^OOQ(CY'#J^'#J^O!4eQSO'#J]O!4sQSO'#J[O!4{QSO'#CqOOQ(CY'#Ct'#CtOOQ(CY'#DO'#DOOOQ(CY'#DQ'#DQO0xQSO'#DSO!'^Q,UO'#FxO!'^Q,UO'#FzO!5TQSO'#F|O!5YQSO'#F}O!2dQSO'#GTO!'^Q,UO'#GYO!5_QSO'#EjO!5|QSO,5<aO`QUO,5>jOOQQ'#JX'#JXOOQQ,5>k,5>kOOQQ-E<R-E<RO!7{Q(CjO,5:YO!:iQ(CjO,5:fO%QQUO,5:fO!=SQ(CjO,5:hOOQ(CW'#Co'#CoO!=sQ,UO,5=VO!>RQ(C[O'#JYO8tQSO'#JYO!>dQ(C[O,59WO!>oQWO,59WO!>wQ,UO,59WO9dQ,UO,59WO!?SQSO,5;SO!?[QSO'#HWO!?mQSO'#KSO%QQUO,5;wO!?uQWO,5;yO!?zQSO,5=qO!@PQSO,5=qO!@UQSO,5=qO9OQ(C[O,5=qO!@dQSO'#EkO!A^QWO'#ElOOQ(CW'#Jq'#JqO!AeQ(C[O'#KPO9OQ(C[O,5=ZO;aQSO,5=aOOQO'#Cr'#CrO!ApQWO,5=^O!AxQ,UO,5=_O!BTQSO,5=aO!BYQ`O,5=dO>QQSO'#G}O9_QSO'#HPO!BbQSO'#HPO9dQ,UO'#HRO!BgQSO'#HROOQQ,5=g,5=gO!BlQSO'#HSO!BtQSO'#ClO!ByQSO,58|O!CTQSO,58|O!E]QUO,58|OOQQ,58|,58|O!EjQ(C[O,58|O%QQUO,58|O!EuQUO'#HZOOQQ'#H['#H[OOQQ'#H]'#H]O`QUO,5=sO!FVQSO,5=sO`QUO,5=yO`QUO,5={O!F[QSO,5=}O`QUO,5>PO!FaQSO,5>SO!FfQUO,5>YOOQQ,5>`,5>`O%QQUO,5>`O9OQ(C[O,5>bOOQQ,5>d,5>dO!JmQSO,5>dOOQQ,5>f,5>fO!JmQSO,5>fOOQQ,5>h,5>hO!JrQWO'#DXO%QQUO'#JgO!KaQWO'#JgO!LOQWO'#DgO!LaQWO'#DgO!NrQUO'#DgO!NyQSO'#JfO# RQSO,5:QO# WQSO'#EmO# fQSO'#JtO# nQSO,5;WO# sQWO'#DgO#!QQWO'#EROOQ(CY,5:k,5:kO%QQUO,5:kO#!XQSO,5:kO>QQSO,5;RO!>oQWO,5;RO!>wQ,UO,5;RO9dQ,UO,5;RO#!aQSO,5@RO#!fQ!LQO,5:oOOQO-E<]-E<]O##lQ(C`O,5:zOCOQWO,5:nO##vQWO,5:nOCOQWO,5:zO!>dQ(C[O,5:nOOQ(CW'#Ec'#EcOOQO,5:z,5:zO%QQUO,5:zO#$TQ(C[O,5:zO#$`Q(C[O,5:zO!>oQWO,5:nOOQO,5;Q,5;QO#$nQ(C[O,5:zPOOO'#IS'#ISP#%SO?MpO,58zPOOO,58z,58zOOOO-E<S-E<SOOQ(CY1G.m1G.mOOOO-E<T-E<TO#%_Q`O,59wOOOO-E<V-E<VOOQ(CY1G/a1G/aO#%dQbO,5>tO+sQUO,5>tOOQO,5>z,5>zO#%nQUO'#IYOOQO-E<W-E<WO#%{QSO,5@PO#&TQbO,5@PO#&[QSO,5@^OOQ(CY1G/g1G/gO%QQUO,5@_O#&dQSO'#I`OOQO-E<^-E<^O#&[QSO,5@^OOQ(CW1G0q1G0qOOQ(CY1G/r1G/rOOQ(CY1G0U1G0UO%QQUO,5@[O#&xQ(C[O,5@[O#'ZQ(C[O,5@[O#'bQSO,5@ZO:vQSO,5@ZO#'jQSO,5@ZO#'xQSO'#IcO#'bQSO,5@ZOOQ(CW1G0p1G0pO!)SQWO,5:qO!)_QWO,5:qOOQO,5:s,5:sO#(jQSO,5:sO#(rQ,UO1G2qO9_QSO1G2qOOQ(CY1G0n1G0nO#)QQ(CjO1G0nO#*VQ(ChO,5;OOOQ(CY'#GP'#GPO#*sQ(CjO'#J^O!#qQUO1G0nO#,{Q,UO'#JhO#-VQSO,5:[O#-[QbO'#JiO%QQUO'#JiO#-fQSO,5:aOOQ(CY'#DX'#DXOOQ(CY1G0w1G0wO%QQUO1G0wOOQ(CY1G1a1G1aO#-kQSO1G0wO#0SQ(CjO1G0xO#0ZQ(CjO1G0xO#2tQ(CjO1G0xO#2{Q(CjO1G0xO#5VQ(CjO1G0xO#5mQ(CjO1G0xO#8gQ(CjO1G0xO#8nQ(CjO1G0xO#;XQ(CjO1G0xO#;`Q(CjO1G0xO#=WQ(CjO1G0xO#@WQ$IUO'#CfO#BUQ$IUO1G1ZO#B]Q$IUO'#JdO!+pQSO1G1aO#BmQ(CjO,5?QOOQ(CW-E<d-E<dO#CaQ(CjO1G0xOOQ(CY1G0x1G0xO#ElQ(CjO1G1^O#F`Q#tO,5<RO#FhQ#tO,5<SO#FpQ#tO'#FjO#GXQSO'#FiOOQO'#Jx'#JxOOQO'#Id'#IdO#G^Q#tO1G1iOOQ(CY1G1i1G1iOOOO1G1t1G1tO#GoQ$IUO'#JcO#GyQSO,5<]O!)jQUO,5<]OOOO-E<c-E<cOOQ(CY1G1f1G1fO#HOQWO'#JwOOQ(CY,5<_,5<_O#HWQWO,5<_OOQ(CY,59b,59bO!%tQ,UO'#C|OOOO'#IW'#IWO#H]O07`O,59fOOQ(CY,59f,59fO%QQUO1G1zO!5YQSO'#IhO#HhQSO,5<sOOQ(CY,5<p,5<pOOQO'#Gf'#GfO!'^Q,UO,5=POOQO'#Gh'#GhO!'^Q,UO,5=RO!%tQ,UO,5=TOOQO1G1|1G1|O#HvQ`O'#CoO#IZQ`O,5<lO#IbQSO'#J{O9_QSO'#J{O#IpQSO,5<nO!'^Q,UO,5<mO#IuQSO'#GSO#JQQSO,5<mO#JVQ`O'#GPO#JdQ`O'#J|O#JnQSO'#J|O!%tQ,UO'#J|O#JsQSO,5<qO#JxQWO'#G[O!3cQWO'#G[O#KZQSO'#G^O#K`QSO'#G`O!2dQSO'#GcO#KeQ(C[O'#IjO#KpQWO,5<uOOQ(CY,5<u,5<uO#KwQWO'#G[O#LVQWO'#G]O#L_QWO'#G]OOQ(CY,5=U,5=UO!'^Q,UO,5?wO!'^Q,UO,5?wO#LdQSO'#IkO#LoQSO,5?vO#LwQSO,59]O#MhQ,UO,59nOOQ(CY,59n,59nO#NZQ,UO,5<dO#N|Q,UO,5<fO?rQSO,5<hOOQ(CY,5<i,5<iO$ WQSO,5<oO$ ]Q,UO,5<tO$ mQSO'#JoO!#qQUO1G1{O$ rQSO1G1{OOQQ1G4U1G4UOOQ(CY1G/t1G/tO!+mQSO1G/tO$#qQ(CjO1G0QOOQQ1G2q1G2qO!%tQ,UO1G2qO%QQUO1G2qO$$bQSO1G2qO$$mQ,UO'#EdOOQ(CW,5?t,5?tO$$wQ(C[O,5?tOOQQ1G.r1G.rO!>dQ(C[O1G.rO!>oQWO1G.rO!>wQ,UO1G.rO$%YQSO1G0nO$%_QSO'#CfO$%jQSO'#KTO$%rQSO,5=rO$%wQSO'#KTO$%|QSO'#KTO$&XQSO'#IsO$&gQSO,5@nO$&oQbO1G1cOOQ(CY1G1e1G1eO9_QSO1G3]O?rQSO1G3]O$&vQSO1G3]O$&{QSO1G3]OOQQ1G3]1G3]O:vQSO'#JrO:vQSO'#EmO%QQUO'#EmO:vQSO'#ImO$'QQ(C[O,5@kOOQQ1G2u1G2uO!BTQSO1G2{O!%tQ,UO1G2xO$']QSO1G2xOOQQ1G2y1G2yO!%tQ,UO1G2yO$'bQSO1G2yO$'jQWO'#GwOOQQ1G2{1G2{O!3cQWO'#IoO!BYQ`O1G3OOOQQ1G3O1G3OOOQQ,5=i,5=iO$'rQ,UO,5=kO9_QSO,5=kO#K`QSO,5=mO8tQSO,5=mO!>oQWO,5=mO!>wQ,UO,5=mO9dQ,UO,5=mO$(QQSO'#KRO$(]QSO,5=nOOQQ1G.h1G.hO$(bQ(C[O1G.hO?rQSO1G.hO$(mQSO1G.hO9OQ(C[O1G.hO$*rQbO,5@pO$+SQSO,5@pO$+_QUO,5=uO$+fQSO,5=uO:vQSO,5@pOOQQ1G3_1G3_O`QUO1G3_OOQQ1G3e1G3eOOQQ1G3g1G3gO={QSO1G3iO$+kQUO1G3kO$/lQUO'#HjOOQQ1G3n1G3nO$/yQSO'#HpO>QQSO'#HrOOQQ1G3t1G3tO$0RQUO1G3tO9OQ(C[O1G3zOOQQ1G3|1G3|OOQ(CW'#GW'#GWO9OQ(C[O1G4OO9OQ(C[O1G4QO$4VQSO,5@RO!)jQUO,5;XO:vQSO,5;XO>QQSO,5:RO!)jQUO,5:RO!>oQWO,5:RO$4[Q$IUO,5:ROOQO,5;X,5;XO$4fQWO'#IZO$4|QSO,5@QOOQ(CY1G/l1G/lO$5UQWO'#IaO$5`QSO,5@`OOQ(CW1G0r1G0rO!LaQWO,5:ROOQO'#I^'#I^O$5hQWO,5:mOOQ(CY,5:m,5:mO#![QSO1G0VOOQ(CY1G0V1G0VO%QQUO1G0VOOQ(CY1G0m1G0mO>QQSO1G0mO!>oQWO1G0mO!>wQ,UO1G0mOOQ(CW1G5m1G5mO!>dQ(C[O1G0YOOQO1G0f1G0fO%QQUO1G0fO$5oQ(C[O1G0fO$5zQ(C[O1G0fO!>oQWO1G0YOCOQWO1G0YO$6YQ(C[O1G0fOOQO1G0Y1G0YO$6nQ(CjO1G0fPOOO-E<Q-E<QPOOO1G.f1G.fOOOO1G/c1G/cO$6xQ`O,5<cO$7QQbO1G4`OOQO1G4f1G4fO%QQUO,5>tO$7[QSO1G5kO$7dQSO1G5xO$7lQbO1G5yO:vQSO,5>zO$7vQ(CjO1G5vO%QQUO1G5vO$8WQ(C[O1G5vO$8iQSO1G5uO$8iQSO1G5uO:vQSO1G5uO$8qQSO,5>}O:vQSO,5>}OOQO,5>},5>}O$9VQSO,5>}O$ mQSO,5>}OOQO-E<a-E<aOOQO1G0]1G0]OOQO1G0_1G0_O!+pQSO1G0_OOQQ7+(]7+(]O!%tQ,UO7+(]O%QQUO7+(]O$9eQSO7+(]O$9pQ,UO7+(]O$:OQ(CjO,59nO$<WQ(CjO,5<dO$>cQ(CjO,5<fO$@nQ(CjO,5<tOOQ(CY7+&Y7+&YO$CPQ(CjO7+&YO$CsQ,UO'#I[O$C}QSO,5@SOOQ(CY1G/v1G/vO$DVQUO'#I]O$DdQSO,5@TO$DlQbO,5@TOOQ(CY1G/{1G/{O$DvQSO7+&cOOQ(CY7+&c7+&cO$D{Q$IUO,5:bO%QQUO7+&uO$EVQ$IUO,5:YO$EdQ$IUO,5:fO$EnQ$IUO,5:hOOQ(CY7+&{7+&{OOQO1G1m1G1mOOQO1G1n1G1nO$ExQ#tO,5<UO!)jQUO,5<TOOQO-E<b-E<bOOQ(CY7+'T7+'TOOOO7+'`7+'`OOOO1G1w1G1wO$FTQSO1G1wOOQ(CY1G1y1G1yO$FYQ`O,59hOOOO-E<U-E<UOOQ(CY1G/Q1G/QO$FaQ(CjO7+'fOOQ(CY,5?S,5?SO$GTQSO,5?SOOQ(CY1G2_1G2_P$GYQSO'#IhPOQ(CY-E<f-E<fO$G|Q,UO1G2kO$HoQ,UO1G2mO$HyQ`O1G2oOOQ(CY1G2W1G2WO$IQQSO'#IgO$I`QSO,5@gO$I`QSO,5@gO$IhQSO,5@gO$IsQSO,5@gOOQO1G2Y1G2YO$JRQ,UO1G2XO!'^Q,UO1G2XO$JcQMhO'#IiO$JsQSO,5@hO!%tQ,UO,5@hO$J{Q`O,5@hOOQ(CY1G2]1G2]OOQ(CW,5<v,5<vOOQ(CW,5<w,5<wO$ mQSO,5<wOBoQSO,5<wO!>oQWO,5<vOOQO'#G_'#G_O$KVQSO,5<xOOQ(CW,5<z,5<zO$ mQSO,5<}OOQO,5?U,5?UOOQO-E<h-E<hOOQ(CY1G2a1G2aO!3cQWO,5<vO$K_QSO,5<wO#KZQSO,5<xO!3cQWO,5<wO$KjQ,UO1G5cO$KtQ,UO1G5cOOQO,5?V,5?VOOQO-E<i-E<iOOQO1G.w1G.wO!?uQWO,59pO%QQUO,59pO$LRQSO1G2SO!'^Q,UO1G2ZO$LWQ(CjO7+'gOOQ(CY7+'g7+'gO!#qQUO7+'gOOQ(CY7+%`7+%`O$LzQ`O'#J}O#![QSO7+(]O$MUQbO7+(]O$9hQSO7+(]O$M]Q(ChO'#CfO$MpQ(ChO,5<{O$NbQSO,5<{OOQ(CW1G5`1G5`OOQQ7+$^7+$^O!>dQ(C[O7+$^O!>oQWO7+$^O!#qQUO7+&YO$NgQSO'#IrO$N{QSO,5@oOOQO1G3^1G3^O9_QSO,5@oO$N{QSO,5@oO% TQSO,5@oOOQO,5?_,5?_OOQO-E<q-E<qOOQ(CY7+&}7+&}O% YQSO7+(wO9OQ(C[O7+(wO9_QSO7+(wO?rQSO7+(wO% _QSO,5;XOOQ(CW,5?X,5?XOOQ(CW-E<k-E<kOOQQ7+(g7+(gO% dQ(ChO7+(dO!%tQ,UO7+(dO% nQ`O7+(eOOQQ7+(e7+(eO!%tQ,UO7+(eO% uQSO'#KQO%!QQSO,5=cOOQO,5?Z,5?ZOOQO-E<m-E<mOOQQ7+(j7+(jO%#aQWO'#HQOOQQ1G3V1G3VO!%tQ,UO1G3VO%QQUO1G3VO%#hQSO1G3VO%#sQ,UO1G3VO9OQ(C[O1G3XO#K`QSO1G3XO8tQSO1G3XO!>oQWO1G3XO!>wQ,UO1G3XO%$RQSO'#IqO%$^QSO,5@mO%$fQWO,5@mOOQ(CW1G3Y1G3YOOQQ7+$S7+$SO?rQSO7+$SO9OQ(C[O7+$SO%$qQSO7+$SO%QQUO1G6[O%QQUO1G6]O%$vQUO1G3aO%$}QSO1G3aO%%SQUO1G3aO%%ZQ(C[O1G6[OOQQ7+(y7+(yO9OQ(C[O7+)TO`QUO7+)VOOQQ'#KW'#KWOOQQ'#It'#ItO%%eQUO,5>UOOQQ,5>U,5>UO%QQUO'#HkO%%rQSO'#HmOOQQ,5>[,5>[O:vQSO,5>[OOQQ,5>^,5>^OOQQ7+)`7+)`OOQQ7+)f7+)fOOQQ7+)j7+)jOOQQ7+)l7+)lO%%wQWO1G5mO%&]Q$IUO1G0sO%&gQSO1G0sOOQO1G/m1G/mO%&rQ$IUO1G/mO>QQSO1G/mO!)jQUO'#DgOOQO,5>u,5>uOOQO-E<X-E<XOOQO,5>{,5>{OOQO-E<_-E<_O!>oQWO1G/mOOQO-E<[-E<[OOQ(CY1G0X1G0XOOQ(CY7+%q7+%qO#![QSO7+%qOOQ(CY7+&X7+&XO>QQSO7+&XO!>oQWO7+&XOOQO7+%t7+%tO$6nQ(CjO7+&QOOQO7+&Q7+&QO%QQUO7+&QO%&|Q(C[O7+&QO!>dQ(C[O7+%tO!>oQWO7+%tO%'XQ(C[O7+&QO%'gQ(CjO7++bO%QQUO7++bO%'wQSO7++aO%'wQSO7++aOOQO1G4i1G4iO:vQSO1G4iO%(PQSO1G4iOOQO7+%y7+%yO#![QSO<<KwO$MUQbO<<KwO%(_QSO<<KwOOQQ<<Kw<<KwO!%tQ,UO<<KwO%QQUO<<KwO%(gQSO<<KwO%(rQ(CjO1G2kO%*}Q(CjO1G2mO%-YQ(CjO1G2XO%/kQ,UO,5>vOOQO-E<Y-E<YO%/uQbO,5>wO%QQUO,5>wOOQO-E<Z-E<ZO%0PQSO1G5oOOQ(CY<<I}<<I}O%0XQ$IUO1G0nO%2cQ$IUO1G0xO%2jQ$IUO1G0xO%4nQ$IUO1G0xO%4uQ$IUO1G0xO%6jQ$IUO1G0xO%7QQ$IUO1G0xO%9eQ$IUO1G0xO%9lQ$IUO1G0xO%;pQ$IUO1G0xO%;wQ$IUO1G0xO%=oQ$IUO1G0xO%>SQ(CjO<<JaO%?XQ$IUO1G0xO%@}Q$IUO'#J^O%CQQ$IUO1G1^O%C_Q$IUO1G0QO!)jQUO'#FlOOQO'#Jy'#JyOOQO1G1p1G1pO%CiQSO1G1oO%CnQ$IUO,5?QOOOO7+'c7+'cOOOO1G/S1G/SOOQ(CY1G4n1G4nO!'^Q,UO7+(ZO%CxQSO,5?RO9_QSO,5?ROOQO-E<e-E<eO%DWQSO1G6RO%DWQSO1G6RO%D`QSO1G6RO%DkQ,UO7+'sO%D{Q`O,5?TO%EVQSO,5?TO!%tQ,UO,5?TOOQO-E<g-E<gO%E[Q`O1G6SO%EfQSO1G6SOOQ(CW1G2c1G2cO$ mQSO1G2cOOQ(CW1G2b1G2bO%EnQSO1G2dO!%tQ,UO1G2dOOQ(CW1G2i1G2iO!>oQWO1G2bOBoQSO1G2cO%EsQSO1G2dO%E{QSO1G2cO!'^Q,UO7+*}OOQ(CY1G/[1G/[O%FWQSO1G/[OOQ(CY7+'n7+'nO%F]Q,UO7+'uO%FmQ(CjO<<KROOQ(CY<<KR<<KRO!%tQ,UO'#IlO%GaQSO,5@iO!%tQ,UO1G2gOOQQ<<Gx<<GxO!>dQ(C[O<<GxO%GiQ(CjO<<ItOOQ(CY<<It<<ItOOQO,5?^,5?^O%H]QSO,5?^O$%|QSO,5?^OOQO-E<p-E<pO%HbQSO1G6ZO%HbQSO1G6ZO9_QSO1G6ZO?rQSO<<LcOOQQ<<Lc<<LcO%HjQSO<<LcO9OQ(C[O<<LcO%HoQSO1G0sOOQQ<<LO<<LOO% dQ(ChO<<LOOOQQ<<LP<<LPO% nQ`O<<LPO%HtQWO'#InO%IPQSO,5@lO!)jQUO,5@lOOQQ1G2}1G2}O%IXQUO'#JgOOQO'#Ip'#IpO9OQ(C[O'#IpO%IcQWO,5=lOOQQ,5=l,5=lO%IjQWO'#E`O%JOQSO7+(qO%JTQSO7+(qOOQQ7+(q7+(qO!%tQ,UO7+(qO%QQUO7+(qO%J]QSO7+(qOOQQ7+(s7+(sO9OQ(C[O7+(sO#K`QSO7+(sO8tQSO7+(sO!>oQWO7+(sO%JhQSO,5?]OOQO-E<o-E<oOOQO'#HT'#HTO%JsQSO1G6XO9OQ(C[O<<GnOOQQ<<Gn<<GnO?rQSO<<GnO%J{QSO7++vO%KQQSO7++wOOQQ7+({7+({O%KVQSO7+({O%K[QUO7+({O%KcQSO7+({O%QQUO7++vO%QQUO7++wOOQQ<<Lo<<LoOOQQ<<Lq<<LqOOQQ-E<r-E<rOOQQ1G3p1G3pO%KhQSO,5>VOOQQ,5>X,5>XO%KmQSO1G3vO:vQSO7+&_O!)jQUO7+&_OOQO7+%X7+%XO%KrQ$IUO1G5yO>QQSO7+%XOOQ(CY<<I]<<I]OOQ(CY<<Is<<IsO>QQSO<<IsOOQO<<Il<<IlO$6nQ(CjO<<IlO%QQUO<<IlOOQO<<I`<<I`O!>dQ(C[O<<I`O%K|Q(C[O<<IlO%LXQ(CjO<<N|O%LiQSO<<N{OOQO7+*T7+*TO:vQSO7+*TOOQQANAcANAcO%LqQSOANAcO!%tQ,UOANAcO#![QSOANAcO$MUQbOANAcO%QQUOANAcO%LyQ(CjO7+'sO& [Q(CjO7+'uO&#mQbO1G4cO&#wQ$IUO7+&YO&$UQ$IUO,59nO&&XQ$IUO,5<dO&([Q$IUO,5<fO&*_Q$IUO,5<tO&,TQ$IUO7+'fO&,bQ$IUO7+'gO&,oQSO,5<WOOQO7+'Z7+'ZO&,tQ,UO<<KuOOQO1G4m1G4mO&,{QSO1G4mO&-WQSO1G4mO&-fQSO7++mO&-fQSO7++mO!%tQ,UO1G4oO&-nQ`O1G4oO&-xQSO7++nOOQ(CW7+'}7+'}O$ mQSO7+(OO&.QQ`O7+(OOOQ(CW7+'|7+'|O$ mQSO7+'}O&.XQSO7+(OO!%tQ,UO7+(OOBoQSO7+'}O&.^Q,UO<<NiOOQ(CY7+$v7+$vO&.hQ`O,5?WOOQO-E<j-E<jO&.rQ(ChO7+(ROOQQAN=dAN=dO9_QSO1G4xOOQO1G4x1G4xO&/SQSO1G4xO&/XQSO7++uO&/XQSO7++uO9OQ(C[OANA}O?rQSOANA}OOQQANA}ANA}OOQQANAjANAjOOQQANAkANAkO&/aQSO,5?YOOQO-E<l-E<lO&/lQ$IUO1G6WO&1|QbO'#CfOOQO,5?[,5?[OOQO-E<n-E<nOOQQ1G3W1G3WO%IXQUO,5<xOOQQ<<L]<<L]O!%tQ,UO<<L]O%JOQSO<<L]O&2WQSO<<L]O%QQUO<<L]OOQQ<<L_<<L_O9OQ(C[O<<L_O#K`QSO<<L_O8tQSO<<L_O&2`QWO1G4wO&2kQSO7++sOOQQAN=YAN=YO9OQ(C[OAN=YOOQQ<= b<= bOOQQ<= c<= cOOQQ<<Lg<<LgO&2sQSO<<LgO&2xQUO<<LgO&3PQSO<= bO&3UQSO<= cOOQQ1G3q1G3qO>QQSO7+)bO&3ZQSO<<IyO&3fQ$IUO<<IyOOQO<<Hs<<HsOOQ(CYAN?_AN?_OOQOAN?WAN?WO$6nQ(CjOAN?WOOQOAN>zAN>zO%QQUOAN?WOOQO<<Mo<<MoOOQQG26}G26}O!%tQ,UOG26}O#![QSOG26}O&3pQSOG26}O$MUQbOG26}O&3xQ$IUO<<JaO&4VQ$IUO1G2XO&5{Q$IUO1G2kO&8OQ$IUO1G2mO&:RQ$IUO<<KRO&:`Q$IUO<<ItOOQO1G1r1G1rO!'^Q,UOANAaOOQO7+*X7+*XO&:mQSO7+*XO&:xQSO<= XO&;QQ`O7+*ZOOQ(CW<<Kj<<KjO$ mQSO<<KjOOQ(CW<<Ki<<KiO&;[Q`O<<KjO$ mQSO<<KiOOQO7+*d7+*dO9_QSO7+*dO&;cQSO<= aOOQQG27iG27iO9OQ(C[OG27iO!)jQUO1G4tO&;kQSO7++rO%JOQSOANAwOOQQANAwANAwO!%tQ,UOANAwO&;sQSOANAwOOQQANAyANAyO9OQ(C[OANAyO#K`QSOANAyOOQO'#HU'#HUOOQO7+*c7+*cOOQQG22tG22tOOQQANBRANBRO&;{QSOANBROOQQAND|AND|OOQQAND}AND}OOQQ<<L|<<L|O!)jQUOAN?eOOQOG24rG24rO$6nQ(CjOG24rO#![QSOLD,iOOQQLD,iLD,iO!%tQ,UOLD,iO&<QQSOLD,iO&<YQ$IUO7+'sO&>OQ$IUO7+'uO&?tQ,UOG26{OOQO<<Ms<<MsOOQ(CWANAUANAUO$ mQSOANAUOOQ(CWANATANATOOQO<<NO<<NOOOQQLD-TLD-TO&@UQ$IUO7+*`OOQQG27cG27cO%JOQSOG27cO!%tQ,UOG27cOOQQG27eG27eO9OQ(C[OG27eOOQQG27mG27mO&@`Q$IUOG25POOQOLD*^LD*^OOQQ!$(!T!$(!TO#![QSO!$(!TO!%tQ,UO!$(!TO&@jQ(CjOG26{OOQ(CWG26pG26pOOQQLD,}LD,}O%JOQSOLD,}OOQQLD-PLD-POOQQ!)9Eo!)9EoO#![QSO!)9EoOOQQ!$(!i!$(!iOOQQ!.K;Z!.K;ZO&B{Q$IUOG26{O!)jQUO'#DvO0uQSO'#ETO&DqQbO'#JcO!)jQUO'#DnO&DxQUO'#DzO!)jQUO'#D|O&EPQbO'#CfO&GgQbO'#CfO&GwQUO,5;SO!)jQUO,5;^O!)jQUO,5;^O!)jQUO,5;^O!)jQUO,5;^O!)jQUO,5;^O!)jQUO,5;^O!)jQUO,5;^O!)jQUO,5;^O!)jQUO,5;^O!)jQUO,5;^O!)jQUO,5;^O!)jQUO'#IfO&IzQSO,5<cO&JSQ,UO,5;^O&KgQ,UO,5;^O!)jQUO,5;rO0xQSO'#DSO0xQSO'#DSO!%tQ,UO'#FxO&JSQ,UO'#FxO!%tQ,UO'#FzO&JSQ,UO'#FzO!%tQ,UO'#GYO&JSQ,UO'#GYO!)jQUO,5:fO!)jQUO,5@_O&GwQUO1G0nO&KnQ$IUO'#CfO!)jQUO1G1zO!%tQ,UO,5=PO&JSQ,UO,5=PO!%tQ,UO,5=RO&JSQ,UO,5=RO!%tQ,UO,5<mO&JSQ,UO,5<mO&GwQUO1G1{O!)jQUO7+&uO!%tQ,UO1G2XO&JSQ,UO1G2XO!%tQ,UO1G2ZO&JSQ,UO1G2ZO&GwQUO7+'gO&GwQUO7+&YO!%tQ,UOANAaO&JSQ,UOANAaO&KxQSO'#EhO&K}QSO'#EhO&LVQSO'#FWO&L[QSO'#ErO&LaQSO'#JsO&LlQSO'#JqO&LwQSO,5;SO&L|Q,UO,5<`O&MTQSO'#GRO&MYQSO'#GRO&M_QSO,5<aO&MgQSO,5;SO&MoQ$IUO1G1ZO&MvQSO,5<mO&M{QSO,5<mO&NQQSO,5<oO&NVQSO,5<oO&N[QSO1G1{O&NaQSO1G0nO&NfQ,UO<<KuO&NmQ,UO<<KuO7^Q,UO'#FvO8tQSO'#FuO@mQSO'#EgO!)jQUO,5;oO!2dQSO'#GRO!2dQSO'#GRO!2dQSO'#GTO!2dQSO'#GTO!'^Q,UO7+(ZO!'^Q,UO7+(ZO$HyQ`O1G2oO$HyQ`O1G2oO!%tQ,UO,5=TO!%tQ,UO,5=T",
|
|
3694
|
+
stateData: "' v~O'mOS'nOSROS'oRQ~OPYOQYOV!TO^pOaxObwOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!XXO!csO!hZO!kYO!lYO!mYO!otO!quO!tvO!x]O#p}O$QzO$UfO%`{O%b!OO%d|O%e|O%h!PO%j!QO%m!RO%n!RO%p!SO%|!UO&S!VO&U!WO&W!XO&Y!YO&]!ZO&c![O&i!]O&k!^O&m!_O&o!`O&q!aO'tSO'vTO'yUO(RVO(a[O(niO~OPYOQYOa!gOb!fOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!X!cO!csO!hZO!kYO!lYO!mYO!otO!quO!t!eO$Q!hO$UfO't!bO'vTO'yUO(RVO(a[O(niO~O^!sOl!kO|!lO![!uO!]!rO!^!rO!x9mO!|!mO!}!mO#O!tO#P!mO#Q!mO#T!vO#U!vO'u!iO'vTO'yUO(U!jO(a!pO~O'o!wO~OPYXXYX^YXkYXyYXzYX|YX!VYX!eYX!fYX!hYX!lYX#XYX#dcX#gYX#hYX#iYX#jYX#kYX#lYX#mYX#nYX#oYX#qYX#sYX#uYX#vYX#{YX'kYX(RYX(bYX(iYX(jYX~O!a$zX~P(gO[!yO'v!{O'w!yO'x!{O~O[!|O'x!{O'y!{O'z!|O~Oq#OO!O#PO(S#PO(T#RO~OPYOQYOa!gOb!fOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!X!cO!csO!hZO!kYO!lYO!mYO!otO!quO!t!eO$Q!hO$UfO't9rO'vTO'yUO(RVO(a[O(niO~O!U#VO!V#SO!S(XP!S(fP~P+sO!W#_O~P`OPYOQYOa!gOb!fOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!X!cO!csO!hZO!kYO!lYO!mYO!otO!quO!t!eO$Q!hO$UfO'vTO'yUO(RVO(a[O(niO~Oi#iO!U#eO!x]O#b#hO#c#eO't9sO!g(cP~P._O!h#kO't#jO~O!t#oO!x]O%`#pO~O#d#qO~O!a#rO#d#qO~OP$YOX$aOk#}Oy#vOz#wO|#xO!V$^O!e$PO!f#tO!h#uO!l$YO#g#{O#h#|O#i#|O#j#|O#k$OO#l$PO#m$PO#n$`O#o$PO#q$QO#s$SO#u$UO#v$VO(RVO(b$WO(i#yO(j#zO~O^(VX'k(VX'i(VX!g(VX!S(VX!X(VX%a(VX!a(VX~P1gO#X$bO#{$bOP(WXX(WXk(WXy(WXz(WX|(WX!V(WX!e(WX!h(WX!l(WX#g(WX#h(WX#i(WX#j(WX#k(WX#l(WX#m(WX#n(WX#o(WX#q(WX#s(WX#u(WX#v(WX(R(WX(b(WX(i(WX(j(WX!X(WX%a(WX~O^(WX!f(WX'k(WX'i(WX!S(WX!g(WXo(WX!a(WX~P3}O#X$bO~O$W$dO$Y$cO$a$iO~O!X$jO$UfO$d$kO$f$mO~Oi%POk$qOl$pOm$pOs%QOu%ROw%SO|$xO!X$yO!c%XO!h$uO#c%YO$Q%VO$m%TO$o%UO$r%WO't$oO'vTO'yUO'}%OO(R$rOd(OP~O!h%ZO~O!a%]O~O^%^O'k%^O~O'u!iO~P%QO't%eO~O!h%ZO't%eO'u!iO'}%OO~Ob%lO!h%ZO't%eO~O#o$PO~Oy%qO!X%nO!h%pO%b%tO't%eO'u!iO'vTO'yUO](vP~O!t#oO~O|%vO!X%wO't%eO~O|%vO!X%wO%j%{O't%eO~O't%|O~O#p}O%b!OO%d|O%e|O%h!PO%j!QO%m!RO%n!RO~Oa&VOb&UO!t&SO%`&TO%r&RO~P;fOa&YObwO!X&XO!tvO!x]O#p}O%`{O%d|O%e|O%h!PO%j!QO%m!RO%n!RO%p!SO~O_&]O#X&`O%b&ZO'u!iO~P<eO!h&aO!q&eO~O!h#kO~O!XXO~O^%^O'j&mO'k%^O~O^%^O'j&pO'k%^O~O^%^O'j&rO'k%^O~O'iYX!SYXoYX!gYX&QYX!XYX%aYX!aYX~P(gO!['PO!]&xO!^&xO'u!iO'vTO'yUO~Ol&vO|&uO!U&yO(U&tO!W(YP!W(hP~P?fOg'SO!X'QO't%eO~Ob'XO!h%ZO't%eO~Oy%qO!h%pO~Ol!kO|!lO!x9mO!|!mO!}!mO#P!mO#Q!mO'u!iO'vTO'yUO(U!jO(a!pO~O!['_O!]'^O!^'^O#O!mO#T'`O#U'`O~PAQO^%^O!a#rO!h%ZO'k%^O'}%OO(b'bO~O!l'fO#X'dO~PB`Ol!kO|!lO'vTO'yUO(U!jO(a!pO~O!XXOl(_X|(_XPO'vTO'yUO(RVO(a[O(n;ZO~Oz)SO!h#uO~O!V$^O^$ka'k$ka'i$ka!g$ka!S$ka!X$ka%a$ka!a$ka~O#p)WO~P!%tOy)ZO!a)YO!X$XX$T$XX$W$XX$Y$XX$a$XX~O!a)YO!X(kX$T(kX$W(kX$Y(kX$a(kX~Oy)ZO~P!-SOy)ZO!X(kX$T(kX$W(kX$Y(kX$a(kX~O!X)]O$T)aO$W)[O$Y)[O$a)bO~O!U)eO~P!)jO$W$dO$Y$cO$a)iO~Og$sXy$sX|$sX!f$sX(i$sX(j$sX~OdfXd$sXgfX!VfX#XfX~P!.xOl)kO~Oq)lO(S)mO(T)oO~Og)xOy)qO|)rO(i)tO(j)vO~Od)pO~P!0ROd)yO~Oi%POk$qOl$pOm$pOs%QOu%ROw:VO|$xO!X$yO!c;aO!h$uO#c:]O$Q%VO$m:XO$o:ZO$r%WO'vTO'yUO'}%OO(R$rO~O!U)}O't)zO!g(oP~P!0pO#d*PO~O!h*QO~O!U*VO't*SO!S(pP~P!0pOk*cO|*ZO![*aO!]*YO!^*YO!h*QO#T*bO%W*]O'u!iO(U!jO~O!W*`O~P!2vO!f#tOg(QXy(QX|(QX(i(QX(j(QX!V(QX#X(QX~Od(QX#y(QX~P!3oOg*fO#X*eOd(PX!V(PX~O!V*gOd(OX~O't%|Od(OP~O!h*nO~O't(gO~Oi*rO|%vO!U#eO!X%wO!x]O#b#hO#c#eO't%eO!g(cP~O!a#rO#d*sO~OP$YOX$aOk#}Oy#vOz#wO|#xO!e$PO!f#tO!h#uO!l$YO#g#{O#h#|O#i#|O#j#|O#k$OO#l$PO#m$PO#n$`O#o$PO#q$QO#s$SO#u$UO#v$VO(RVO(b$WO(i#yO(j#zO~O^!ba!V!ba'k!ba'i!ba!S!ba!g!bao!ba!X!ba%a!ba!a!ba~P!6UOy#vOz#wO|#xO!f#tO!h#uO(RVOP!naX!nak!na!V!na!e!na!l!na#g!na#h!na#i!na#j!na#k!na#l!na#m!na#n!na#o!na#q!na#s!na#u!na#v!na(b!na(i!na(j!na~O^!na'k!na'i!na!S!na!g!nao!na!X!na%a!na!a!na~P!8oOy#vOz#wO|#xO!f#tO!h#uO(RVOP!paX!pak!pa!V!pa!e!pa!l!pa#g!pa#h!pa#i!pa#j!pa#k!pa#l!pa#m!pa#n!pa#o!pa#q!pa#s!pa#u!pa#v!pa(b!pa(i!pa(j!pa~O^!pa'k!pa'i!pa!S!pa!g!pao!pa!X!pa%a!pa!a!pa~P!;YOg*{O!X'QO%a*zO'}%OO~O!a*}O^'|X!X'|X'k'|X!V'|X~O^%^O!XXO'k%^O~O!h%ZO'}%OO~O!h%ZO't%eO'}%OO~O!a#rO#d(iO~O%b+ZO't+VO'vTO'yUO!W(wP~O!V+[O](vX~O(U(oO~OX+`O~O]+aO~O!X%nO't%eO'u!iO](vP~O|%vO!U+eO!V'}O!X%wO't%eO!S(fP~Ol&|O|+gO!U+fO'vTO'yUO(U(oO~O!W(hP~P!@xO!V+hO^(sX'k(sX~O#X+lO'}%OO~Og+oO!X$yO'}%OO~O!X+qO~Oy+sO!XXO~O!t+xO~Ob+}O~O't#jO!W(uP~Ob%lO~O%b!OO't%|O~P<eOX,TO],SO~OPYOQYOaxObwOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!csO!hZO!kYO!lYO!mYO!otO!quO!tvO!x]O$UfO%`{O'vTO'yUO(RVO(a[O(niO~O!X!cO$Q!hO't!bO~P!C]O],SO^%^O'k%^O~O^,XO#p,ZO%d,ZO%e,ZO~P%QO!h&aO~O&S,`O~O!X,bO~O&e,dO&g,eOP&baQ&baV&ba^&baa&bab&bai&bak&bal&bam&bas&bau&baw&ba|&ba!Q&ba!R&ba!X&ba!c&ba!h&ba!k&ba!l&ba!m&ba!o&ba!q&ba!t&ba!x&ba#p&ba$Q&ba$U&ba%`&ba%b&ba%d&ba%e&ba%h&ba%j&ba%m&ba%n&ba%p&ba%|&ba&S&ba&U&ba&W&ba&Y&ba&]&ba&c&ba&i&ba&k&ba&m&ba&o&ba&q&ba'i&ba't&ba'v&ba'y&ba(R&ba(a&ba(n&ba!W&ba&Z&ba_&ba&`&ba~O't,jO~O!V{X!V!_X!W{X!W!_X!a{X!a!_X!h!_X#X{X'}!_X~O!a,oO#X,nO!V#aX!V(ZX!W#aX!W(ZX!a(ZX!h(ZX'}(ZX~O!a,qO!h%ZO'}%OO!V!ZX!W!ZX~Ol!kO|!lO'vTO'yUO(U!jO~OP9lOQ9lOa;]Ob!fOikOk9lOlkOmkOskOu9lOw9lO|WO!QkO!RkO!X!cO!c9oO!hZO!k9lO!l9lO!m9lO!o9pO!q9qO!t!eO$Q!hO$UfO'vTO'yUO(RVO(a[O(n;ZO~O't:bO~P!LrO!V,uO!W(YX~O!W,wO~O!a,oO#X,nO!V#aX!W#aX~O!V,xO!W(hX~O!W,zO~O!],{O!^,{O'u!iO~P!LaO!W-OO~P'TOg-RO!X'QO~O!S-WO~Ol!wa![!wa!]!wa!^!wa!|!wa!}!wa#O!wa#P!wa#Q!wa#T!wa#U!wa'u!wa'v!wa'y!wa(U!wa(a!wa~P!!pO!l-]O#X-ZO~PB`O!]-_O!^-_O'u!iO~PCOO^%^O#X-ZO'k%^O~O^%^O!a#rO#X-ZO'k%^O~O^%^O!a#rO!l-]O#X-ZO'k%^O(b'bO~O'p'jO'q'jO'r-dO~Oo-eO~O!S&|a!V&|a~P!6UO!U-iO!S&|X!V&|X~P%QO!V'vO!S(Xa~O!S(Xa~PFrO!V'}O!S(fa~O|%vO!U-mO!X%wO't%eO!S'SX!V'SX~O#X-oO!V(da!g(da^(da'k(da~O!a#rO~P#&xO!V(ZO!g(ca~O|%vO!X%wO#c-sO't%eO~Oi-xO|%vO!U-uO!X%wO!x]O#b-wO#c-uO't%eO!V'VX!g'VX~Oz-|O!h#uO~Og.PO!X'QO%a.OO'}%OO~O^#[i!V#[i'k#[i'i#[i!S#[i!g#[io#[i!X#[i%a#[i!a#[i~P!6UOg;gOy)qO|)rO(i)tO(j)vO~O#d#Wa^#Wa#X#Wa'k#Wa!V#Wa!g#Wa!X#Wa!S#Wa~P#)tO#d(QXP(QXX(QX^(QXk(QXz(QX!e(QX!h(QX!l(QX#g(QX#h(QX#i(QX#j(QX#k(QX#l(QX#m(QX#n(QX#o(QX#q(QX#s(QX#u(QX#v(QX'k(QX(R(QX(b(QX!g(QX!S(QX'i(QXo(QX!X(QX%a(QX!a(QX~P!3oO!V.YOd([X~P!0ROd.[O~O!V.]O!g(]X~P!6UO!g.`O~O!S.bO~OP$YOy#vOz#wO|#xO!f#tO!h#uO!l$YO(RVOX#fi^#fik#fi!V#fi!e#fi#h#fi#i#fi#j#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi'k#fi(b#fi(i#fi(j#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~O#g#fi~P#-pO#g#{O~P#-pOP$YOy#vOz#wO|#xO!f#tO!h#uO!l$YO#g#{O#h#|O#i#|O#j#|O(RVOX#fi^#fi!V#fi!e#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi'k#fi(b#fi(i#fi(j#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~Ok#fi~P#0bOk#}O~P#0bOP$YOk#}Oy#vOz#wO|#xO!f#tO!h#uO!l$YO#g#{O#h#|O#i#|O#j#|O#k$OO(RVO^#fi!V#fi#q#fi#s#fi#u#fi#v#fi'k#fi(b#fi(i#fi(j#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~OX#fi!e#fi#l#fi#m#fi#n#fi#o#fi~P#3SOX$aO!e$PO#l$PO#m$PO#n$`O#o$PO~P#3SOP$YOX$aOk#}Oy#vOz#wO|#xO!e$PO!f#tO!h#uO!l$YO#g#{O#h#|O#i#|O#j#|O#k$OO#l$PO#m$PO#n$`O#o$PO#q$QO(RVO^#fi!V#fi#s#fi#u#fi#v#fi'k#fi(b#fi(j#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~O(i#fi~P#6TO(i#yO~P#6TOP$YOX$aOk#}Oy#vOz#wO|#xO!e$PO!f#tO!h#uO!l$YO#g#{O#h#|O#i#|O#j#|O#k$OO#l$PO#m$PO#n$`O#o$PO#q$QO#s$SO(RVO(i#yO^#fi!V#fi#u#fi#v#fi'k#fi(b#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~O(j#fi~P#8uO(j#zO~P#8uOP$YOX$aOk#}Oy#vOz#wO|#xO!e$PO!f#tO!h#uO!l$YO#g#{O#h#|O#i#|O#j#|O#k$OO#l$PO#m$PO#n$`O#o$PO#q$QO#s$SO#u$UO(RVO(i#yO(j#zO~O^#fi!V#fi#v#fi'k#fi(b#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~P#;gOPYXXYXkYXyYXzYX|YX!eYX!fYX!hYX!lYX#XYX#dcX#gYX#hYX#iYX#jYX#kYX#lYX#mYX#nYX#oYX#qYX#sYX#uYX#vYX#{YX(RYX(bYX(iYX(jYX!VYX!WYX~O#yYX~P#>QOP$YOX:TOk9wOy#vOz#wO|#xO!e9yO!f#tO!h#uO!l$YO#g9uO#h9vO#i9vO#j9vO#k9xO#l9yO#m9yO#n:SO#o9yO#q9zO#s9|O#u:OO#v:PO(RVO(b$WO(i#yO(j#zO~O#y.dO~P#@_O#X:UO#{:UO#y(WX!W(WX~PNlO^'Ya!V'Ya'k'Ya'i'Ya!g'Ya!S'Yao'Ya!X'Ya%a'Ya!a'Ya~P!6UOP#fiX#fi^#fik#fiz#fi!V#fi!e#fi!f#fi!h#fi!l#fi#g#fi#h#fi#i#fi#j#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi'k#fi(R#fi(b#fi'i#fi!S#fi!g#fio#fi!X#fi%a#fi!a#fi~P#)tO^#zi!V#zi'k#zi'i#zi!S#zi!g#zio#zi!X#zi%a#zi!a#zi~P!6UO$W.iO$Y.iO~O$W.jO$Y.jO~O!a)YO#X.kO!X$^X$T$^X$W$^X$Y$^X$a$^X~O!U.lO~O!X)]O$T.nO$W)[O$Y)[O$a.oO~O!V:QO!W(VX~P#@_O!W.pO~O!a)YO$a(kX~O$a.rO~Oq)lO(S)mO(T.uO~Ol.xO!S.yO'vTO'yUO~O!VcX!acX!gcX!g$sX(bcX~P!.xO!g/PO~P#)tO!V/QO!a#rO(b'bO!g(oX~O!g/VO~O!U)}O't%eO!g(oP~O#d/XO~O!S$sX!V$sX!a$zX~P!.xO!V/YO!S(pX~P#)tO!a/[O~O!S/^O~Ok/bO!a#rO!h%ZO'}%OO(b'bO~O't/dO~O!a*}O~O^%^O!V/hO'k%^O~O!W/jO~P!2vO!]/kO!^/kO'u!iO(U!jO~O|/mO(U!jO~O#T/nO~O't%|Od'_X!V'_X~O!V*gOd(Oa~Od/sO~Oy/tOz/tO|/uOgva(iva(jva!Vva#Xva~Odva#yva~P#L|Oy)qO|)rOg$la(i$la(j$la!V$la#X$la~Od$la#y$la~P#MrOy)qO|)rOg$na(i$na(j$na!V$na#X$na~Od$na#y$na~P#NeO#d/wO~Od$|a!V$|a#X$|a#y$|a~P!0RO!a#rO~O#d/zO~Oy#vOz#wO|#xO!f#tO!h#uO(RVOP!niX!nik!ni!V!ni!e!ni!l!ni#g!ni#h!ni#i!ni#j!ni#k!ni#l!ni#m!ni#n!ni#o!ni#q!ni#s!ni#u!ni#v!ni(b!ni(i!ni(j!ni~O^!ni'k!ni'i!ni!S!ni!g!nio!ni!X!ni%a!ni!a!ni~P$ wOg.PO!X'QO%a.OO~Oi0RO't0QO~P!0sO!a*}O^'|a!X'|a'k'|a!V'|a~O#d0XO~OXYX!VcX!WcX~O!V0YO!W(wX~O!W0[O~OX0]O~O't+VO'vTO'yUO~O!X%nO't%eO]'gX!V'gX~O!V+[O](va~O!g0bO~P!6UOX0eO~O]0fO~O!V+hO^(sa'k(sa~O#X0lO~Og0oO!X$yO~O(U(oO!W(tP~Og0xO!X0uO%a0wO'}%OO~OX1SO!V1QO!W(uX~O!W1TO~O]1VO^%^O'k%^O~O't#jO'vTO'yUO~O#X$bO#{$bOP(WXX(WXk(WXy(WXz(WX|(WX!V(WX!e(WX!h(WX!l(WX#g(WX#h(WX#i(WX#j(WX#k(WX#l(WX#m(WX#n(WX#q(WX#s(WX#u(WX#v(WX(R(WX(b(WX(i(WX(j(WX~O#o1YO&Q1ZO^(WX!f(WX~P$(xO#X$bO#o1YO&Q1ZO~O^1[O~P%QO^1^O~O&Z1bOP&XiQ&XiV&Xi^&Xia&Xib&Xii&Xik&Xil&Xim&Xis&Xiu&Xiw&Xi|&Xi!Q&Xi!R&Xi!X&Xi!c&Xi!h&Xi!k&Xi!l&Xi!m&Xi!o&Xi!q&Xi!t&Xi!x&Xi#p&Xi$Q&Xi$U&Xi%`&Xi%b&Xi%d&Xi%e&Xi%h&Xi%j&Xi%m&Xi%n&Xi%p&Xi%|&Xi&S&Xi&U&Xi&W&Xi&Y&Xi&]&Xi&c&Xi&i&Xi&k&Xi&m&Xi&o&Xi&q&Xi'i&Xi't&Xi'v&Xi'y&Xi(R&Xi(a&Xi(n&Xi!W&Xi_&Xi&`&Xi~O_1hO!W1fO&`1gO~P`O!XXO!h1jO~O&g,eOP&biQ&biV&bi^&bia&bib&bii&bik&bil&bim&bis&biu&biw&bi|&bi!Q&bi!R&bi!X&bi!c&bi!h&bi!k&bi!l&bi!m&bi!o&bi!q&bi!t&bi!x&bi#p&bi$Q&bi$U&bi%`&bi%b&bi%d&bi%e&bi%h&bi%j&bi%m&bi%n&bi%p&bi%|&bi&S&bi&U&bi&W&bi&Y&bi&]&bi&c&bi&i&bi&k&bi&m&bi&o&bi&q&bi'i&bi't&bi'v&bi'y&bi(R&bi(a&bi(n&bi!W&bi&Z&bi_&bi&`&bi~O!S1pO~O!V!Za!W!Za~P#@_Ol!kO|!lO!U1vO(U!jO!V&}X!W&}X~P?fO!V,uO!W(Ya~O!V'TX!W'TX~P!@xO!V,xO!W(ha~O!W1}O~P'TO^%^O#X2WO'k%^O~O^%^O!a#rO#X2WO'k%^O~O^%^O!a#rO!l2[O#X2WO'k%^O(b'bO~O^%^O'k%^O~P!6UO!V$^Oo$ka~O!S&|i!V&|i~P!6UO!V'vO!S(Xi~O!V'}O!S(fi~O!S(gi!V(gi~P!6UO!V(di!g(di^(di'k(di~P!6UO#X2^O!V(di!g(di^(di'k(di~O!V(ZO!g(ci~O|%vO!X%wO!x]O#b2cO#c2bO't%eO~O|%vO!X%wO#c2bO't%eO~Og2jO!X'QO%a2iO~Og2jO!X'QO%a2iO'}%OO~O#dvaPvaXva^vakva!eva!fva!hva!lva#gva#hva#iva#jva#kva#lva#mva#nva#ova#qva#sva#uva#vva'kva(Rva(bva!gva!Sva'ivaova!Xva%ava!ava~P#L|O#d$laP$laX$la^$lak$laz$la!e$la!f$la!h$la!l$la#g$la#h$la#i$la#j$la#k$la#l$la#m$la#n$la#o$la#q$la#s$la#u$la#v$la'k$la(R$la(b$la!g$la!S$la'i$lao$la!X$la%a$la!a$la~P#MrO#d$naP$naX$na^$nak$naz$na!e$na!f$na!h$na!l$na#g$na#h$na#i$na#j$na#k$na#l$na#m$na#n$na#o$na#q$na#s$na#u$na#v$na'k$na(R$na(b$na!g$na!S$na'i$nao$na!X$na%a$na!a$na~P#NeO#d$|aP$|aX$|a^$|ak$|az$|a!V$|a!e$|a!f$|a!h$|a!l$|a#g$|a#h$|a#i$|a#j$|a#k$|a#l$|a#m$|a#n$|a#o$|a#q$|a#s$|a#u$|a#v$|a'k$|a(R$|a(b$|a!g$|a!S$|a'i$|a#X$|ao$|a!X$|a%a$|a!a$|a~P#)tO^#[q!V#[q'k#[q'i#[q!S#[q!g#[qo#[q!X#[q%a#[q!a#[q~P!6UOd'OX!V'OX~P!'^O!V.YOd([a~O!U2rO!V'PX!g'PX~P%QO!V.]O!g(]a~O!V.]O!g(]a~P!6UO!S2uO~O#y!ja!W!ja~PJ`O#y!ba!V!ba!W!ba~P#@_O#y!na!W!na~P!8oO#y!pa!W!pa~P!;YO!X3XO$UfO$_3YO~O!W3^O~Oo3_O~P#)tO^$hq!V$hq'k$hq'i$hq!S$hq!g$hqo$hq!X$hq%a$hq!a$hq~P!6UO!S3`O~Ol.xO'vTO'yUO~Oy)qO|)rO(j)vOg%Xi(i%Xi!V%Xi#X%Xi~Od%Xi#y%Xi~P$GeOy)qO|)rOg%Zi(i%Zi(j%Zi!V%Zi#X%Zi~Od%Zi#y%Zi~P$HWO(b$WO~P#)tO!U3cO't%eO!V'ZX!g'ZX~O!V/QO!g(oa~O!V/QO!a#rO!g(oa~O!V/QO!a#rO(b'bO!g(oa~Od$ui!V$ui#X$ui#y$ui~P!0RO!U3kO't*SO!S']X!V']X~P!0pO!V/YO!S(pa~O!V/YO!S(pa~P#)tO!a#rO#o3sO~Ok3vO!a#rO(b'bO~Od(Pi!V(Pi~P!0RO#X3yOd(Pi!V(Pi~P!0RO!g3|O~O^$iq!V$iq'k$iq'i$iq!S$iq!g$iqo$iq!X$iq%a$iq!a$iq~P!6UO!V4QO!X(qX~P#)tO!f#tO~P3}O^$sX!X$sX%UYX'k$sX!V$sX~P!.xO%U4SO^hXghXyhX|hX!XhX'khX(ihX(jhX!VhX~O%U4SO~O%b4ZO't+VO'vTO'yUO!V'fX!W'fX~O!V0YO!W(wa~OX4_O~O]4`O~O!S4dO~O^%^O'k%^O~P#)tO!X$yO~P#)tO!V4iO#X4kO!W(tX~O!W4lO~Ol!kO|4mO![!uO!]!rO!^!rO!x9mO!|!mO!}!mO#O!mO#P!mO#Q!mO#T4rO#U!vO'u!iO'vTO'yUO(U!jO(a!pO~O!W4qO~P%!VOg4wO!X0uO%a4vO~Og4wO!X0uO%a4vO'}%OO~O't#jO!V'eX!W'eX~O!V1QO!W(ua~O'vTO'yUO(U5QO~O]5UO~O!g5XO~P%QO^5ZO~O^5ZO~P%QO#o5]O&Q5^O~PMOO_1hO!W5bO&`1gO~P`O!a5dO~O!a5fO!V(Zi!W(Zi!a(Zi!h(Zi'}(Zi~O!V#ai!W#ai~P#@_O#X5gO!V#ai!W#ai~O!V!Zi!W!Zi~P#@_O^%^O#X5pO'k%^O~O^%^O!a#rO#X5pO'k%^O~O!V(dq!g(dq^(dq'k(dq~P!6UO!V(ZO!g(cq~O|%vO!X%wO#c5wO't%eO~O!X'QO%a5zO~Og5}O!X'QO%a5zO~O#d%XiP%XiX%Xi^%Xik%Xiz%Xi!e%Xi!f%Xi!h%Xi!l%Xi#g%Xi#h%Xi#i%Xi#j%Xi#k%Xi#l%Xi#m%Xi#n%Xi#o%Xi#q%Xi#s%Xi#u%Xi#v%Xi'k%Xi(R%Xi(b%Xi!g%Xi!S%Xi'i%Xio%Xi!X%Xi%a%Xi!a%Xi~P$GeO#d%ZiP%ZiX%Zi^%Zik%Ziz%Zi!e%Zi!f%Zi!h%Zi!l%Zi#g%Zi#h%Zi#i%Zi#j%Zi#k%Zi#l%Zi#m%Zi#n%Zi#o%Zi#q%Zi#s%Zi#u%Zi#v%Zi'k%Zi(R%Zi(b%Zi!g%Zi!S%Zi'i%Zio%Zi!X%Zi%a%Zi!a%Zi~P$HWO#d$uiP$uiX$ui^$uik$uiz$ui!V$ui!e$ui!f$ui!h$ui!l$ui#g$ui#h$ui#i$ui#j$ui#k$ui#l$ui#m$ui#n$ui#o$ui#q$ui#s$ui#u$ui#v$ui'k$ui(R$ui(b$ui!g$ui!S$ui'i$ui#X$uio$ui!X$ui%a$ui!a$ui~P#)tOd'Oa!V'Oa~P!0RO!V'Pa!g'Pa~P!6UO!V.]O!g(]i~O#y#[i!V#[i!W#[i~P#@_OP$YOy#vOz#wO|#xO!f#tO!h#uO!l$YO(RVOX#fik#fi!e#fi#h#fi#i#fi#j#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi#y#fi(b#fi(i#fi(j#fi!V#fi!W#fi~O#g#fi~P%0fO#g9uO~P%0fOP$YOy#vOz#wO|#xO!f#tO!h#uO!l$YO#g9uO#h9vO#i9vO#j9vO(RVOX#fi!e#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi#y#fi(b#fi(i#fi(j#fi!V#fi!W#fi~Ok#fi~P%2qOk9wO~P%2qOP$YOk9wOy#vOz#wO|#xO!f#tO!h#uO!l$YO#g9uO#h9vO#i9vO#j9vO#k9xO(RVO#q#fi#s#fi#u#fi#v#fi#y#fi(b#fi(i#fi(j#fi!V#fi!W#fi~OX#fi!e#fi#l#fi#m#fi#n#fi#o#fi~P%4|OX:TO!e9yO#l9yO#m9yO#n:SO#o9yO~P%4|OP$YOX:TOk9wOy#vOz#wO|#xO!e9yO!f#tO!h#uO!l$YO#g9uO#h9vO#i9vO#j9vO#k9xO#l9yO#m9yO#n:SO#o9yO#q9zO(RVO#s#fi#u#fi#v#fi#y#fi(b#fi(j#fi!V#fi!W#fi~O(i#fi~P%7hO(i#yO~P%7hOP$YOX:TOk9wOy#vOz#wO|#xO!e9yO!f#tO!h#uO!l$YO#g9uO#h9vO#i9vO#j9vO#k9xO#l9yO#m9yO#n:SO#o9yO#q9zO#s9|O(RVO(i#yO#u#fi#v#fi#y#fi(b#fi!V#fi!W#fi~O(j#fi~P%9sO(j#zO~P%9sOP$YOX:TOk9wOy#vOz#wO|#xO!e9yO!f#tO!h#uO!l$YO#g9uO#h9vO#i9vO#j9vO#k9xO#l9yO#m9yO#n:SO#o9yO#q9zO#s9|O#u:OO(RVO(i#yO(j#zO~O#v#fi#y#fi(b#fi!V#fi!W#fi~P%<OO^#wy!V#wy'k#wy'i#wy!S#wy!g#wyo#wy!X#wy%a#wy!a#wy~P!6UOg;hOy)qO|)rO(i)tO(j)vO~OP#fiX#fik#fiz#fi!e#fi!f#fi!h#fi!l#fi#g#fi#h#fi#i#fi#j#fi#k#fi#l#fi#m#fi#n#fi#o#fi#q#fi#s#fi#u#fi#v#fi#y#fi(R#fi(b#fi!V#fi!W#fi~P%>vO!f#tOP(QXX(QXg(QXk(QXy(QXz(QX|(QX!e(QX!h(QX!l(QX#g(QX#h(QX#i(QX#j(QX#k(QX#l(QX#m(QX#n(QX#o(QX#q(QX#s(QX#u(QX#v(QX#y(QX(R(QX(b(QX(i(QX(j(QX!V(QX!W(QX~O#y#zi!V#zi!W#zi~P#@_O#y!ni!W!ni~P$ wO!W6ZO~O!V'Ya!W'Ya~P#@_O!a#rO(b'bO!V'Za!g'Za~O!V/QO!g(oi~O!V/QO!a#rO!g(oi~Od$uq!V$uq#X$uq#y$uq~P!0RO!S']a!V']a~P#)tO!a6bO~O!V/YO!S(pi~P#)tO!V/YO!S(pi~O!S6fO~O!a#rO#o6kO~Ok6lO!a#rO(b'bO~O!S6nO~Od$wq!V$wq#X$wq#y$wq~P!0RO^$iy!V$iy'k$iy'i$iy!S$iy!g$iyo$iy!X$iy%a$iy!a$iy~P!6UO!V4QO!X(qa~O^#[y!V#[y'k#[y'i#[y!S#[y!g#[yo#[y!X#[y%a#[y!a#[y~P!6UOX6sO~O!V0YO!W(wi~O]6yO~O!a5fO~O(U(oO!V'bX!W'bX~O!V4iO!W(ta~OikO't7QO~P._O!W7TO~P%!VOl!kO|7UO'vTO'yUO(U!jO(a!pO~O!X0uO~O!X0uO%a7WO~Og7ZO!X0uO%a7WO~OX7`O!V'ea!W'ea~O!V1QO!W(ui~O!g7dO~O!g7eO~O!g7fO~O!g7fO~P%QO^7hO~O!a7kO~O!g7lO~O!V(gi!W(gi~P#@_O^%^O#X7tO'k%^O~O!V(dy!g(dy^(dy'k(dy~P!6UO!V(ZO!g(cy~O!X'QO%a7wO~O#d$uqP$uqX$uq^$uqk$uqz$uq!V$uq!e$uq!f$uq!h$uq!l$uq#g$uq#h$uq#i$uq#j$uq#k$uq#l$uq#m$uq#n$uq#o$uq#q$uq#s$uq#u$uq#v$uq'k$uq(R$uq(b$uq!g$uq!S$uq'i$uq#X$uqo$uq!X$uq%a$uq!a$uq~P#)tO#d$wqP$wqX$wq^$wqk$wqz$wq!V$wq!e$wq!f$wq!h$wq!l$wq#g$wq#h$wq#i$wq#j$wq#k$wq#l$wq#m$wq#n$wq#o$wq#q$wq#s$wq#u$wq#v$wq'k$wq(R$wq(b$wq!g$wq!S$wq'i$wq#X$wqo$wq!X$wq%a$wq!a$wq~P#)tO!V'Pi!g'Pi~P!6UO#y#[q!V#[q!W#[q~P#@_Oy/tOz/tO|/uOPvaXvagvakva!eva!fva!hva!lva#gva#hva#iva#jva#kva#lva#mva#nva#ova#qva#sva#uva#vva#yva(Rva(bva(iva(jva!Vva!Wva~Oy)qO|)rOP$laX$lag$lak$laz$la!e$la!f$la!h$la!l$la#g$la#h$la#i$la#j$la#k$la#l$la#m$la#n$la#o$la#q$la#s$la#u$la#v$la#y$la(R$la(b$la(i$la(j$la!V$la!W$la~Oy)qO|)rOP$naX$nag$nak$naz$na!e$na!f$na!h$na!l$na#g$na#h$na#i$na#j$na#k$na#l$na#m$na#n$na#o$na#q$na#s$na#u$na#v$na#y$na(R$na(b$na(i$na(j$na!V$na!W$na~OP$|aX$|ak$|az$|a!e$|a!f$|a!h$|a!l$|a#g$|a#h$|a#i$|a#j$|a#k$|a#l$|a#m$|a#n$|a#o$|a#q$|a#s$|a#u$|a#v$|a#y$|a(R$|a(b$|a!V$|a!W$|a~P%>vO#y$hq!V$hq!W$hq~P#@_O#y$iq!V$iq!W$iq~P#@_O!W8RO~O#y8SO~P!0RO!a#rO!V'Zi!g'Zi~O!a#rO(b'bO!V'Zi!g'Zi~O!V/QO!g(oq~O!S']i!V']i~P#)tO!V/YO!S(pq~O!S8YO~P#)tO!S8YO~Od(Py!V(Py~P!0RO!V'`a!X'`a~P#)tO^%Tq!X%Tq'k%Tq!V%Tq~P#)tOX8_O~O!V0YO!W(wq~O#X8cO!V'ba!W'ba~O!V4iO!W(ti~P#@_OPYXXYXkYXyYXzYX|YX!SYX!VYX!eYX!fYX!hYX!lYX#XYX#dcX#gYX#hYX#iYX#jYX#kYX#lYX#mYX#nYX#oYX#qYX#sYX#uYX#vYX#{YX(RYX(bYX(iYX(jYX~O!a%RX#o%RX~P&/vO!X0uO%a8gO~O'vTO'yUO(U8lO~O!V1QO!W(uq~O!g8oO~O!g8oO~P%QO!g8qO~O!g8rO~O#X8tO!V#ay!W#ay~O!V#ay!W#ay~P#@_O!X'QO%a8yO~O#y#wy!V#wy!W#wy~P#@_OP$uiX$uik$uiz$ui!e$ui!f$ui!h$ui!l$ui#g$ui#h$ui#i$ui#j$ui#k$ui#l$ui#m$ui#n$ui#o$ui#q$ui#s$ui#u$ui#v$ui#y$ui(R$ui(b$ui!V$ui!W$ui~P%>vOy)qO|)rO(j)vOP%XiX%Xig%Xik%Xiz%Xi!e%Xi!f%Xi!h%Xi!l%Xi#g%Xi#h%Xi#i%Xi#j%Xi#k%Xi#l%Xi#m%Xi#n%Xi#o%Xi#q%Xi#s%Xi#u%Xi#v%Xi#y%Xi(R%Xi(b%Xi(i%Xi!V%Xi!W%Xi~Oy)qO|)rOP%ZiX%Zig%Zik%Ziz%Zi!e%Zi!f%Zi!h%Zi!l%Zi#g%Zi#h%Zi#i%Zi#j%Zi#k%Zi#l%Zi#m%Zi#n%Zi#o%Zi#q%Zi#s%Zi#u%Zi#v%Zi#y%Zi(R%Zi(b%Zi(i%Zi(j%Zi!V%Zi!W%Zi~O#y$iy!V$iy!W$iy~P#@_O#y#[y!V#[y!W#[y~P#@_O!a#rO!V'Zq!g'Zq~O!V/QO!g(oy~O!S']q!V']q~P#)tO!S9QO~P#)tO!V0YO!W(wy~O!V4iO!W(tq~O!X0uO%a9XO~O!g9[O~O!X'QO%a9aO~OP$uqX$uqk$uqz$uq!e$uq!f$uq!h$uq!l$uq#g$uq#h$uq#i$uq#j$uq#k$uq#l$uq#m$uq#n$uq#o$uq#q$uq#s$uq#u$uq#v$uq#y$uq(R$uq(b$uq!V$uq!W$uq~P%>vOP$wqX$wqk$wqz$wq!e$wq!f$wq!h$wq!l$wq#g$wq#h$wq#i$wq#j$wq#k$wq#l$wq#m$wq#n$wq#o$wq#q$wq#s$wq#u$wq#v$wq#y$wq(R$wq(b$wq!V$wq!W$wq~P%>vOd%]!Z!V%]!Z#X%]!Z#y%]!Z~P!0RO!V'bq!W'bq~P#@_O!V#a!Z!W#a!Z~P#@_O#d%]!ZP%]!ZX%]!Z^%]!Zk%]!Zz%]!Z!V%]!Z!e%]!Z!f%]!Z!h%]!Z!l%]!Z#g%]!Z#h%]!Z#i%]!Z#j%]!Z#k%]!Z#l%]!Z#m%]!Z#n%]!Z#o%]!Z#q%]!Z#s%]!Z#u%]!Z#v%]!Z'k%]!Z(R%]!Z(b%]!Z!g%]!Z!S%]!Z'i%]!Z#X%]!Zo%]!Z!X%]!Z%a%]!Z!a%]!Z~P#)tOP%]!ZX%]!Zk%]!Zz%]!Z!e%]!Z!f%]!Z!h%]!Z!l%]!Z#g%]!Z#h%]!Z#i%]!Z#j%]!Z#k%]!Z#l%]!Z#m%]!Z#n%]!Z#o%]!Z#q%]!Z#s%]!Z#u%]!Z#v%]!Z#y%]!Z(R%]!Z(b%]!Z!V%]!Z!W%]!Z~P%>vOo(VX~P1gO'u!iO~P!)jO!ScX!VcX#XcX~P&/vOPYXXYXkYXyYXzYX|YX!VYX!VcX!eYX!fYX!hYX!lYX#XYX#XcX#dcX#gYX#hYX#iYX#jYX#kYX#lYX#mYX#nYX#oYX#qYX#sYX#uYX#vYX#{YX(RYX(bYX(iYX(jYX~O!acX!gYX!gcX(bcX~P&E^OP9lOQ9lOa;]Ob!fOikOk9lOlkOmkOskOu9lOw9lO|WO!QkO!RkO!XXO!c9oO!hZO!k9lO!l9lO!m9lO!o9pO!q9qO!t!eO$Q!hO$UfO't)PO'vTO'yUO(RVO(a[O(n;ZO~O!V:QO!W$ka~Oi%POk$qOl$pOm$pOs%QOu%ROw:WO|$xO!X$yO!c;bO!h$uO#c:^O$Q%VO$m:YO$o:[O$r%WO't(gO'vTO'yUO'}%OO(R$rO~O#p)WO~P&JSO!WYX!WcX~P&E^O#d9tO~O!a#rO#d9tO~O#X:UO~O#o9yO~O#X:`O!V(gX!W(gX~O#X:UO!V(eX!W(eX~O#d:aO~Od:cO~P!0RO#d:hO~O#d:iO~O!a#rO#d:jO~O!a#rO#d:aO~O#y:kO~P#@_O#d:lO~O#d:mO~O#d:nO~O#d:oO~O#d:pO~O#d:qO~O#y:rO~P!0RO#y:sO~P!0RO$U~!f!|!}#P#Q#T#b#c#n(n$m$o$r%U%`%a%b%h%j%m%n%p%r~'oR$U(n#h!R'm'u#il#g#jky'n(U'n't$W$Y$W~",
|
|
3695
|
+
goto: "$%Z({PPPP(|P)PP)aP*p.rPPPP5SPP5iP;d>iP>|P>|PPP>|P@lP>|P>|P>|P@pPP@uPA`PFUPPPFYPPPPFYIXPPPI_JYPFYPLgPPPPNuFYPPPFYPFYP!#TFYP!&g!'i!'rP!(e!(i!(ePPPPP!+r!'iPP!,`!-YP!/|FYFY!0R!3Z!7n!7n!;cPPP!;jFYPPPPPPPPPPP!>uP!@WPPFY!AePFYPFYFYFYFYPFY!BwPP!E}P!IPP!IT!I_!Ic!IcP!EzP!Ig!IgP!LiP!LmFYFY!Ls# t>|P>|P>|>|P##O>|>|#$x>|#'V>|#(y>|>|#)g#+c#+c#+g#+o#+c#+wP#+cP>|#,a>|#-i>|>|5SPPP#.tPP#/^#/^P#/^P#/s#/^PP#/yP#/pP#/p#0]#/p#0w#0}5P)P#1Q)PP#1X#1X#1XP)PP)PP)PP)PPP)PP#1_#1bP#1b)PP#1fP#1iP)PP)PP)PP)PP)PP)P)PPP#1o#1u#2P#2V#2]#2c#2i#2w#2}#3T#3_#3e#3o#4O#4U#4u#5X#5_#5e#5s#6Y#7j#7x#8O#8U#8[#8b#8l#8r#8x#9S#9f#9lPPPPPPPPPP#9rPPPPPPP#:f#=mP#>|#?T#?]PPPP#Cg#F]#Lr#Lu#Lx#Mq#Mt#Mw#NO#NWPP#N^#Nb$ Z$!Z$!_$!sPP$!w$!}$#RP$#U$#Y$#]$$R$$i$$n$$q$$t$$z$$}$%R$%VR!xRmpOXr!X#`%]&d&f&g&i,],b1b1eY!rQ'Q,}0u4pQ%ctQ%kwQ%rzQ&[!TS&x!c,uQ'W!fS'^!o!uS*Y$y*_Q+T%lQ+b%tQ+|&UQ,{'PQ-V'XQ-_'_Q/k*aQ1P+}R:_9p$zdOPWXYZrstu!X!^!l#O#S#V#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$^$b%]%c%p&]&`&d&f&g&i&m&u'S'd't'v'|(T(i(m(q)p*s+g,X,],b-R-Z-i-o.].d/u/z0X0x1Y1Z1[1^1b1e1g2W2^2r4m4w5Z5]5^5p7U7Z7h7tS#m]9m!r)R$X$j&y)e,n,q.l1v3X4k5g8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^Q*j%SQ+Y%nQ,O&XQ,V&aQ.S:VQ0O*{Q0S*}Q0_+ZQ1X,TQ2f.PQ4Y0YQ5O1QQ5|2jQ6S:WQ6u4ZR7z5}&xkOPWXYZrstu!X!^!l#O#S#V#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$X$^$b$j%]%c%p&]&`&a&d&f&g&i&m&u&y'S'd't'v'|(T(i(m(q)e)p*s*{+g,X,],b,n,q-R-Z-i-o.P.].d.l/u/z0X0x1Y1Z1[1^1b1e1g1v2W2^2j2r3X4k4m4w5Z5]5^5g5p5}7U7Z7h7t8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^t!kQ!o!r!u!v&x'P'Q'^'_'`,u,{,}-_0u4p4r$Y$pi#r#t$`$a$u$x%T%U%Y)l)u)w)x*P*V*e*f*z*}+l+o.O.Y/X/Y/[/w0l0o0w2i3a3k3s3y4Q4S4v5z6b6k7W7w8S8g8y9X9a:S:T:X:Y:Z:[:]:^:d:e:f:g:h:i:l:m:n:o:r:s;Z;c;d;g;hQ%uzQ&v!cS&|%w,xQ+Y%nS.x)r.zQ/v*nQ0_+ZQ0d+aQ1W,SQ1X,TQ4Y0YQ4c0fQ5R1SQ5S1VQ6u4ZQ6x4`Q7c5UQ8b6yR8m7`pmOXr!T!X#`%]&Z&d&f&g&i,],b1b1eR,Q&]&r^OPXYrstux!X!^!g!l#O#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$X$^$b$j%]%c%p&]&`&a&d&f&g&i&m&u'S'd'v'|(T(i(m(q)e)p*s*{+g,X,],b,n,q-R-Z-i-o.P.].d.l/u/z0X0x1Y1Z1[1^1b1e1g1v2W2^2j2r3X4k4m4w5Z5]5^5g5p5}7U7Z7h7t8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;];^[#XWZ#S#V&y'tQ%fvQ%jwS%oz%t!U%x|}#d#e#h%Z%v'}(X(Y(Z+e+f+h,Z,o-m-s-t-u-w1j2b2c5f5wQ&Q!RQ'T!eQ'V!fQ(b#oS)|$u*QS+S%k%lQ+W%nQ+w&SQ+{&US-U'W'XQ.R(cQ/U)}Q0W+TQ0^+ZQ0`+[Q0c+`Q0z+xS1O+|+}Q2S-VQ3b/QQ4X0YQ4]0]Q4b0eQ4}1PQ6_3cQ6t4ZQ6w4_Q8^6sR9S8_v$wi#t%T%U%Y)u)w*P*e*f.Y/X/w3a3y8S;Z;c;d!S%hw!f!q%j%k%l&w'V'W'X']'g*X+S+T,r-U-V-^/c0W1{2S2Z3uQ*|%fQ+m%}Q+p&OQ+z&UQ.Q(bQ0y+wU0}+{+|+}Q2k.RQ4x0zS4|1O1PQ7_4}!z;_#r$`$a$u$x)l)x*V*z*}+l+o.O/Y/[0l0o0w2i3k3s4Q4S4v5z6b6k7W7w8g8y9X9a:X:Z:]:d:f:h:l:n:r;g;hg;`:S:T:Y:[:^:e:g:i:m:o:sW$|i%O*g;ZS%}!O&ZQ&O!PQ&P!QR+k%{$Z${i#r#t$`$a$u$x%T%U%Y)l)u)w)x*P*V*e*f*z*}+l+o.O.Y/X/Y/[/w0l0o0w2i3a3k3s3y4Q4S4v5z6b6k7W7w8S8g8y9X9a:S:T:X:Y:Z:[:]:^:d:e:f:g:h:i:l:m:n:o:r:s;Z;c;d;g;hT)m$r)nV*k%S:V:WU&|!c%w,xS(p#v#wQ+_%qS-z(^(_Q0p+qQ3z/tR6}4i&xkOPWXYZrstu!X!^!l#O#S#V#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$X$^$b$j%]%c%p&]&`&a&d&f&g&i&m&u&y'S'd't'v'|(T(i(m(q)e)p*s*{+g,X,],b,n,q-R-Z-i-o.P.].d.l/u/z0X0x1Y1Z1[1^1b1e1g1v2W2^2j2r3X4k4m4w5Z5]5^5g5p5}7U7Z7h7t8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^$i$]c#U#a%a%b%d's'y(e(l(t(u(v(w(x(y(z({(|(})O)Q)T)X)c*x+^,s-b-g-l-n.X._.c.e.f.g.v/x1q1t2U2]2q2v2w2x2y2z2{2|2}3O3P3Q3R3S3V3W3]4O4V5i5o5t6Q6R6W6X7P7n7r7{8P8Q8v9U9]9n;QT#PV#Q&ykOPWXYZrstu!X!^!l#O#S#V#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$X$^$b$j%]%c%p&]&`&a&d&f&g&i&m&u&y'S'd't'v'|(T(i(m(q)e)p*s*{+g,X,],b,n,q-R-Z-i-o.P.].d.l/u/z0X0x1Y1Z1[1^1b1e1g1v2W2^2j2r3X4k4m4w5Z5]5^5g5p5}7U7Z7h7t8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^Q&z!cR1w,uv!kQ!c!o!r!u!v&x'P'Q'^'_'`,u,{,}-_0u4p4rS*X$y*_S/c*Y*aQ/l*bQ0r+sQ3u/kR3x/nlpOXr!X#`%]&d&f&g&i,],b1b1eQ&k![Q'h!tS(d#q9tQ+Q%iQ+u&QQ+v&RQ-S'UQ-a'aS.W(i:aS/y*s:jQ0U+RQ0t+tQ1i,dQ1k,eQ1s,pQ2Q-TQ2T-XS4P/z:pQ4T0VS4W0X:qQ5h1uQ5l2RQ5q2YQ6r4UQ7o5jQ7p5mQ7s5rR8s7l$d$[c#U#a%b%d's'y(e(l(t(u(v(w(x(y(z({(|(})O)Q)T)X)c*x+^,s-b-g-l-n.X._.c.f.g.v/x1q1t2U2]2q2v2w2x2y2z2{2|2}3O3P3Q3R3S3V3W3]4O4V5i5o5t6Q6R6W6X7P7n7r7{8P8Q8v9U9]9n;QS(a#l'ZU*d$z(h3US*w%a.eQ2g0OQ5y2fQ7y5|R8z7z$d$Zc#U#a%b%d's'y(e(l(t(u(v(w(x(y(z({(|(})O)Q)T)X)c*x+^,s-b-g-l-n.X._.c.f.g.v/x1q1t2U2]2q2v2w2x2y2z2{2|2}3O3P3Q3R3S3V3W3]4O4V5i5o5t6Q6R6W6X7P7n7r7{8P8Q8v9U9]9n;QS(`#l'ZS(r#w$[S*v%a.eS-{(_(aQ.h)SQ/{*wR2d-|&xkOPWXYZrstu!X!^!l#O#S#V#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$X$^$b$j%]%c%p&]&`&a&d&f&g&i&m&u&y'S'd't'v'|(T(i(m(q)e)p*s*{+g,X,],b,n,q-R-Z-i-o.P.].d.l/u/z0X0x1Y1Z1[1^1b1e1g1v2W2^2j2r3X4k4m4w5Z5]5^5g5p5}7U7Z7h7t8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^S#m]9mQ&f!VQ&g!WQ&i!YQ&j!ZR1a,`Q'R!eQ*y%fQ-Q'TS-}(b*|Q2O-PW2h.Q.R/}0PQ5k2PU5x2e2g2kS7v5y5{S8x7x7yS9_8w8zQ9g9`R9j9hU!sQ'Q,}T4n0u4p!O_OXZ`r!T!X#`#d%Z%]&Z&]&d&f&g&i(Z,],b-t1b1e]!mQ!o'Q,}0u4pT#m]9m%UyOPWXYZrstu!X!^!l#O#S#V#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$^$b%]%c%p&]&`&a&d&f&g&i&m&u'S'd't'v'|(T(i(m(q)p*s*{+g,X,],b-R-Z-i-o.P.].d/u/z0X0x1Y1Z1[1^1b1e1g2W2^2j2r4m4w5Z5]5^5p5}7U7Z7h7tS(p#v#wS-z(^(_!s:w$X$j&y)e,n,q.l1v3X4k5g8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^Y!qQ'Q,}0u4pQ']!oS'g!r!uS'i!v4rS-^'^'_Q-`'`R2Z-_Q'f!qS(V#c1_S-]']'iQ/T)|Q/a*XQ2[-`Q3g/US3p/b/lQ6^3bS6i3v3xQ8U6_R8]6lQ#sbQ'e!qS(U#c1_S(W#i*rQ*t%[Q+O%gQ+U%mU-[']'f'iQ-p(VQ/S)|Q/`*XQ/f*[Q0T+PQ0{+yS2X-]-`Q2a-xS3f/T/US3o/a/lQ3r/eQ3t/gQ4z0|Q5s2[Q6]3bQ6a3gS6e3p3xQ6j3wQ7]4{S8T6^6_Q8X6fQ8Z6iQ8j7^Q9O8UQ9P8YQ9R8]Q9Z8kQ9c9QQ:z:uQ;V;OR;W;PV!sQ'Q,}%UaOPWXYZrstu!X!^!l#O#S#V#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$^$b%]%c%p&]&`&a&d&f&g&i&m&u'S'd't'v'|(T(i(m(q)p*s*{+g,X,],b-R-Z-i-o.P.].d/u/z0X0x1Y1Z1[1^1b1e1g2W2^2j2r4m4w5Z5]5^5p5}7U7Z7h7tS#sx!g!r:t$X$j&y)e,n,q.l1v3X4k5g8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^R:z;]%UbOPWXYZrstu!X!^!l#O#S#V#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$^$b%]%c%p&]&`&a&d&f&g&i&m&u'S'd't'v'|(T(i(m(q)p*s*{+g,X,],b-R-Z-i-o.P.].d/u/z0X0x1Y1Z1[1^1b1e1g2W2^2j2r4m4w5Z5]5^5p5}7U7Z7h7tQ%[j!S%gw!f!q%j%k%l&w'V'W'X']'g*X+S+T,r-U-V-^/c0W1{2S2Z3uS%mx!gQ+P%hQ+y&UW0|+z+{+|+}U4{0}1O1PS7^4|4}Q8k7_!r:u$X$j&y)e,n,q.l1v3X4k5g8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^Q;O;[R;P;]$xeOPXYrstu!X!^!l#O#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$^$b%]%c%p&]&`&d&f&g&i&m&u'S'd'v'|(T(i(m(q)p*s*{+g,X,],b-R-Z-i-o.P.].d/u/z0X0x1Y1Z1[1^1b1e1g2W2^2j2r4m4w5Z5]5^5p5}7U7Z7h7tY#^WZ#S#V't!U%x|}#d#e#h%Z%v'}(X(Y(Z+e+f+h,Z,o-m-s-t-u-w1j2b2c5f5wQ,W&a!p:v$X$j)e,n,q.l1v3X4k5g8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^R:y&yS&}!c%wR1y,x$zdOPWXYZrstu!X!^!l#O#S#V#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$^$b%]%c%p&]&`&d&f&g&i&m&u'S'd't'v'|(T(i(m(q)p*s+g,X,],b-R-Z-i-o.].d/u/z0X0x1Y1Z1[1^1b1e1g2W2^2r4m4w5Z5]5^5p7U7Z7h7t!r)R$X$j&y)e,n,q.l1v3X4k5g8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^Q,V&aQ0O*{Q2f.PQ5|2jR7z5}!f$Rc#U%a's'y(e(l({(|(})O)T)X+^-b-g-l-n.X._.v/x2U2]2q3S4O4V5o5t6Q7r8v9n!T9{)Q)c,s.e1q1t2v3O3P3Q3R3V3]5i6R6W6X7P7n7{8P8Q9U9];Q!b$Tc#U%a's'y(e(l(})O)T)X+^-b-g-l-n.X._.v/x2U2]2q3S4O4V5o5t6Q7r8v9n!P9})Q)c,s.e1q1t2v3Q3R3V3]5i6R6W6X7P7n7{8P8Q9U9];Q!^$Xc#U%a's'y(e(l)T)X+^-b-g-l-n.X._.v/x2U2]2q3S4O4V5o5t6Q7r8v9nQ3a/Oz;^)Q)c,s.e1q1t2v3V3]5i6R6W6X7P7n7{8P8Q9U9];QQ;c;eR;d;f&xkOPWXYZrstu!X!^!l#O#S#V#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$X$^$b$j%]%c%p&]&`&a&d&f&g&i&m&u&y'S'd't'v'|(T(i(m(q)e)p*s*{+g,X,],b,n,q-R-Z-i-o.P.].d.l/u/z0X0x1Y1Z1[1^1b1e1g1v2W2^2j2r3X4k4m4w5Z5]5^5g5p5}7U7Z7h7t8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^S$kh$lR3Y.k'PgOPWXYZhrstu!X!^!l#O#S#V#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$X$^$b$j$l%]%c%p&]&`&a&d&f&g&i&m&u&y'S'd't'v'|(T(i(m(q)e)p*s*{+g,X,],b,n,q-R-Z-i-o.P.].d.k.l/u/z0X0x1Y1Z1[1^1b1e1g1v2W2^2j2r3X4k4m4w5Z5]5^5g5p5}7U7Z7h7t8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^T$gf$mQ$efS)[$h)`R)h$mT$ff$mT)^$h)`'PhOPWXYZhrstu!X!^!l#O#S#V#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$X$^$b$j$l%]%c%p&]&`&a&d&f&g&i&m&u&y'S'd't'v'|(T(i(m(q)e)p*s*{+g,X,],b,n,q-R-Z-i-o.P.].d.k.l/u/z0X0x1Y1Z1[1^1b1e1g1v2W2^2j2r3X4k4m4w5Z5]5^5g5p5}7U7Z7h7t8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^T$kh$lQ$nhR)g$l%UjOPWXYZrstu!X!^!l#O#S#V#`#k#q#u#x#{#|#}$O$P$Q$R$S$T$U$V$^$b%]%c%p&]&`&a&d&f&g&i&m&u'S'd't'v'|(T(i(m(q)p*s*{+g,X,],b-R-Z-i-o.P.].d/u/z0X0x1Y1Z1[1^1b1e1g2W2^2j2r4m4w5Z5]5^5p5}7U7Z7h7t!s;[$X$j&y)e,n,q.l1v3X4k5g8c8t9l9o9p9q9t9u9v9w9x9y9z9{9|9}:O:P:Q:U:_:`:a:c:j:k:p:q;^#alOPXZr!X!^!l#O#`#k#x$j%]&]&`&a&d&f&g&i&m&u'S(q)e*{+g,X,],b-R.P.l/u0x1Y1Z1[1^1b1e1g2j3X4m4w5Z5]5^5}7U7Z7hv$zi#t%T%U%Y)u)w*P*e*f.Y/X/w3a3y8S;Z;c;d!z(h#r$`$a$u$x)l)x*V*z*}+l+o.O/Y/[0l0o0w2i3k3s4Q4S4v5z6b6k7W7w8g8y9X9a:X:Z:]:d:f:h:l:n:r;g;hQ*o%WQ.w)qg3U:S:T:Y:[:^:e:g:i:m:o:sv$vi#t%T%U%Y)u)w*P*e*f.Y/X/w3a3y8S;Z;c;dQ*R$wS*[$y*_Q*p%XQ/g*]!z:|#r$`$a$u$x)l)x*V*z*}+l+o.O/Y/[0l0o0w2i3k3s4Q4S4v5z6b6k7W7w8g8y9X9a:X:Z:]:d:f:h:l:n:r;g;hf:}:S:T:Y:[:^:e:g:i:m:o:sQ;R;_Q;S;`Q;T;aR;U;bv$zi#t%T%U%Y)u)w*P*e*f.Y/X/w3a3y8S;Z;c;d!z(h#r$`$a$u$x)l)x*V*z*}+l+o.O/Y/[0l0o0w2i3k3s4Q4S4v5z6b6k7W7w8g8y9X9a:X:Z:]:d:f:h:l:n:r;g;hg3U:S:T:Y:[:^:e:g:i:m:o:slnOXr!X#`%]&d&f&g&i,],b1b1eQ*U$xQ,k&pQ,l&rR3j/Y$Y${i#r#t$`$a$u$x%T%U%Y)l)u)w)x*P*V*e*f*z*}+l+o.O.Y/X/Y/[/w0l0o0w2i3a3k3s3y4Q4S4v5z6b6k7W7w8S8g8y9X9a:S:T:X:Y:Z:[:]:^:d:e:f:g:h:i:l:m:n:o:r:s;Z;c;d;g;hQ+n&OQ0n+pQ4g0mR6|4hT*^$y*_S*^$y*_T4o0u4pS/e*Z4mT3w/m7UQ+O%gQ/f*[Q0T+PQ0{+yQ4z0|Q7]4{Q8j7^R9Z8kn)u$s(j*q/W/o/p2o3h3}6[6m8}:{;X;Y!W:d(f)V){*T.V.s/O/]/|0k0m2n3i3m4f4h6O6P6c6g6o6q8W8[9b;e;f]:e3T6V7|8{8|9kp)w$s(j*q.|/W/o/p2o3h3}6[6m8}:{;X;Y!Y:f(f)V){*T.V.s/O/]/|0k0m2l2n3i3m4f4h6O6P6c6g6o6q8W8[9b;e;f_:g3T6V7|7}8{8|9kpmOXr!T!X#`%]&Z&d&f&g&i,],b1b1eQ&W!SR,X&apmOXr!T!X#`%]&Z&d&f&g&i,],b1b1eR&W!SQ+r&PR0j+kqmOXr!T!X#`%]&Z&d&f&g&i,],b1b1eQ0v+wS4u0y0zU7V4s4t4xS8f7X7YS9V8e8hQ9d9WR9i9eQ&_!TR,R&ZR5R1SS%oz%tR0`+[Q&d!UR,]&eR,c&jT1c,b1eR,g&kQ,f&kR1l,gQ'k!wR-c'kQrOQ#`XT%`r#`Q!zTR'm!zQ!}UR'o!}Q)n$rR.t)nQ#QVR'q#QQ#TWU'w#T'x-jQ'x#UR-j'yQ,v&zR1x,vQ.Z(jR2p.ZQ.^(lS2s.^2tR2t._Q,}'QR1|,}Y!oQ'Q,}0u4pR'[!oS#ZW%vU(O#Z(P-kQ(P#[R-k'zQ,y&}R1z,yr`OXr!T!X#`%]&Z&]&d&f&g&i,],b1b1eS#dZ%ZU#n`#d-tR-t(ZQ([#fQ-q(WW-y([-q2_5uQ2_-rR5u2`Q)`$hR.m)`Q$lhR)f$lQ$_cU)U$_-f:RQ-f9nR:R)cQ/R)|W3d/R3e6`8VU3e/S/T/US6`3f3gR8V6a#m)s$s(f(j)V){*T*l*m*q.T.U.V.s.|.}/O/W/]/o/p/|0k0m2l2m2n2o3T3h3i3m3}4f4h6O6P6T6U6V6[6c6g6m6o6q7|7}8O8W8[8{8|8}9b9k:{;X;Y;e;fQ/Z*TU3l/Z3n6dQ3n/]R6d3mQ*_$yR/i*_Q*h$}R/r*hQ4R/|R6p4RQ+i%yR0i+iQ4j0pS7O4j8dR8d7PQ+t&QR0s+tQ4p0uR7S4pQ1R,OS5P1R7aR7a5RQ0Z+WW4[0Z4^6v8`Q4^0^Q6v4]R8`6wQ+]%oR0a+]Q1e,bR5a1eWqOXr#`Q&h!XQ*u%]Q,[&dQ,^&fQ,_&gQ,a&iQ1`,]S1c,b1eR5`1bQ%_oQ&l!]Q&o!_Q&q!`Q&s!aQ'c!qQ+Q%iQ+d%uQ+j%zQ,Q&_Q,i&nW-Y']'e'f'iQ-a'aQ/h*^Q0U+RS1U,R,UQ1m,hQ1n,kQ1o,lQ2T-XW2V-[-]-`-bQ4T0VQ4a0dQ4e0kQ4y0{Q5T1WQ5_1aU5n2U2X2[Q5q2YQ6r4UQ6z4cQ6{4fQ7R4oQ7[4zQ7b5SS7q5o5sQ7s5rQ8a6xQ8i7]Q8n7cQ8u7rQ9T8bQ9Y8jQ9^8vR9f9ZQ%iwQ'U!fQ'a!qU+R%j%k%lQ,p&wU-T'V'W'XS-X']'gQ/_*XS0V+S+TQ1u,rS2R-U-VQ2Y-^Q3q/cQ4U0WQ5j1{Q5m2SQ5r2ZR6h3uS$ti;ZR*i%OU$}i%O;ZR/q*gQ$siS(f#r*}Q(j#tS)V$`$aQ){$uQ*T$xQ*l%TQ*m%UQ*q%YQ.T:XQ.U:ZQ.V:]Q.s)lQ.|)uQ.})wQ/O)xQ/W*PQ/]*VQ/o*eQ/p*fh/|*z.O0w2i4v5z7W7w8g8y9X9aQ0k+lQ0m+oQ2l:dQ2m:fQ2n:hQ2o.YS3T:S:TQ3h/XQ3i/YQ3m/[Q3}/wQ4f0lQ4h0oQ6O:lQ6P:nQ6T:YQ6U:[Q6V:^Q6[3aQ6c3kQ6g3sQ6m3yQ6o4QQ6q4SQ7|:iQ7}:eQ8O:gQ8W6bQ8[6kQ8{:mQ8|:oQ8}8SQ9b:rQ9k:sQ:{;ZQ;X;cQ;Y;dQ;e;gR;f;hloOXr!X#`%]&d&f&g&i,],b1b1eQ!dPS#bZ#kQ&n!^U'Y!l4m7UQ'p#OQ(s#xQ)d$jS,U&]&`Q,Y&aQ,h&mQ,m&uQ-P'SQ.a(qQ.q)eQ0P*{Q0g+gQ1],XQ2P-RQ2g.PQ3[.lQ3{/uQ4t0xQ5V1YQ5W1ZQ5Y1[Q5[1^Q5c1gQ5y2jQ6Y3XQ7Y4wQ7g5ZQ7i5]Q7j5^Q7y5}Q8h7ZR8p7h#UcOPXZr!X!^!l#`#k#x%]&]&`&a&d&f&g&i&m&u'S(q*{+g,X,],b-R.P/u0x1Y1Z1[1^1b1e1g2j4m4w5Z5]5^5}7U7Z7hQ#UWQ#aYQ%asQ%btQ%duS's#S'vQ'y#VQ(e#qQ(l#uQ(t#{Q(u#|Q(v#}Q(w$OQ(x$PQ(y$QQ(z$RQ({$SQ(|$TQ(}$UQ)O$VQ)Q$XQ)T$^Q)X$bW)c$j)e.l3XQ*x%cQ+^%pS,s&y1vQ-b'dS-g't-iQ-l'|Q-n(TQ.X(iQ._(mQ.c9lQ.e9oQ.f9pQ.g9qQ.v)pQ/x*sQ1q,nQ1t,qQ2U-ZQ2]-oQ2q.]Q2v9tQ2w9uQ2x9vQ2y9wQ2z9xQ2{9yQ2|9zQ2}9{Q3O9|Q3P9}Q3Q:OQ3R:PQ3S.dQ3V:UQ3W:_Q3]:QQ4O/zQ4V0XQ5i:`Q5o2WQ5t2^Q6Q2rQ6R:aQ6W:cQ6X:jQ7P4kQ7n5gQ7r5pQ7{:kQ8P:pQ8Q:qQ8v7tQ9U8cQ9]8tQ9n#OR;Q;^R#WWR&{!cY!qQ'Q,}0u4pS&w!c,uQ']!oS'g!r!uS'i!v4rS,r&x'PS-^'^'_Q-`'`Q1{,{R2Z-_R(k#tR(n#uQ!dQT,|'Q,}]!nQ!o'Q,}0u4pQ#l]R'Z9mT#gZ%ZS#fZ%ZU%y|},ZU(W#d#e#hS-r(X(YQ-v(ZQ0h+hQ2`-sU2a-t-u-wS5v2b2cR7u5w`#YW#S#V%v't'}+e-mt#cZ|}#d#e#h%Z(X(Y(Z+h-s-t-u-w2b2c5wQ1_,ZQ1r,oQ5e1jQ7m5fT:x&y+fT#]W%vS#[W%vS'u#S'}S'z#V+eS,t&y+fT-h't-mT'O!c%wQ$hfR)j$mT)_$h)`R3Z.kT*O$u*QR*W$xQ/}*zQ2e.OQ4s0wQ5{2iQ7X4vQ7x5zQ8e7WQ8w7wQ9W8gQ9`8yQ9e9XR9h9alpOXr!X#`%]&d&f&g&i,],b1b1eQ&^!TR,Q&ZV%z|},ZR0q+qR,P&XQ%szR+c%tR+X%nT&b!U&eT&c!U&eT1d,b1e",
|
|
3696
|
+
nodeNames: "⚠ ArithOp ArithOp LineComment BlockComment Script ExportDeclaration export Star as VariableName String Escape from ; default FunctionDeclaration async function VariableDefinition > TypeParamList TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . ?. PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewExpression new TypeArgList CompareOp < ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies in const CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXStartTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast ArrowFunction TypeParamList SequenceExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",
|
|
3697
|
+
maxTerm: 364,
|
|
3698
|
+
context: trackNewline,
|
|
3699
|
+
nodeProps: [["group", -26, 6, 14, 16, 62, 199, 203, 206, 207, 209, 212, 215, 225, 227, 233, 235, 237, 239, 242, 248, 254, 256, 258, 260, 262, 264, 265, "Statement", -32, 10, 11, 25, 28, 29, 35, 45, 48, 49, 51, 56, 64, 72, 76, 78, 80, 81, 103, 104, 113, 114, 131, 134, 136, 137, 138, 139, 141, 142, 162, 163, 165, "Expression", -23, 24, 26, 30, 34, 36, 38, 166, 168, 170, 171, 173, 174, 175, 177, 178, 179, 181, 182, 183, 193, 195, 197, 198, "Type", -3, 84, 96, 102, "ClassItem"], ["openedBy", 31, "InterpolationStart", 50, "[", 54, "{", 69, "(", 143, "JSXStartTag", 155, "JSXStartTag JSXStartCloseTag"], ["closedBy", 33, "InterpolationEnd", 44, "]", 55, "}", 70, ")", 144, "JSXSelfCloseEndTag JSXEndTag", 160, "JSXEndTag"]],
|
|
3700
|
+
propSources: [jsHighlight],
|
|
3701
|
+
skippedNodes: [0, 3, 4, 268],
|
|
3702
|
+
repeatNodeCount: 33,
|
|
3703
|
+
tokenData: "$>y(CSR!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tu>PuvBavwDxwxGgxyMvyz! Qz{!![{|!%O|}!&]}!O!%O!O!P!'g!P!Q!1w!Q!R#0t!R![#3T![!]#@T!]!^#Aa!^!_#Bk!_!`#GS!`!a#In!a!b#N{!b!c$$z!c!}>P!}#O$&U#O#P$'`#P#Q$,w#Q#R$.R#R#S>P#S#T$/`#T#o$0j#o#p$4z#p#q$5p#q#r$7Q#r#s$8^#s$f%Z$f$g+g$g#BY>P#BY#BZ$9h#BZ$IS>P$IS$I_$9h$I_$I|>P$I|$I}$<s$I}$JO$<s$JO$JT>P$JT$JU$9h$JU$KV>P$KV$KW$9h$KW&FU>P&FU&FV$9h&FV;'S>P;'S;=`BZ<%l?HT>P?HT?HU$9h?HUO>P(n%d_$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$d&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$d&j'z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU'z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$d&j'wpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU'wpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX'wp'z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z(CS+rq$d&j'wp'z!b'm(;dOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z(CS.ST'x#S$d&j'n(;dO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c(CS.n_$d&j'wp'z!b'n(;dOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`/x`$d&j!l$Ip'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S1V`#q$Id$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S2d_#q$Id$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$2b3l_'v$(n$d&j'z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k*r4r_$d&j'z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k)`5vX$d&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q)`6jT$_#t$d&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#t6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y#t7bO$_#t#t7eP;=`<%l6y)`7kP;=`<%l5q*r7w]$_#t$d&j'z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}%W8uZ'z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p%W9oU$_#t'z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}%W:UP;=`<%l8p*r:[P;=`<%l4k#%|:hg$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}st%Ztu<Puw%Zwx(rx!^%Z!^!_*g!_!c%Z!c!}<P!}#O%Z#O#P&c#P#R%Z#R#S<P#S#T%Z#T#o<P#o#p*g#p$g%Z$g;'S<P;'S;=`=y<%lO<P#%|<[i$d&j(a!L^'wp'z!bOY%ZYZ&cZr%Zrs&}st%Ztu<Puw%Zwx(rx!Q%Z!Q![<P![!^%Z!^!_*g!_!c%Z!c!}<P!}#O%Z#O#P&c#P#R%Z#R#S<P#S#T%Z#T#o<P#o#p*g#p$g%Z$g;'S<P;'S;=`=y<%lO<P#%|=|P;=`<%l<P(CS>`k$d&j'wp'z!b(U!LY't&;d$W#tOY%ZYZ&cZr%Zrs&}st%Ztu>Puw%Zwx(rx}%Z}!O@T!O!Q%Z!Q![>P![!^%Z!^!_*g!_!c%Z!c!}>P!}#O%Z#O#P&c#P#R%Z#R#S>P#S#T%Z#T#o>P#o#p*g#p$g%Z$g;'S>P;'S;=`BZ<%lO>P+d@`k$d&j'wp'z!b$W#tOY%ZYZ&cZr%Zrs&}st%Ztu@Tuw%Zwx(rx}%Z}!O@T!O!Q%Z!Q![@T![!^%Z!^!_*g!_!c%Z!c!}@T!}#O%Z#O#P&c#P#R%Z#R#S@T#S#T%Z#T#o@T#o#p*g#p$g%Z$g;'S@T;'S;=`BT<%lO@T+dBWP;=`<%l@T(CSB^P;=`<%l>P%#SBl`$d&j'wp'z!b#i$IdOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Cn!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#SCy_$d&j#{$Id'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%DfETa(j%<v$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sv%ZvwFYwx(rx!^%Z!^!_*g!_!`Cn!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#SFe`$d&j#u$Id'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Cn!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$2bGp_'y$)`$d&j'wpOYHoYZIuZrHorsIuswHowxKVx!^Ho!^!_LX!_#OHo#O#PIu#P#oHo#o#pLX#p;'SHo;'S;=`Mp<%lOHo*QHv_$d&j'wpOYHoYZIuZrHorsIuswHowxKVx!^Ho!^!_LX!_#OHo#O#PIu#P#oHo#o#pLX#p;'SHo;'S;=`Mp<%lOHo)`IzX$d&jOwIuwx6cx!^Iu!^!_Jg!_#oIu#o#pJg#p;'SIu;'S;=`KP<%lOIu#tJjTOwJgwx7]x;'SJg;'S;=`Jy<%lOJg#tJ|P;=`<%lJg)`KSP;=`<%lIu*QK`]$_#t$d&j'wpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r$fL^Z'wpOYLXYZJgZrLXrsJgswLXwxMPx#OLX#O#PJg#P;'SLX;'S;=`Mj<%lOLX$fMWU$_#t'wpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)r$fMmP;=`<%lLX*QMsP;=`<%lHo(*QNR_!h(!b$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z!'l! ]_!gM|$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'+h!!ib$d&j'wp'z!b'u#)d#j$IdOY%ZYZ&cZr%Zrs&}sw%Zwx(rxz%Zz{!#q{!^%Z!^!_*g!_!`Cn!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S!#|`$d&j'wp'z!b#g$IdOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Cn!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&-O!%Z`$d&j'wp'z!bk&%`OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Cn!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&C[!&h_!V&;l$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS!'rc$d&j'wp'z!by'<nOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!(}!P!Q%Z!Q![!+g![!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z!'d!)Wa$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!*]!P!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z!'d!*h_!UMt$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!+rg$d&j'wp'z!bl$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!+g![!^%Z!^!_*g!_!g%Z!g!h!-Z!h#O%Z#O#P&c#P#R%Z#R#S!+g#S#X%Z#X#Y!-Z#Y#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!-dg$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx{%Z{|!.{|}%Z}!O!.{!O!Q%Z!Q![!0a![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!0a#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!/Uc$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!0a![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!0a#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!0lc$d&j'wp'z!bl$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!0a![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!0a#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS!2Sf$d&j'wp'z!b#h$IdOY!3hYZ&cZr!3hrs!4{sw!3hwx!C}xz!3hz{#$s{!P!3h!P!Q#&Y!Q!^!3h!^!_!Mh!_!`#-x!`!a#/_!a!}!3h!}#O##[#O#P!<w#P#o!3h#o#p!Mh#p;'S!3h;'S;=`#$m<%lO!3h(r!3sb$d&j'wp'z!b!RSOY!3hYZ&cZr!3hrs!4{sw!3hwx!C}x!P!3h!P!Q!Kh!Q!^!3h!^!_!Mh!_!}!3h!}#O##[#O#P!<w#P#o!3h#o#p!Mh#p;'S!3h;'S;=`#$m<%lO!3h(Q!5U`$d&j'z!b!RSOY!4{YZ&cZw!4{wx!6Wx!P!4{!P!Q!=o!Q!^!4{!^!_!?g!_!}!4{!}#O!Bn#O#P!<w#P#o!4{#o#p!?g#p;'S!4{;'S;=`!Cw<%lO!4{&n!6_^$d&j!RSOY!6WYZ&cZ!P!6W!P!Q!7Z!Q!^!6W!^!_!8g!_!}!6W!}#O!;U#O#P!<w#P#o!6W#o#p!8g#p;'S!6W;'S;=`!=i<%lO!6W&n!7ba$d&j!RSO!^&c!_#Z&c#Z#[!7Z#[#]&c#]#^!7Z#^#a&c#a#b!7Z#b#g&c#g#h!7Z#h#i&c#i#j!7Z#j#m&c#m#n!7Z#n#o&c#p;'S&c;'S;=`&w<%lO&cS!8lX!RSOY!8gZ!P!8g!P!Q!9X!Q!}!8g!}#O!9p#O#P!:o#P;'S!8g;'S;=`!;O<%lO!8gS!9^U!RS#Z#[!9X#]#^!9X#a#b!9X#g#h!9X#i#j!9X#m#n!9XS!9sVOY!9pZ#O!9p#O#P!:Y#P#Q!8g#Q;'S!9p;'S;=`!:i<%lO!9pS!:]SOY!9pZ;'S!9p;'S;=`!:i<%lO!9pS!:lP;=`<%l!9pS!:rSOY!8gZ;'S!8g;'S;=`!;O<%lO!8gS!;RP;=`<%l!8g&n!;Z[$d&jOY!;UYZ&cZ!^!;U!^!_!9p!_#O!;U#O#P!<P#P#Q!6W#Q#o!;U#o#p!9p#p;'S!;U;'S;=`!<q<%lO!;U&n!<UX$d&jOY!;UYZ&cZ!^!;U!^!_!9p!_#o!;U#o#p!9p#p;'S!;U;'S;=`!<q<%lO!;U&n!<tP;=`<%l!;U&n!<|X$d&jOY!6WYZ&cZ!^!6W!^!_!8g!_#o!6W#o#p!8g#p;'S!6W;'S;=`!=i<%lO!6W&n!=lP;=`<%l!6W(Q!=xi$d&j'z!b!RSOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#Z&}#Z#[!=o#[#]&}#]#^!=o#^#a&}#a#b!=o#b#g&}#g#h!=o#h#i&}#i#j!=o#j#m&}#m#n!=o#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!f!?nZ'z!b!RSOY!?gZw!?gwx!8gx!P!?g!P!Q!@a!Q!}!?g!}#O!Ap#O#P!:o#P;'S!?g;'S;=`!Bh<%lO!?g!f!@hb'z!b!RSOY'}Zw'}x#O'}#P#Z'}#Z#[!@a#[#]'}#]#^!@a#^#a'}#a#b!@a#b#g'}#g#h!@a#h#i'}#i#j!@a#j#m'}#m#n!@a#n;'S'};'S;=`(f<%lO'}!f!AuX'z!bOY!ApZw!Apwx!9px#O!Ap#O#P!:Y#P#Q!?g#Q;'S!Ap;'S;=`!Bb<%lO!Ap!f!BeP;=`<%l!Ap!f!BkP;=`<%l!?g(Q!Bu^$d&j'z!bOY!BnYZ&cZw!Bnwx!;Ux!^!Bn!^!_!Ap!_#O!Bn#O#P!<P#P#Q!4{#Q#o!Bn#o#p!Ap#p;'S!Bn;'S;=`!Cq<%lO!Bn(Q!CtP;=`<%l!Bn(Q!CzP;=`<%l!4{'`!DW`$d&j'wp!RSOY!C}YZ&cZr!C}rs!6Ws!P!C}!P!Q!EY!Q!^!C}!^!_!GQ!_!}!C}!}#O!JX#O#P!<w#P#o!C}#o#p!GQ#p;'S!C};'S;=`!Kb<%lO!C}'`!Eci$d&j'wp!RSOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#Z(r#Z#[!EY#[#](r#]#^!EY#^#a(r#a#b!EY#b#g(r#g#h!EY#h#i(r#i#j!EY#j#m(r#m#n!EY#n#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rt!GXZ'wp!RSOY!GQZr!GQrs!8gs!P!GQ!P!Q!Gz!Q!}!GQ!}#O!IZ#O#P!:o#P;'S!GQ;'S;=`!JR<%lO!GQt!HRb'wp!RSOY)rZr)rs#O)r#P#Z)r#Z#[!Gz#[#])r#]#^!Gz#^#a)r#a#b!Gz#b#g)r#g#h!Gz#h#i)r#i#j!Gz#j#m)r#m#n!Gz#n;'S)r;'S;=`*Z<%lO)rt!I`X'wpOY!IZZr!IZrs!9ps#O!IZ#O#P!:Y#P#Q!GQ#Q;'S!IZ;'S;=`!I{<%lO!IZt!JOP;=`<%l!IZt!JUP;=`<%l!GQ'`!J`^$d&j'wpOY!JXYZ&cZr!JXrs!;Us!^!JX!^!_!IZ!_#O!JX#O#P!<P#P#Q!C}#Q#o!JX#o#p!IZ#p;'S!JX;'S;=`!K[<%lO!JX'`!K_P;=`<%l!JX'`!KeP;=`<%l!C}(r!Ksk$d&j'wp'z!b!RSOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#Z%Z#Z#[!Kh#[#]%Z#]#^!Kh#^#a%Z#a#b!Kh#b#g%Z#g#h!Kh#h#i%Z#i#j!Kh#j#m%Z#m#n!Kh#n#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#W!Mq]'wp'z!b!RSOY!MhZr!Mhrs!?gsw!Mhwx!GQx!P!Mh!P!Q!Nj!Q!}!Mh!}#O#!U#O#P!:o#P;'S!Mh;'S;=`##U<%lO!Mh#W!Nse'wp'z!b!RSOY*gZr*grs'}sw*gwx)rx#O*g#P#Z*g#Z#[!Nj#[#]*g#]#^!Nj#^#a*g#a#b!Nj#b#g*g#g#h!Nj#h#i*g#i#j!Nj#j#m*g#m#n!Nj#n;'S*g;'S;=`+Z<%lO*g#W#!]Z'wp'z!bOY#!UZr#!Urs!Apsw#!Uwx!IZx#O#!U#O#P!:Y#P#Q!Mh#Q;'S#!U;'S;=`##O<%lO#!U#W##RP;=`<%l#!U#W##XP;=`<%l!Mh(r##e`$d&j'wp'z!bOY##[YZ&cZr##[rs!Bnsw##[wx!JXx!^##[!^!_#!U!_#O##[#O#P!<P#P#Q!3h#Q#o##[#o#p#!U#p;'S##[;'S;=`#$g<%lO##[(r#$jP;=`<%l##[(r#$pP;=`<%l!3h(CS#%Qb$d&j'wp'z!b'o(;d!RSOY!3hYZ&cZr!3hrs!4{sw!3hwx!C}x!P!3h!P!Q!Kh!Q!^!3h!^!_!Mh!_!}!3h!}#O##[#O#P!<w#P#o!3h#o#p!Mh#p;'S!3h;'S;=`#$m<%lO!3h(CS#&e_$d&j'wp'z!bR(;dOY#&YYZ&cZr#&Yrs#'dsw#&Ywx#*tx!^#&Y!^!_#,s!_#O#&Y#O#P#(f#P#o#&Y#o#p#,s#p;'S#&Y;'S;=`#-r<%lO#&Y(Bb#'m]$d&j'z!bR(;dOY#'dYZ&cZw#'dwx#(fx!^#'d!^!_#)w!_#O#'d#O#P#(f#P#o#'d#o#p#)w#p;'S#'d;'S;=`#*n<%lO#'d(AO#(mX$d&jR(;dOY#(fYZ&cZ!^#(f!^!_#)Y!_#o#(f#o#p#)Y#p;'S#(f;'S;=`#)q<%lO#(f(;d#)_SR(;dOY#)YZ;'S#)Y;'S;=`#)k<%lO#)Y(;d#)nP;=`<%l#)Y(AO#)tP;=`<%l#(f(<v#*OW'z!bR(;dOY#)wZw#)wwx#)Yx#O#)w#O#P#)Y#P;'S#)w;'S;=`#*h<%lO#)w(<v#*kP;=`<%l#)w(Bb#*qP;=`<%l#'d(Ap#*}]$d&j'wpR(;dOY#*tYZ&cZr#*trs#(fs!^#*t!^!_#+v!_#O#*t#O#P#(f#P#o#*t#o#p#+v#p;'S#*t;'S;=`#,m<%lO#*t(<U#+}W'wpR(;dOY#+vZr#+vrs#)Ys#O#+v#O#P#)Y#P;'S#+v;'S;=`#,g<%lO#+v(<U#,jP;=`<%l#+v(Ap#,pP;=`<%l#*t(=h#,|Y'wp'z!bR(;dOY#,sZr#,srs#)wsw#,swx#+vx#O#,s#O#P#)Y#P;'S#,s;'S;=`#-l<%lO#,s(=h#-oP;=`<%l#,s(CS#-uP;=`<%l#&Y%#W#.Vb$d&j#{$Id'wp'z!b!RSOY!3hYZ&cZr!3hrs!4{sw!3hwx!C}x!P!3h!P!Q!Kh!Q!^!3h!^!_!Mh!_!}!3h!}#O##[#O#P!<w#P#o!3h#o#p!Mh#p;'S!3h;'S;=`#$m<%lO!3h+h#/lb$T#t$d&j'wp'z!b!RSOY!3hYZ&cZr!3hrs!4{sw!3hwx!C}x!P!3h!P!Q!Kh!Q!^!3h!^!_!Mh!_!}!3h!}#O##[#O#P!<w#P#o!3h#o#p!Mh#p;'S!3h;'S;=`#$m<%lO!3h$/l#1Pp$d&j'wp'z!bl$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!+g!P!Q%Z!Q![#3T![!^%Z!^!_*g!_!g%Z!g!h!-Z!h#O%Z#O#P&c#P#R%Z#R#S#3T#S#U%Z#U#V#6_#V#X%Z#X#Y!-Z#Y#b%Z#b#c#5T#c#d#9g#d#l%Z#l#m#<i#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#3`k$d&j'wp'z!bl$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!+g!P!Q%Z!Q![#3T![!^%Z!^!_*g!_!g%Z!g!h!-Z!h#O%Z#O#P&c#P#R%Z#R#S#3T#S#X%Z#X#Y!-Z#Y#b%Z#b#c#5T#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#5`_$d&j'wp'z!bl$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#6hd$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#7v!R!S#7v!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#7v#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#8Rf$d&j'wp'z!bl$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#7v!R!S#7v!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#7v#S#b%Z#b#c#5T#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#9pc$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#:{!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#:{#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#;We$d&j'wp'z!bl$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#:{!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#:{#S#b%Z#b#c#5T#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#<rg$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#>Z![!^%Z!^!_*g!_!c%Z!c!i#>Z!i#O%Z#O#P&c#P#R%Z#R#S#>Z#S#T%Z#T#Z#>Z#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#>fi$d&j'wp'z!bl$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#>Z![!^%Z!^!_*g!_!c%Z!c!i#>Z!i#O%Z#O#P&c#P#R%Z#R#S#>Z#S#T%Z#T#Z#>Z#Z#b%Z#b#c#5T#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%Gh#@b_!a$b$d&j#y%<f'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Al_^l$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS#Bz^'}!*v!e'.r'wp'z!b$U)d(nSOY*gZr*grs'}sw*gwx)rx!P*g!P!Q#Cv!Q!^*g!^!_#Dl!_!`#F^!`#O*g#P;'S*g;'S;=`+Z<%lO*g(n#DPX$f&j'wp'z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g$Kh#DuZ#k$Id'wp'z!bOY*gZr*grs'}sw*gwx)rx!_*g!_!`#Eh!`#O*g#P;'S*g;'S;=`+Z<%lO*g$Kh#EqX#{$Id'wp'z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g$Kh#FgX#l$Id'wp'z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g%Gh#G_a#X%?x$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`!a#Hd!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#W#Ho_#d$Ih$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%Gh#I}adBf#l$Id$a#|$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`#KS!`!a#L^!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S#K__#l$Id$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S#Lia#k$Id$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Cn!`!a#Mn!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S#My`#k$Id$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Cn!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'+h$ Wc(b$Ip$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P$!c!P!^%Z!^!_*g!_!a%Z!a!b$#m!b#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'+`$!n_z'#p$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$#x`$d&j#v$Id'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Cn!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#&^$%V_!x!Ln$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(@^$&a_|(8n$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(n$'eZ$d&jO!^$(W!^!_$(n!_#i$(W#i#j$(s#j#l$(W#l#m$*f#m#o$(W#o#p$(n#p;'S$(W;'S;=`$,q<%lO$(W(n$(_T[#S$d&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#S$(sO[#S(n$(x[$d&jO!Q&c!Q![$)n![!^&c!_!c&c!c!i$)n!i#T&c#T#Z$)n#Z#o&c#o#p$,U#p;'S&c;'S;=`&w<%lO&c(n$)sZ$d&jO!Q&c!Q![$*f![!^&c!_!c&c!c!i$*f!i#T&c#T#Z$*f#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$*kZ$d&jO!Q&c!Q![$+^![!^&c!_!c&c!c!i$+^!i#T&c#T#Z$+^#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$+cZ$d&jO!Q&c!Q![$(W![!^&c!_!c&c!c!i$(W!i#T&c#T#Z$(W#Z#o&c#p;'S&c;'S;=`&w<%lO&c#S$,XR!Q![$,b!c!i$,b#T#Z$,b#S$,eS!Q![$,b!c!i$,b#T#Z$,b#q#r$(n(n$,tP;=`<%l$(W!'l$-S_!SM|$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$.^`#s$Id$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Cn!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&,v$/k_$d&j'wp'z!b(R&%WOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS$0yk$d&j'wp'z!b(U!LY't&;d$Y#tOY%ZYZ&cZr%Zrs&}st%Ztu$0juw%Zwx(rx}%Z}!O$2n!O!Q%Z!Q![$0j![!^%Z!^!_*g!_!c%Z!c!}$0j!}#O%Z#O#P&c#P#R%Z#R#S$0j#S#T%Z#T#o$0j#o#p*g#p$g%Z$g;'S$0j;'S;=`$4t<%lO$0j+d$2yk$d&j'wp'z!b$Y#tOY%ZYZ&cZr%Zrs&}st%Ztu$2nuw%Zwx(rx}%Z}!O$2n!O!Q%Z!Q![$2n![!^%Z!^!_*g!_!c%Z!c!}$2n!}#O%Z#O#P&c#P#R%Z#R#S$2n#S#T%Z#T#o$2n#o#p*g#p$g%Z$g;'S$2n;'S;=`$4n<%lO$2n+d$4qP;=`<%l$2n(CS$4wP;=`<%l$0j!5p$5TX!X!3l'wp'z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g%Df$5{a(i%<v$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Cn!`#O%Z#O#P&c#P#o%Z#o#p*g#p#q$#m#q;'S%Z;'S;=`+a<%lO%Z%#`$7__!W$I`o`$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(r$8i_!mS$d&j'wp'z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS$9y|$d&j'wp'z!b'm(;d(U!LY't&;d$W#tOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%Ztu>Puw%Zwx(rx}%Z}!O@T!O!Q%Z!Q![>P![!^%Z!^!_*g!_!c%Z!c!}>P!}#O%Z#O#P&c#P#R%Z#R#S>P#S#T%Z#T#o>P#o#p*g#p$f%Z$f$g+g$g#BY>P#BY#BZ$9h#BZ$IS>P$IS$I_$9h$I_$JT>P$JT$JU$9h$JU$KV>P$KV$KW$9h$KW&FU>P&FU&FV$9h&FV;'S>P;'S;=`BZ<%l?HT>P?HT?HU$9h?HUO>P(CS$=Uk$d&j'wp'z!b'n(;d(U!LY't&;d$W#tOY%ZYZ&cZr%Zrs&}st%Ztu>Puw%Zwx(rx}%Z}!O@T!O!Q%Z!Q![>P![!^%Z!^!_*g!_!c%Z!c!}>P!}#O%Z#O#P&c#P#R%Z#R#S>P#S#T%Z#T#o>P#o#p*g#p$g%Z$g;'S>P;'S;=`BZ<%lO>P",
|
|
3704
|
+
tokenizers: [noSemicolon, incdecToken, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, insertSemicolon, new LocalTokenGroup("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOq~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!O~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(T~~", 141, 326), new LocalTokenGroup("j~RQYZXz{^~^O'q~~aP!P!Qd~iO'r~~", 25, 308)],
|
|
3705
|
+
topRules: {
|
|
3706
|
+
"Script": [0, 5],
|
|
3707
|
+
"SingleExpression": [1, 266],
|
|
3708
|
+
"SingleClassItem": [2, 267]
|
|
3709
|
+
},
|
|
3710
|
+
dialects: {
|
|
3711
|
+
jsx: 12686,
|
|
3712
|
+
ts: 12688
|
|
3713
|
+
},
|
|
3714
|
+
dynamicPrecedences: {
|
|
3715
|
+
"76": 1,
|
|
3716
|
+
"78": 1,
|
|
3717
|
+
"163": 1,
|
|
3718
|
+
"191": 1
|
|
3719
|
+
},
|
|
3720
|
+
specialized: [{
|
|
3721
|
+
term: 312,
|
|
3722
|
+
get: value => spec_identifier[value] || -1
|
|
3723
|
+
}, {
|
|
3724
|
+
term: 328,
|
|
3725
|
+
get: value => spec_word[value] || -1
|
|
3726
|
+
}, {
|
|
3727
|
+
term: 67,
|
|
3728
|
+
get: value => spec_LessThan[value] || -1
|
|
3729
|
+
}],
|
|
3730
|
+
tokenPrec: 12712
|
|
3731
|
+
});
|
|
3732
|
+
|
|
3733
|
+
/**
|
|
3734
|
+
A collection of JavaScript-related
|
|
3735
|
+
[snippets](https://codemirror.net/6/docs/ref/#autocomplete.snippet).
|
|
3736
|
+
*/
|
|
3737
|
+
const snippets = [/*@__PURE__*/snippetCompletion("function ${name}(${params}) {\n\t${}\n}", {
|
|
3738
|
+
label: "function",
|
|
3739
|
+
detail: "definition",
|
|
3740
|
+
type: "keyword"
|
|
3741
|
+
}), /*@__PURE__*/snippetCompletion("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n\t${}\n}", {
|
|
3742
|
+
label: "for",
|
|
3743
|
+
detail: "loop",
|
|
3744
|
+
type: "keyword"
|
|
3745
|
+
}), /*@__PURE__*/snippetCompletion("for (let ${name} of ${collection}) {\n\t${}\n}", {
|
|
3746
|
+
label: "for",
|
|
3747
|
+
detail: "of loop",
|
|
3748
|
+
type: "keyword"
|
|
3749
|
+
}), /*@__PURE__*/snippetCompletion("do {\n\t${}\n} while (${})", {
|
|
3750
|
+
label: "do",
|
|
3751
|
+
detail: "loop",
|
|
3752
|
+
type: "keyword"
|
|
3753
|
+
}), /*@__PURE__*/snippetCompletion("while (${}) {\n\t${}\n}", {
|
|
3754
|
+
label: "while",
|
|
3755
|
+
detail: "loop",
|
|
3756
|
+
type: "keyword"
|
|
3757
|
+
}), /*@__PURE__*/snippetCompletion("try {\n\t${}\n} catch (${error}) {\n\t${}\n}", {
|
|
3758
|
+
label: "try",
|
|
3759
|
+
detail: "/ catch block",
|
|
3760
|
+
type: "keyword"
|
|
3761
|
+
}), /*@__PURE__*/snippetCompletion("if (${}) {\n\t${}\n}", {
|
|
3762
|
+
label: "if",
|
|
3763
|
+
detail: "block",
|
|
3764
|
+
type: "keyword"
|
|
3765
|
+
}), /*@__PURE__*/snippetCompletion("if (${}) {\n\t${}\n} else {\n\t${}\n}", {
|
|
3766
|
+
label: "if",
|
|
3767
|
+
detail: "/ else block",
|
|
3768
|
+
type: "keyword"
|
|
3769
|
+
}), /*@__PURE__*/snippetCompletion("class ${name} {\n\tconstructor(${params}) {\n\t\t${}\n\t}\n}", {
|
|
3770
|
+
label: "class",
|
|
3771
|
+
detail: "definition",
|
|
3772
|
+
type: "keyword"
|
|
3773
|
+
}), /*@__PURE__*/snippetCompletion("import {${names}} from \"${module}\"\n${}", {
|
|
3774
|
+
label: "import",
|
|
3775
|
+
detail: "named",
|
|
3776
|
+
type: "keyword"
|
|
3777
|
+
}), /*@__PURE__*/snippetCompletion("import ${name} from \"${module}\"\n${}", {
|
|
3778
|
+
label: "import",
|
|
3779
|
+
detail: "default",
|
|
3780
|
+
type: "keyword"
|
|
3781
|
+
})];
|
|
3782
|
+
const cache = /*@__PURE__*/new NodeWeakMap();
|
|
3783
|
+
const ScopeNodes = /*@__PURE__*/new Set(["Script", "Block", "FunctionExpression", "FunctionDeclaration", "ArrowFunction", "MethodDeclaration", "ForStatement"]);
|
|
3784
|
+
function defID(type) {
|
|
3785
|
+
return (node, def) => {
|
|
3786
|
+
let id = node.node.getChild("VariableDefinition");
|
|
3787
|
+
if (id) def(id, type);
|
|
3788
|
+
return true;
|
|
3789
|
+
};
|
|
3790
|
+
}
|
|
3791
|
+
const functionContext = ["FunctionDeclaration"];
|
|
3792
|
+
const gatherCompletions = {
|
|
3793
|
+
FunctionDeclaration: /*@__PURE__*/defID("function"),
|
|
3794
|
+
ClassDeclaration: /*@__PURE__*/defID("class"),
|
|
3795
|
+
ClassExpression: () => true,
|
|
3796
|
+
EnumDeclaration: /*@__PURE__*/defID("constant"),
|
|
3797
|
+
TypeAliasDeclaration: /*@__PURE__*/defID("type"),
|
|
3798
|
+
NamespaceDeclaration: /*@__PURE__*/defID("namespace"),
|
|
3799
|
+
VariableDefinition(node, def) {
|
|
3800
|
+
if (!node.matchContext(functionContext)) def(node, "variable");
|
|
3801
|
+
},
|
|
3802
|
+
TypeDefinition(node, def) {
|
|
3803
|
+
def(node, "type");
|
|
3804
|
+
},
|
|
3805
|
+
__proto__: null
|
|
3806
|
+
};
|
|
3807
|
+
function getScope(doc, node) {
|
|
3808
|
+
let cached = cache.get(node);
|
|
3809
|
+
if (cached) return cached;
|
|
3810
|
+
let completions = [],
|
|
3811
|
+
top = true;
|
|
3812
|
+
function def(node, type) {
|
|
3813
|
+
let name = doc.sliceString(node.from, node.to);
|
|
3814
|
+
completions.push({
|
|
3815
|
+
label: name,
|
|
3816
|
+
type
|
|
3817
|
+
});
|
|
3818
|
+
}
|
|
3819
|
+
node.cursor(IterMode.IncludeAnonymous).iterate(node => {
|
|
3820
|
+
if (top) {
|
|
3821
|
+
top = false;
|
|
3822
|
+
} else if (node.name) {
|
|
3823
|
+
let gather = gatherCompletions[node.name];
|
|
3824
|
+
if (gather && gather(node, def) || ScopeNodes.has(node.name)) return false;
|
|
3825
|
+
} else if (node.to - node.from > 8192) {
|
|
3826
|
+
// Allow caching for bigger internal nodes
|
|
3827
|
+
for (let c of getScope(doc, node.node)) completions.push(c);
|
|
3828
|
+
return false;
|
|
3829
|
+
}
|
|
3830
|
+
});
|
|
3831
|
+
cache.set(node, completions);
|
|
3832
|
+
return completions;
|
|
3833
|
+
}
|
|
3834
|
+
const Identifier = /^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/;
|
|
3835
|
+
const dontComplete = ["TemplateString", "String", "RegExp", "LineComment", "BlockComment", "VariableDefinition", "TypeDefinition", "Label", "PropertyDefinition", "PropertyName", "PrivatePropertyDefinition", "PrivatePropertyName", ".", "?."];
|
|
3836
|
+
/**
|
|
3837
|
+
Completion source that looks up locally defined names in
|
|
3838
|
+
JavaScript code.
|
|
3839
|
+
*/
|
|
3840
|
+
function localCompletionSource(context) {
|
|
3841
|
+
let inner = syntaxTree(context.state).resolveInner(context.pos, -1);
|
|
3842
|
+
if (dontComplete.indexOf(inner.name) > -1) return null;
|
|
3843
|
+
let isWord = inner.name == "VariableName" || inner.to - inner.from < 20 && Identifier.test(context.state.sliceDoc(inner.from, inner.to));
|
|
3844
|
+
if (!isWord && !context.explicit) return null;
|
|
3845
|
+
let options = [];
|
|
3846
|
+
for (let pos = inner; pos; pos = pos.parent) {
|
|
3847
|
+
if (ScopeNodes.has(pos.name)) options = options.concat(getScope(context.state.doc, pos));
|
|
3848
|
+
}
|
|
3849
|
+
return {
|
|
3850
|
+
options,
|
|
3851
|
+
from: isWord ? inner.from : context.pos,
|
|
3852
|
+
validFor: Identifier
|
|
3853
|
+
};
|
|
3854
|
+
}
|
|
3855
|
+
|
|
3856
|
+
/**
|
|
3857
|
+
A language provider based on the [Lezer JavaScript
|
|
3858
|
+
parser](https://github.com/lezer-parser/javascript), extended with
|
|
3859
|
+
highlighting and indentation information.
|
|
3860
|
+
*/
|
|
3861
|
+
const javascriptLanguage = /*@__PURE__*/LRLanguage.define({
|
|
3862
|
+
name: "javascript",
|
|
3863
|
+
parser: /*@__PURE__*/parser.configure({
|
|
3864
|
+
props: [/*@__PURE__*/indentNodeProp.add({
|
|
3865
|
+
IfStatement: /*@__PURE__*/continuedIndent({
|
|
3866
|
+
except: /^\s*({|else\b)/
|
|
3867
|
+
}),
|
|
3868
|
+
TryStatement: /*@__PURE__*/continuedIndent({
|
|
3869
|
+
except: /^\s*({|catch\b|finally\b)/
|
|
3870
|
+
}),
|
|
3871
|
+
LabeledStatement: flatIndent,
|
|
3872
|
+
SwitchBody: context => {
|
|
3873
|
+
let after = context.textAfter,
|
|
3874
|
+
closed = /^\s*\}/.test(after),
|
|
3875
|
+
isCase = /^\s*(case|default)\b/.test(after);
|
|
3876
|
+
return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit;
|
|
3877
|
+
},
|
|
3878
|
+
Block: /*@__PURE__*/delimitedIndent({
|
|
3879
|
+
closing: "}"
|
|
3880
|
+
}),
|
|
3881
|
+
ArrowFunction: cx => cx.baseIndent + cx.unit,
|
|
3882
|
+
"TemplateString BlockComment": () => null,
|
|
3883
|
+
"Statement Property": /*@__PURE__*/continuedIndent({
|
|
3884
|
+
except: /^{/
|
|
3885
|
+
}),
|
|
3886
|
+
JSXElement(context) {
|
|
3887
|
+
let closed = /^\s*<\//.test(context.textAfter);
|
|
3888
|
+
return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);
|
|
3889
|
+
},
|
|
3890
|
+
JSXEscape(context) {
|
|
3891
|
+
let closed = /\s*\}/.test(context.textAfter);
|
|
3892
|
+
return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);
|
|
3893
|
+
},
|
|
3894
|
+
"JSXOpenTag JSXSelfClosingTag"(context) {
|
|
3895
|
+
return context.column(context.node.from) + context.unit;
|
|
3896
|
+
}
|
|
3897
|
+
}), /*@__PURE__*/foldNodeProp.add({
|
|
3898
|
+
"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType": foldInside,
|
|
3899
|
+
BlockComment(tree) {
|
|
3900
|
+
return {
|
|
3901
|
+
from: tree.from + 2,
|
|
3902
|
+
to: tree.to - 2
|
|
3903
|
+
};
|
|
3904
|
+
}
|
|
3905
|
+
})]
|
|
3906
|
+
}),
|
|
3907
|
+
languageData: {
|
|
3908
|
+
closeBrackets: {
|
|
3909
|
+
brackets: ["(", "[", "{", "'", '"', "`"]
|
|
3910
|
+
},
|
|
3911
|
+
commentTokens: {
|
|
3912
|
+
line: "//",
|
|
3913
|
+
block: {
|
|
3914
|
+
open: "/*",
|
|
3915
|
+
close: "*/"
|
|
3916
|
+
}
|
|
3917
|
+
},
|
|
3918
|
+
indentOnInput: /^\s*(?:case |default:|\{|\}|<\/)$/,
|
|
3919
|
+
wordChars: "$"
|
|
3920
|
+
}
|
|
3921
|
+
});
|
|
3922
|
+
const jsxSublanguage = {
|
|
3923
|
+
test: node => /^JSX/.test(node.name),
|
|
3924
|
+
facet: /*@__PURE__*/defineLanguageFacet({
|
|
3925
|
+
commentTokens: {
|
|
3926
|
+
block: {
|
|
3927
|
+
open: "{/*",
|
|
3928
|
+
close: "*/}"
|
|
3929
|
+
}
|
|
3930
|
+
}
|
|
3931
|
+
})
|
|
3932
|
+
};
|
|
3933
|
+
/**
|
|
3934
|
+
A language provider for TypeScript.
|
|
3935
|
+
*/
|
|
3936
|
+
const typescriptLanguage = /*@__PURE__*/javascriptLanguage.configure({
|
|
3937
|
+
dialect: "ts"
|
|
3938
|
+
}, "typescript");
|
|
3939
|
+
/**
|
|
3940
|
+
Language provider for JSX.
|
|
3941
|
+
*/
|
|
3942
|
+
const jsxLanguage = /*@__PURE__*/javascriptLanguage.configure({
|
|
3943
|
+
dialect: "jsx",
|
|
3944
|
+
props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]
|
|
3945
|
+
});
|
|
3946
|
+
/**
|
|
3947
|
+
Language provider for JSX + TypeScript.
|
|
3948
|
+
*/
|
|
3949
|
+
const tsxLanguage = /*@__PURE__*/javascriptLanguage.configure({
|
|
3950
|
+
dialect: "jsx ts",
|
|
3951
|
+
props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]
|
|
3952
|
+
}, "typescript");
|
|
3953
|
+
const keywords = /*@__PURE__*/"break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(kw => ({
|
|
3954
|
+
label: kw,
|
|
3955
|
+
type: "keyword"
|
|
3956
|
+
}));
|
|
3957
|
+
/**
|
|
3958
|
+
JavaScript support. Includes [snippet](https://codemirror.net/6/docs/ref/#lang-javascript.snippets)
|
|
3959
|
+
completion.
|
|
3960
|
+
*/
|
|
3961
|
+
function javascript() {
|
|
3962
|
+
let config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
3963
|
+
let lang = config.jsx ? config.typescript ? tsxLanguage : jsxLanguage : config.typescript ? typescriptLanguage : javascriptLanguage;
|
|
3964
|
+
return new LanguageSupport(lang, [javascriptLanguage.data.of({
|
|
3965
|
+
autocomplete: ifNotIn(dontComplete, completeFromList(snippets.concat(keywords)))
|
|
3966
|
+
}), javascriptLanguage.data.of({
|
|
3967
|
+
autocomplete: localCompletionSource
|
|
3968
|
+
}), config.jsx ? autoCloseTags : []]);
|
|
3969
|
+
}
|
|
3970
|
+
function findOpenTag(node) {
|
|
3971
|
+
for (;;) {
|
|
3972
|
+
if (node.name == "JSXOpenTag" || node.name == "JSXSelfClosingTag" || node.name == "JSXFragmentTag") return node;
|
|
3973
|
+
if (node.name == "JSXEscape" || !node.parent) return null;
|
|
3974
|
+
node = node.parent;
|
|
3975
|
+
}
|
|
3976
|
+
}
|
|
3977
|
+
function elementName(doc, tree) {
|
|
3978
|
+
let max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : doc.length;
|
|
3979
|
+
for (let ch = tree === null || tree === void 0 ? void 0 : tree.firstChild; ch; ch = ch.nextSibling) {
|
|
3980
|
+
if (ch.name == "JSXIdentifier" || ch.name == "JSXBuiltin" || ch.name == "JSXNamespacedName" || ch.name == "JSXMemberExpression") return doc.sliceString(ch.from, Math.min(ch.to, max));
|
|
3981
|
+
}
|
|
3982
|
+
return "";
|
|
3983
|
+
}
|
|
3984
|
+
function isEndTag(node) {
|
|
3985
|
+
return node && (node.name == "JSXEndTag" || node.name == "JSXSelfCloseEndTag");
|
|
3986
|
+
}
|
|
3987
|
+
const android = typeof navigator == "object" && /*@__PURE__*/ /Android\b/.test(navigator.userAgent);
|
|
3988
|
+
/**
|
|
3989
|
+
Extension that will automatically insert JSX close tags when a `>` or
|
|
3990
|
+
`/` is typed.
|
|
3991
|
+
*/
|
|
3992
|
+
const autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text) => {
|
|
3993
|
+
if ((android ? view.composing : view.compositionStarted) || view.state.readOnly || from != to || text != ">" && text != "/" || !javascriptLanguage.isActiveAt(view.state, from, -1)) return false;
|
|
3994
|
+
let {
|
|
3995
|
+
state
|
|
3996
|
+
} = view;
|
|
3997
|
+
let changes = state.changeByRange(range => {
|
|
3998
|
+
var _a;
|
|
3999
|
+
let {
|
|
4000
|
+
head
|
|
4001
|
+
} = range,
|
|
4002
|
+
around = syntaxTree(state).resolveInner(head, -1),
|
|
4003
|
+
name;
|
|
4004
|
+
if (around.name == "JSXStartTag") around = around.parent;
|
|
4005
|
+
if (around.name == "JSXAttributeValue" && around.to > head) ;else if (text == ">" && around.name == "JSXFragmentTag") {
|
|
4006
|
+
return {
|
|
4007
|
+
range: EditorSelection.cursor(head + 1),
|
|
4008
|
+
changes: {
|
|
4009
|
+
from: head,
|
|
4010
|
+
insert: `></>`
|
|
4011
|
+
}
|
|
4012
|
+
};
|
|
4013
|
+
} else if (text == "/" && around.name == "JSXFragmentTag") {
|
|
4014
|
+
let empty = around.parent,
|
|
4015
|
+
base = empty === null || empty === void 0 ? void 0 : empty.parent;
|
|
4016
|
+
if (empty.from == head - 1 && ((_a = base.lastChild) === null || _a === void 0 ? void 0 : _a.name) != "JSXEndTag" && (name = elementName(state.doc, base === null || base === void 0 ? void 0 : base.firstChild, head))) {
|
|
4017
|
+
let insert = `/${name}>`;
|
|
4018
|
+
return {
|
|
4019
|
+
range: EditorSelection.cursor(head + insert.length),
|
|
4020
|
+
changes: {
|
|
4021
|
+
from: head,
|
|
4022
|
+
insert
|
|
4023
|
+
}
|
|
4024
|
+
};
|
|
4025
|
+
}
|
|
4026
|
+
} else if (text == ">") {
|
|
4027
|
+
let openTag = findOpenTag(around);
|
|
4028
|
+
if (openTag && !isEndTag(openTag.lastChild) && state.sliceDoc(head, head + 2) != "</" && (name = elementName(state.doc, openTag, head))) return {
|
|
4029
|
+
range: EditorSelection.cursor(head + 1),
|
|
4030
|
+
changes: {
|
|
4031
|
+
from: head,
|
|
4032
|
+
insert: `></${name}>`
|
|
4033
|
+
}
|
|
4034
|
+
};
|
|
4035
|
+
}
|
|
4036
|
+
return {
|
|
4037
|
+
range
|
|
4038
|
+
};
|
|
4039
|
+
});
|
|
4040
|
+
if (changes.changes.empty) return false;
|
|
4041
|
+
view.dispatch(changes, {
|
|
4042
|
+
userEvent: "input.type",
|
|
4043
|
+
scrollIntoView: true
|
|
4044
|
+
});
|
|
4045
|
+
return true;
|
|
4046
|
+
});
|
|
4047
|
+
|
|
4048
|
+
export { ContextTracker as C, ExternalTokenizer as E, LRParser as L, autocompletion as a, closeBracketsKeymap as b, closeBrackets as c, completionKeymap as d, jsxLanguage as e, tsxLanguage as f, javascriptLanguage as g, javascript as j, typescriptLanguage as t };
|