{
  "version": 3,
  "sources": ["../../src/document/components/chrome/shared/DynamicValueButtonContext.ts", "../../src/document/components/chrome/properties/codeComponentRows/DateControlPropRow.tsx", "../../src/utils/blurOnMouseDownAndPreventFocus.ts", "../../src/document/components/chrome/properties/codeComponentRows/DateControlPropRow.styles.ts", "../../src/document/components/chrome/properties/codeComponentRows/BooleanControlPropRow.tsx", "../../src/document/components/chrome/shared/DynamicValueButtonFromContext.tsx", "../../src/document/components/chrome/properties/panels/icons/IconAgentStackAlignment.tsx", "../../src/document/components/chrome/properties/utils/alignmentSegmentedControlIcons.tsx", "../../src/document/components/chrome/properties/codeComponentRows/EnumControlPropRow.tsx", "../../src/document/components/chrome/properties/panels/icons/IconActionNavigate.tsx", "../../src/document/components/chrome/properties/panels/icons/IconTransitionFade.tsx", "../../src/document/components/chrome/properties/panels/icons/IconTransitionFlip.tsx", "../../src/document/components/chrome/properties/panels/icons/IconTransitionMagicMotion.tsx", "../../src/document/components/chrome/properties/panels/icons/IconTransitionModal.tsx", "../../src/document/components/chrome/properties/panels/icons/IconTransitionOverlay.tsx", "../../src/document/components/chrome/properties/panels/icons/IconTransitionPush.tsx", "../../src/document/components/chrome/properties/codeComponentRows/FileControlPropRow.tsx", "../../src/document/components/utils/imageUploadTitle.ts", "../../src/document/models/controlProps/reducedImageControlPropMatchesDefault.ts", "../../src/document/models/controlProps/updateImageControlPropWithNewImage.ts", "../../src/document/components/chrome/properties/codeComponentRows/ImageControlPropRow.tsx", "../../src/document/components/chrome/shared/ClearImageButton.styles.ts", "../../src/document/components/chrome/shared/ClearImageButton.tsx", "../../src/document/components/chrome/shared/ColorPicker/ColorPickerPreview.styles.ts", "../../src/document/components/chrome/shared/ColorPicker/ColorPickerPreview.tsx", "../../src/document/components/chrome/shared/ImagePopoutButton.tsx", "../../src/document/components/chrome/properties/codeComponentRows/StringControlPropRow.tsx", "../../src/document/components/chrome/properties/codeComponentRows/StringControlPropRow.styles.ts", "../../src/document/components/chrome/properties/codeComponentRows/VectorSetItemControlPropRow.tsx", "../../src/document/components/chrome/shared/VectorSetPreview.tsx", "../../src/web/pages/project/components/PublishPopover/Spinner.styles.ts", "../../src/web/pages/project/components/PublishPopover/Spinner.tsx", "../../src/document/components/chrome/properties/codeComponentRows/VectorSetItemControlPropRow.styles.ts", "../../src/document/components/utils/trackLinkChanges.ts", "../../src/document/components/chrome/properties/panels/LinkRelValuesRow.tsx", "../../src/document/components/chrome/properties/utils/linkOptions.ts", "../../src/document/components/chrome/properties/panels/LinkRelValuesRow.styles.ts", "../../src/document/components/chrome/properties/inputs/TrackingIdInput.tsx", "../../src/document/base-engine/BaseEngineStore.utils.ts", "../../src/document/components/utils/useDataForIdentifier.ts", "../../src/document/components/chrome/properties/rows/EffectRows/shared/EffectScrollTargetRow.tsx", "../../src/document/components/chrome/properties/panels/CollectionItemSelectorRow.tsx", "../../src/document/components/utils/getFirstLinkControlRow.ts", "../../src/document/components/chrome/contentManagement/CollectionReferenceInput.styles.ts", "../../src/document/components/chrome/contentManagement/useCollectionReferenceInputOptions.tsx", "../../src/document/components/chrome/contentManagement/DraftCollectionPillLabel.styles.ts", "../../src/document/components/chrome/contentManagement/DraftCollectionPillLabel.tsx", "../../src/document/components/chrome/contentManagement/CollectionReferenceInput.tsx", "../../../fresco/src/components/MultiComboBox.tsx", "../../../fresco/src/components/MultiComboBox.styles.ts", "../../src/document/components/chrome/contentManagement/MultiCollectionReferenceInput.tsx", "../../src/document/components/chrome/richTextEditor/RichTextEditorContent.tsx", "../../src/document/components/chrome/richTextEditor/RichTextEditorContent.styles.ts", "../../src/document/components/utils/inlineEditing.styles.ts", "../../src/document/components/chrome/richTextEditor/selectionStyling/InlineFormattingMenu.tsx", "../../src/document/components/chrome/richTextEditor/tableUtils.ts", "../../src/document/components/chrome/richTextEditor/toolbarUtils.ts", "../../src/document/components/chrome/richTextEditor/useEditorSelectionState.tsx", "../../src/prosemirror/plugins/ImageEditPopout.tsx", "../../src/document/components/chrome/richTextEditor/selectionStyling/inlineFormattingMenu.styles.ts", "../../src/document/components/chrome/richTextEditor/selectionStyling/ImagePopover.tsx", "../../src/document/components/chrome/richTextEditor/selectionStyling/inlineFormattingPlugin.ts", "../../src/document/components/chrome/richTextEditor/slashCommands/SlashCommandsMenu.tsx", "../../src/document/components/chrome/richTextEditor/slashCommands/SlashCommandsMenu.styles.ts", "../../src/document/components/chrome/richTextEditor/slashCommands/SlashCommandsMenuItem.tsx", "../../src/document/components/chrome/richTextEditor/slashCommands/SlashCommandsMenuItem.styles.ts", "../../src/document/components/chrome/richTextEditor/slashCommands/SlashCommandsMenuPopover.styles.ts", "../../src/document/components/chrome/richTextEditor/slashCommands/SlashCommandsMenuPopover.tsx", "../../src/document/components/chrome/richTextEditor/slashCommands/SlashCommandsSubmenu.tsx", "../../src/document/components/chrome/richTextEditor/slashCommands/slashCommandsPlugin.ts", "../../src/document/components/chrome/richTextEditor/slashCommands/slashCommandsPlugin.styles.ts", "../../src/document/components/chrome/richTextEditor/collectComponentDefinitions.ts", "../../src/document/components/chrome/richTextEditor/slashCommands/getComponentMenuItems.tsx", "../../src/document/components/chrome/richTextEditor/useChangeListeners.ts", "../../src/document/components/chrome/richTextEditor/insertMenuPopout/InsertMenuPopout.tsx", "../../src/document/components/chrome/richTextEditor/insertMenuPopout/InsertMenuPopout.styles.ts", "../../src/document/components/chrome/richTextEditor/insertMenuPopout/InsertMenuPopoutRow.styles.ts", "../../src/document/components/chrome/richTextEditor/insertMenuPopout/InsertMenuPopoutRow.tsx", "../../src/document/components/chrome/richTextEditor/RichTextEditorWithToolbar.tsx", "../../../../../node_modules/@marijn/find-cluster-break/src/index.js", "../../../../../node_modules/@codemirror/state/dist/index.js", "../../../../../node_modules/style-mod/src/style-mod.js", "../../../../../node_modules/@codemirror/view/dist/index.js", "../../../../../node_modules/@lezer/common/dist/index.js", "../../../../../node_modules/@lezer/highlight/dist/index.js", "../../../../../node_modules/@codemirror/language/dist/index.js", "../../../../../node_modules/@codemirror/autocomplete/dist/index.js", "../../../../../node_modules/@codemirror/commands/dist/index.js", "../../src/document/components/chrome/richTextEditor/CodeBlockView/CodeBlockView.styles.ts", "../../src/document/components/chrome/richTextEditor/CodeBlockView/codeBlockPlugin.ts", "../../src/document/components/chrome/richTextEditor/CodeBlockView/themes/createBaseTheme.ts", "../../src/document/components/chrome/richTextEditor/CodeBlockView/themes/createCodeMirrorThemeByThemeDefinition.ts", "../../src/document/components/chrome/richTextEditor/CodeBlockView/utils/getBackgroundStyle.ts", "../../src/document/components/chrome/richTextEditor/CodeBlockView/utils/getBorderRadiusStyle.ts", "../../src/document/components/chrome/richTextEditor/CodeBlockView/utils/getBorderStyle.ts", "../../src/document/components/chrome/richTextEditor/CodeBlockView/utils/getFontStyles.ts", "../../src/document/components/chrome/richTextEditor/CodeBlockView/utils/getPaddingStyle.ts", "../../src/document/components/chrome/richTextEditor/CodeBlockView/themes/createOverrideTheme.ts", "../../src/document/components/chrome/richTextEditor/CodeBlockView/themes/createSyntaxHighlightByThemeDefinition.ts", "../../src/document/components/chrome/richTextEditor/CodeBlockView/themes/getThemeDefinition.ts", "../../../../../node_modules/@lezer/lr/dist/index.js", "../../../../../node_modules/@lezer/html/dist/index.es.js", "../../../../../node_modules/@lezer/css/dist/index.es.js", "../../../../../node_modules/@codemirror/lang-css/dist/index.js", "../../../../../node_modules/@lezer/javascript/dist/index.es.js", "../../../../../node_modules/@codemirror/lang-javascript/dist/index.js", "../../../../../node_modules/@codemirror/lang-html/dist/index.js", "../../../../../node_modules/@codemirror/lang-angular/dist/index.js", "../../../../../node_modules/@lezer/cpp/dist/index.es.js", "../../../../../node_modules/@codemirror/lang-cpp/dist/index.js", "../../../../../node_modules/@lezer/java/dist/index.es.js", "../../../../../node_modules/@codemirror/lang-java/dist/index.js", "../../../../../node_modules/@lezer/markdown/dist/index.js", "../../../../../node_modules/@codemirror/lang-markdown/dist/index.js", "../../../../../node_modules/@lezer/php/dist/index.es.js", "../../../../../node_modules/@codemirror/lang-php/dist/index.js", "../../../../../node_modules/@lezer/python/dist/index.es.js", "../../../../../node_modules/@codemirror/lang-python/dist/index.js", "../../../../../node_modules/@lezer/rust/dist/index.es.js", "../../../../../node_modules/@codemirror/lang-rust/dist/index.js", "../../../../../node_modules/@codemirror/lang-sql/dist/index.js", "../../../../../node_modules/@codemirror/lang-vue/dist/index.js", "../../../../../node_modules/@codemirror/legacy-modes/mode/clike.js", "../../../../../node_modules/@codemirror/legacy-modes/mode/go.js", "../../../../../node_modules/@codemirror/legacy-modes/mode/haskell.js", "../../../../../node_modules/@codemirror/legacy-modes/mode/julia.js", "../../../../../node_modules/@codemirror/legacy-modes/mode/lua.js", "../../../../../node_modules/@codemirror/legacy-modes/mode/nginx.js", "../../../../../node_modules/@codemirror/legacy-modes/mode/octave.js", "../../../../../node_modules/@codemirror/legacy-modes/mode/perl.js", "../../../../../node_modules/@codemirror/legacy-modes/mode/ruby.js", "../../../../../node_modules/@codemirror/legacy-modes/mode/shell.js", "../../../../../node_modules/@codemirror/legacy-modes/mode/swift.js", "../../../../../node_modules/@codemirror/legacy-modes/mode/yaml.js", "../../src/document/components/chrome/richTextEditor/CodeBlockView/utils/getLanguageForCodeBlock.ts", "../../src/document/components/chrome/richTextEditor/CodeBlockView/CodeBlockView.tsx", "../../src/document/components/chrome/richTextEditor/PageLinkPopoverForRichText.tsx", "../../src/document/components/chrome/properties/panels/LinkOptionBooleanRow.tsx", "../../src/document/components/chrome/properties/panels/PageLinkingRows.tsx", "../../src/document/components/chrome/properties/panels/PageLinkScrollTargetRows.tsx", "../../src/document/components/chrome/properties/panels/LinkScrollTargetPopoutButton.tsx", "../../src/document/components/chrome/properties/panels/PageLinkSlugRow.tsx", "../../src/document/components/chrome/properties/panels/usePageLinkPath.ts", "../../src/document/components/chrome/properties/panels/TrackingIdRow.tsx", "../../src/document/components/chrome/richTextEditor/PopoverForRichText.styles.ts", "../../src/document/components/chrome/richTextEditor/RichTextEditorWithToolbar.styles.ts", "../../src/document/components/chrome/richTextEditor/RichTextToolbarButton.tsx", "../../src/document/components/chrome/richTextEditor/RichTextToolbarButton.styles.ts", "../../src/document/components/chrome/richTextEditor/createMissingPresetsForHTML.ts", "../../src/prosemirror/plugins/applyStylePresetsPlugin.ts", "../../src/prosemirror/NodeViewPopoutButton.tsx", "../../src/prosemirror/plugins/mediaPlugin.tsx", "../../src/prosemirror/plugins/mediaPlugin.styles.ts", "../../src/document/components/chrome/richTextEditor/CustomTableNodeView.ts", "../../src/document/components/chrome/richTextEditor/tablePlugin.ts", "../../src/document/components/chrome/richTextEditor/createRichTextEditorState.ts", "../../src/document/components/chrome/richTextEditor/createRichTextEditorView.ts", "../../src/document/components/chrome/richTextEditor/useCodeBlockLanguages.ts", "../../src/document/utils/useTitleForLink.ts", "../../src/document/components/chrome/properties/codeComponentRows/LinkPopout.tsx", "../../src/document/components/chrome/properties/codeComponentRows/utils/isHiddenRow.tsx", "../../src/document/components/chrome/shared/ConfirmModal.tsx", "../../src/document/components/chrome/shared/ImageCropModal.tsx", "../../src/document/components/chrome/shared/ImageEditModal.styles.ts", "../../src/document/components/chrome/shared/ImageEditModal.tsx", "../../src/document/components/chrome/shared/ImageFocalPointModal.tsx", "../../src/document/components/chrome/shared/ImageFocalPointModal.styles.ts", "../../src/document/components/chrome/shared/useDirectionalFocusNavigation.ts", "../../src/document/components/chrome/contentManagement/GalleryInput.tsx", "../../src/document/components/chrome/contentManagement/GalleryInput.styles.ts", "../../src/document/components/chrome/contentManagement/LargeImageInput.tsx", "../../src/document/components/chrome/contentManagement/LargeImagePreview.styles.ts", "../../src/document/components/chrome/contentManagement/LargeImagePreview.tsx", "../../src/document/components/chrome/contentManagement/LargeImageTitle.styles.ts", "../../src/document/components/chrome/contentManagement/LargeImageTitle.tsx", "../../src/document/components/chrome/shared/Loading.styles.ts", "../../src/document/components/chrome/shared/Loading.tsx", "../../src/document/components/canvas/editorUtils.tsx", "../../src/document/components/chrome/contentManagement/OnPageEditingComboboxPopover.tsx", "../../src/document/components/chrome/contentManagement/OnPageEditingComboboxPopover.styles.ts", "../../src/document/components/canvas/CollectionReferenceVariableEditor.styles.ts", "../../src/document/components/canvas/CollectionReferenceVariableEditor.tsx", "../../src/document/components/chrome/shared/InlinePopoutNavigation.tsx", "../../src/web/pages/project/components/usePopoutNavigation.tsx", "../../src/document/components/chrome/shared/InlinePopoutNavigation.styles.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/utils.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/calendars/GregorianCalendar.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/weekStartData.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/queries.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/conversion.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/manipulation.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/string.ts", "../../../../../node_modules/@swc/helpers/esm/_check_private_redeclaration.js", "../../../../../node_modules/@swc/helpers/esm/_class_private_field_init.js", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/CalendarDate.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/calendars/JapaneseCalendar.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/calendars/BuddhistCalendar.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/calendars/TaiwanCalendar.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/calendars/PersianCalendar.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/calendars/IndianCalendar.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/calendars/IslamicCalendar.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/calendars/HebrewCalendar.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/calendars/EthiopicCalendar.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/createCalendar.ts", "../../../../../node_modules/@internationalized/date/dist/packages/@internationalized/date/src/DateFormatter.ts", "../../src/document/components/canvas/DateVariableEditor.tsx", "../../../../../node_modules/react-aria-components/dist/packages/react-aria-components/src/RSPContexts.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useLayoutEffect.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useEffectEvent.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useValueEffect.ts", "../../../../../packages/@react-aria/ssr/src/SSRProvider.tsx", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useId.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/chain.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/domHelpers.ts", "../../../../../node_modules/@react-stately/flags/dist/packages/@react-stately/flags/src/index.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/shadowdom/DOMFunctions.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/mergeProps.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/mergeRefs.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/filterDOMProps.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/focusWithoutScrolling.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/platform.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/openLink.tsx", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/runAfterTransition.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useGlobalListeners.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useLabels.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useObjectRef.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useUpdateEffect.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useSyncRef.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/isScrollable.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/getScrollParent.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/getScrollParents.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useDescription.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/scrollIntoView.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/isVirtualEvent.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useDeepMemo.ts", "../../../../../node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/isFocusable.ts", "../../../../../node_modules/@react-stately/utils/dist/packages/@react-stately/utils/src/useControlledState.ts", "../../../../../node_modules/react-aria-components/dist/packages/react-aria-components/src/utils.tsx", "../../../../../node_modules/@react-aria/collections/dist/packages/@react-aria/collections/src/Hidden.tsx", "../../../../../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/utils.ts", "../../../../../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/textSelection.ts", "../../../../../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/context.ts", "../../../../../node_modules/@swc/helpers/esm/_class_apply_descriptor_get.js", "../../../../../node_modules/@swc/helpers/esm/_class_extract_field_descriptor.js", "../../../../../node_modules/@swc/helpers/esm/_class_private_field_get.js", "../../../../../node_modules/@swc/helpers/esm/_class_apply_descriptor_set.js", "../../../../../node_modules/@swc/helpers/esm/_class_private_field_set.js", "../../../../../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/usePress.ts", "../../../../../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useFocusVisible.ts", "../../../../../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/focusSafely.ts", "../../../../../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useFocus.ts", "../../../../../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/createEventHandler.ts", "../../../../../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useKeyboard.ts", "../../../../../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useFocusable.tsx", "../../../../../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useFocusWithin.ts", "../../../../../node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useHover.ts", "../../../../../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/utils.ts", "../../../../../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/useDefaultLocale.ts", "../../../../../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/context.tsx", "../../../../../node_modules/@internationalized/string/dist/packages/@internationalized/string/src/LocalizedStringDictionary.ts", "../../../../../node_modules/@internationalized/string/dist/packages/@internationalized/string/src/LocalizedStringFormatter.ts", "../../../../../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/useLocalizedStringFormatter.ts", "../../../../../node_modules/@react-aria/i18n/dist/packages/@react-aria/i18n/src/useDateFormatter.ts", "../../../../../node_modules/@react-aria/button/dist/packages/@react-aria/button/src/useButton.ts", "../../../../../node_modules/@react-aria/focus/dist/packages/@react-aria/focus/src/useFocusRing.ts", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/ar-AE.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/bg-BG.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/cs-CZ.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/da-DK.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/de-DE.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/el-GR.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/en-US.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/es-ES.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/et-EE.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/fi-FI.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/fr-FR.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/he-IL.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/hr-HR.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/hu-HU.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/it-IT.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/ja-JP.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/ko-KR.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/lt-LT.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/lv-LV.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/nb-NO.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/nl-NL.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/pl-PL.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/pt-BR.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/pt-PT.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/ro-RO.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/ru-RU.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/sk-SK.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/sl-SI.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/sr-SP.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/sv-SE.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/tr-TR.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/uk-UA.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/zh-CN.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/intl/zh-TW.json", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/src/%2A.js", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/src/utils.ts", "../../../../../node_modules/@react-aria/live-announcer/dist/packages/@react-aria/live-announcer/src/LiveAnnouncer.tsx", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/src/useCalendarBase.ts", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/src/useCalendar.ts", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/src/useCalendarGrid.ts", "../../../../../node_modules/@react-aria/calendar/dist/packages/@react-aria/calendar/src/useCalendarCell.ts", "../../../../../node_modules/@react-aria/visually-hidden/dist/packages/@react-aria/visually-hidden/src/VisuallyHidden.tsx", "../../../../../node_modules/react-aria-components/dist/packages/react-aria-components/src/ProgressBar.tsx", "../../../../../node_modules/react-aria-components/dist/packages/react-aria-components/src/Button.tsx", "../../../../../node_modules/react-aria-components/dist/packages/react-aria-components/src/Text.tsx", "../../../../../node_modules/@react-stately/calendar/dist/packages/@react-stately/calendar/src/utils.ts", "../../../../../node_modules/@react-stately/calendar/dist/packages/@react-stately/calendar/src/useCalendarState.ts", "../../../../../node_modules/react-aria-components/dist/packages/react-aria-components/src/Calendar.tsx", "../../../../../node_modules/react-aria-components/dist/packages/react-aria-components/src/Heading.tsx", "../../src/document/components/canvas/DateVariableEditor.styles.ts", "../../src/document/components/canvas/EnumVariableEditor.styles.ts", "../../src/document/components/canvas/EnumVariableEditor.tsx", "../../src/document/preview/togglePreviewNodeResponsive.ts", "../../src/document/models/CanvasTree/utils/tokenHooks.ts", "../../src/preview-module/components/PreviewContainer.styles.ts", "../../src/preview-module/utils/getSandboxURL.ts", "../../src/document/components/chrome/preview/ModulePreviewWrapper.tsx", "../../src/services/hooks/useFlagsService.ts", "../../src/app/FlagsService.ts", "../../src/document/components/chrome/preview/ModulePreviewWrapper.styles.ts", "../../src/document/components/chrome/preview/usePreviewShortcuts.ts", "../../src/document/models/CanvasTree/utils/useTokenCSSProperties.ts", "../../src/document/components/canvas/CollectionRichTextVariableEditor.tsx", "../../src/document/components/chrome/richTextEditor/ModulePreviewView.tsx", "../../src/document/components/chrome/richTextEditor/EmbedPropertyControls.tsx", "../../src/document/components/chrome/properties/codeComponentRows/ControlPropRow.tsx", "../../src/document/components/chrome/properties/panels/utils/getEditButtonTitle.ts", "../../src/document/components/chrome/richTextEditor/EmbedPropertyControls.styles.ts", "../../src/document/components/chrome/richTextEditor/useHiddenStateForModule.tsx", "../../src/document/components/chrome/richTextEditor/ModulePreviewManager.tsx", "../../src/document/components/chrome/richTextEditor/moveElementWithHierarchyFallback.ts", "../../src/document/components/chrome/richTextEditor/useFramerSiteId.tsx", "../../src/document/components/chrome/richTextEditor/getModuleNodeViewConstructor.ts", "../../src/document/components/canvas/CollectionRichTextVariableEditor.styles.ts", "../../src/document/components/canvas/RichTextEditor.tsx", "../../src/document/components/canvas/RichTextEditor.styles.ts", "../../src/document/components/canvas/StringEditor.tsx", "../../src/document/components/canvas/StringEditor.styles.ts", "../../src/document/components/chrome/richTextEditor/RichTextEditorWithToolbarAndNodeViews.tsx", "../../src/document/components/chrome/contentManagement/LargePanelRow.styles.ts", "../../src/document/components/utils/formatCanonicalUrlForDisplay.ts", "../../src/document/components/chrome/contentManagement/SlugPreviewLink.tsx", "../../src/document/components/chrome/contentManagement/SlugPreviewLink.styles.ts", "../../src/document/components/chrome/shared/WithWarningTintAndMessage.tsx", "../../src/editorbar/canvas/OnPageControlRow.tsx", "../../src/editorbar/canvas/OnPageControlRow.styles.ts", "../../src/editorbar/canvas/OnPageSlugRow.tsx", "../../src/utils/useClickOutside.ts", "../../src/document/components/chrome/localization/useLocalizedImageEditingState.ts", "../../src/document/useControlHiddenState.ts", "../../src/document/components/chrome/properties/codeComponentRows/utils/shouldHideControlRow.ts", "../../src/document/components/chrome/contentManagement/LargeBooleanInputRows.styles.ts", "../../src/document/models/controlProps/getReducedStaticArrayControlValue.ts", "../../src/document/components/chrome/contentManagement/GalleryInputRow.tsx", "../../src/document/components/chrome/contentManagement/BooleanInputRow.tsx", "../../src/document/components/chrome/contentManagement/LargeControlRow.styles.ts", "../../src/document/components/chrome/contentManagement/ColorInputRow.tsx", "../../src/document/components/chrome/contentManagement/LargeColorAndLinkInputRow.styles.ts", "../../src/document/components/chrome/contentManagement/DateInputRow.tsx", "../../src/document/components/chrome/contentManagement/DateInputRow.styles.ts", "../../src/document/components/chrome/contentManagement/EnumInputRow.tsx", "../../src/document/components/chrome/contentManagement/LargeEnumInputRow.styles.ts", "../../src/document/components/chrome/contentManagement/FileInputRow.tsx", "../../src/document/components/chrome/contentManagement/FileInputRow.styles.ts", "../../src/document/components/chrome/contentManagement/ImageInputRow.tsx", "../../src/document/components/chrome/contentManagement/LargeImageInputRow.styles.ts", "../../src/document/components/chrome/contentManagement/NumberInputRow.tsx", "../../src/document/components/chrome/contentManagement/NumberInputRow.styles.ts", "../../src/document/components/chrome/contentManagement/LargeStringInputRow.styles.ts"],
  "sourcesContent": ["import { createContext } from \"react\"\nimport type { DynamicValueButton } from \"./DynamicValueButton.tsx\"\n\nexport const DynamicValueButtonContext = createContext<typeof DynamicValueButton | undefined>(undefined)\nDynamicValueButtonContext.displayName = \"DynamicValueButtonContext\"\n", "import { DateInput, IconInputClose, InputWrapper, TimeInput, useInputHash, useReadOnly } from \"@framerjs/fresco\"\nimport { IconButton } from \"@framerjs/fresco/components/IconButton\"\nimport { assert, shouldBeNever } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { PanelRow } from \"document/components/chrome/properties/rows/PanelRow.tsx\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { getVariableValue } from \"document/models/CanvasTree/nodes/utils/getVariableValue.ts\"\nimport { isComputedValue } from \"document/models/CanvasTree/traits/ComputedValue.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { VariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport type { ReducedDateControlProp } from \"document/models/controlProps/getReducedControlProps.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport type { DateControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport type React from \"react\"\nimport { useCallback } from \"react\"\nimport { blurActiveElementAndPreventFocus } from \"utils/blurOnMouseDownAndPreventFocus.ts\"\nimport { titleCase } from \"utils/titleCase.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { VariableReferenceButton } from \"../../shared/VariableReferenceButton.tsx\"\nimport { createVariableInScope } from \"../utils/createVariableInScope.ts\"\nimport { doubleColumnClass } from \"../utils/doubleColumn.styles.ts\"\nimport * as styles from \"./DateControlPropRow.styles.ts\"\nimport { supportedVariableTypesByControlType } from \"./utils/supportedVariableTypesByControlType.ts\"\n\nconst controlType = ControlType.Date\n\ninterface Props {\n\tcontrolKey: string\n\tcontrol: DateControlDescription\n\tcontrolProp: ReducedDateControlProp\n\tonChange: (value: ControlProp, prop: string) => void\n\tonContextMenu?: (event: React.MouseEvent<HTMLElement>) => void\n\tsortable?: boolean\n\ttraitTypeKeys?: string[]\n\tsupportsVariables?: boolean\n\ttimeRowTitle?: string\n\tpreserveTime?: boolean\n}\n\nexport function DateControlPropRow({\n\tcontrol,\n\tcontrolKey,\n\tcontrolProp,\n\tonContextMenu,\n\tsortable,\n\ttraitTypeKeys,\n\ttimeRowTitle,\n\tsupportsVariables = false,\n\tpreserveTime = control.displayTime,\n\tonChange: externalOnChange,\n}: Props) {\n\tconst engine = useBaseEngine()\n\tconst readOnly = useReadOnly()\n\n\tconst { value } = controlProp\n\tconst { defaultValue } = control\n\n\tconst inputHash = useInputHash()\n\n\tconst onChange = useCallback(\n\t\t(newValue: string | undefined | VariableReference) => {\n\t\t\texternalOnChange({ type: control.type, value: newValue }, controlKey)\n\t\t},\n\t\t[externalOnChange, controlKey, control.type],\n\t)\n\n\tconst clearValue = useCallback(() => {\n\t\tassert(control.optional, \"Only optional controls can be cleared\")\n\t\tonChange(undefined)\n\t}, [onChange, control])\n\n\tconst clearValueAndPreventFocus = useCallback(\n\t\t(event: React.MouseEvent) => {\n\t\t\tblurActiveElementAndPreventFocus(event)\n\t\t\tclearValue()\n\t\t},\n\t\t[clearValue],\n\t)\n\n\tconst onCreateVariable = useEngineCallback(\n\t\t(scopeId: NodeID) => {\n\t\t\tconst name = control.title || titleCase(controlKey)\n\t\t\tconst initialValue = isString(value) ? value : undefined\n\t\t\tconst variableRef = createVariableInScope({\n\t\t\t\tengine,\n\t\t\t\tscopeId,\n\t\t\t\ttype: controlType,\n\t\t\t\tname,\n\t\t\t\tinitialValue,\n\t\t\t})\n\t\t\tif (variableRef) onChange(variableRef)\n\t\t},\n\t\t[control.title, controlKey, value, onChange],\n\t)\n\n\tconst onRemoveDynamicValue = useEngineCallback(() => {\n\t\tif (!isDynamicValue(value)) return\n\t\tif (isVariableReference(value)) {\n\t\t\tconst variableValue = getVariableValue(engine, value)\n\t\t\tconst newValue = isString(variableValue) ? variableValue : undefined\n\t\t\tonChange(newValue)\n\t\t} else if (isComputedValue(value)) {\n\t\t\tonChange(undefined)\n\t\t} else {\n\t\t\tshouldBeNever(value)\n\t\t}\n\t}, [onChange, value])\n\n\tconst onResetToDefault = useCallback(() => {\n\t\tonChange(defaultValue)\n\t}, [onChange, defaultValue])\n\n\tconst stringValue = isString(value) ? value : \"\"\n\tconst title = sortable ? undefined : control.title || titleCase(controlKey)\n\n\tconst isVariable = isVariableReference(value) && supportsVariables\n\tconst resetToDefaultEnabled = isString(defaultValue) && value !== defaultValue\n\tconst showClearButton = control.optional === true && value !== undefined\n\treturn (\n\t\t<>\n\t\t\t<PanelRow\n\t\t\t\ttitle={title}\n\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\tvariableType={supportedVariableTypesByControlType[controlType]}\n\t\t\t\tresetToDefaultEnabled={resetToDefaultEnabled}\n\t\t\t\tonResetToDefault={onResetToDefault}\n\t\t\t\tonCreateVariable={onCreateVariable}\n\t\t\t\tonRemoveDynamicValue={onRemoveDynamicValue}\n\t\t\t\tdynamicValue={isDynamicValue(value) ? value : null}\n\t\t\t\tonSelectVariable={onChange}\n\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\twithReorderControl={sortable}\n\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\tdeleteEnabled={control.optional === true && value !== undefined}\n\t\t\t\tdeleteTitle={Dictionary.Clear}\n\t\t\t\tonDelete={clearValue}\n\t\t\t>\n\t\t\t\t{isVariable ? (\n\t\t\t\t\t<VariableReferenceButton\n\t\t\t\t\t\texpectedType={supportedVariableTypesByControlType[controlType]}\n\t\t\t\t\t\treference={value}\n\t\t\t\t\t\tonRemove={onRemoveDynamicValue}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<InputWrapper className={sortable ? undefined : doubleColumnClass}>\n\t\t\t\t\t\t<DateInput\n\t\t\t\t\t\t\tkey={inputHash}\n\t\t\t\t\t\t\tvalue={stringValue}\n\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\tclassName={showClearButton ? styles.dateInputWithClearButton : undefined}\n\t\t\t\t\t\t\trequired={control.optional !== true}\n\t\t\t\t\t\t\tpreserveTime={preserveTime}\n\t\t\t\t\t\t\thideIcon={showClearButton}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{showClearButton && (\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\ticon={<IconInputClose />}\n\t\t\t\t\t\t\t\tonMouseDown={clearValueAndPreventFocus}\n\t\t\t\t\t\t\t\tlabel={Dictionary.Clear}\n\t\t\t\t\t\t\t\tclassName={styles.clearButton}\n\t\t\t\t\t\t\t\ttitle={Dictionary.Clear}\n\t\t\t\t\t\t\t\tenabled={!readOnly}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</InputWrapper>\n\t\t\t\t)}\n\t\t\t</PanelRow>\n\t\t\t{!isVariable && control.displayTime && !sortable && (\n\t\t\t\t<PanelRow title={timeRowTitle}>\n\t\t\t\t\t<TimeInput\n\t\t\t\t\t\tkey={inputHash}\n\t\t\t\t\t\tvalue={stringValue}\n\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\trequired={control.optional !== true}\n\t\t\t\t\t\tclassName={doubleColumnClass}\n\t\t\t\t\t/>\n\t\t\t\t</PanelRow>\n\t\t\t)}\n\t\t</>\n\t)\n}\n", "/**\n * Blurs the active element and prevents the event from propagating or being prevented. Useful when\n * doing something on mouse down instead of click. Because normally blur only happens on click in\n * which case it can cause a race condition with the event handler.\n */\nexport function blurActiveElementAndPreventFocus(event: React.MouseEvent | React.KeyboardEvent | undefined) {\n\tevent?.stopPropagation()\n\tevent?.preventDefault()\n\n\tconst activeElement = document.activeElement\n\tif (activeElement instanceof HTMLElement) {\n\t\tactiveElement.blur()\n\t}\n}\n", "import \"DateControlPropRow.styles_m9p8u7.wyw.css\"; export const clearButton = \"clearButton_c1459fj1\";\nexport const dateInputWithClearButton = \"dateInputWithClearButton_d5btmj8\";", "import { Button, SegmentedControl, SegmentedControlItem, useReadOnly } from \"@framerjs/fresco\"\nimport { assert, shouldBeNever } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { PanelRow } from \"document/components/chrome/properties/rows/PanelRow.tsx\"\nimport { doubleColumn } from \"document/components/chrome/properties/utils/doubleColumn.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { getVariableValue } from \"document/models/CanvasTree/nodes/utils/getVariableValue.ts\"\nimport {\n\ttype ComputedValue,\n\tcreateComputedValue,\n\tisComputedValue,\n} from \"document/models/CanvasTree/traits/ComputedValue.ts\"\nimport type { DynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { createFetchDataValue } from \"document/models/CanvasTree/traits/FetchDataValue.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { BooleanControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport type { ReducedBooleanControlProp } from \"document/models/controlProps/getReducedControlProps.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport type { BooleanControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { useCallback } from \"react\"\nimport { titleCase } from \"utils/titleCase.ts\"\nimport { isBoolean } from \"utils/typeChecks.ts\"\nimport { DynamicValueButtonFromContext } from \"../../shared/DynamicValueButtonFromContext.tsx\"\nimport { popoutWindow } from \"../../shared/PopoutWindow.tsx\"\nimport { createVariableInScope } from \"../utils/createVariableInScope.ts\"\nimport { supportedVariableTypesByControlType } from \"./utils/supportedVariableTypesByControlType.ts\"\n\nconst controlType = ControlType.Boolean\n\nfunction getPopoutId(prop: string): string {\n\treturn `boolean-input-row-popout-${prop}`\n}\n\ninterface Props {\n\tnodeIds: NodeID[]\n\tcontrolKey: string\n\tcontrol: BooleanControlDescription\n\tcontrolProp: ReducedBooleanControlProp\n\tonChange: (newValue: BooleanControlProp, prop: string) => void\n\tonContextMenu?: (event: React.MouseEvent<HTMLElement>) => void\n\tsortable?: boolean\n\ttraitTypeKeys?: string[]\n\tsupportsVariables?: boolean\n\tsupportsComputedValues?: boolean\n\tsupportsFetchDataValues?: boolean\n}\n\nexport function BooleanControlPropRow({\n\tnodeIds,\n\tcontrolProp,\n\tcontrol,\n\tcontrolKey,\n\tonChange,\n\tonContextMenu,\n\tsortable,\n\ttraitTypeKeys,\n\tsupportsVariables = false,\n\tsupportsComputedValues = false,\n\tsupportsFetchDataValues = false,\n}: Props) {\n\tconst engine = useBaseEngine()\n\tconst readOnly = useReadOnly()\n\n\tconst { value } = controlProp\n\n\tconst title = sortable ? undefined : control.title || titleCase(controlKey)\n\n\tconst defaultValue = isBoolean(control.defaultValue) ? control.defaultValue : undefined\n\n\tconst popoutId = getPopoutId(controlKey)\n\n\tconst changeValue = useCallback(\n\t\t(newValue: boolean | null | DynamicValue) => {\n\t\t\tonChange({ type: control.type, value: newValue }, controlKey)\n\t\t},\n\t\t[controlKey, control, onChange],\n\t)\n\n\tconst clearValue = useCallback(() => {\n\t\tassert(control.optional, \"Only optional controls can be cleared\")\n\t\tchangeValue(null)\n\t}, [changeValue, control])\n\n\tconst resetToDefault = useCallback(() => {\n\t\tif (isBoolean(defaultValue)) {\n\t\t\tchangeValue(defaultValue)\n\t\t}\n\t}, [defaultValue, changeValue])\n\n\tconst createVariable = useEngineCallback(\n\t\t(scopeId: NodeID) => {\n\t\t\tconst name = control.title || titleCase(controlKey)\n\t\t\tconst initialValue = isBoolean(controlProp.value) ? controlProp.value : true\n\t\t\tconst variableRef = createVariableInScope({\n\t\t\t\tengine,\n\t\t\t\tscopeId,\n\t\t\t\ttype: controlType,\n\t\t\t\tname,\n\t\t\t\tinitialValue,\n\t\t\t})\n\t\t\tif (variableRef) changeValue(variableRef)\n\t\t},\n\t\t[changeValue, controlKey, control, controlProp],\n\t)\n\n\tconst selectComputedValue = useCallback(\n\t\t(newValue: ComputedValue) => {\n\t\t\tchangeValue(newValue)\n\t\t\tpopoutWindow.navigation.presentPopout(popoutId)\n\t\t},\n\t\t[changeValue, popoutId],\n\t)\n\n\tconst selectFetchDataValue = useCallback(() => {\n\t\tconst fetchDataValue = createFetchDataValue({\n\t\t\ttype: ControlType.Boolean,\n\t\t\tvalue: isBoolean(value) ? value : false,\n\t\t})\n\n\t\tconst computedValue = createComputedValue(ControlType.Boolean, fetchDataValue, [])\n\n\t\tselectComputedValue(computedValue)\n\n\t\treturn computedValue\n\t}, [selectComputedValue, value])\n\n\tconst removeDynamicValue = useEngineCallback(() => {\n\t\tif (!isDynamicValue(value)) return\n\n\t\tif (isVariableReference(value)) {\n\t\t\tconst variableValue = getVariableValue(engine, value)\n\t\t\tconst newValue = isBoolean(variableValue) ? variableValue : true\n\t\t\tchangeValue(newValue)\n\t\t} else if (isComputedValue(value)) {\n\t\t\tchangeValue(isBoolean(defaultValue) ? defaultValue : true)\n\t\t} else {\n\t\t\tshouldBeNever(value)\n\t\t}\n\t}, [changeValue, defaultValue, value])\n\n\treturn (\n\t\t<PanelRow\n\t\t\ttitle={title}\n\t\t\tonContextMenu={onContextMenu}\n\t\t\tonResetToDefault={!sortable ? resetToDefault : undefined}\n\t\t\tresetToDefaultEnabled={isBoolean(defaultValue) && defaultValue !== value}\n\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\twithReorderControl={sortable}\n\t\t\t// Variables\n\t\t\tsupportsVariables={supportsVariables}\n\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\tvariableType={supportedVariableTypesByControlType[controlType]}\n\t\t\tdynamicValue={isDynamicValue(value) ? value : null}\n\t\t\tonSelectVariable={changeValue}\n\t\t\tonCreateVariable={createVariable}\n\t\t\tonSelectComputedValue={selectComputedValue}\n\t\t\tonRemoveDynamicValue={removeDynamicValue}\n\t\t\tcomputedValuePopoutId={popoutId}\n\t\t\tsupportsFetchDataValues={supportsFetchDataValues}\n\t\t\tonSelectFetchDataValue={selectFetchDataValue}\n\t\t\tdeleteEnabled={control.optional === true && value !== null}\n\t\t\tdeleteTitle={Dictionary.Clear}\n\t\t\tonDelete={clearValue}\n\t\t>\n\t\t\t{isDynamicValue(value) ? (\n\t\t\t\t<DynamicValueButtonFromContext\n\t\t\t\t\ttitle={title}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\toutputControl={control}\n\t\t\t\t\texpectedType={supportedVariableTypesByControlType[controlType]}\n\t\t\t\t\tonRemove={removeDynamicValue}\n\t\t\t\t\tonChangeDynamicValue={changeValue}\n\t\t\t\t\tpopoutId={popoutId}\n\t\t\t\t\tsupportsComputedValues={supportsVariables}\n\t\t\t\t\tsupportsFetchDataValues={supportsFetchDataValues}\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<SegmentedControl style={sortable || control.optional ? undefined : doubleColumn}>\n\t\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\t\tidentifier\n\t\t\t\t\t\t\ttitle={control.enabledTitle || Dictionary.Yes}\n\t\t\t\t\t\t\tselected={value === true}\n\t\t\t\t\t\t\tonSelect={changeValue}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{control.optional ? <IconYes /> : undefined}\n\t\t\t\t\t\t</SegmentedControlItem>\n\t\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\t\tidentifier={false}\n\t\t\t\t\t\t\ttitle={control.disabledTitle || Dictionary.No}\n\t\t\t\t\t\t\tselected={value === false}\n\t\t\t\t\t\t\tonSelect={changeValue}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{control.optional ? <IconNo /> : undefined}\n\t\t\t\t\t\t</SegmentedControlItem>\n\t\t\t\t\t</SegmentedControl>\n\t\t\t\t\t{control.optional && (\n\t\t\t\t\t\t<Button enabled={value !== null && !readOnly} onClick={clearValue}>\n\t\t\t\t\t\t\t{Dictionary.Clear}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</PanelRow>\n\t)\n}\n\nfunction IconYes() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\" fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"M 1.5 5 L 4 8 L 8.5 2\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeDasharray=\"\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconNo() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\" fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"M 8 2 L 2 8 M 2 2 L 8 8\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeDasharray=\"\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import { assert } from \"@framerjs/shared\"\nimport { useContext } from \"react\"\nimport type { DynamicValueButtonProps } from \"./DynamicValueButton.tsx\"\nimport { DynamicValueButtonContext } from \"./DynamicValueButtonContext.ts\"\n\nexport function DynamicValueButtonFromContext(props: DynamicValueButtonProps) {\n\tconst DynamicValueButton = useContext(DynamicValueButtonContext)\n\n\tassert(DynamicValueButton, \"Missing `DynamicValueButton` in DynamicValueButtonFromContext\")\n\n\treturn <DynamicValueButton {...props} />\n}\n", "export function IconAgentStackAlignTop() {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M4.75 7.5A1.5 1.5 0 0 1 6.25 6h3.5a1.5 1.5 0 0 1 1.5 1.5v4.25a1.5 1.5 0 0 1-1.5 1.5h-3.5a1.5 1.5 0 0 1-1.5-1.5Z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M1.5 2.75h13\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentStackAlignMiddle() {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M4.75 4.75a1.5 1.5 0 0 1 1.5-1.5h3.5a1.5 1.5 0 0 1 1.5 1.5v6.5a1.5 1.5 0 0 1-1.5 1.5h-3.5a1.5 1.5 0 0 1-1.5-1.5Z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M1 8.25h3.75M11.25 8.25H15\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentStackAlignBottom() {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M4.75 4.25a1.5 1.5 0 0 1 1.5-1.5h3.5a1.5 1.5 0 0 1 1.5 1.5V8.5a1.5 1.5 0 0 1-1.5 1.5h-3.5a1.5 1.5 0 0 1-1.5-1.5Z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M1.5 13.25h13\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentStackAlignLeft() {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M5.75 6.25a1.5 1.5 0 0 1 1.5-1.5h5a1.5 1.5 0 0 1 1.5 1.5v3.5a1.5 1.5 0 0 1-1.5 1.5h-5a1.5 1.5 0 0 1-1.5-1.5Z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M2.75 2.5v11\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentStackAlignCenter() {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M2.75 6.25a1.5 1.5 0 0 1 1.5-1.5h7a1.5 1.5 0 0 1 1.5 1.5v3.5a1.5 1.5 0 0 1-1.5 1.5h-7a1.5 1.5 0 0 1-1.5-1.5Z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M7.75 1.5v3M7.75 12v2.5\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function IconAgentStackAlignRight() {\n\treturn (\n\t\t<svg role=\"presentation\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M2.25 6.25a1.5 1.5 0 0 1 1.5-1.5h5a1.5 1.5 0 0 1 1.5 1.5v3.5a1.5 1.5 0 0 1-1.5 1.5h-5a1.5 1.5 0 0 1-1.5-1.5Z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M13.25 2.5v11\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "import {\n\tIconAlignBottom,\n\tIconAlignCenter,\n\tIconAlignLeft,\n\tIconAlignMiddle,\n\tIconAlignRight,\n\tIconAlignTop,\n} from \"@framerjs/fresco\"\nimport { assertNever } from \"@framerjs/shared\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport type { StackAlignment, StackDirection } from \"library/components/Stack/types.ts\"\nimport type { SegmentedControlIcon } from \"library/render/types/PropertyControls.ts\"\nimport type React from \"react\"\nimport {\n\tIconAgentStackAlignBottom,\n\tIconAgentStackAlignCenter,\n\tIconAgentStackAlignLeft,\n\tIconAgentStackAlignMiddle,\n\tIconAgentStackAlignRight,\n\tIconAgentStackAlignTop,\n} from \"../panels/icons/IconAgentStackAlignment.tsx\"\n\nconst agentAlignmentIcons: Partial<Record<SegmentedControlIcon, React.FunctionComponent>> = {\n\t\"align-left\": IconAgentStackAlignLeft,\n\t\"align-center\": IconAgentStackAlignCenter,\n\t\"align-right\": IconAgentStackAlignRight,\n\t\"align-top\": IconAgentStackAlignTop,\n\t\"align-middle\": IconAgentStackAlignMiddle,\n\t\"align-bottom\": IconAgentStackAlignBottom,\n}\n\nexport function stackAlignmentIcon(\n\talignment: StackAlignment,\n\tdirection: Reduced<StackDirection | undefined>,\n\tagentExperimentEnabled: boolean,\n): React.FunctionComponent | undefined {\n\tif (direction === \"vertical\") {\n\t\tswitch (alignment) {\n\t\t\tcase \"start\":\n\t\t\t\treturn agentExperimentEnabled ? IconAgentStackAlignLeft : IconAlignLeft\n\t\t\tcase \"center\":\n\t\t\t\treturn agentExperimentEnabled ? IconAgentStackAlignCenter : IconAlignCenter\n\t\t\tcase \"end\":\n\t\t\t\treturn agentExperimentEnabled ? IconAgentStackAlignRight : IconAlignRight\n\t\t\tdefault:\n\t\t\t\tassertNever(alignment)\n\t\t}\n\t}\n\n\tif (direction === \"horizontal\") {\n\t\tswitch (alignment) {\n\t\t\tcase \"start\":\n\t\t\t\treturn agentExperimentEnabled ? IconAgentStackAlignTop : IconAlignTop\n\t\t\tcase \"center\":\n\t\t\t\treturn agentExperimentEnabled ? IconAgentStackAlignMiddle : IconAlignMiddle\n\t\t\tcase \"end\":\n\t\t\t\treturn agentExperimentEnabled ? IconAgentStackAlignBottom : IconAlignBottom\n\t\t\tdefault:\n\t\t\t\tassertNever(alignment)\n\t\t}\n\t}\n}\n\nexport function alignmentSegmentedControlIcon(\n\ticon: SegmentedControlIcon,\n\tagentExperimentEnabled: boolean,\n): React.FunctionComponent | undefined {\n\tif (!agentExperimentEnabled) return\n\treturn agentAlignmentIcons[icon]\n}\n", "import {\n\tIconAlignBottom,\n\tIconAlignCenter,\n\tIconAlignLeft,\n\tIconAlignMiddle,\n\tIconAlignRight,\n\tIconAlignTop,\n\tIconDeviceLandscape,\n\tIconDevicePortrait,\n\tIconDirectionBoth,\n\tIconDirectionDown,\n\tIconDirectionHorizontal,\n\tIconDirectionLeft,\n\tIconDirectionRight,\n\tIconDirectionUp,\n\tIconDirectionVertical,\n\tIconTextAlignCenter,\n\tIconTextAlignLeft,\n\tIconTextAlignRight,\n\tIconVerticalAlignBottom,\n\tIconVerticalAlignCenter,\n\tIconVerticalAlignTop,\n\tPopupButton,\n\tPopupButtonItem,\n\tSegmentedControl,\n\tSegmentedControlItem,\n} from \"@framerjs/fresco\"\nimport { isMixed, type Mixed, shouldBeNever } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { PanelRow } from \"document/components/chrome/properties/rows/PanelRow.tsx\"\nimport { alignmentSegmentedControlIcon } from \"document/components/chrome/properties/utils/alignmentSegmentedControlIcons.tsx\"\nimport { popoutWindow } from \"document/components/chrome/shared/PopoutWindow.tsx\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { getVariableValue } from \"document/models/CanvasTree/nodes/utils/getVariableValue.ts\"\nimport type { ComputedValue } from \"document/models/CanvasTree/traits/ComputedValue.ts\"\nimport { isComputedValue } from \"document/models/CanvasTree/traits/ComputedValue.ts\"\nimport type { DynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { NotFound, isNotFound } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport type { ReducedEnumControlProp } from \"document/models/controlProps/getReducedControlProps.ts\"\nimport type { EnumControlDescription, SegmentedControlIcon } from \"library/render/types/PropertyControls.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { useCallback, useMemo } from \"react\"\nimport { fallbackTitleForOption } from \"utils/enumControlUtils.ts\"\nimport { isShallowEqual } from \"utils/isShallowEqual.ts\"\nimport { titleCase } from \"utils/titleCase.ts\"\nimport { isArray, isBoolean, isNumber, isString } from \"utils/typeChecks.ts\"\nimport type { ControlReferenceInfo } from \"../../shared/DynamicValueButton.tsx\"\nimport { DynamicValueButtonFromContext } from \"../../shared/DynamicValueButtonFromContext.tsx\"\nimport { IconActionNavigate } from \"../panels/icons/IconActionNavigate.tsx\"\nimport { IconTransitionFade } from \"../panels/icons/IconTransitionFade.tsx\"\nimport { IconTransitionFlip } from \"../panels/icons/IconTransitionFlip.tsx\"\nimport { IconTransitionMagicMotion } from \"../panels/icons/IconTransitionMagicMotion.tsx\"\nimport { IconTransitionModal } from \"../panels/icons/IconTransitionModal.tsx\"\nimport { IconTransitionOverlay } from \"../panels/icons/IconTransitionOverlay.tsx\"\nimport { IconTransitionPush } from \"../panels/icons/IconTransitionPush.tsx\"\nimport { stopPropagation } from \"../rows/utils/stopPropagation.ts\"\nimport { createVariableInScope } from \"../utils/createVariableInScope.ts\"\nimport { doubleColumnClass } from \"../utils/doubleColumn.styles.ts\"\nimport type { EnumValueType } from \"./utils/isValidPropertyValue.ts\"\nimport { supportedVariableTypesByControlType } from \"./utils/supportedVariableTypesByControlType.ts\"\n\nconst variableReferenceTypes = [ControlType.Enum, ControlType.SegmentedEnum]\n\ntype ValidStaticEnumValue = Exclude<EnumValueType, undefined>\n\nfunction isValidEnum(value: unknown): value is ValidStaticEnumValue {\n\treturn value === null || isBoolean(value) || isNumber(value) || isString(value)\n}\n\nfunction getDefaultEnumValue(property: EnumControlDescription) {\n\tif (isValidEnum(property.defaultValue)) {\n\t\treturn property.defaultValue\n\t}\n}\n\nfunction getEnumPopoutId(prop: string): string {\n\treturn `enum-input-row-popout-${prop}`\n}\n\nfunction hasNoneOption(control: EnumControlDescription): boolean {\n\treturn control.optional === true\n}\n\ninterface EnumControlRowProps {\n\tcontrolKey: string\n\tcontrol: EnumControlDescription\n\tcontrolProp: ReducedEnumControlProp\n\tonChange: (newValue: ControlProp, prop: string) => void\n\tonContextMenu?: (event: React.MouseEvent<HTMLElement>) => void\n\tsortable?: boolean\n\ticons?: SegmentedControlIcon[]\n\tcontrolSourceIdentifier?: string // needed for valid enum reference filtering\n\tcontrolSourceControlKey?: string // the controlKey of the referenced enum, may differ from `controlKey`\n\ttraitTypeKeys?: string[]\n\tsupportsVariables?: boolean\n\tsupportsComputedValues?: boolean\n\tonDelete?: VoidFunction\n}\n\nexport function EnumControlPropRow({\n\tcontrol,\n\tcontrolKey,\n\tcontrolProp,\n\tonContextMenu,\n\tonChange: externalOnChange,\n\tsortable,\n\ticons: externalIcons,\n\tcontrolSourceIdentifier,\n\tcontrolSourceControlKey,\n\ttraitTypeKeys,\n\tsupportsVariables = false,\n\tsupportsComputedValues = false,\n\tonDelete: externalOnDelete,\n}: EnumControlRowProps) {\n\tconst engine = useBaseEngine()\n\tconst agentExperimentEnabled = useExperimentIsOn(\"agent\")\n\n\tconst defaultValue = getDefaultEnumValue(control)\n\tconst { value } = controlProp\n\n\tconst onSelectEnum = useCallback(\n\t\t(identifier: string) => {\n\t\t\tconst selectedOption = getEnumOptionByIdentifier(control, identifier)\n\t\t\tif (isNotFound(selectedOption)) return\n\t\t\texternalOnChange({ type: ControlType.Enum, value: selectedOption }, controlKey)\n\t\t},\n\t\t[externalOnChange, controlKey, control],\n\t)\n\n\tconst onChangeValue = useCallback(\n\t\t(newValue: EnumValueType | DynamicValue) => {\n\t\t\texternalOnChange({ type: ControlType.Enum, value: newValue }, controlKey)\n\t\t},\n\t\t[externalOnChange, controlKey],\n\t)\n\n\tconst onDelete = useCallback(() => {\n\t\tif (externalOnDelete) {\n\t\t\texternalOnDelete()\n\t\t\treturn\n\t\t}\n\t\texternalOnChange({ type: ControlType.Enum, value: null }, controlKey)\n\t}, [externalOnDelete, externalOnChange, controlKey])\n\n\tconst resetToDefault = useCallback(() => {\n\t\tif (isValidEnum(defaultValue)) {\n\t\t\texternalOnChange({ type: ControlType.Enum, value: defaultValue }, controlKey)\n\t\t}\n\t}, [externalOnChange, defaultValue, controlKey])\n\n\tconst resolvedControlKey = controlSourceControlKey ?? controlKey\n\n\tconst onRemoveDynamicValue = engine.scheduler.wrapHandler(() => {\n\t\tif (!isDynamicValue(value)) return\n\n\t\tif (isVariableReference(value)) {\n\t\t\tconst variableValue = getVariableValue(engine, value)\n\t\t\tconst newValue = isString(variableValue) ? variableValue : defaultValue\n\t\t\tonChangeValue(newValue)\n\t\t} else if (isComputedValue(value)) {\n\t\t\tonChangeValue(defaultValue)\n\t\t} else {\n\t\t\tshouldBeNever(value)\n\t\t}\n\t})\n\n\tconst onCreateVariable = engine.scheduler.wrapHandler((scopeId: NodeID) => {\n\t\tif (!controlSourceIdentifier) return\n\n\t\tconst name = control.title || titleCase(resolvedControlKey)\n\t\tconst initialValue = isValidEnum(value) ? value : defaultValue\n\t\tconst variableRef = createVariableInScope({\n\t\t\tengine,\n\t\t\tscopeId,\n\t\t\ttype: \"controlReference\",\n\t\t\tname,\n\t\t\tinitialValue,\n\t\t\tentityIdentifier: controlSourceIdentifier,\n\t\t\tcontrolKey: resolvedControlKey,\n\t\t\texpectedType: control.type,\n\t\t})\n\t\tif (variableRef) onChangeValue(variableRef)\n\t})\n\n\tconst onSelectComputedValue = engine.scheduler.wrapHandler((computedValue: ComputedValue) => {\n\t\tonChangeValue(computedValue)\n\t\tpopoutWindow.navigation.presentPopout(getEnumPopoutId(controlKey))\n\t})\n\n\tconst controlReferenceInfo = useMemo((): ControlReferenceInfo => {\n\t\treturn { controlSourceIdentifier, controlKey: resolvedControlKey }\n\t}, [controlSourceIdentifier, resolvedControlKey])\n\n\tlet controlComponent: JSX.Element\n\n\tif (isDynamicValue(value)) {\n\t\tcontrolComponent = (\n\t\t\t<DynamicValueButtonFromContext\n\t\t\t\ttitle={control.title || titleCase(controlKey)}\n\t\t\t\tvalue={value}\n\t\t\t\toutputControl={control}\n\t\t\t\texpectedType={supportedVariableTypesByControlType[ControlType.Enum]}\n\t\t\t\tpopoutId={getEnumPopoutId(controlKey)}\n\t\t\t\tonRemove={onRemoveDynamicValue}\n\t\t\t\tonChangeDynamicValue={onChangeValue}\n\t\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\t\tcontrolReferenceInfo={controlReferenceInfo}\n\t\t\t/>\n\t\t)\n\t} else if (control.displaySegmentedControl) {\n\t\tconst icons = iconsForOptions(\n\t\t\tcontrolKey,\n\t\t\tcontrol.optionTitles ?? control.options.map(fallbackTitleForOption),\n\t\t\tcontrol.optionIcons,\n\t\t\texternalIcons,\n\t\t\tagentExperimentEnabled,\n\t\t)\n\n\t\tconst showIconWithTitle: boolean =\n\t\t\tcontrol.type === ControlType.Enum &&\n\t\t\tcontrol.displaySegmentedControl === true &&\n\t\t\tcontrol.segmentedControlDirection === \"vertical\" &&\n\t\t\tisArray(icons)\n\n\t\tcontrolComponent = (\n\t\t\t<div className={sortable ? undefined : doubleColumnClass}>\n\t\t\t\t<SegmentedControl\n\t\t\t\t\tonMouseDown={stopPropagation} // We block propagation to block action cards from becoming focused\n\t\t\t\t\tdirection={control.segmentedControlDirection}\n\t\t\t\t>\n\t\t\t\t\t{control.options.map((option, index) => {\n\t\t\t\t\t\tconst selected = value === option\n\t\t\t\t\t\tconst identifier = identifierForOption(option)\n\t\t\t\t\t\tconst Icon = icons ? icons[index] : undefined\n\t\t\t\t\t\tconst title = control.optionTitles?.[index] ?? fallbackTitleForOption(option)\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\t\t\tkey={identifier}\n\t\t\t\t\t\t\t\tidentifier={identifier}\n\t\t\t\t\t\t\t\ttitle={title}\n\t\t\t\t\t\t\t\tselected={selected}\n\t\t\t\t\t\t\t\tonSelect={onSelectEnum}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{Icon ? <Icon /> : undefined}\n\t\t\t\t\t\t\t\t{showIconWithTitle ? <span style={{ marginLeft: 10 }}>{title}</span> : undefined}\n\t\t\t\t\t\t\t</SegmentedControlItem>\n\t\t\t\t\t\t)\n\t\t\t\t\t})}\n\t\t\t\t</SegmentedControl>\n\t\t\t</div>\n\t\t)\n\t} else {\n\t\tconst currentDropdownOption: DropdownOption = isMixed(value) || isValidEnum(value) ? value : NotFound\n\t\tconst dropdownItems = getDropdownItems(control, currentDropdownOption)\n\t\tcontrolComponent = (\n\t\t\t<div className={sortable ? undefined : doubleColumnClass}>\n\t\t\t\t<PopupButton>\n\t\t\t\t\t{dropdownItems.flatMap(({ option, title, enabled }, index) => {\n\t\t\t\t\t\tconst selected = currentDropdownOption === option\n\t\t\t\t\t\tconst identifier = identifierForOption(option)\n\t\t\t\t\t\tconst previousItem = dropdownItems[index - 1]\n\t\t\t\t\t\tconst currentItem = dropdownItems[index]\n\n\t\t\t\t\t\tconst items: JSX.Element[] = []\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tpreviousItem &&\n\t\t\t\t\t\t\tcurrentItem &&\n\t\t\t\t\t\t\tgroupForDropdownItem(previousItem) !== groupForDropdownItem(currentItem)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\titems.push(<PopupButtonItem key={`divider-before-${identifier}`} type=\"divider\" />)\n\t\t\t\t\t\t}\n\t\t\t\t\t\titems.push(\n\t\t\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\t\t\tkey={`item-${identifier}`}\n\t\t\t\t\t\t\t\tidentifier={identifier}\n\t\t\t\t\t\t\t\ttitle={title}\n\t\t\t\t\t\t\t\tenabled={enabled}\n\t\t\t\t\t\t\t\tselected={selected}\n\t\t\t\t\t\t\t\tonSelect={onSelectEnum}\n\t\t\t\t\t\t\t/>,\n\t\t\t\t\t\t)\n\t\t\t\t\t\treturn items\n\t\t\t\t\t})}\n\t\t\t\t</PopupButton>\n\t\t\t</div>\n\t\t)\n\t}\n\n\tconst panelTitle = sortable ? undefined : control.title || titleCase(controlKey)\n\n\treturn (\n\t\t<PanelRow\n\t\t\ttitle={panelTitle}\n\t\t\tonContextMenu={onContextMenu}\n\t\t\tonResetToDefault={!sortable ? resetToDefault : undefined}\n\t\t\tresetToDefaultEnabled={isValidEnum(defaultValue) && defaultValue !== value}\n\t\t\tvariableType={supportedVariableTypesByControlType[ControlType.Enum]}\n\t\t\tvariableReferenceType={variableReferenceTypes}\n\t\t\tonCreateVariable={onCreateVariable}\n\t\t\tonRemoveDynamicValue={onRemoveDynamicValue}\n\t\t\tdynamicValue={isDynamicValue(value) ? value : null}\n\t\t\tonSelectVariable={onChangeValue}\n\t\t\tcontrolSourceIdentifier={controlSourceIdentifier}\n\t\t\tcontrolKey={resolvedControlKey}\n\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\twithReorderControl={sortable}\n\t\t\tsupportsVariables={supportsVariables}\n\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\tcomputedValuePopoutId={getEnumPopoutId(controlKey)}\n\t\t\tonSelectComputedValue={onSelectComputedValue}\n\t\t\tdeleteEnabled={control.optional === true && value !== null}\n\t\t\tdeleteTitle={Dictionary.Clear}\n\t\t\tonDelete={onDelete}\n\t\t>\n\t\t\t{controlComponent}\n\t\t</PanelRow>\n\t)\n}\n\n// MARK: Option identifiers\n\nenum TypePrefix {\n\tString = \"_string_\",\n\tNumber = \"_number_\",\n\tFalse = \"_false_\",\n\tTrue = \"_true_\",\n\tNull = \"_null_\",\n\tNever = \"_never_\",\n\tMixed = \"_mixed_\",\n\tNotFound = \"_notfound_\",\n}\n\ntype DropdownOption = ValidStaticEnumValue | NotFound | Mixed\ninterface DropdownItem {\n\toption: DropdownOption\n\ttitle: string\n\tenabled: boolean\n}\n\ntype DropdownItemGroup = \"placeholder\" | \"null\" | \"option\"\n\nfunction groupForDropdownItem(item: DropdownItem): DropdownItemGroup {\n\tif (item.enabled === false) return \"placeholder\"\n\tif (item.option === null) return \"null\"\n\treturn \"option\"\n}\n\nfunction identifierForOption(option: DropdownOption): string {\n\tif (isString(option)) return `${TypePrefix.String}${option}`\n\tif (isNumber(option)) return `${TypePrefix.Number}${option}`\n\tif (option === true) return TypePrefix.True\n\tif (option === false) return TypePrefix.False\n\tif (option === null) return TypePrefix.Null\n\tif (isMixed(option)) return TypePrefix.Mixed\n\tif (isNotFound(option)) return TypePrefix.NotFound\n\treturn TypePrefix.Never\n}\n\nfunction getEnumOptionByIdentifier(control: EnumControlDescription, identifier: string): EnumValueType | NotFound {\n\tif (identifier === TypePrefix.Never) return NotFound\n\tif (hasNoneOption(control) && identifier === identifierForOption(null)) {\n\t\treturn null\n\t}\n\tfor (const option of control.options) {\n\t\tconst optionIdentifier = identifierForOption(option)\n\t\tif (optionIdentifier === identifier) return option\n\t}\n\treturn NotFound\n}\n\nfunction getDropdownItems(control: EnumControlDescription, currentOption: DropdownOption): DropdownItem[] {\n\tconst optionTitles = control.optionTitles\n\n\tconst items: DropdownItem[] = control.options.map((option, index) => ({\n\t\toption,\n\t\ttitle: optionTitles?.[index] ?? fallbackTitleForOption(option),\n\t\tenabled: true,\n\t}))\n\tif (hasNoneOption(control)) {\n\t\titems.unshift({ option: null, title: Dictionary.None, enabled: true })\n\t}\n\tif (isMixed(currentOption)) {\n\t\titems.unshift({ option: currentOption, title: Dictionary.Mixed, enabled: false })\n\t}\n\tif (isNotFound(currentOption)) {\n\t\titems.unshift({ option: currentOption, title: Dictionary.SelectEllipsis, enabled: false })\n\t}\n\n\treturn items\n}\n\n// MARK: Segmented control icons\n\nconst directionOptions = [\"horizontal\", \"vertical\"]\nconst directionOptionIcons = [IconDirectionHorizontal, IconDirectionVertical]\n\nconst scrollDirectionOptions = [\"vertical\", \"horizontal\", \"both\"]\nconst scrollDirectionOptionIcons = [IconDirectionVertical, IconDirectionHorizontal, IconDirectionBoth]\n\nconst verticalAlignmentOptions = [\"Top\", \"Center\", \"Bottom\"]\nconst verticalAlignmentOptionIcons = [IconAlignTop, IconAlignMiddle, IconAlignBottom]\n\nconst horizontalAlignmentOptions = [\"Left\", \"Center\", \"Right\"]\nconst horizontalAlignmentOptionIcons = [IconAlignLeft, IconAlignCenter, IconAlignRight]\n\nconst appearsFromOptions = [\"Left\", \"Right\", \"Up\", \"Down\"]\nconst appearFromOptionIcons = [IconDirectionLeft, IconDirectionRight, IconDirectionUp, IconDirectionDown]\n\nconst controlIconToComponentMap: Record<SegmentedControlIcon, React.FunctionComponent> = {\n\t\"align-left\": IconAlignLeft,\n\t\"align-center\": IconAlignCenter,\n\t\"align-right\": IconAlignRight,\n\t\"align-top\": IconAlignTop,\n\t\"align-middle\": IconAlignMiddle,\n\t\"align-bottom\": IconAlignBottom,\n\t\"direction-up\": IconDirectionUp,\n\t\"direction-right\": IconDirectionRight,\n\t\"direction-down\": IconDirectionDown,\n\t\"direction-left\": IconDirectionLeft,\n\t\"direction-horizontal\": IconDirectionHorizontal,\n\t\"direction-vertical\": IconDirectionVertical,\n\t\"direction-all\": IconDirectionBoth,\n\t\"text-align-left\": IconTextAlignLeft,\n\t\"text-align-center\": IconTextAlignCenter,\n\t\"text-align-right\": IconTextAlignRight,\n\t\"text-align-top\": IconVerticalAlignTop,\n\t\"text-align-middle\": IconVerticalAlignCenter,\n\t\"text-align-bottom\": IconVerticalAlignBottom,\n\t\"navigation-transition-instant\": IconActionNavigate,\n\t\"navigation-transition-magicMotion\": IconTransitionMagicMotion,\n\t\"navigation-transition-push\": IconTransitionPush,\n\t\"navigation-transition-modal\": IconTransitionModal,\n\t\"navigation-transition-overlay\": IconTransitionOverlay,\n\t\"navigation-transition-fade\": IconTransitionFade,\n\t\"navigation-transition-flip\": IconTransitionFlip,\n\t\"orientation-portrait\": IconDevicePortrait,\n\t\"orientation-landscape\": IconDeviceLandscape,\n}\n\ntype IconSwitch = Exclude<EnumControlDescription[\"optionIcons\"], SegmentedControlIcon[] | undefined>\n\nfunction getIconList(icons: SegmentedControlIcon[] | IconSwitch, iconOverrides: SegmentedControlIcon[] | undefined) {\n\tif (iconOverrides) return iconOverrides\n\treturn isArray(icons) ? icons : null\n}\n\nfunction controlIconComponents(\n\ticons: SegmentedControlIcon[] | IconSwitch,\n\texpectedAmount: number,\n\ticonOverrides: SegmentedControlIcon[] | undefined,\n\tagentExperimentEnabled: boolean,\n): React.FunctionComponent[] | undefined {\n\tconst result: React.FunctionComponent[] = []\n\n\tconst iconList = getIconList(icons, iconOverrides)\n\tif (!iconList) return\n\n\tfor (const icon of iconList) {\n\t\tconst file = alignmentSegmentedControlIcon(icon, agentExperimentEnabled) ?? controlIconToComponentMap[icon]\n\t\tif (!file) return undefined\n\t\tresult.push(file)\n\t}\n\n\treturn result.length === expectedAmount ? result : undefined\n}\n\nfunction iconsForOptions(\n\tprop: string,\n\toptions: string[],\n\toptionIcons: EnumControlDescription[\"optionIcons\"],\n\ticonOverrides: SegmentedControlIcon[] | undefined,\n\tagentExperimentEnabled: boolean,\n): React.FunctionComponent[] | undefined {\n\tconst optionsCount = options.length\n\n\tif (optionIcons) {\n\t\treturn controlIconComponents(optionIcons, optionsCount, iconOverrides, agentExperimentEnabled)\n\t}\n\n\tif (optionsCount === 2) {\n\t\tif (isShallowEqual(directionOptions, options)) {\n\t\t\treturn directionOptionIcons\n\t\t}\n\t}\n\tif (optionsCount === 3) {\n\t\tif (isShallowEqual(scrollDirectionOptions, options)) {\n\t\t\treturn scrollDirectionOptionIcons\n\t\t}\n\t\tif (isShallowEqual(verticalAlignmentOptions, options)) {\n\t\t\treturn verticalAlignmentOptionIcons\n\t\t}\n\t\tif (isShallowEqual(horizontalAlignmentOptions, options)) {\n\t\t\treturn horizontalAlignmentOptionIcons\n\t\t}\n\t}\n\tif (optionsCount === 4 && prop === \"appearsFrom\") {\n\t\tif (isShallowEqual(appearsFromOptions, options)) {\n\t\t\treturn appearFromOptionIcons\n\t\t}\n\t}\n}\n", "export function IconActionNavigate() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n\t\t\t<path\n\t\t\t\td=\"M 9 2.25 C 9 1.529 8.082 1.223 7.65 1.8 L 2.4 8.8 C 2.029 9.294 2.382 10 3 10 L 6.5 10 C 6.776 10 7 10.224 7 10.5 L 7 13.75 C 7 14.471 7.918 14.777 8.35 14.2 L 13.6 7.2 C 13.971 6.706 13.618 6 13 6 L 9.5 6 C 9.224 6 9 5.776 9 5.5 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path>\n\t\t</svg>\n\t)\n}\n", "export function IconTransitionFade() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n\t\t\t<path\n\t\t\t\td=\"M 2 7 C 2 3.686 4.686 1 8 1 L 8 1 C 11.314 1 14 3.686 14 7 L 14 7.5 L 14 7.5 C 14 8.328 13.328 9 12.5 9 L 3.5 9 C 2.672 9 2 8.328 2 7.5 L 2 7.5 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path>\n\t\t\t<path\n\t\t\t\td=\"M 3 11 C 3 10.448 3.448 10 4 10 L 12 10 C 12.552 10 13 10.448 13 11 L 13 11 C 13 11.552 12.552 12 12 12 L 4 12 C 3.448 12 3 11.552 3 11 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path>\n\t\t\t<path\n\t\t\t\td=\"M 6 14 C 6 13.448 6.448 13 7 13 L 9 13 C 9.552 13 10 13.448 10 14 L 10 14 C 10 14.552 9.552 15 9 15 L 7 15 C 6.448 15 6 14.552 6 14 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path>\n\t\t</svg>\n\t)\n}\n", "export function IconTransitionFlip() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n\t\t\t<path\n\t\t\t\td=\"M 5.132 3.736 C 5.722 2.556 7.5 2.976 7.5 4.295 L 7.5 12 C 7.5 12.552 7.052 13 6.5 13 L 2.118 13 C 1.375 13 0.891 12.218 1.224 11.553 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path>\n\t\t\t<path\n\t\t\t\td=\"M 10.868 3.736 C 10.278 2.556 8.5 2.976 8.5 4.295 L 8.5 12 C 8.5 12.552 8.948 13 9.5 13 L 13.882 13 C 14.625 13 15.109 12.218 14.776 11.553 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path>\n\t\t</svg>\n\t)\n}\n", "export function IconTransitionMagicMotion() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n\t\t\t<path\n\t\t\t\td=\"M 7.149 4.656 C 7.375 4.556 7.556 4.375 7.656 4.149 L 8.815 1.542 C 9.079 0.948 9.921 0.948 10.185 1.542 L 11.344 4.149 C 11.444 4.375 11.625 4.556 11.851 4.656 L 14.458 5.815 C 15.052 6.079 15.052 6.921 14.458 7.185 L 11.851 8.344 C 11.625 8.444 11.444 8.625 11.344 8.851 L 10.185 11.458 C 9.921 12.052 9.079 12.052 8.815 11.458 L 7.656 8.851 C 7.556 8.625 7.375 8.444 7.149 8.344 L 4.542 7.185 C 3.948 6.921 3.948 6.079 4.542 5.815 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path>\n\t\t\t<path\n\t\t\t\td=\"M 2.5 11.5 L 3.268 9.58 C 3.352 9.371 3.648 9.371 3.732 9.58 L 4.5 11.5 L 6.42 12.268 C 6.629 12.352 6.629 12.648 6.42 12.732 L 4.5 13.5 L 3.732 15.42 C 3.648 15.629 3.352 15.629 3.268 15.42 L 2.5 13.5 L 0.58 12.732 C 0.371 12.648 0.371 12.352 0.58 12.268 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path>\n\t\t</svg>\n\t)\n}\n", "export function IconTransitionModal() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n\t\t\t<path\n\t\t\t\td=\"M 5 4 C 5 2.895 5.895 2 7 2 L 12 2 C 13.105 2 14 2.895 14 4 L 14 9 C 14 10.105 13.105 11 12 11 L 6.5 11 C 5.672 11 5 10.328 5 9.5 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path>\n\t\t\t<path\n\t\t\t\td=\"M 2 6.6 C 2 5.716 2.716 5 3.6 5 L 3.6 5 C 3.821 5 4 5.179 4 5.4 L 4 10 C 4 11.105 4.895 12 6 12 L 10.6 12 C 10.821 12 11 12.179 11 12.4 L 11 12.4 C 11 13.284 10.284 14 9.4 14 L 4.5 14 C 3.119 14 2 12.881 2 11.5 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path>\n\t\t</svg>\n\t)\n}\n", "export function IconTransitionOverlay() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n\t\t\t<path\n\t\t\t\td=\"M 2 5 C 2 3.343 3.343 2 5 2 L 11 2 C 12.657 2 14 3.343 14 5 L 14 11 C 14 12.657 12.657 14 11 14 L 5 14 C 3.343 14 2 12.657 2 11 Z M 4 11 C 4 11.552 4.448 12 5 12 L 11 12 C 11.552 12 12 11.552 12 11 L 12 9 C 12 8.448 11.552 8 11 8 L 5 8 C 4.448 8 4 8.448 4 9 Z M 4 5 C 4 5.552 4.448 6 5 6 C 5.552 6 6 5.552 6 5 C 6 4.448 5.552 4 5 4 C 4.448 4 4 4.448 4 5 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path>\n\t\t</svg>\n\t)\n}\n", "export function IconTransitionPush() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n\t\t\t<path\n\t\t\t\td=\"M 6 4 C 6 2.895 6.895 2 8 2 L 12 2 C 13.105 2 14 2.895 14 4 L 14 12 C 14 13.105 13.105 14 12 14 L 8 14 C 6.895 14 6 13.105 6 12 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path>\n\t\t\t<path\n\t\t\t\td=\"M 2 6.5 C 2 5.395 2.895 4.5 4 4.5 L 4 4.5 C 4.552 4.5 5 4.948 5 5.5 L 5 10.5 C 5 11.052 4.552 11.5 4 11.5 L 4 11.5 C 2.895 11.5 2 10.605 2 9.5 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path>\n\t\t</svg>\n\t)\n}\n", "import { useClickHandlers } from \"@framerjs/app-shared/src/PreferMouseDown.tsx\"\nimport { createAssetReference, parseAssetReference } from \"@framerjs/assets\"\nimport { hasDefaultAssetReference } from \"@framerjs/framer-runtime/sandbox\"\nimport { Button, IconInputClose, ReadOnlyContext } from \"@framerjs/fresco\"\nimport { colors, dimensions } from \"@framerjs/fresco/tokens\"\nimport { shouldBeNever, unhandledError } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { PanelRow } from \"document/components/chrome/properties/rows/PanelRow.tsx\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { getVariableValue } from \"document/models/CanvasTree/nodes/utils/getVariableValue.ts\"\nimport { isCodeComponentNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { isComputedValue } from \"document/models/CanvasTree/traits/ComputedValue.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { VariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport type { ReducedFileControlProp } from \"document/models/controlProps/getReducedControlProps.ts\"\nimport { isVekterEngine } from \"document/useVekterEngine.ts\"\nimport type { FileControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport React from \"react\"\nimport { blurActiveElementAndPreventFocus } from \"utils/blurOnMouseDownAndPreventFocus.ts\"\nimport { titleCase } from \"utils/titleCase.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { chooseFileService } from \"web/pages/project/lib/ChooseFileService.ts\"\nimport { VariableReferenceButton } from \"../../shared/VariableReferenceButton.tsx\"\nimport { getVariableFromInfo, useVariableProviderInfo } from \"../useVariableProviderInfo.ts\"\nimport { isCompatibleFileControl } from \"../utils/allowedFileTypes.ts\"\nimport { createVariableInScope } from \"../utils/createVariableInScope.ts\"\nimport { doubleColumn } from \"../utils/doubleColumn.ts\"\nimport { supportedVariableTypesByControlType } from \"./utils/supportedVariableTypesByControlType.ts\"\n\nfunction getDefaultValue(control: FileControlDescription) {\n\tif (!hasDefaultAssetReference(control)) return\n\treturn control.__defaultAssetReference\n}\n\nfunction getFilename(value: string): string {\n\tconst details = parseAssetReference(value)\n\tif (details?.originalFilename) {\n\t\treturn details.originalFilename\n\t}\n\tconst filenameSegments = value.split(\"/\")\n\tconst filename = filenameSegments[filenameSegments.length - 1]\n\treturn filename ?? \"\"\n}\ninterface Props {\n\tcontrolKey: string\n\tcontrol: FileControlDescription\n\tcontrolProp: ReducedFileControlProp\n\tonChange: (newValue: ControlProp, prop: string) => void\n\tonContextMenu?: (event: React.MouseEvent<HTMLElement>) => void\n\tsortable?: boolean\n\ttraitTypeKeys?: string[]\n\tsupportsVariables?: boolean\n\tcontrolSourceIdentifier?: string // needed for control reference filtering\n}\n\nexport function FileControlPropRow({\n\tcontrol,\n\tcontrolKey,\n\tcontrolProp,\n\tonContextMenu,\n\tonChange,\n\tsortable,\n\ttraitTypeKeys,\n\tsupportsVariables = false,\n\tcontrolSourceIdentifier,\n}: Props) {\n\tconst engine = useBaseEngine()\n\n\tconst handleOnChange = React.useCallback(\n\t\t(value: string | VariableReference) => {\n\t\t\tonChange({ type: control.type, value }, controlKey)\n\t\t},\n\t\t[controlKey, onChange, control],\n\t)\n\n\tconst chooseFile = React.useCallback(async () => {\n\t\tconst { allowedFileTypes } = control\n\t\ttry {\n\t\t\tconst fileInfo = await chooseFileService.pickAndUploadFile({ allowedFileTypes })\n\t\t\tif (!fileInfo) return // Uploading failed\n\t\t\tconst reference = createAssetReference(fileInfo.filename, null, fileInfo.originalFilename)\n\t\t\tengine.scheduler.processWhenReady(() => handleOnChange(reference))\n\t\t} catch (error) {\n\t\t\tunhandledError(error)\n\t\t}\n\t}, [engine, control, handleOnChange])\n\n\tconst clearFile = React.useCallback(\n\t\t(event: React.MouseEvent<HTMLElement>) => {\n\t\t\tblurActiveElementAndPreventFocus(event)\n\t\t\thandleOnChange(getDefaultValue(control) ?? \"\")\n\t\t},\n\t\t[control, handleOnChange],\n\t)\n\n\tconst clearFileHandler = useClickHandlers(clearFile)\n\n\tconst onRemoveDynamicValue = engine.scheduler.wrapHandler(() => {\n\t\tconst { value } = controlProp\n\t\tif (!isDynamicValue(value)) return\n\n\t\tif (isVariableReference(value)) {\n\t\t\tconst variableValue = getVariableValue(engine, value)\n\t\t\tconst newValue = isString(variableValue) ? variableValue : \"\"\n\t\t\thandleOnChange(newValue)\n\t\t} else if (isComputedValue(value)) {\n\t\t\thandleOnChange(\"\")\n\t\t} else {\n\t\t\tshouldBeNever(value)\n\t\t}\n\t})\n\n\tconst onCreateVariable = engine.scheduler.wrapHandler((scopeId: NodeID) => {\n\t\tif (!isVekterEngine(engine)) return\n\t\tconst selectedNodes = engine.tree.getNodes(engine.stores.selectionStore.ids)\n\t\tconst firstNode = selectedNodes[0]\n\t\t// Code component identifier should be equal for the entire selection\n\t\tif (!firstNode || !isCodeComponentNode(firstNode)) return\n\n\t\tconst name = control.title || titleCase(controlKey)\n\t\tconst initialValue = isString(controlProp.value) ? controlProp.value : \"\"\n\t\tconst variableRef = createVariableInScope({\n\t\t\tengine,\n\t\t\tscopeId,\n\t\t\ttype: \"controlReference\",\n\t\t\tname,\n\t\t\tinitialValue,\n\t\t\tentityIdentifier: firstNode.codeComponentIdentifier,\n\t\t\tcontrolKey: controlKey,\n\t\t\texpectedType: control.type,\n\t\t})\n\t\tif (variableRef) handleOnChange(variableRef)\n\t})\n\n\tconst { value } = controlProp\n\n\tconst variableInfo = useVariableProviderInfo()\n\n\tconst allowedFileTypes = control.allowedFileTypes.join(\", \")\n\n\tconst style: React.CSSProperties = sortable ? {} : { ...doubleColumn }\n\n\tlet controlComponent: JSX.Element\n\n\tif (isVariableReference(value) && supportsVariables) {\n\t\tconst variable = getVariableFromInfo(value, variableInfo)\n\t\tconst hasFileTypeMismatch =\n\t\t\tvariable && variable.type === ControlType.File\n\t\t\t\t? !isCompatibleFileControl(variable, control.allowedFileTypes)\n\t\t\t\t: false\n\n\t\tcontrolComponent = (\n\t\t\t<VariableReferenceButton\n\t\t\t\texpectedType={supportedVariableTypesByControlType[ControlType.File]}\n\t\t\t\treference={value}\n\t\t\t\tonRemove={onRemoveDynamicValue}\n\t\t\t\thasError={hasFileTypeMismatch}\n\t\t\t\tbuttonTitle={hasFileTypeMismatch ? \"Variable file extension does not match the expected type\" : undefined}\n\t\t\t/>\n\t\t)\n\t} else {\n\t\tlet buttonContent: string | JSX.Element[]\n\n\t\tif (isString(value) && value !== \"\") {\n\t\t\tconst filename = getFilename(value)\n\t\t\tbuttonContent = [\n\t\t\t\t<div key=\"name\" style={filenameStyle}>\n\t\t\t\t\t{filename}\n\t\t\t\t</div>,\n\t\t\t]\n\n\t\t\tconst canDelete = value !== getDefaultValue(control)\n\t\t\tif (canDelete) {\n\t\t\t\tbuttonContent.push(\n\t\t\t\t\t<div key=\"clear\" {...clearFileHandler} style={clearButtonStyle} title={Dictionary.Clear}>\n\t\t\t\t\t\t<IconInputClose />\n\t\t\t\t\t</div>,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tstyle.display = \"flex\"\n\t\t\tstyle.alignItems = \"center\"\n\t\t\tstyle.textAlign = \"left\"\n\t\t\tstyle.padding = `0 0 0 ${dimensions.css.inputSpacing}`\n\t\t} else {\n\t\t\tbuttonContent = \"Choose File\"\n\t\t}\n\n\t\tcontrolComponent = (\n\t\t\t<ReadOnlyContext.Consumer>\n\t\t\t\t{isReadOnly => (\n\t\t\t\t\t<Button title={allowedFileTypes} onClick={chooseFile} enabled={!isReadOnly} style={style}>\n\t\t\t\t\t\t{buttonContent}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</ReadOnlyContext.Consumer>\n\t\t)\n\t}\n\n\tconst title = sortable ? undefined : control.title || titleCase(controlKey)\n\n\treturn (\n\t\t<PanelRow\n\t\t\ttitle={title}\n\t\t\tonContextMenu={onContextMenu}\n\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\twithReorderControl={sortable}\n\t\t\tsupportsVariables={supportsVariables}\n\t\t\tvariableType={supportedVariableTypesByControlType[ControlType.File]}\n\t\t\tvariableReferenceType={ControlType.File}\n\t\t\tvariableCreationType=\"controlReference\"\n\t\t\tonCreateVariable={onCreateVariable}\n\t\t\tonRemoveDynamicValue={onRemoveDynamicValue}\n\t\t\tdynamicValue={isDynamicValue(value) ? value : null}\n\t\t\tonSelectVariable={handleOnChange}\n\t\t\tcontrolSourceIdentifier={controlSourceIdentifier}\n\t\t\tcontrolKey={controlKey}\n\t\t\tallowedFileTypes={control.allowedFileTypes}\n\t\t>\n\t\t\t{controlComponent}\n\t\t</PanelRow>\n\t)\n}\n\nconst filenameStyle: React.CSSProperties = {\n\tflexGrow: 1,\n\twhiteSpace: \"nowrap\",\n\toverflow: \"hidden\",\n\ttextOverflow: \"ellipsis\",\n}\n\nconst clearButtonStyle: React.CSSProperties = {\n\twidth: dimensions.values.inputHeightSmall - 2,\n\theight: dimensions.values.inputHeightSmall,\n\tflexShrink: 0,\n\tdisplay: \"flex\",\n\tjustifyContent: \"center\",\n\talignItems: \"center\",\n\tcolor: colors.inputIcon,\n}\n", "export function imageUploadTitle({ short }: { short: boolean } = { short: false }) {\n\tconst base = \"Upload\"\n\treturn short ? base : `${base}\u2026`\n}\n", "import type { OptionalDefaultAssetReference, WithOptionalVekterDefault } from \"@framerjs/framer-runtime/sandbox\"\nimport { isDefaultResponsiveImage } from \"@framerjs/framer-runtime/sandbox\"\nimport { assert, assertNever } from \"@framerjs/shared\"\nimport type {\n\tImageControlDescription,\n\tResponsiveImageControlDescription,\n} from \"library/render/types/PropertyControls.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { isString, isUndefined } from \"utils/typeChecks.ts\"\nimport type { ReducedImageControlProp, ReducedResponsiveImageControlProp } from \"./getReducedControlProps.ts\"\n\ntype ImageControl = (ImageControlDescription | ResponsiveImageControlDescription) &\n\tOptionalDefaultAssetReference &\n\tWithOptionalVekterDefault\n\ntype ReducedImage = ReducedResponsiveImageControlProp | ReducedImageControlProp\n\nexport function reducedImageControlPropMatchesDefault(control: ImageControl, reducedImage: ReducedImage): boolean {\n\tif (control.type === ControlType.Image) {\n\t\tif (control.__defaultAssetReference) {\n\t\t\treturn isString(reducedImage.value) && reducedImage.value === control.__defaultAssetReference\n\t\t}\n\n\t\treturn isUndefined(reducedImage.value)\n\t}\n\n\tif (control.type === ControlType.ResponsiveImage) {\n\t\tassert(reducedImage.type === ControlType.ResponsiveImage, \"Reduced image type is not responsive image\")\n\n\t\tif (control.__vekterDefault && isDefaultResponsiveImage(control.__vekterDefault)) {\n\t\t\tconst defaultImage = control.__vekterDefault\n\t\t\treturn (\n\t\t\t\treducedImage.value === defaultImage.assetReference &&\n\t\t\t\treducedImage.alt === defaultImage.alt &&\n\t\t\t\treducedImage.positionX === defaultImage.positionX &&\n\t\t\t\treducedImage.positionY === defaultImage.positionY\n\t\t\t)\n\t\t}\n\n\t\tif (control.__defaultAssetReference) {\n\t\t\treturn (\n\t\t\t\treducedImage.value === control.__defaultAssetReference &&\n\t\t\t\treducedImage.alt === \"\" &&\n\t\t\t\tisUndefined(reducedImage.positionX) &&\n\t\t\t\tisUndefined(reducedImage.positionY)\n\t\t\t)\n\t\t}\n\n\t\treturn isUndefined(reducedImage.value)\n\t}\n\n\tassertNever(control, \"Invalid image control\")\n}\n", "import { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport type { ImageControlProp, ImageControlPropValue } from \"./ControlProp.ts\"\n\nexport function updateImageControlPropWithNewImage(\n\tcurrentControlProp: ImageControlProp,\n\timage: ImageControlPropValue,\n): ImageControlProp {\n\t// Not setting the focal point because the existing value won't make sense for the\n\t// newly uploaded image.\n\treturn {\n\t\ttype: ControlType.Image,\n\t\tvalue: image,\n\t\tvalueLocalized: currentControlProp.valueLocalized,\n\t\talt: currentControlProp.alt,\n\t\taltLocalized: currentControlProp.altLocalized,\n\t}\n}\n", "import type { AssetReference, AssetSize } from \"@framerjs/assets\"\nimport { isAssetReference, parseAssetReference, updateAssetReferencePreferredSize } from \"@framerjs/assets\"\nimport type { OptionalDefaultAssetReference, WithOptionalVekterDefault } from \"@framerjs/framer-runtime/sandbox\"\nimport { Button, ReadOnlyContext } from \"@framerjs/fresco\"\nimport { assert, shouldBeNever } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { PanelRow } from \"document/components/chrome/properties/rows/PanelRow.tsx\"\nimport { imageUploadTitle } from \"document/components/utils/imageUploadTitle.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { getVariableValue } from \"document/models/CanvasTree/nodes/utils/getVariableValue.ts\"\nimport type { ComputedValue } from \"document/models/CanvasTree/traits/ComputedValue.ts\"\nimport { createComputedValue, isComputedValue } from \"document/models/CanvasTree/traits/ComputedValue.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { createFetchDataValue } from \"document/models/CanvasTree/traits/FetchDataValue.ts\"\nimport type { VariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { NotFound } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport type { ImageControlProp, ImageControlPropValue } from \"document/models/controlProps/ControlProp.ts\"\nimport type {\n\tReducedImageControlProp,\n\tReducedResponsiveImageControlProp,\n} from \"document/models/controlProps/getReducedControlProps.ts\"\nimport { reducedImageControlPropMatchesDefault } from \"document/models/controlProps/reducedImageControlPropMatchesDefault.ts\"\nimport { updateImageControlPropWithNewImage } from \"document/models/controlProps/updateImageControlPropWithNewImage.ts\"\nimport { useDeprecatedEngineState } from \"document/useDeprecatedEngineState.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport { createAssetReferenceForUploadImageResult } from \"document/utils/createAssetReferenceFromImageUpload.ts\"\nimport type {\n\tImageControlDescription,\n\tResponsiveImageControlDescription,\n} from \"library/render/types/PropertyControls.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport type { RelativeNumber } from \"library/render/types/RelativeNumber.ts\"\nimport { useCallback, useId } from \"react\"\nimport { canReadClipboardWithoutPromptingUser, isClipboardSupported } from \"utils/clipboard/clipboard.ts\"\nimport { Clipboard } from \"utils/clipboard/document.ts\"\nimport { titleCase } from \"utils/titleCase.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { chooseFileService } from \"web/pages/project/lib/ChooseFileService.ts\"\nimport type { ImageUploadResultWithOptionalAssetSize } from \"web/pages/project/lib/UploadService.ts\"\nimport { DynamicValueButtonFromContext } from \"../../shared/DynamicValueButtonFromContext.tsx\"\nimport { ImagePopoutButton } from \"../../shared/ImagePopoutButton.tsx\"\nimport { popoutWindow } from \"../../shared/PopoutWindow.tsx\"\nimport { createVariableInScope } from \"../utils/createVariableInScope.ts\"\nimport type { ControlPropChangeHandler } from \"./ControlPropRowChangeHandler.ts\"\nimport { supportedVariableTypesByControlType } from \"./utils/supportedVariableTypesByControlType.ts\"\n\nfunction handleImageUploadResult(results: readonly ImageUploadResultWithOptionalAssetSize[]) {\n\tif (!results[0]) return null\n\tconst image = results[0]\n\tif (!image.filename) return null\n\n\treturn createAssetReferenceForUploadImageResult(image, image.preferredSize)\n}\n\nfunction assetIdentifierDidChange(current: ImageControlPropValue, newValue: ImageControlPropValue): boolean {\n\tif (!isString(current) || !isString(newValue)) return true\n\tconst currentAsset = parseAssetReference(current)\n\tif (!currentAsset) return true\n\tconst newAsset = parseAssetReference(newValue)\n\tif (!newAsset) return true\n\treturn currentAsset.identifier !== newAsset.identifier\n}\n\nconst fullWidthButtonStyle: React.CSSProperties = { width: \"100%\" }\n\ninterface ImageControlPropRowProps {\n\tnodeIds: NodeID[]\n\tcontrolKey: string\n\tcontrol: (ImageControlDescription | ResponsiveImageControlDescription) &\n\t\tOptionalDefaultAssetReference &\n\t\tWithOptionalVekterDefault\n\tcontrolProp: ReducedImageControlProp | ReducedResponsiveImageControlProp\n\tonChange: ControlPropChangeHandler<ControlType.Image>\n\tonUpload: (upload: Promise<AssetReference | null>, prop: string) => void\n\tonContextMenu?: (event: React.MouseEvent<HTMLElement>) => void\n\tsortable?: boolean\n\tdisplayInPopover?: boolean\n\ttraitTypeKeys?: string[]\n\tsupportsVariables?: boolean\n\tsupportsFetchDataValues?: boolean\n\tpopoutId?: string\n}\n\nexport function ImageControlPropRow({\n\tnodeIds,\n\tcontrol,\n\tcontrolKey,\n\tcontrolProp,\n\tonChange,\n\tonUpload,\n\tonContextMenu,\n\tsortable,\n\tpopoutId,\n\tdisplayInPopover,\n\ttraitTypeKeys,\n\tsupportsVariables = false,\n\tsupportsFetchDataValues = false,\n}: ImageControlPropRowProps) {\n\tconst engine = useBaseEngine()\n\n\t// Re-render the row when the `assetMap` changes.\n\tuseDeprecatedEngineState(EngineChange.AssetMap, () => engine.stores.assetStore.assetMap.hash)\n\n\tconst { value } = controlProp\n\n\tconst positionX = controlProp.type === ControlType.ResponsiveImage ? controlProp.positionX : undefined\n\tconst positionY = controlProp.type === ControlType.ResponsiveImage ? controlProp.positionY : undefined\n\n\tconst imageReference = isString(value) ? value : undefined\n\tconst title = control.title || titleCase(controlKey)\n\n\tconst matchesDefault = reducedImageControlPropMatchesDefault(control, controlProp)\n\n\tconst titleElement = sortable ? undefined : title\n\n\tconst altText = controlProp.type === ControlType.ResponsiveImage ? controlProp.alt : NotFound\n\n\tconst updateControlProp = useEngineCallback(\n\t\t(update: (currentControlProp: ImageControlProp) => ImageControlProp) => {\n\t\t\tonChange(controlKey, update, nodeIds)\n\t\t},\n\t\t[onChange, controlKey, nodeIds],\n\t)\n\n\tconst dynamicValuePopoutId = useId()\n\n\tconst changeValue = useCallback(\n\t\t(newValue: string | VariableReference | undefined) => {\n\t\t\tupdateControlProp(current => {\n\t\t\t\tassert(current.type === ControlType.Image)\n\n\t\t\t\tif (assetIdentifierDidChange(current.value, newValue)) {\n\t\t\t\t\t// When the image identifier changes, the current alt text and focal point no longer\n\t\t\t\t\t// make sense for the changed image, so we clear those.\n\t\t\t\t\tconst { alt, positionX: _positionX, positionY: _positionY, ...withoutAltAndFocalPoint } = current\n\t\t\t\t\treturn { ...withoutAltAndFocalPoint, value: newValue }\n\t\t\t\t}\n\n\t\t\t\treturn { ...current, value: newValue }\n\t\t\t})\n\t\t},\n\t\t[updateControlProp],\n\t)\n\n\tconst updateAltText = useEngineCallback(\n\t\t(alt: string) => {\n\t\t\tupdateControlProp(current => {\n\t\t\t\tassert(current.type === ControlType.Image)\n\t\t\t\treturn { ...current, alt }\n\t\t\t})\n\t\t},\n\t\t[updateControlProp],\n\t)\n\n\tconst handleUpload = useEngineCallback(\n\t\t(uploadPromise: Promise<readonly ImageUploadResultWithOptionalAssetSize[]>) => {\n\t\t\tonUpload(uploadPromise.then(handleImageUploadResult), controlKey)\n\t\t},\n\t\t[onUpload, controlKey],\n\t)\n\n\tconst chooseImage = useCallback(async () => {\n\t\thandleUpload(chooseFileService.pickAndUploadImage())\n\t}, [handleUpload])\n\n\tconst changeAssetSize = useCallback(\n\t\t(size: AssetSize) => {\n\t\t\tif (!isString(value) || value === \"\") return\n\t\t\tchangeValue(updateAssetReferencePreferredSize(value, size))\n\t\t},\n\t\t[changeValue, value],\n\t)\n\n\tconst updateFocalPoint = useCallback(\n\t\t(newFocalPositionX: RelativeNumber | undefined, newFocalPositionY: RelativeNumber | undefined) => {\n\t\t\tupdateControlProp(current => {\n\t\t\t\tassert(current.type === ControlType.Image)\n\t\t\t\treturn { ...current, positionX: newFocalPositionX, positionY: newFocalPositionY }\n\t\t\t})\n\t\t},\n\t\t[updateControlProp],\n\t)\n\n\tconst clearImage = useCallback(() => {\n\t\tchangeValue(undefined)\n\t}, [changeValue])\n\n\tconst copyImage = useCallback(() => {\n\t\tif (isString(value) && isAssetReference(value)) {\n\t\t\tvoid Clipboard.copyImage(value)\n\t\t}\n\t}, [value])\n\n\tconst pasteImage = useCallback(async () => {\n\t\tconst pasted = await Clipboard.pasteImage()\n\t\tif (!pasted) return\n\t\tif (pasted.type === \"asset-reference\") {\n\t\t\tchangeValue(pasted.reference)\n\t\t\treturn\n\t\t}\n\t\thandleUpload(chooseFileService.addImages([pasted.file]))\n\t}, [changeValue, handleUpload])\n\n\tconst canPasteImage = useCallback(async () => {\n\t\tif (!isClipboardSupported()) return false\n\t\tif (!(await canReadClipboardWithoutPromptingUser())) return true\n\t\treturn (await Clipboard.pasteImage()) !== null\n\t}, [])\n\n\tconst changeDynamicValue = useEngineCallback(\n\t\t(computedValue: ComputedValue) => {\n\t\t\tupdateControlProp(current => {\n\t\t\t\tassert(current.type === ControlType.Image)\n\t\t\t\treturn updateImageControlPropWithNewImage(current, computedValue)\n\t\t\t})\n\t\t},\n\t\t[updateControlProp],\n\t)\n\n\tconst selectComputedValue = useEngineCallback(\n\t\t(computedValue: ComputedValue) => {\n\t\t\tchangeDynamicValue(computedValue)\n\t\t\tpopoutWindow.navigation.presentPopout(dynamicValuePopoutId)\n\t\t},\n\t\t[changeDynamicValue, dynamicValuePopoutId],\n\t)\n\n\tconst selectFetchDataValue = useCallback(() => {\n\t\tconst initialValue = isString(value) && isAssetReference(value) ? value : undefined\n\n\t\tconst fetchDataValue = createFetchDataValue({\n\t\t\ttype: ControlType.Image,\n\t\t\tvalue: initialValue,\n\t\t})\n\n\t\tconst computedValue = createComputedValue(ControlType.Image, fetchDataValue, [])\n\n\t\tselectComputedValue(computedValue)\n\n\t\treturn computedValue\n\t}, [selectComputedValue, value])\n\n\tconst createVariable = useEngineCallback(\n\t\t(scopeId: NodeID) => {\n\t\t\tconst name = control.title || titleCase(controlKey)\n\t\t\tconst initialValue = isString(value) ? value : undefined\n\t\t\tconst variableRef = createVariableInScope({\n\t\t\t\tengine,\n\t\t\t\tscopeId,\n\t\t\t\ttype: ControlType.Image,\n\t\t\t\tname,\n\t\t\t\tinitialValue,\n\t\t\t})\n\t\t\tif (!variableRef) return\n\n\t\t\tupdateControlProp(current => {\n\t\t\t\tassert(current.type === ControlType.Image)\n\t\t\t\treturn updateImageControlPropWithNewImage(current, variableRef)\n\t\t\t})\n\t\t},\n\t\t[updateControlProp, value, controlKey, control],\n\t)\n\n\tconst removeDynamicValue = useEngineCallback(() => {\n\t\tif (!isDynamicValue(value)) return\n\t\tif (isVariableReference(value)) {\n\t\t\tconst variableValue = getVariableValue(engine, value)\n\t\t\tconst newValue = isString(variableValue) && isAssetReference(variableValue) ? variableValue : undefined\n\t\t\tchangeValue(newValue)\n\t\t} else if (isComputedValue(value)) {\n\t\t\tchangeValue(undefined)\n\t\t} else {\n\t\t\tshouldBeNever(value)\n\t\t}\n\t}, [changeValue, value])\n\n\treturn (\n\t\t<PanelRow\n\t\t\ttitle={titleElement}\n\t\t\tonContextMenu={onContextMenu}\n\t\t\tvariableType={supportedVariableTypesByControlType[ControlType.Image]}\n\t\t\tonCreateVariable={createVariable}\n\t\t\tonRemoveDynamicValue={removeDynamicValue}\n\t\t\tdynamicValue={isDynamicValue(value) ? value : null}\n\t\t\tonSelectVariable={changeValue}\n\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\twithReorderControl={sortable}\n\t\t\tsupportsVariables={supportsVariables}\n\t\t\tsupportsFetchDataValues={supportsFetchDataValues}\n\t\t\tonSelectFetchDataValue={selectFetchDataValue}\n\t\t\treorderColumnCount={2}\n\t\t\tonCopy={copyImage}\n\t\t\tcopyEnabled={isString(value) && isAssetReference(value)}\n\t\t\tonPaste={pasteImage}\n\t\t\tpasteEnabled={canPasteImage}\n\t\t>\n\t\t\t{isDynamicValue(value) ? (\n\t\t\t\t<DynamicValueButtonFromContext\n\t\t\t\t\ttitle={title}\n\t\t\t\t\texpectedType={supportedVariableTypesByControlType[ControlType.Image]}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tsupportsFetchDataValues\n\t\t\t\t\toutputControl={control}\n\t\t\t\t\tonChangeDynamicValue={changeDynamicValue}\n\t\t\t\t\tpopoutId={dynamicValuePopoutId}\n\t\t\t\t\tonRemove={removeDynamicValue}\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<ImagePopoutButton\n\t\t\t\t\t\tpopoutId={popoutId}\n\t\t\t\t\t\timageReference={imageReference}\n\t\t\t\t\t\ttitle={title}\n\t\t\t\t\t\taltText={altText}\n\t\t\t\t\t\tonChangeAltText={control.type === ControlType.ResponsiveImage ? updateAltText : undefined}\n\t\t\t\t\t\tonChange={handleUpload}\n\t\t\t\t\t\tonRemoveImage={value && !matchesDefault ? clearImage : undefined}\n\t\t\t\t\t\tonChangeAssetSize={changeAssetSize}\n\t\t\t\t\t\tpositionX={isString(positionX) ? positionX : undefined}\n\t\t\t\t\t\tpositionY={isString(positionY) ? positionY : undefined}\n\t\t\t\t\t\tonChangeFocalPosition={control.type === ControlType.ResponsiveImage ? updateFocalPoint : undefined}\n\t\t\t\t\t\tdisplayInPopover={displayInPopover}\n\t\t\t\t\t/>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<ReadOnlyContext.Consumer>\n\t\t\t\t\t\t\t{isReadOnly =>\n\t\t\t\t\t\t\t\tvalue ? (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttitle={Dictionary.Clear}\n\t\t\t\t\t\t\t\t\t\tonClick={clearImage}\n\t\t\t\t\t\t\t\t\t\tstyle={fullWidthButtonStyle}\n\t\t\t\t\t\t\t\t\t\tenabled={!isReadOnly && !matchesDefault}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttitle={imageUploadTitle({ short: true })}\n\t\t\t\t\t\t\t\t\t\tonClick={chooseImage}\n\t\t\t\t\t\t\t\t\t\tstyle={fullWidthButtonStyle}\n\t\t\t\t\t\t\t\t\t\tenabled={!isReadOnly}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ReadOnlyContext.Consumer>\n\t\t\t\t\t</div>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</PanelRow>\n\t)\n}\n", "import \"ClearImageButton.styles_1biea51.wyw.css\"; export const clearButton = \"clearButton_c1cd77tn\";", "import { useClickHandlers } from \"@framerjs/app-shared/src/PreferMouseDown.tsx\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport type React from \"react\"\nimport * as styles from \"./ClearImageButton.styles.ts\"\n\ninterface ClearImageButtonProps {\n\tonClick: (event: React.MouseEvent) => void\n}\n\nexport function ClearImageButton({ onClick }: ClearImageButtonProps) {\n\tconst clickHandlers = useClickHandlers(onClick)\n\n\treturn (\n\t\t<div title={Dictionary.Clear} className={styles.clearButton} {...clickHandlers}>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\">\n\t\t\t\t<g transform=\"translate(2.5 2.5)\">\n\t\t\t\t\t<path d=\"M 0 0 L 5 5\" fill=\"transparent\" strokeWidth=\"1.5\" stroke=\"currentColor\" strokeLinecap=\"round\" />\n\t\t\t\t\t<path d=\"M 5 0 L 0 5\" fill=\"transparent\" strokeWidth=\"1.5\" stroke=\"currentColor\" strokeLinecap=\"round\" />\n\t\t\t\t</g>\n\t\t\t</svg>\n\t\t</div>\n\t)\n}\n", "import \"ColorPickerPreview.styles_1dv1gxq.wyw.css\"; export const base = \"base_b1rdbouv\";\nexport const baseLarge = \"baseLarge_b1me0317\";\nexport const fill = \"fill_fxf7oz7\";\nexport const fillLarge = \"fillLarge_f158k4nv\";\nexport const dimmed = \"dimmed_de5dxw6\";\nexport const noInset = \"noInset_nnn1paw\";\nexport const checkerboard = \"checkerboard_cs5h0q\";\nexport const checkerboardLarge = \"checkerboardLarge_c18f05v6\";", "import { cx } from \"@linaria/core\"\nimport type React from \"react\"\nimport { ClearImageButton } from \"../ClearImageButton.tsx\"\nimport * as styles from \"./ColorPickerPreview.styles.ts\"\n\ninterface Props {\n\tbackground: string | undefined\n\tonClear?: () => void\n\tlarge?: boolean\n\tnoInset?: boolean\n\tdimmed?: boolean\n\tshowFallbackImage?: boolean\n\tstyle?: React.CSSProperties\n\tbackgroundPositionX?: React.CSSProperties[\"backgroundPositionX\"]\n\tbackgroundPositionY?: React.CSSProperties[\"backgroundPositionY\"]\n}\n\nexport function ColorPickerPreview({\n\tbackground,\n\tonClear,\n\tlarge,\n\tnoInset = false,\n\tdimmed = false,\n\tstyle,\n\tbackgroundPositionX,\n\tbackgroundPositionY,\n}: Props) {\n\t// Shadows and images don't render correctly without forcing a re-render\n\tconst key = background?.includes(\"gradient\") || background?.includes(\"url\") ? background : undefined\n\n\treturn (\n\t\t<div\n\t\t\tkey={key}\n\t\t\tclassName={cx(styles.base, large && styles.baseLarge, dimmed && styles.dimmed, noInset && styles.noInset)}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t<div className={cx(styles.checkerboard, large && styles.checkerboardLarge)} />\n\t\t\t<div\n\t\t\t\tclassName={cx(styles.fill, large && styles.fillLarge)}\n\t\t\t\tstyle={fillBackgroundStyles(background, backgroundPositionX, backgroundPositionY)}\n\t\t\t/>\n\t\t\t{onClear && (\n\t\t\t\t<ClearImageButton\n\t\t\t\t\tonClick={event => {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\tonClear()\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\nfunction fillBackgroundStyles(\n\tbackground: string | undefined,\n\tbackgroundPositionX: React.CSSProperties[\"backgroundPositionX\"],\n\tbackgroundPositionY: React.CSSProperties[\"backgroundPositionY\"],\n): React.CSSProperties {\n\treturn {\n\t\tbackground: background,\n\t\tbackgroundSize: \"cover\",\n\t\tbackgroundRepeat: \"no-repeat\",\n\t\tbackgroundPosition: \"center center\",\n\t\tbackgroundPositionX: backgroundPositionX ?? \"center\",\n\t\tbackgroundPositionY: backgroundPositionY ?? \"center\",\n\t}\n}\n", "import type { AttachmentEdge, AttachmentEdgePreferences } from \"@framerjs/fresco/src/components/Popover\"\nimport { useResolvedImageThumbnail } from \"document/components/utils/useResolvedImageThumbnail.ts\"\nimport { NotFound } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport type { Point } from \"library/render/types/Point.ts\"\nimport type React from \"react\"\nimport { ColorPickerPreview } from \"./ColorPicker/ColorPickerPreview.tsx\"\nimport type { ImagePopoutProps } from \"./ImagePopout.tsx\"\nimport { ImagePopout } from \"./ImagePopout.tsx\"\nimport { PopoutButton } from \"./PopoutButton.tsx\"\n\ntype Props = ImagePopoutProps & {\n\ttitle: string\n\tdisplayInPopover?: boolean\n\tpopoverOffset?: Point\n\tpopoverAttachmentEdge?: AttachmentEdge | AttachmentEdgePreferences\n\tshowArrow?: boolean\n\tfallbackToModalAppearance?: boolean\n\tpopoutId?: string\n\tpopoutButtonClassName?: string\n\tonClear?: () => void\n\tpreviewWithoutInset?: boolean\n\tpreviewDimmed?: boolean\n\tonMouseDown?: (event: React.MouseEvent) => void\n\tonBeforePresent?: () => boolean\n}\n\nexport function ImagePopoutButton({\n\tonChange,\n\timageReference,\n\ttitle,\n\taltText = NotFound,\n\taltTextPlaceholder,\n\tonChangeAltText,\n\tpositionX,\n\tpositionY,\n\tonChangeFocalPosition,\n\tdisplayInPopover,\n\tpopoverOffset,\n\tpopoverAttachmentEdge,\n\tshowArrow,\n\tfallbackToModalAppearance,\n\tonRemoveImage,\n\tonChangeAssetSize,\n\tpopoutId,\n\tpopoutButtonClassName,\n\tpreviewWithoutInset,\n\tpreviewDimmed,\n\tonMouseDown,\n\tonClear,\n\t...rest\n}: Props) {\n\tconst background = useResolvedImageThumbnail(imageReference)\n\n\treturn (\n\t\t<PopoutButton\n\t\t\tid={popoutId}\n\t\t\tpopout={\n\t\t\t\t<ImagePopout\n\t\t\t\t\timageReference={imageReference}\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\tonRemoveImage={onRemoveImage}\n\t\t\t\t\tonChangeAssetSize={onChangeAssetSize}\n\t\t\t\t\taltText={altText}\n\t\t\t\t\taltTextPlaceholder={altTextPlaceholder}\n\t\t\t\t\tonChangeAltText={onChangeAltText}\n\t\t\t\t\tpositionX={positionX}\n\t\t\t\t\tpositionY={positionY}\n\t\t\t\t\tonChangeFocalPosition={onChangeFocalPosition}\n\t\t\t\t/>\n\t\t\t}\n\t\t\tnavigationTitle={title}\n\t\t\tdisplayInPopover={displayInPopover}\n\t\t\tpopoverOffset={popoverOffset}\n\t\t\tpopoverAttachmentEdge={popoverAttachmentEdge}\n\t\t\tfallbackToModalAppearance\n\t\t\tclassName={popoutButtonClassName}\n\t\t\tonMouseDown={onMouseDown}\n\t\t\tshowArrow={showArrow}\n\t\t\t{...rest}\n\t\t>\n\t\t\t<ColorPickerPreview\n\t\t\t\tbackground={background}\n\t\t\t\tbackgroundPositionX={positionX}\n\t\t\t\tbackgroundPositionY={positionY}\n\t\t\t\tnoInset={previewWithoutInset}\n\t\t\t\tdimmed={previewDimmed}\n\t\t\t\tonClear={onClear}\n\t\t\t/>\n\t\t</PopoutButton>\n\t)\n}\n", "import { IconInputClose, InputWrapper, TextArea, TextInput, useReadOnly } from \"@framerjs/fresco\"\nimport { IconButton } from \"@framerjs/fresco/components/IconButton\"\nimport { assert, shouldBeNever } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { PanelRow } from \"document/components/chrome/properties/rows/PanelRow.tsx\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { getVariableValue } from \"document/models/CanvasTree/nodes/utils/getVariableValue.ts\"\nimport type { ComputedValue } from \"document/models/CanvasTree/traits/ComputedValue.ts\"\nimport { createComputedValue, isComputedValue } from \"document/models/CanvasTree/traits/ComputedValue.ts\"\nimport type { DynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { createFetchDataValue } from \"document/models/CanvasTree/traits/FetchDataValue.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { ReducedStringControlProp } from \"document/models/controlProps/getReducedControlProps.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport type { StringControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { useCallback } from \"react\"\nimport { blurActiveElementAndPreventFocus } from \"utils/blurOnMouseDownAndPreventFocus.ts\"\nimport { titleCase } from \"utils/titleCase.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { DynamicValueButtonFromContext } from \"../../shared/DynamicValueButtonFromContext.tsx\"\nimport { popoutWindow } from \"../../shared/PopoutWindow.tsx\"\nimport { createVariableInScope } from \"../utils/createVariableInScope.ts\"\nimport { doubleColumn } from \"../utils/doubleColumn.ts\"\nimport type { ControlPropChangeHandler } from \"./ControlPropRowChangeHandler.ts\"\nimport * as styles from \"./StringControlPropRow.styles.ts\"\nimport { supportedVariableTypesByControlType } from \"./utils/supportedVariableTypesByControlType.ts\"\n\nconst controlType = ControlType.String\n\nfunction getPopoutId(prop: string): string {\n\treturn `string-input-row-popout-${prop}`\n}\n\ninterface Props {\n\tnodeIds: NodeID[]\n\tcontrolKey: string\n\tcontrol: StringControlDescription\n\tcontrolProp: ReducedStringControlProp\n\tonChange: ControlPropChangeHandler<ControlType.String>\n\tonContextMenu?: (event: React.MouseEvent<HTMLElement>) => void\n\tsortable?: boolean\n\ttraitTypeKeys?: string[]\n\tsupportsVariables?: boolean\n\tsupportsComputedValues?: boolean\n\tsupportsFetchDataValues?: boolean\n\trowDelete?: {\n\t\tonDelete: () => void\n\t\tenabled: boolean\n\t\ttitle?: string\n\t}\n}\n\nexport function StringControlPropRow({\n\tnodeIds,\n\tcontrol,\n\tcontrolKey,\n\tcontrolProp,\n\tonChange,\n\tonContextMenu,\n\tsortable,\n\ttraitTypeKeys,\n\tsupportsVariables = false,\n\tsupportsComputedValues = false,\n\tsupportsFetchDataValues = false,\n\trowDelete,\n}: Props) {\n\tconst engine = useBaseEngine()\n\tconst readOnly = useReadOnly()\n\n\tconst { value } = controlProp\n\tconst stringValue = isString(value) ? value : \"\"\n\tconst title = sortable ? undefined : control.title || titleCase(controlKey)\n\tconst defaultValue = isString(control.defaultValue) ? control.defaultValue : undefined\n\n\tconst popoutId = getPopoutId(controlKey)\n\n\tconst changeValue = useCallback(\n\t\t(newValue: string | null | DynamicValue) => {\n\t\t\tonChange(controlKey, current => ({ ...current, value: newValue }), nodeIds)\n\t\t},\n\t\t[onChange, controlKey, nodeIds],\n\t)\n\n\tconst clearValue = useCallback(() => {\n\t\tassert(control.optional, \"Only optional controls can be cleared\")\n\t\tchangeValue(null)\n\t}, [changeValue, control])\n\n\tconst clearValueAndPreventFocus = useCallback(\n\t\t(event: React.MouseEvent) => {\n\t\t\tblurActiveElementAndPreventFocus(event)\n\t\t\tclearValue()\n\t\t},\n\t\t[clearValue],\n\t)\n\n\tconst resetToDefault = useCallback(() => {\n\t\tif (isString(defaultValue)) {\n\t\t\tchangeValue(defaultValue)\n\t\t}\n\t}, [changeValue, defaultValue])\n\n\tconst createVariable = useEngineCallback(\n\t\t(scopeId: NodeID) => {\n\t\t\tconst name = control.title || titleCase(controlKey)\n\t\t\tconst initialValue = isString(value) ? value : (defaultValue ?? \"\")\n\t\t\tconst variableRef = createVariableInScope({\n\t\t\t\tengine,\n\t\t\t\tscopeId,\n\t\t\t\ttype: controlType,\n\t\t\t\tname,\n\t\t\t\tinitialValue,\n\t\t\t\toptions: {\n\t\t\t\t\tplaceholder: control.placeholder,\n\t\t\t\t\tdisplayTextArea: control.displayTextArea,\n\t\t\t\t},\n\t\t\t})\n\t\t\tif (variableRef) changeValue(variableRef)\n\t\t},\n\t\t[changeValue, controlKey, value, defaultValue, control],\n\t)\n\n\tconst selectComputedValue = useEngineCallback(\n\t\t(computedValue: ComputedValue) => {\n\t\t\tchangeValue(computedValue)\n\t\t\tpopoutWindow.navigation.presentPopout(popoutId)\n\t\t},\n\t\t[changeValue, popoutId],\n\t)\n\n\tconst selectFetchDataValue = useEngineCallback(() => {\n\t\tlet initialValue = \"\"\n\t\tif (isString(value)) initialValue = value\n\t\tif (isVariableReference(value)) {\n\t\t\tconst variableValue = getVariableValue(engine, value)\n\t\t\tinitialValue = isString(variableValue) ? variableValue : (defaultValue ?? \"\")\n\t\t}\n\n\t\tconst fetchDataValue = createFetchDataValue({\n\t\t\ttype: ControlType.String,\n\t\t\tvalue: initialValue,\n\t\t})\n\t\tconst computedValue = createComputedValue(ControlType.String, fetchDataValue, [])\n\n\t\tselectComputedValue(computedValue)\n\n\t\treturn computedValue\n\t}, [selectComputedValue, value, defaultValue])\n\n\tconst removeDynamicValue = useEngineCallback(() => {\n\t\tif (!isDynamicValue(value)) return\n\n\t\tif (isVariableReference(value)) {\n\t\t\tconst variableValue = getVariableValue(engine, value)\n\t\t\tconst newValue = isString(variableValue) ? variableValue : (defaultValue ?? \"\")\n\t\t\tchangeValue(newValue)\n\t\t} else if (isComputedValue(value)) {\n\t\t\tchangeValue(defaultValue ?? \"\")\n\t\t} else {\n\t\t\tshouldBeNever(value)\n\t\t}\n\t}, [changeValue, value, defaultValue])\n\n\treturn (\n\t\t<PanelRow\n\t\t\ttitle={title}\n\t\t\tonContextMenu={onContextMenu}\n\t\t\tonResetToDefault={!sortable ? resetToDefault : undefined}\n\t\t\tresetToDefaultEnabled={isString(defaultValue) && defaultValue !== value}\n\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\twithReorderControl={sortable}\n\t\t\tsupportsVariables={supportsVariables}\n\t\t\tvariableType={supportedVariableTypesByControlType[controlType]}\n\t\t\tonCreateVariable={createVariable}\n\t\t\tonRemoveDynamicValue={removeDynamicValue}\n\t\t\tdynamicValue={isDynamicValue(value) ? value : null}\n\t\t\tonSelectVariable={changeValue}\n\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\tsupportsFetchDataValues={supportsFetchDataValues}\n\t\t\tonSelectFetchDataValue={selectFetchDataValue}\n\t\t\tonSelectComputedValue={selectComputedValue}\n\t\t\tcomputedValuePopoutId={popoutId}\n\t\t\tdeleteEnabled={rowDelete ? rowDelete.enabled : control.optional === true && value !== null}\n\t\t\tdeleteTitle={rowDelete?.title ?? Dictionary.Clear}\n\t\t\tonDelete={rowDelete?.onDelete ?? clearValue}\n\t\t>\n\t\t\t{isDynamicValue(value) ? (\n\t\t\t\t<DynamicValueButtonFromContext\n\t\t\t\t\ttitle={title}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tsupportsComputedValues\n\t\t\t\t\toutputControl={control}\n\t\t\t\t\texpectedType={supportedVariableTypesByControlType[controlType]}\n\t\t\t\t\tsupportsFetchDataValues={supportsFetchDataValues}\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\tpopoutId={popoutId}\n\t\t\t\t\tonChangeDynamicValue={changeValue}\n\t\t\t\t\tonRemove={removeDynamicValue}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div style={sortable ? undefined : doubleColumn}>\n\t\t\t\t\t{control.displayTextArea ? (\n\t\t\t\t\t\t<TextArea\n\t\t\t\t\t\t\tvalue={stringValue}\n\t\t\t\t\t\t\tconstantChange={false}\n\t\t\t\t\t\t\tonChange={changeValue}\n\t\t\t\t\t\t\tplaceholder={control.placeholder}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<InputWrapper>\n\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\ttype={control.obscured ? \"password\" : \"text\"}\n\t\t\t\t\t\t\t\tvalue={stringValue}\n\t\t\t\t\t\t\t\tonChange={changeValue}\n\t\t\t\t\t\t\t\tplaceholder={control.placeholder}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{control.optional && value !== null && (\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\ticon={<IconInputClose />}\n\t\t\t\t\t\t\t\t\tonMouseDown={clearValueAndPreventFocus}\n\t\t\t\t\t\t\t\t\tlabel={Dictionary.Clear}\n\t\t\t\t\t\t\t\t\tclassName={styles.clearButton}\n\t\t\t\t\t\t\t\t\ttitle={Dictionary.Clear}\n\t\t\t\t\t\t\t\t\tenabled={!readOnly}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</InputWrapper>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</PanelRow>\n\t)\n}\n", "import \"StringControlPropRow.styles_pyvz3j.wyw.css\"; export const clearButton = \"clearButton_c1p3ac2x\";", "import {\n\tEmptyState,\n\tIconInputSearch,\n\tInputWrapper,\n\tReadOnlyContext,\n\ttype ScrollToAlignment,\n\tTextInput,\n\tVirtualGrid,\n\tuseIsWithinPopover,\n\tuseReadOnly,\n} from \"@framerjs/fresco\"\nimport type { AttachmentEdgePreferences } from \"@framerjs/fresco/src/components/Popover\"\nimport type { InputVariant } from \"@framerjs/fresco/src/components/types.ts\"\nimport { colors, dimensions, palette } from \"@framerjs/fresco/tokens\"\nimport {\n\tassert,\n\tMixed,\n\ttype ModuleBareIdentifierString,\n\ttype ModuleExportIdentifierString,\n\ttype ModuleIdentifierString,\n\tasGlobalId,\n\tassertNever,\n\tisEmptyObject,\n\tisMixed,\n\tisModuleExportIdentifier,\n\tisModuleIdentifier,\n} from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { useDimensionValue } from \"app/agent/hooks/useDimensionValue.ts\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { variableToCSSVariableName } from \"code-generation/utils/CSSVariableDefinitionCollector.ts\"\nimport type { VectorColor } from \"code-generation/utils/annotations.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { CodeComponentNode, NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { getVariableValue } from \"document/models/CanvasTree/nodes/utils/getVariableValue.ts\"\nimport { isCodeComponentNode, isColorStyleTokenNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { type VariableReference, isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { NotFound, type Reduced, isNotFound } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { isTokenCSSVariable, tokenIdFromCSSVariable } from \"document/models/CanvasTree/utils/tokens.ts\"\nimport type { VectorSetItemControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport type { ReducedVectorSetItemControlProp } from \"document/models/controlProps/getReducedControlProps.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { ControlType, clamp, isEqual } from \"library/index.ts\"\nimport type { VectorSetItemControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport type { CSSVariableName } from \"prosemirror/variables.ts\"\nimport React, { useCallback, useMemo } from \"react\"\nimport { commonValue } from \"utils/commonValue.ts\"\nimport { isLightOrDarkColor } from \"utils/isLightOrDarkColor.ts\"\nimport { titleCase } from \"utils/titleCase.ts\"\nimport { isNumber, isString } from \"utils/typeChecks.ts\"\nimport {\n\ttype VectorSetInfo,\n\ttype VectorSetListItem,\n\tdefaultIdentifierForControl,\n\tgetVectorSetInfo,\n\tinfoForVariableCreate,\n\tprojectVectorSetIdentifier,\n\tvectorSetInfoForPopout,\n} from \"utils/vectorSets.ts\"\nimport { record } from \"web/lib/tracker.ts\"\nimport { useDarkMode } from \"web/lib/useDarkMode.ts\"\nimport { PopoutButtonBackgroundPreview } from \"../../shared/PopoutButtonBackgroundPreview.tsx\"\nimport { PopoutButtonPreviewIconWrapper } from \"../../shared/PopoutButtonPreviewIconWrapper.tsx\"\nimport { PopoutButtonWithPreview } from \"../../shared/PopoutButtonWithPreview.tsx\"\nimport { PopoutContext } from \"../../shared/PopoutContext.ts\"\nimport { VariableReferenceButton } from \"../../shared/VariableReferenceButton.tsx\"\nimport { VectorSetIcon, useVectorThumbnail } from \"../../shared/VectorSetPreview.tsx\"\nimport { getNoSearchResultProps } from \"../../shared/utils/getNoSearchResultProps.ts\"\nimport { PanelRow } from \"../rows/PanelRow.tsx\"\nimport { createVariableInScope } from \"../utils/createVariableInScope.ts\"\nimport { useSubscribeToColorStyles, useSubscribeToFillValue } from \"../utils/useSubscribeToFillValue.ts\"\nimport * as styles from \"./VectorSetItemControlPropRow.styles.ts\"\nimport { VECTOR_SET_GRID_COLUMNS } from \"./VectorSetItemControlPropRow.styles.ts\"\nimport { supportedVariableTypesByControlType } from \"./utils/supportedVariableTypesByControlType.ts\"\n\nexport const VectorSetItemControlPropRow = React.memo(function VectorSetItemControlPropRow({\n\tcontrol,\n\tcontrolKey,\n\tcontrolProp,\n\tsupportsVariables = true,\n\ttitle,\n\ttraitTypeKeys,\n\tonChange,\n}: {\n\tcontrol: VectorSetItemControlDescription\n\tcontrolKey: string\n\tcontrolProp: ReducedVectorSetItemControlProp\n\tsupportsVariables?: boolean\n\ttitle?: string\n\ttraitTypeKeys?: string[]\n\tonChange(value: VectorSetItemControlProp, prop: string): void\n}) {\n\tconst engine = useBaseEngine()\n\n\t// When the value is a local module identifier that doesn't exist in the external project, we\n\t// remap to the external identifier.\n\tconst value =\n\t\tisVariableReference(controlProp.value) || isMixed(controlProp.value) || isNotFound(controlProp.value)\n\t\t\t? controlProp.value\n\t\t\t: (projectVectorSetIdentifier(engine.tree, control, controlProp.value) ?? controlProp.value)\n\n\tconst onCreateVariable = useEngineCallback(\n\t\t(scopeId: NodeID) => {\n\t\t\tif (isVariableReference(value)) return\n\t\t\tconst info = infoForVariableCreate(value, engine.tree, engine.stores.modulesStore, control)\n\t\t\tif (!info) return\n\n\t\t\tconst variableRef = createVariableInScope({\n\t\t\t\t...info,\n\t\t\t\tengine,\n\t\t\t\tscopeId,\n\t\t\t\ttype: ControlType.VectorSetItem,\n\t\t\t\tname: Dictionary.Vector,\n\t\t\t})\n\n\t\t\tif (!variableRef) return\n\n\t\t\tonChange({ type: ControlType.VectorSetItem, value: variableRef }, controlKey)\n\t\t},\n\t\t[value, onChange, control, controlKey],\n\t)\n\n\tconst onRemoveDynamicValue = useEngineCallback(() => {\n\t\tif (!isVariableReference(value)) return\n\t\tconst variableValue = getVariableValue(engine, value)\n\n\t\tonChange(\n\t\t\t{\n\t\t\t\ttype: ControlType.VectorSetItem,\n\t\t\t\tvalue: isString(variableValue) && isModuleExportIdentifier(variableValue) ? variableValue : undefined,\n\t\t\t},\n\t\t\tcontrolKey,\n\t\t)\n\t}, [value, onChange, controlKey])\n\n\tconst onSelectVariable = useEngineCallback(\n\t\t(variableRef: VariableReference) => {\n\t\t\tonChange({ type: ControlType.VectorSetItem, value: variableRef }, controlKey)\n\t\t},\n\t\t[onChange, controlKey],\n\t)\n\n\tconst onChangeItem = useEngineCallback(\n\t\t(item: ModuleExportIdentifierString) => {\n\t\t\tonChange({ type: ControlType.VectorSetItem, value: item }, controlKey)\n\t\t\trecord(\"vector_select\", { controlType: \"control\" })\n\t\t},\n\t\t[onChange, controlKey],\n\t)\n\n\tconst defaultIdentifier = useDefaultVectorSetIdentifier(control)\n\n\tconst onResetToDefault = useEngineCallback(() => {\n\t\tonChange({ type: ControlType.VectorSetItem, value: defaultIdentifier }, controlKey)\n\t}, [onChange, controlKey, defaultIdentifier])\n\n\tif (!defaultIdentifier) return null\n\n\tconst identifier = isNotFound(value) ? defaultIdentifier : (value ?? defaultIdentifier)\n\n\treturn (\n\t\t<PanelRow\n\t\t\ttitle={title ?? control.title ?? titleCase(controlKey)}\n\t\t\tsupportsVariables={supportsVariables}\n\t\t\tvariableType={supportedVariableTypesByControlType[ControlType.VectorSetItem]}\n\t\t\tdynamicValue={isDynamicValue(value) ? value : null}\n\t\t\tonSelectVariable={onSelectVariable}\n\t\t\tonCreateVariable={onCreateVariable}\n\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\tonRemoveDynamicValue={onRemoveDynamicValue}\n\t\t\tvectorSetIdentifier={asGlobalId(control.setModuleId)}\n\t\t\tonResetToDefault={onResetToDefault}\n\t\t\tresetToDefaultEnabled={identifier !== defaultIdentifier}\n\t\t>\n\t\t\t{isVariableReference(identifier) ? (\n\t\t\t\t<VariableReferenceButton\n\t\t\t\t\tonRemove={onRemoveDynamicValue}\n\t\t\t\t\texpectedType={supportedVariableTypesByControlType[ControlType.VectorSetItem]}\n\t\t\t\t\treference={identifier}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<VectorSetItemPopoutButton\n\t\t\t\t\tonChange={onChangeItem}\n\t\t\t\t\tidentifier={identifier}\n\t\t\t\t\tdefaultIdentifier={defaultIdentifier}\n\t\t\t\t\tpopoutId={`vector-set-item-${controlKey}`}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</PanelRow>\n\t)\n})\n\nexport function useDefaultVectorSetIdentifier(\n\tcontrol: VectorSetItemControlDescription,\n): ModuleExportIdentifierString | undefined {\n\tconst engine = useBaseEngine()\n\tconst { modulesStore } = engine.stores\n\treturn useEngineState(\n\t\t() => defaultIdentifierForControl(control, engine.tree, modulesStore),\n\t\t[control.defaultValue.identifier, control.defaultValue.moduleId],\n\t\t[EngineChange.Tree, modulesStore],\n\t)\n}\n\ninterface VectorSetItemRowProps {\n\tcodeComponentIdentifier: ModuleExportIdentifierString\n\tdynamicVectorSetIdentifier: Reduced<VariableReference | undefined>\n\t// Allow showing all selected vectors in the popout\n\tactiveIdentifiers?: Set<ModuleExportIdentifierString>\n\tnodeIds: NodeID[]\n\tsupportsVariables?: boolean\n}\n\n/**\n * A control that selects a Vector from a Vector Set, changing the code component identifier to the\n * new set item.\n */\nexport const VectorSetItemRow = React.memo(function VectorSetItemRow({\n\tcodeComponentIdentifier,\n\tdynamicVectorSetIdentifier,\n\tactiveIdentifiers,\n\tnodeIds,\n\tsupportsVariables = true,\n}: VectorSetItemRowProps) {\n\tconst engine = useBaseEngine()\n\tconst { isDarkMode } = useDarkMode()\n\tconst onChange = useEngineCallback(\n\t\t(value: ModuleBareIdentifierString | VariableReference) => {\n\t\t\tconst update: Partial<CodeComponentNode> = isVariableReference(value)\n\t\t\t\t? { dynamicVectorSetIdentifier: value }\n\t\t\t\t: { codeComponentIdentifier: value, dynamicVectorSetIdentifier: undefined }\n\n\t\t\tfor (const node of engine.tree.getNodesWithTrait(nodeIds, isCodeComponentNode)) {\n\t\t\t\tnode.set(update)\n\t\t\t\trecord(\"vector_select\", { controlType: \"instance\" })\n\t\t\t}\n\t\t},\n\t\t[nodeIds],\n\t)\n\n\tconst onCreateVariable = useEngineCallback(\n\t\t(scopeId: NodeID) => {\n\t\t\tconst info = infoForVariableCreate(codeComponentIdentifier, engine.tree, engine.stores.modulesStore)\n\t\t\tif (!info) return\n\n\t\t\tconst variableRef = createVariableInScope({\n\t\t\t\t...info,\n\t\t\t\tengine,\n\t\t\t\tscopeId,\n\t\t\t\ttype: ControlType.VectorSetItem,\n\t\t\t\tname: Dictionary.Icon,\n\t\t\t})\n\n\t\t\tif (!variableRef) return\n\n\t\t\tfor (const node of engine.tree.getNodesWithTrait(nodeIds, isCodeComponentNode)) {\n\t\t\t\tnode.set({ dynamicVectorSetIdentifier: variableRef })\n\t\t\t}\n\t\t},\n\t\t[nodeIds, codeComponentIdentifier],\n\t)\n\n\tconst onRemoveDynamicValue = useEngineCallback(() => {\n\t\tif (!isVariableReference(dynamicVectorSetIdentifier)) return\n\t\tconst variableValue = getVariableValue(engine, dynamicVectorSetIdentifier)\n\n\t\tfor (const node of engine.tree.getNodesWithTrait(nodeIds, isCodeComponentNode)) {\n\t\t\tnode.set({\n\t\t\t\tcodeComponentIdentifier: isString(variableValue) ? variableValue : node.codeComponentIdentifier,\n\t\t\t\tdynamicVectorSetIdentifier: undefined,\n\t\t\t})\n\t\t}\n\t}, [dynamicVectorSetIdentifier, nodeIds])\n\n\tconst cssVariableValues = useEngineState(\n\t\t() => {\n\t\t\tconst singleNode = engine.tree.getNodeWithTrait(nodeIds[0], isCodeComponentNode)\n\t\t\tconst currentControlValues = singleNode?.getResolvedControlPropValues(engine.componentLoader)\n\t\t\tconst style: Record<CSSVariableName, string | number | undefined> = {}\n\t\t\tfor (const controlKey in currentControlValues) {\n\t\t\t\tconst key = variableToCSSVariableName(controlKey)\n\t\t\t\tconst value = currentControlValues[controlKey]\n\t\t\t\t// VECTOR @TODO - Support other types of values.\n\t\t\t\tif (!isString(value) && !isNumber(value)) continue\n\n\t\t\t\tif (isTokenCSSVariable(value)) {\n\t\t\t\t\tconst id = tokenIdFromCSSVariable(value)\n\t\t\t\t\tconst localTokenNode = engine.tree.get(id)\n\t\t\t\t\tif (!isColorStyleTokenNode(localTokenNode)) continue\n\t\t\t\t\tstyle[key] = localTokenNode.colorForMode(isDarkMode)\n\t\t\t\t} else {\n\t\t\t\t\tstyle[key] = value\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn style\n\t\t},\n\t\t[nodeIds, isDarkMode],\n\t\t[EngineChange.Tree, EngineChange.ColorStyleTokens],\n\t\t{ deepEqual: true },\n\t)\n\n\tassert(isModuleIdentifier(codeComponentIdentifier), \"Vector codeComponentIdentifier must be a module identifier\")\n\n\tconst setIdentifier = useVectorSetInfo(codeComponentIdentifier)?.moduleId\n\n\t// If there's a mixed selection of variables, or any variable reference but not all the same,\n\t// show mixed state. When mixed, don\u2019t select vectors in the popout.\n\tconst activeIdentifier: Reduced<ModuleExportIdentifierString> = useMemo(() => {\n\t\tif (isMixed(dynamicVectorSetIdentifier)) return Mixed\n\t\treturn activeIdentifiers ? commonValue(activeIdentifiers) : codeComponentIdentifier\n\t}, [dynamicVectorSetIdentifier, activeIdentifiers, codeComponentIdentifier])\n\n\treturn (\n\t\t<PanelRow\n\t\t\ttitle={Dictionary.Icon}\n\t\t\tsupportsVariables={supportsVariables}\n\t\t\tvariableType={supportedVariableTypesByControlType[ControlType.VectorSetItem]}\n\t\t\tdynamicValue={isDynamicValue(dynamicVectorSetIdentifier) ? dynamicVectorSetIdentifier : null}\n\t\t\tonSelectVariable={onChange}\n\t\t\tonCreateVariable={onCreateVariable}\n\t\t\tonRemoveDynamicValue={onRemoveDynamicValue}\n\t\t\tvectorSetIdentifier={setIdentifier}\n\t\t>\n\t\t\t{isVariableReference(dynamicVectorSetIdentifier) ? (\n\t\t\t\t<VariableReferenceButton\n\t\t\t\t\tonRemove={onRemoveDynamicValue}\n\t\t\t\t\texpectedType={supportedVariableTypesByControlType[ControlType.VectorSetItem]}\n\t\t\t\t\treference={dynamicVectorSetIdentifier}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<VectorSetItemPopoutButton\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\tidentifier={activeIdentifier}\n\t\t\t\t\tdefaultIdentifier={codeComponentIdentifier}\n\t\t\t\t\tactiveIdentifiers={isMixed(dynamicVectorSetIdentifier) ? undefined : activeIdentifiers}\n\t\t\t\t\tsvgThumbnailStyle={cssVariableValues}\n\t\t\t\t\tpopoutId=\"vector-set-item\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t</PanelRow>\n\t)\n})\n\nexport function useVectorSetInfo(identifier: string): VectorSetInfo | undefined {\n\tconst engine = useBaseEngine()\n\tconst { modulesStore } = engine.stores\n\treturn useEngineState(\n\t\t() => getVectorSetInfo(modulesStore, engine.tree, identifier),\n\t\t[identifier],\n\t\t[EngineChange.Tree, modulesStore],\n\t)\n}\n\nfunction contrastColorFromVectorColorAnnotation(\n\tcolor: VectorColor,\n\tstyle?: React.CSSProperties,\n): string | number | undefined {\n\tconst type = color.type\n\n\tswitch (type) {\n\t\tcase \"variable\":\n\t\t\treturn style?.[`--${color.value}`]\n\t\tcase \"static\":\n\t\t\treturn color.value\n\t\tdefault:\n\t\t\tassertNever(type)\n\t}\n}\n\nfunction useStyle(color: VectorColor | undefined, style?: React.CSSProperties, fallback?: string) {\n\treturn useMemo(() => {\n\t\tif (!color) return style\n\n\t\tconst type = color.type\n\n\t\tswitch (type) {\n\t\t\tcase \"variable\": {\n\t\t\t\tconst key: CSSVariableName = `--${color.value}`\n\t\t\t\tconst value = style?.[key] ?? fallback\n\t\t\t\treturn { ...style, [key]: value }\n\t\t\t}\n\t\t\tcase \"static\":\n\t\t\t\treturn style\n\t\t\tdefault:\n\t\t\t\tassertNever(type)\n\t\t}\n\t}, [color, style, fallback])\n}\n\nconst attachmentEdges: AttachmentEdgePreferences = [\"right\", \"left\"]\n\n/**\n * Vectors that have only 1 color serialize the information in the color property. The annotation\n * specifies if we are using a variable, or a solid color allowing us to pick a high-contrast\n * background.\n */\nfunction useHighContrastBackground(\n\tannotation: VectorColor | undefined,\n\tsvgThumbnailStyle?: React.CSSProperties,\n): { styleOverrides?: React.CSSProperties; background?: string } {\n\tconst { isDarkMode } = useDarkMode()\n\tconst fallback = isDarkMode ? palette.white100 : palette.dark100\n\tconst styleOverrides = useStyle(annotation, svgThumbnailStyle, fallback)\n\tconst color = annotation ? contrastColorFromVectorColorAnnotation(annotation, styleOverrides) : undefined\n\tconst value = useSubscribeToFillValue(color)?.value ?? color\n\tif (!value) return { styleOverrides }\n\n\tconst colorType = isLightOrDarkColor(value)\n\tif (!colorType) return { styleOverrides }\n\treturn { background: colorType === \"light\" ? palette.dark100 : palette.white100, styleOverrides }\n}\n\nconst largeGridMaxHeight = 500\n\nexport const VectorSetItemPopoutButton = React.memo(function VectorSetItemPopoutButton({\n\tonDelete,\n\tonChange,\n\tpopoutId,\n\tidentifier,\n\tdefaultIdentifier,\n\tactiveIdentifiers,\n\tsvgThumbnailStyle,\n\tclassName,\n\tdisplayInPopover = false,\n\tlarge,\n\tvariant = \"default\",\n\tpreviewWithoutBackground = false,\n}: {\n\tonDelete?: () => void\n\tonChange: (identifier: ModuleExportIdentifierString) => void\n\tpopoutId: string\n\tsvgThumbnailStyle?: Record<CSSVariableName, string | number | undefined>\n\tidentifier: Reduced<ModuleExportIdentifierString>\n\tdefaultIdentifier: ModuleExportIdentifierString\n\tactiveIdentifiers?: Set<ModuleExportIdentifierString>\n\tdisplayInPopover?: boolean\n\tclassName?: string\n\tlarge?: boolean\n\tvariant?: InputVariant\n\tpreviewWithoutBackground?: boolean\n}) {\n\tconst engine = useBaseEngine()\n\tconst { modulesStore, vectorsStore } = engine.stores\n\tconst info = useEngineState(\n\t\t() => {\n\t\t\treturn vectorSetInfoForPopout(identifier, defaultIdentifier, engine.tree, modulesStore, vectorsStore)\n\t\t},\n\t\t[identifier, defaultIdentifier],\n\t\t[EngineChange.Tree, modulesStore, vectorsStore],\n\t\t{ deepEqual: true },\n\t)\n\n\t// When adding a vector set to the canvas, the amount of items can be one while its loading. To\n\t// make virtualization work correctly we remount the popout when the item count changes. This\n\t// makes sure the selected item is scrolled into view and the popout grows to the expected size.\n\tconst itemCount = useMemo(() => {\n\t\treturn Object.keys(info?.vectorSet?.items ?? {}).length\n\t}, [info])\n\n\tconst activeIdentifier = isMixed(identifier) || isNotFound(identifier) ? defaultIdentifier : identifier\n\n\t// Fallback to the default identifier if the active identifier is not found, for example if\n\t// there is no active identifier because the ControlProp is rendering the default.\n\tconst selectedItem =\n\t\tinfo?.vectorSet?.items?.[activeIdentifier] ?? info?.selectedItem ?? info?.vectorSet?.items?.[defaultIdentifier]\n\n\tconst thumbnail = useVectorThumbnail({ moduleId: selectedItem?.moduleId, saveId: selectedItem?.saveId })\n\tconst { background, styleOverrides } = useHighContrastBackground(\n\t\tthumbnail?.color ?? selectedItem?.color,\n\t\tsvgThumbnailStyle,\n\t)\n\tconst tokens = useSubscribeToColorStyles()\n\n\tconst style = useMemo<React.CSSProperties>(() => {\n\t\treturn { ...tokens, ...styleOverrides }\n\t}, [tokens, styleOverrides])\n\n\tif (!info || !selectedItem) return null\n\n\tconst { setTitle, title, items } = info.vectorSet\n\n\treturn (\n\t\t<PopoutButtonWithPreview\n\t\t\tclassName={cx(className, large && styles.largeButton)}\n\t\t\tid={popoutId}\n\t\t\tpopout={\n\t\t\t\t<VectorSetItemPopout\n\t\t\t\t\tkey={itemCount}\n\t\t\t\t\tactiveIdentifiers={activeIdentifiers}\n\t\t\t\t\titemDictionary={items}\n\t\t\t\t\tsvgThumbnailStyle={style}\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t/>\n\t\t\t}\n\t\t\tdisplayInPopover={displayInPopover}\n\t\t\tpopoverAttachmentEdge={attachmentEdges}\n\t\t\tnavigationTitle={setTitle}\n\t\t\ttitle={isMixed(identifier) ? Dictionary.Mixed : title}\n\t\t\tdisplayDivider\n\t\t\tonDelete={onDelete}\n\t\t\tlarge={large}\n\t\t\tvariant={variant}\n\t\t\tswatchBackgroundColor={previewWithoutBackground ? \"transparent\" : undefined}\n\t\t\tpreviewWithoutWrapper={previewWithoutBackground}\n\t\t\tpreview={\n\t\t\t\tisMixed(identifier) ? (\n\t\t\t\t\t<PopoutButtonBackgroundPreview large={large} background=\"\" defaultBackgroundColor=\"transparent\" />\n\t\t\t\t) : previewWithoutBackground ? (\n\t\t\t\t\t<VectorSetIcon\n\t\t\t\t\t\ticon={thumbnail?.svg}\n\t\t\t\t\t\tclassName={cx(styles.preview, styles.previewGhost, large && styles.largePreview)}\n\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<PopoutButtonPreviewIconWrapper large={large} background={background ?? colors.vectorSetItemBackground}>\n\t\t\t\t\t\t<VectorSetIcon\n\t\t\t\t\t\t\ticon={thumbnail?.svg}\n\t\t\t\t\t\t\tclassName={cx(styles.preview, large && styles.largePreview)}\n\t\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PopoutButtonPreviewIconWrapper>\n\t\t\t\t)\n\t\t\t}\n\t\t/>\n\t)\n})\n\nconst VectorSetItemThumbnail = React.memo(function VectorSetItemThumbnail({\n\titem,\n\tselected,\n\thighlighted,\n\tonSelect,\n\treadonly,\n}: {\n\titem: VectorSetListItem\n\tselected: boolean\n\thighlighted: boolean | undefined\n\tonSelect: (identifier: ModuleIdentifierString) => void\n\treadonly: boolean\n}) {\n\t// One of the grid items is highlighted when `highlighted` is a boolean, otherwise when\n\t// `highlighted` is undefined, we want to highlight the selected item.\n\tconst shouldBeHighlighted = highlighted ?? selected\n\n\tconst icon = useVectorThumbnail(item)?.svg\n\n\t// Always render a placeholder even without an icon. Otherwise grid cells pop in as the network\n\t// requests complete.\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={() => {\n\t\t\t\tif (readonly) return\n\t\t\t\tonSelect(item.moduleIdentifier)\n\t\t\t}}\n\t\t\tonMouseDown={event => {\n\t\t\t\t// Prevents triggering the grid and the grid's mouseDown handler,\n\t\t\t\t// which handles clicking off a button.\n\t\t\t\tevent.stopPropagation()\n\t\t\t}}\n\t\t\tclassName={cx(\n\t\t\t\tstyles.gridItem,\n\t\t\t\tshouldBeHighlighted && styles.gridItemHighlight,\n\t\t\t\treadonly && styles.gridItemReadonly,\n\t\t\t)}\n\t\t\taria-selected={selected}\n\t\t\taria-current={highlighted}\n\t\t\ttitle={item.name}\n\t\t>\n\t\t\t<VectorSetIcon icon={icon} className={styles.gridItemSVG} />\n\t\t</button>\n\t)\n})\n\nconst gridMovementKeys = [\"Tab\", \"ArrowRight\", \"ArrowLeft\", \"ArrowUp\", \"ArrowDown\"] as const\nconst gridMovementKeysSet = new Set<string>(gridMovementKeys)\ntype GridMovementKey = (typeof gridMovementKeys)[number]\nfunction isValidGridMovementKey(value: unknown): value is GridMovementKey {\n\treturn isString(value) && gridMovementKeysSet.has(value)\n}\n\nconst gridHandlerKeys = [...gridMovementKeys, \"Enter\"] as const\nconst gridHandlerKeysSet = new Set<string>(gridHandlerKeys)\ntype GridHandlerKey = (typeof gridHandlerKeys)[number]\nfunction isValidGridHandlerKey(value: unknown): value is GridHandlerKey {\n\treturn isString(value) && gridHandlerKeysSet.has(value)\n}\n\nconst arrowKeyGridOffsets: Record<GridMovementKey, number> = {\n\tArrowLeft: -1,\n\tArrowRight: 1,\n\tArrowUp: -1 * VECTOR_SET_GRID_COLUMNS,\n\tArrowDown: VECTOR_SET_GRID_COLUMNS,\n\tTab: 0,\n} as const\n\ninterface VectorSetItemPopoutProps {\n\tactiveIdentifiers: Set<ModuleExportIdentifierString> | undefined\n\titemDictionary: Record<ModuleExportIdentifierString, VectorSetListItem>\n\tsvgThumbnailStyle?: Record<CSSVariableName, string | number | undefined>\n\tonChange: (identifier: ModuleExportIdentifierString) => void\n}\n\nexport const VectorSetItemPopout = React.memo<VectorSetItemPopoutProps>(function VectorSetItemPopout({\n\tactiveIdentifiers,\n\titemDictionary,\n\tsvgThumbnailStyle,\n\tonChange,\n}) {\n\tconst isReadonly = useReadOnly()\n\n\tconst panelPadding = useDimensionValue(\"panelPadding\")\n\n\tconst gridContentWidth = dimensions.values.panelMinWidth - panelPadding * 2\n\tconst gridColumnGaps = (VECTOR_SET_GRID_COLUMNS - 1) * dimensions.values.inputSpacing\n\tconst gridItemSize = Math.floor((gridContentWidth - gridColumnGaps) / VECTOR_SET_GRID_COLUMNS)\n\n\tconst [searchTerm, setSearchTerm] = React.useState(\"\")\n\tconst [previousSearchTerm, setPreviousSearchTerm] = React.useState(\"\")\n\tconst [highlightedItemIndex, setHighlightedItemIndex] = React.useState<number>(-1)\n\n\tconst unfilteredItems = useMemo(() => Object.values(itemDictionary), [itemDictionary])\n\tconst filteredItems = useMemo(() => {\n\t\tif (!searchTerm) return unfilteredItems\n\n\t\tconst normalizedSearchTerm = searchTerm.toLocaleLowerCase()\n\t\treturn unfilteredItems.filter(({ name }) => {\n\t\t\treturn name.toLocaleLowerCase().includes(normalizedSearchTerm)\n\t\t})\n\t}, [searchTerm, unfilteredItems])\n\n\tconst filteredItemCount = filteredItems.length\n\n\tconst indexOfSelectedItem = useMemo(() => {\n\t\treturn filteredItems.findIndex(({ moduleIdentifier }) => activeIdentifiers?.has(moduleIdentifier))\n\t}, [filteredItems, activeIdentifiers])\n\n\tconst indexOfSelectedItemWhenNoFilteringActive = useMemo(() => {\n\t\treturn unfilteredItems.findIndex(({ moduleIdentifier }) => activeIdentifiers?.has(moduleIdentifier))\n\t}, [activeIdentifiers, unfilteredItems])\n\n\tconst selectItem = useCallback(\n\t\t(identifier: ModuleExportIdentifierString) => {\n\t\t\tif (isReadonly) return\n\n\t\t\tonChange(identifier)\n\n\t\t\t// Set new focused index so user can keep navigating with arrows.\n\t\t\tconst indexOfItem = filteredItems.findIndex(({ moduleIdentifier }) => moduleIdentifier === identifier)\n\t\t\tsetHighlightedItemIndex(indexOfItem)\n\t\t},\n\t\t[filteredItems, onChange, isReadonly],\n\t)\n\n\tconst inputRef = React.useRef<HTMLInputElement>(null)\n\tconst scrollRef = React.useRef<HTMLDivElement>(null)\n\tconst fixedScrollHeight = useIconPickerFixedScrollHeight(scrollRef, searchTerm, itemDictionary)\n\n\tconst [scrollToAlignment, setScrollToAlignment] = React.useState<ScrollToAlignment>(\"center\")\n\tconst [scrollToIndex, setScrollToIndex] = React.useState<number>(indexOfSelectedItem)\n\n\tconst popoutNavigation = React.useContext(PopoutContext)\n\n\tconst onMouseDownIconInput = React.useCallback((event: React.MouseEvent) => {\n\t\tevent.preventDefault()\n\t\tconst inputElement = inputRef.current\n\t\tif (inputElement) inputElement.focus()\n\t}, [])\n\n\tif (previousSearchTerm !== searchTerm) {\n\t\tsetPreviousSearchTerm(searchTerm)\n\n\t\tif (searchTerm.length > 0) {\n\t\t\t// Scroll to the top of the list when the search term changes.\n\t\t\tconst scrollElement = scrollRef.current\n\t\t\tif (scrollElement) {\n\t\t\t\tscrollElement.scrollTop = 0\n\t\t\t}\n\t\t\tsetHighlightedItemIndex(-1)\n\t\t\tsetScrollToIndex(-1)\n\t\t} else {\n\t\t\t// Scroll selected item into view.\n\t\t\tsetScrollToAlignment(\"center\")\n\t\t\tsetScrollToIndex(indexOfSelectedItemWhenNoFilteringActive)\n\t\t}\n\t}\n\n\t// The search field should retain its normal keydown behavior unless:\n\t// - There are search results\n\t// - The user presses `Tab` or `ArrowDown`.\n\t// In that case, it will attempt to focus the first Icon in the grid.\n\tconst onKeyDownInput = React.useCallback(\n\t\t(event: React.KeyboardEvent) => {\n\t\t\tif (isReadonly) return\n\t\t\tif (filteredItemCount === 0) return\n\t\t\tif (!isValidGridMovementKey(event.key)) return\n\t\t\tif (event.key === \"Tab\" && event.shiftKey) return\n\n\t\t\t// If the user presses left/right arrow keys while there is text in the search\n\t\t\t// input, do nothing.\n\t\t\tif ((event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") && searchTerm) return\n\n\t\t\tevent.preventDefault()\n\n\t\t\tconst nextSelectedItem = indexOfSelectedItem === -1 ? 0 : indexOfSelectedItem + arrowKeyGridOffsets[event.key]\n\t\t\t// By adding the directional offset, we are treating the arrow keys as moving from the\n\t\t\t// selected item immediately, instead of requiring a change in focus. If the selected\n\t\t\t// item is not in the filtered view, then focus the first item.\n\t\t\tconst safeNextSelectedItem = clamp(0, filteredItemCount - 1, nextSelectedItem)\n\t\t\tsetHighlightedItemIndex(safeNextSelectedItem)\n\t\t\tsetScrollToIndex(safeNextSelectedItem)\n\t\t\tsetScrollToAlignment(\"nearest-edge\")\n\t\t\tscrollRef.current?.focus()\n\t\t},\n\t\t[searchTerm, filteredItemCount, indexOfSelectedItem, isReadonly],\n\t)\n\n\t// Whenever the text input is focused, always clear the state for focused grid item.\n\tconst onFocusTextInput = React.useCallback(() => {\n\t\tsetHighlightedItemIndex(-1)\n\t}, [])\n\n\tconst onMouseDownGrid = React.useCallback(\n\t\t(event: React.MouseEvent) => {\n\t\t\tif (isReadonly) return\n\n\t\t\t// Prevents triggering the container's mouseDown handler,\n\t\t\t// which clears the focused state.\n\t\t\tevent.stopPropagation()\n\n\t\t\t// If there's a click on the grid, but not on an icon, and the input\n\t\t\t// is not already focused, prevent losing focus to retain intuitive keyboard\n\t\t\t// navigation.\n\t\t\tif (document.activeElement !== inputRef.current) {\n\t\t\t\tevent.preventDefault()\n\t\t\t}\n\n\t\t\tif (highlightedItemIndex !== -1) return\n\n\t\t\t// If there's a click while there's no focus, try to set the state to the selected icon in order\n\t\t\t// trigger keyboard navigation.\n\t\t\tif (indexOfSelectedItem === -1) return\n\n\t\t\tsetHighlightedItemIndex(indexOfSelectedItem)\n\t\t\tscrollRef.current?.focus()\n\t\t},\n\t\t[highlightedItemIndex, indexOfSelectedItem, isReadonly],\n\t)\n\n\tconst onKeyDownGrid = React.useCallback(\n\t\t(event: React.KeyboardEvent) => {\n\t\t\tif (isReadonly) return\n\t\t\tif (filteredItemCount === 0) return\n\t\t\tif (!isValidGridHandlerKey(event.key)) return\n\n\t\t\tlet nextIndex = highlightedItemIndex\n\n\t\t\t// If there is no focused element, and the user presses an arrow key,\n\t\t\t// then focus on the selected icon if it's in the filtered view, or the 0th item if\n\t\t\t// the selected icon is filtered out.\n\t\t\tif (nextIndex === -1 && event.key !== \"Enter\") {\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\tnextIndex = indexOfSelectedItem === -1 ? 0 : indexOfSelectedItem\n\t\t\t}\n\n\t\t\tswitch (event.key) {\n\t\t\t\tcase \"Tab\": {\n\t\t\t\t\t// If the user is pressing shift+tab, focus on the input.\n\t\t\t\t\tif (event.shiftKey) {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tinputRef.current?.focus()\n\t\t\t\t\t}\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tcase \"ArrowRight\":\n\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\tcase \"ArrowUp\":\n\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\tnextIndex += arrowKeyGridOffsets[event.key]\n\t\t\t\t\tbreak\n\t\t\t\tcase \"Enter\": {\n\t\t\t\t\t// If there is no highlighted item, ignore.\n\t\t\t\t\tconst highlightedItem = filteredItems[highlightedItemIndex]\n\t\t\t\t\tif (!highlightedItem) return\n\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tonChange(highlightedItem.moduleIdentifier)\n\t\t\t\t\tpopoutNavigation?.close()\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tassertNever(event.key, \"Invalid grid handler key.\")\n\t\t\t}\n\n\t\t\t// Ensure that the user's actions would not leave the grid unless\n\t\t\t// in one of the explicit cases above.\n\t\t\tnextIndex = clamp(0, filteredItemCount - 1, nextIndex)\n\t\t\tif (nextIndex === highlightedItemIndex) return\n\n\t\t\tevent.preventDefault()\n\t\t\tsetHighlightedItemIndex(nextIndex)\n\t\t\tsetScrollToIndex(nextIndex)\n\t\t\tsetScrollToAlignment(\"nearest-edge\")\n\t\t\tscrollRef.current?.focus()\n\t\t},\n\t\t[\n\t\t\tonChange,\n\t\t\thighlightedItemIndex,\n\t\t\tfilteredItemCount,\n\t\t\tfilteredItems,\n\t\t\tpopoutNavigation,\n\t\t\tindexOfSelectedItem,\n\t\t\tisReadonly,\n\t\t],\n\t)\n\n\t// When all icons have a single variable color, we can optimize the rendering by ensuring the\n\t// variable color is always high-contrast, with a nice background.\n\tconst variableColorStyle = useMemo<React.CSSProperties | undefined>(() => {\n\t\tconst reducedVariableColor = getReducedVariableColor(filteredItems)\n\t\tif (isNotFound(reducedVariableColor)) return undefined\n\t\tif (isMixed(reducedVariableColor)) return undefined\n\t\tif (reducedVariableColor?.type !== \"variable\") return undefined\n\t\treturn { [`--${reducedVariableColor.value}`]: colors.wireframerAssistantAvatarBackground }\n\t}, [filteredItems])\n\n\t// We don't want the popout to resize when searching so we fix the initial height. Fix with flex\n\t// basis to allow it to shrink if the parent shrinks (window resize).\n\tconst withinPopover = useIsWithinPopover()\n\tconst gridContainerLayoutStyles: React.CSSProperties = {\n\t\tflex: fixedScrollHeight ? `1 1 ${fixedScrollHeight}px` : \"1 1 100%\",\n\t\tmaxHeight: withinPopover ? `min(${largeGridMaxHeight}px, calc(100vh - 160px))` : undefined,\n\t}\n\n\treturn (\n\t\t// biome-ignore lint/nursery/noStaticElementInteractions: Need for precise mousedown behavior.\n\t\t<div\n\t\t\tclassName={styles.popoutContainer}\n\t\t\tonMouseDown={() => {\n\t\t\t\t// Whenever a user clicks off the grid, clear the focused index so that the states\n\t\t\t\t// are accurate.\n\t\t\t\tsetHighlightedItemIndex(-1)\n\t\t\t\tscrollRef.current?.focus()\n\t\t\t}}\n\t\t>\n\t\t\t<InputWrapper className={styles.inputWrapper}>\n\t\t\t\t<IconInputSearch onMouseDown={onMouseDownIconInput} />\n\t\t\t\t<ReadOnlyContext.Provider value={false}>\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\tplaceholder={Dictionary.SearchEllipsis}\n\t\t\t\t\t\tconstantChange\n\t\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\t\tonChange={setSearchTerm}\n\t\t\t\t\t\tonKeyDown={onKeyDownInput}\n\t\t\t\t\t\tonFocus={onFocusTextInput}\n\t\t\t\t\t\tclassName={styles.searchInput}\n\t\t\t\t\t\tautoFocus={false}\n\t\t\t\t\t/>\n\t\t\t\t</ReadOnlyContext.Provider>\n\t\t\t</InputWrapper>\n\t\t\t<div className={styles.divider} />\n\t\t\t{searchTerm.length > 0 && filteredItemCount === 0 ? (\n\t\t\t\t<EmptyState justifyContent=\"center\" style={gridContainerLayoutStyles} {...getNoSearchResultProps()} />\n\t\t\t) : (\n\t\t\t\t<VirtualGrid\n\t\t\t\t\titems={filteredItems}\n\t\t\t\t\tkeyForItem={getModuleIdentifier}\n\t\t\t\t\tcolumnCount={VECTOR_SET_GRID_COLUMNS}\n\t\t\t\t\tgap={dimensions.values.inputSpacing}\n\t\t\t\t\trowHeight={gridItemSize}\n\t\t\t\t\tpaddingTop={panelPadding}\n\t\t\t\t\tscrollPaddingTop={panelPadding}\n\t\t\t\t\tscrollPaddingBottom={panelPadding}\n\t\t\t\t\tscrollToAlignment={scrollToAlignment}\n\t\t\t\t\tscrollToIndex={scrollToIndex}\n\t\t\t\t\tscrollRef={scrollRef}\n\t\t\t\t\tonMouseDown={onMouseDownGrid}\n\t\t\t\t\tonKeyDown={onKeyDownGrid}\n\t\t\t\t\ttabIndex={0}\n\t\t\t\t\taria-label=\"Vector Set Items\"\n\t\t\t\t\tclassName={styles.virtualGrid}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...gridContainerLayoutStyles,\n\t\t\t\t\t\t...svgThumbnailStyle,\n\t\t\t\t\t\t...variableColorStyle,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{({ item, index }) => {\n\t\t\t\t\t\tassert(isModuleExportIdentifier(item.moduleIdentifier), \"Value should any module export identifier string.\")\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<VectorSetItemThumbnail\n\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\treadonly={isReadonly}\n\t\t\t\t\t\t\t\tonSelect={selectItem}\n\t\t\t\t\t\t\t\tselected={activeIdentifiers?.has(item.moduleIdentifier) ?? false}\n\t\t\t\t\t\t\t\thighlighted={highlightedItemIndex !== -1 ? highlightedItemIndex === index : undefined}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)\n\t\t\t\t\t}}\n\t\t\t\t</VirtualGrid>\n\t\t\t)}\n\t\t</div>\n\t)\n})\n\nfunction getModuleIdentifier(item: VectorSetListItem): string {\n\treturn item.moduleIdentifier\n}\n\nfunction getReducedVariableColor(items: VectorSetListItem[]): Reduced<VectorColor | undefined> {\n\tlet result: Reduced<VectorColor | undefined> = NotFound\n\n\tfor (const item of items) {\n\t\tif (isNotFound(result)) {\n\t\t\tresult = item.color\n\t\t} else if (!isEqual(result, item.color)) {\n\t\t\treturn Mixed\n\t\t}\n\t}\n\n\treturn result\n}\n\n/**\n * Controls the height that the icon scroll container should fix to, we do this by measuring the height\n * of the container when no search term is applied. If the items change the height is recalculated.\n */\nfunction useIconPickerFixedScrollHeight(\n\tscrollRef: React.RefObject<HTMLDivElement>,\n\tsearch: string | undefined,\n\titemDictionary: Record<ModuleIdentifierString, VectorSetListItem>,\n) {\n\tconst [fixedScrollHeight, setFixedScrollHeight] = React.useState<number | undefined>(undefined)\n\n\t// reset the scroll height when the items change so that the browser measures the non-constrained height\n\tReact.useEffect(() => {\n\t\tif (search || isEmptyObject(itemDictionary)) return\n\t\t// eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect\n\t\tsetFixedScrollHeight(undefined)\n\t}, [search, itemDictionary])\n\n\t// Set the scroll height on initial load or when the scroll height has been reset\n\tReact.useLayoutEffect(() => {\n\t\tif (!scrollRef.current || search || isEmptyObject(itemDictionary) || isNumber(fixedScrollHeight)) return\n\t\t// eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect\n\t\tsetFixedScrollHeight(scrollRef.current.clientHeight)\n\t}, [search, itemDictionary, fixedScrollHeight, scrollRef])\n\n\treturn fixedScrollHeight\n}\n", "import { type GlobalModuleId, delay, getServiceMap } from \"@framerjs/shared\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { CachedVector } from \"document/stores/VectorsStore.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport React from \"react\"\nimport { isObject, isPromise, isString } from \"utils/typeChecks.ts\"\nimport { isAbortError } from \"web/lib/Fetcher.ts\"\nimport { Spinner } from \"web/pages/project/components/PublishPopover/Spinner.tsx\"\n\nconst maxFetchedVectorCacheEntries = 200\nconst fetchedVectorCache = new Map<string, CachedVector>()\n\nfunction getCachedFetchedVector(cacheKey: string): CachedVector | null {\n\tconst value = fetchedVectorCache.get(cacheKey) ?? null\n\tif (!value) return null\n\n\t// Touch the entry so insertion order approximates LRU eviction.\n\tfetchedVectorCache.delete(cacheKey)\n\tfetchedVectorCache.set(cacheKey, value)\n\treturn value\n}\n\nfunction setCachedFetchedVector(cacheKey: string, value: CachedVector) {\n\tif (fetchedVectorCache.has(cacheKey)) {\n\t\tfetchedVectorCache.delete(cacheKey)\n\t}\n\tfetchedVectorCache.set(cacheKey, value)\n\n\tif (fetchedVectorCache.size <= maxFetchedVectorCacheEntries) return\n\n\tconst oldestKey = fetchedVectorCache.keys().next().value\n\tif (oldestKey) fetchedVectorCache.delete(oldestKey)\n}\n\nasync function getSVG(\n\tmoduleId: GlobalModuleId,\n\tsaveId: string,\n\tcontroller: AbortController,\n\tretries = 0,\n): Promise<string | null> {\n\ttry {\n\t\tconst response = await fetch(`${getServiceMap().modulesCDN}/${moduleId}/${saveId}/icon.svg`, {\n\t\t\tsignal: controller.signal,\n\t\t})\n\t\tif (!response.ok) throw new Error(\"Failed to fetch SVG\")\n\t\tconst result = await response.text()\n\t\treturn isString(result) ? result : null\n\t} catch (error) {\n\t\tif (controller.signal.aborted || isAbortError(error)) return null\n\t\tretries++\n\t\tif (retries >= 10) return null\n\t\tawait delay(1_000)\n\t\treturn getSVG(moduleId, saveId, controller, retries)\n\t}\n}\n\nexport function useVectorThumbnail({\n\tmoduleId,\n\tsaveId,\n}: { moduleId?: GlobalModuleId; saveId?: string } = {}): CachedVector | null {\n\tconst cacheKey = moduleId && saveId ? `${moduleId}:${saveId}` : null\n\tconst [icon, setIcon] = React.useState<CachedVector | null>(() => {\n\t\tif (!cacheKey) return null\n\t\treturn getCachedFetchedVector(cacheKey)\n\t})\n\n\tconst engine = useBaseEngine()\n\tconst { vectorsStore } = engine.stores\n\n\tconst transient = useEngineState(\n\t\t() => (moduleId ? vectorsStore.getByGlobalId(moduleId) : undefined),\n\t\t[moduleId],\n\t\t[vectorsStore],\n\t)\n\n\tReact.useEffect(() => {\n\t\tif (!cacheKey) {\n\t\t\tsetIcon(null)\n\t\t\treturn\n\t\t}\n\n\t\tif (isObject(transient) && !isPromise(transient)) return\n\t\tsetIcon(getCachedFetchedVector(cacheKey))\n\t}, [cacheKey, transient])\n\n\tReact.useEffect(() => {\n\t\tif (!moduleId || !saveId || !cacheKey) return\n\t\tconst controller = new AbortController()\n\n\t\tif (isPromise(transient)) {\n\t\t\tvoid transient.then(value => {\n\t\t\t\tif (controller.signal.aborted) return\n\t\t\t\tsetIcon(value)\n\t\t\t})\n\t\t} else if (!isObject(transient)) {\n\t\t\tconst cached = getCachedFetchedVector(cacheKey)\n\t\t\tif (cached) {\n\t\t\t\tsetIcon(cached)\n\t\t\t\treturn () => controller.abort()\n\t\t\t}\n\n\t\t\tvoid getSVG(moduleId, saveId, controller).then(svg => {\n\t\t\t\tif (controller.signal.aborted) return\n\t\t\t\tconst value = svg ? { svg } : null\n\t\t\t\tif (value) setCachedFetchedVector(cacheKey, value)\n\t\t\t\tsetIcon(value)\n\t\t\t})\n\t\t}\n\n\t\treturn () => controller.abort()\n\t}, [cacheKey, transient, moduleId, saveId])\n\n\tif (isObject(transient)) {\n\t\tif (isPromise(transient)) return null\n\t\treturn transient\n\t}\n\n\treturn icon\n}\n\nexport function VectorSetIcon({\n\tclassName,\n\tstyle,\n\ticon,\n}: {\n\ticon?: string | null\n\tclassName: string\n\tstyle?: React.CSSProperties\n}) {\n\treturn isString(icon) ? (\n\t\t<div\n\t\t\tclassName={className}\n\t\t\tstyle={style}\n\t\t\t// biome-ignore lint/security/noDangerouslySetInnerHtml: The icon is safe.\n\t\t\tdangerouslySetInnerHTML={{ __html: icon ?? \"\" }}\n\t\t/>\n\t) : (\n\t\t<div className={className}>\n\t\t\t<Spinner />\n\t\t</div>\n\t)\n}\n", "import \"Spinner.styles_1kfpxsn.wyw.css\"; export const mask = \"mask_m1gv7el0\";\nexport const spinner = \"spinner_s1xugoyy\";", "import * as styles from \"./Spinner.styles.ts\"\n\nexport function Spinner() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" className={styles.spinner}>\n\t\t\t<path\n\t\t\t\td=\"M 8 1.5 C 8.552 1.5 9 1.948 9 2.5 C 9 3.052 8.552 3.5 8 3.5 C 7.448 3.5 7 3.052 7 2.5 C 7 1.948 7.448 1.5 8 1.5 Z\"\n\t\t\t\tfill=\"rgb(153, 153, 153)\"\n\t\t\t></path>\n\n\t\t\t<path\n\t\t\t\td=\"M 8 1.5 C 11.59 1.5 14.5 4.41 14.5 8 C 14.5 11.59 11.59 14.5 8 14.5 C 4.41 14.5 1.5 11.59 1.5 8 C 1.5 4.41 4.41 1.5 8 1.5 Z M 3.5 8 C 3.5 10.485 5.515 12.5 8 12.5 C 10.485 12.5 12.5 10.485 12.5 8 C 12.5 5.515 10.485 3.5 8 3.5 C 5.515 3.5 3.5 5.515 3.5 8 Z\"\n\t\t\t\tfill=\"rgb(153, 153, 153)\"\n\t\t\t\tclassName={styles.mask}\n\t\t\t></path>\n\t\t</svg>\n\t)\n}\n", "import \"VectorSetItemControlPropRow.styles_1phebxg.wyw.css\"; export const VECTOR_SET_GRID_COLUMNS = 3;\nexport const popoutContainer = \"popoutContainer_p1225h4e\";\nexport const virtualGrid = \"virtualGrid_v15qkom2\";\nexport const gridItem = \"gridItem_gfybuk4\";\nexport const gridItemReadonly = \"gridItemReadonly_g1u4xdpk\";\nexport const gridItemHighlight = \"gridItemHighlight_g103spug\";\nexport const gridItemSVG = \"gridItemSVG_g10j0sj1\";\nexport const largeButton = \"largeButton_l1ougy67\";\nexport const preview = \"preview_p5lfh5y\";\nexport const previewGhost = \"previewGhost_p1k48x6g\";\nexport const largePreview = \"largePreview_lr4zan2\";\nexport const inputWrapper = \"inputWrapper_i1v5vadi\";\nexport const searchInput = \"searchInput_sx3n6ms\";\nexport const divider = \"divider_d1d8po65\";", "import type { DynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { type Link, isLink, isLinkToWebPage } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { record } from \"web/lib/tracker.ts\"\n\nexport const getLinkChangesTrackingPayload = (\n\tlink: Link,\n): { linkType: \"page\" | \"url\"; linkTarget?: string | undefined; linkElement?: string | undefined } => {\n\tif (isLinkToWebPage(link)) {\n\t\treturn {\n\t\t\tlinkType: \"page\",\n\t\t\tlinkTarget: link?.webPageId ?? undefined,\n\t\t\tlinkElement: link?.hash ?? undefined,\n\t\t}\n\t}\n\n\treturn { linkType: \"url\", linkTarget: link.url }\n}\n\nexport const trackLinkChanges = (\n\tprevLink: Reduced<Link | DynamicValue | undefined>,\n\tnewLink: Reduced<Link | DynamicValue | undefined>,\n) => {\n\tif (!isLink(prevLink) && !isLink(newLink)) return\n\n\tif (!newLink) {\n\t\treturn record(\"site_link_delete\", {})\n\t}\n\n\tif (!isLink(newLink)) return\n\n\tif (!prevLink) {\n\t\treturn record(\"site_link_create\", getLinkChangesTrackingPayload(newLink))\n\t}\n\n\tif (!isLink(prevLink)) return\n\n\tconst prevLinkPayload = getLinkChangesTrackingPayload(prevLink)\n\tconst newLinkPayload = getLinkChangesTrackingPayload(newLink)\n\trecord(\"site_link_update\", {\n\t\tfromType: prevLinkPayload.linkType,\n\t\ttoType: newLinkPayload.linkType,\n\t\tfromTarget: prevLinkPayload.linkTarget,\n\t\ttoTarget: newLinkPayload.linkTarget,\n\t\tfromElement: prevLinkPayload.linkElement,\n\t\ttoElement: newLinkPayload.linkElement,\n\t})\n}\n", "import { useClickHandlers } from \"@framerjs/app-shared/src/PreferMouseDown.tsx\"\nimport { IconInputClose, Stack, truncateWithEllipsis } from \"@framerjs/fresco\"\nimport { type Mixed, isMixed, shouldBeNever } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { getVariableValue } from \"document/models/CanvasTree/nodes/utils/getVariableValue.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { type VariableReference, isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { WithLink } from \"document/models/CanvasTree/traits/WithLink.ts\"\nimport { type Reduced, isNotFound } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { type SupportedLinkRelValue, isSupportedLinkRelValueArray } from \"document/models/SupportedRelValue.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport { ControlType } from \"library/index.ts\"\nimport React from \"react\"\nimport { isArray, isUndefined } from \"utils/typeChecks.ts\"\nimport { PopoutButtonWithPreviewSuggestion } from \"../../shared/PopoutButtonWithPreviewSuggestion.tsx\"\nimport { VariableReferenceButton } from \"../../shared/VariableReferenceButton.tsx\"\nimport { PanelRow } from \"../rows/PanelRow.tsx\"\nimport { createVariableInScope } from \"../utils/createVariableInScope.ts\"\nimport { doubleColumn } from \"../utils/doubleColumn.ts\"\nimport { getLinkRelValuesMenuItems, linkRelValueLabel } from \"../utils/linkOptions.ts\"\nimport * as styles from \"./LinkRelValuesRow.styles.ts\"\n\nconst traitTypeKeys: [keyof WithLink] = [\"linkRelValues\"]\ninterface LinkRelValuesRowProps {\n\treadOnly: boolean\n\tvalue: Reduced<readonly SupportedLinkRelValue[] | VariableReference | undefined>\n\tonChange: (value: readonly SupportedLinkRelValue[] | VariableReference | undefined) => void\n}\nexport const LinkRelValuesRow = React.memo(function LinkRelValuesRow({\n\treadOnly,\n\tvalue,\n\tonChange,\n}: LinkRelValuesRowProps) {\n\tconst engine = useBaseEngine()\n\n\tconst onRemoveDynamicValue = React.useCallback(() => {\n\t\tif (!isVariableReference(value)) return\n\t\tif (isVariableReference(value)) {\n\t\t\tconst variableValue = getVariableValue(engine, value)\n\t\t\tonChange(isSupportedLinkRelValueArray(variableValue) ? variableValue : undefined)\n\t\t} else {\n\t\t\tshouldBeNever(value)\n\t\t}\n\t}, [onChange, value])\n\n\tconst onCreateVariable = useEngineCallback(\n\t\t(scopeId: NodeID) => {\n\t\t\tconst variableRef = createVariableInScope({\n\t\t\t\tengine,\n\t\t\t\tscopeId,\n\t\t\t\tname: Dictionary.Rel,\n\t\t\t\ttype: ControlType.LinkRelValues,\n\t\t\t\tinitialValue: isSupportedLinkRelValueArray(value) ? value : undefined,\n\t\t\t})\n\t\t\tif (variableRef) onChange(variableRef)\n\t\t},\n\t\t[onChange, value],\n\t)\n\n\tconst valueCount = isArray(value) ? value.length : -1\n\tif (isNotFound(value) || isMixed(value) || isUndefined(value) || valueCount === 0) return null\n\n\treturn (\n\t\t<PanelRow\n\t\t\ttitle={Dictionary.Rel}\n\t\t\tonDelete={() => onChange(undefined)}\n\t\t\tdeleteTitle={!isVariableReference(value) ? Dictionary.RemoveAll : undefined}\n\t\t\tonCreateVariable={onCreateVariable}\n\t\t\tonSelectVariable={onChange}\n\t\t\tdynamicValue={isDynamicValue(value) ? value : null}\n\t\t\tsupportsVariables\n\t\t\tvariableType={ControlType.LinkRelValues}\n\t\t\tonRemoveDynamicValue={onRemoveDynamicValue}\n\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t>\n\t\t\t<Stack style={doubleColumn}>\n\t\t\t\t{isVariableReference(value) ? (\n\t\t\t\t\t<VariableReferenceButton\n\t\t\t\t\t\texpectedType={ControlType.LinkRelValues}\n\t\t\t\t\t\treference={value}\n\t\t\t\t\t\tonRemove={onRemoveDynamicValue}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<LinkRelValueList readOnly={readOnly} value={value} onChange={onChange} />\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</PanelRow>\n\t)\n})\n\ninterface LinkRelValueListProps {\n\treadOnly: boolean\n\tvalue: readonly SupportedLinkRelValue[] | Mixed | undefined\n\tonChange: (value: readonly SupportedLinkRelValue[] | VariableReference | undefined) => void\n\tsupportsAdd?: boolean\n}\nexport const LinkRelValueList = React.memo(function LinkRelValueList({\n\treadOnly,\n\tvalue,\n\tonChange,\n\tsupportsAdd,\n}: LinkRelValueListProps) {\n\tconst engine = useBaseEngine()\n\n\tconst onRemove = (rel: SupportedLinkRelValue) => {\n\t\tif (isMixed(value)) return\n\n\t\tonChange(value?.filter(r => r !== rel))\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{!isMixed(value)\n\t\t\t\t? value?.map(rel => <LinkRelValue key={rel} readOnly={readOnly} value={rel} onRemove={onRemove} />)\n\t\t\t\t: null}\n\t\t\t{!readOnly && supportsAdd && (\n\t\t\t\t<PopoutButtonWithPreviewSuggestion\n\t\t\t\t\ttype=\"linkRelValues\"\n\t\t\t\t\tonClick={event => {\n\t\t\t\t\t\tconst menu = getLinkRelValuesMenuItems(value, true, onChange)\n\t\t\t\t\t\tengine.stores.contextMenuStore.show(menu, { location: { x: event.clientX, y: event.clientY } })\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t)\n})\n\nconst LinkRelValue = React.memo(function LinkRelValue({\n\treadOnly,\n\tvalue,\n\tonRemove,\n}: {\n\treadOnly: boolean\n\tvalue: SupportedLinkRelValue\n\tonRemove: (rel: SupportedLinkRelValue) => void\n}) {\n\tconst onClickDelete = React.useCallback(() => {\n\t\tonRemove(value)\n\t}, [onRemove, value])\n\tconst deleteClickHandlers = useClickHandlers(onClickDelete)\n\n\t// based on ButtonWithPreviewContent without the icon\n\treturn (\n\t\t<div className={cx(styles.container)}>\n\t\t\t<div className={cx(styles.titleWrapper, readOnly && styles.disabled)}>\n\t\t\t\t<span className={cx(truncateWithEllipsis)}>{linkRelValueLabel(value)}</span>\n\t\t\t</div>\n\t\t\t{!readOnly && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={cx(styles.closeWrapper)}\n\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t\t{...deleteClickHandlers}\n\t\t\t\t\ttitle={Dictionary.Remove}\n\t\t\t\t>\n\t\t\t\t\t<IconInputClose />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t)\n})\n", "import type { FramerSiteLinkUpdatePayload } from \"@framerjs/events\"\nimport { assertNever, isMixed } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport type { MenuItemOptions } from \"app/menu.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { type VariableReference, isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { WithLinkUpdate } from \"document/models/CanvasTree/traits/WithLink.ts\"\nimport { type Link, isLink, isLinkToURL, isLinkToWebPage } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport { type Reduced, isFound, isFoundAndNotUndefined } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport type { ReducedLink } from \"document/models/CanvasTree/traits/utils/reduceLink.ts\"\nimport {\n\ttype SupportedLinkRelValue,\n\tisSupportedLinkRelValueArray,\n\tsupportedLinkRelValues,\n} from \"document/models/SupportedRelValue.ts\"\nimport { useMemo } from \"react\"\nimport { isBoolean, isString, isUndefined } from \"utils/typeChecks.ts\"\n\nconst hasScrollTarget = (link: Reduced<Link | VariableReference | undefined>) => {\n\treturn isLinkToWebPage(link) && Boolean(link.hash)\n}\n\ntype ReducedLinkOptions = Partial<Pick<ReducedLink, \"anyExternalLinks\" | \"anyScrollTargets\">> &\n\tOmit<\n\t\tReducedLink,\n\t\t| \"link\"\n\t\t| \"onlyNodesWithLink\"\n\t\t| \"onlyNodesWithLinkOptions\"\n\t\t| \"onlyNodesWithLinkSupportingComputedValues\"\n\t\t| \"anyExternalLinks\"\n\t\t| \"anyScrollTargets\"\n\t>\nexport type LinkOptionsVisibility = Record<\n\tExclude<keyof ReducedLinkOptions, \"anyExternalLinks\" | \"anyScrollTargets\">,\n\tboolean\n>\n\nexport function getLinkOptionVisibility(link: ReducedLink[\"link\"], options: ReducedLinkOptions): LinkOptionsVisibility {\n\tconst isPossibleExternalLink =\n\t\tisDynamicValue(link) || isLinkToURL(link) || (isMixed(link) && Boolean(options.anyExternalLinks))\n\tconst hasPossibleScrollTarget =\n\t\tisDynamicValue(link) || hasScrollTarget(link) || (isMixed(link) && Boolean(options.anyScrollTargets))\n\n\treturn {\n\t\tlinkOpenInNewTab: isFound(options.linkOpenInNewTab),\n\t\tlinkSmoothScroll: hasPossibleScrollTarget && options.linkOpenInNewTab !== true && isFound(options.linkSmoothScroll),\n\t\tlinkClickTrackingId: isFound(options.linkClickTrackingId),\n\t\tlinkRelValues: isPossibleExternalLink && isFound(options.linkRelValues),\n\t\tlinkPreserveParams: isPossibleExternalLink && isFound(options.linkPreserveParams),\n\t}\n}\n\nexport function useLinkOptionVisibility(link: ReducedLink[\"link\"], options: ReducedLinkOptions): LinkOptionsVisibility {\n\treturn useMemo(\n\t\t() =>\n\t\t\tgetLinkOptionVisibility(link, {\n\t\t\t\tlinkClickTrackingId: options.linkClickTrackingId,\n\t\t\t\tlinkOpenInNewTab: options.linkOpenInNewTab,\n\t\t\t\tlinkPreserveParams: options.linkPreserveParams,\n\t\t\t\tlinkRelValues: options.linkRelValues,\n\t\t\t\tlinkSmoothScroll: options.linkSmoothScroll,\n\t\t\t\tanyExternalLinks: options.anyExternalLinks,\n\t\t\t\tanyScrollTargets: options.anyScrollTargets,\n\t\t\t}),\n\t\t[\n\t\t\tlink,\n\t\t\toptions.linkClickTrackingId,\n\t\t\toptions.linkOpenInNewTab,\n\t\t\toptions.linkPreserveParams,\n\t\t\toptions.linkRelValues,\n\t\t\toptions.linkSmoothScroll,\n\t\t\toptions.anyExternalLinks,\n\t\t\toptions.anyScrollTargets,\n\t\t],\n\t)\n}\n\nexport function getLinkOptionsAdditionalMenuItems(\n\tlink: ReducedLink[\"link\"],\n\toptions: ReducedLinkOptions,\n\tvisibility: LinkOptionsVisibility,\n\tonUpdateLinkOptions: <T extends keyof WithLinkUpdate>(updateKey: T, updateValue: NoInfer<WithLinkUpdate[T]>) => void,\n): MenuItemOptions[] {\n\tconst isValidLink = isLink(link) || isDynamicValue(link) || isMixed(link)\n\n\tconst relOptions = getLinkRelValuesMenuItems(\n\t\toptions.linkRelValues,\n\t\tisValidLink && visibility.linkRelValues,\n\t\tnewValues => {\n\t\t\tonUpdateLinkOptions(\"linkRelValues\", newValues)\n\t\t},\n\t)\n\n\treturn [\n\t\t{\n\t\t\tlabel: Dictionary.Rel,\n\t\t\tvisible: true,\n\t\t\tchecked: isVariableReference(options.linkRelValues),\n\t\t\tsubmenu: relOptions,\n\t\t},\n\t\t{\n\t\t\tlabel: Dictionary.Parameters,\n\t\t\tvisible: true,\n\t\t\tenabled: isValidLink && visibility.linkPreserveParams && isUndefined(options.linkPreserveParams),\n\t\t\tchecked: isValidLink && visibility.linkPreserveParams && isFoundAndNotUndefined(options.linkPreserveParams),\n\t\t\tclick: () => {\n\t\t\t\tonUpdateLinkOptions(\"linkPreserveParams\", true)\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tlabel: Dictionary.Tracking,\n\t\t\tvisible: true,\n\t\t\tenabled: isValidLink && visibility.linkClickTrackingId && isUndefined(options.linkClickTrackingId),\n\t\t\tchecked: isValidLink && visibility.linkClickTrackingId && isFoundAndNotUndefined(options.linkClickTrackingId),\n\t\t\tclick: () => {\n\t\t\t\tonUpdateLinkOptions(\"linkClickTrackingId\", \"\")\n\t\t\t},\n\t\t},\n\t]\n}\n\nexport function getLinkRelValuesMenuItems(\n\tcurrentValues: ReducedLinkOptions[\"linkRelValues\"],\n\tcanAdd: boolean,\n\tonChange: (rel: readonly SupportedLinkRelValue[]) => void,\n) {\n\treturn supportedLinkRelValues.map((rel): MenuItemOptions => {\n\t\tconst isSelected =\n\t\t\tisFoundAndNotUndefined(currentValues) &&\n\t\t\t!isMixed(currentValues) &&\n\t\t\t(isDynamicValue(currentValues) || currentValues.includes(rel))\n\t\treturn {\n\t\t\tlabel: linkRelValueLabel(rel),\n\t\t\tvisible: true,\n\t\t\tenabled: canAdd && !isSelected,\n\t\t\tchecked: canAdd && isSelected,\n\t\t\tclick: () => {\n\t\t\t\tconst currentRelValues = isSupportedLinkRelValueArray(currentValues) ? currentValues : []\n\t\t\t\tonChange([...currentRelValues, rel])\n\t\t\t},\n\t\t}\n\t})\n}\n\nexport function linkRelValueLabel(rel: SupportedLinkRelValue) {\n\tswitch (rel) {\n\t\tcase \"me\":\n\t\t\treturn \"Me\"\n\t\tcase \"nofollow\":\n\t\t\treturn \"No Follow\"\n\t\tcase \"noreferrer\":\n\t\t\treturn \"No Referrer\"\n\t\tcase \"sponsored\":\n\t\t\treturn \"Sponsored\"\n\t\tcase \"ugc\":\n\t\t\treturn \"UGC\"\n\t\tdefault:\n\t\t\tassertNever(rel)\n\t}\n}\n\nexport function getEventPayloadForLinkOptionsUpdate<T extends keyof WithLinkUpdate>(\n\tupdateKey: T,\n\tupdateValue: WithLinkUpdate[T],\n\tlinkOptions: ReducedLinkOptions,\n): FramerSiteLinkUpdatePayload {\n\treturn {\n\t\tfromLinkClickTrackingId:\n\t\t\tupdateKey === \"linkClickTrackingId\" && isString(linkOptions.linkClickTrackingId)\n\t\t\t\t? linkOptions.linkClickTrackingId\n\t\t\t\t: undefined,\n\t\ttoLinkClickTrackingId: updateKey === \"linkClickTrackingId\" && isString(updateValue) ? updateValue : undefined,\n\t\tfromNewTab:\n\t\t\tupdateKey === \"linkOpenInNewTab\" && isBoolean(linkOptions.linkOpenInNewTab)\n\t\t\t\t? linkOptions.linkOpenInNewTab\n\t\t\t\t: undefined,\n\t\ttoNewTab: updateKey === \"linkOpenInNewTab\" && isBoolean(updateValue) ? updateValue : undefined,\n\t\tfromSmoothScroll:\n\t\t\tupdateKey === \"linkSmoothScroll\" && isBoolean(linkOptions.linkSmoothScroll)\n\t\t\t\t? linkOptions.linkSmoothScroll\n\t\t\t\t: undefined,\n\t\ttoSmoothscroll: updateKey === \"linkSmoothScroll\" && isBoolean(updateValue) ? updateValue : undefined,\n\t\tfromLinkRelValues:\n\t\t\tupdateKey === \"linkRelValues\" && isSupportedLinkRelValueArray(linkOptions.linkRelValues)\n\t\t\t\t? linkOptions.linkRelValues.join(\" \")\n\t\t\t\t: undefined,\n\t\ttoLinkRelValues:\n\t\t\tupdateKey === \"linkRelValues\" && isSupportedLinkRelValueArray(updateValue) ? updateValue.join(\" \") : undefined,\n\t\tfromLinkPreserveParams:\n\t\t\tupdateKey === \"linkPreserveParams\" && isBoolean(linkOptions.linkPreserveParams)\n\t\t\t\t? linkOptions.linkPreserveParams\n\t\t\t\t: undefined,\n\t\ttoLinkPreserveParams: updateKey === \"linkPreserveParams\" && isBoolean(updateValue) ? updateValue : undefined,\n\t}\n}\n", "import \"LinkRelValuesRow.styles_nc059d.wyw.css\"; export const container = \"container_c1ci2tto\";\nexport const disabled = \"disabled_dtligcd\";\nexport const titleWrapper = \"titleWrapper_t1466szx\";\nexport const closeWrapper = \"closeWrapper_c11wi2h0\";", "import { TextInput } from \"@framerjs/fresco\"\nimport { unhandledError } from \"@framerjs/shared\"\nimport { Output, generateText } from \"ai\"\nimport { isAiDisabledError } from \"app/ai/config/disableAi.ts\"\nimport { createVekterOpenRouterExtraBody, openRouter } from \"app/ai/config/openRouter.ts\"\nimport { LanguageModel } from \"app/ai/languageModels.ts\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { getTrackingId } from \"library/modules/useTracking.ts\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { isAbortError } from \"web/lib/Fetcher.ts\"\nimport z from \"zod\"\nimport { doubleColumnClass } from \"../utils/doubleColumn.styles.ts\"\n\nfunction getInputValue(value: Reduced<string | undefined>) {\n\t// Return empty string so the input is not hidden in panels that support add/remove\n\tif (!value || !isString(value)) return \"\"\n\tif (value.replaceAll(\" \", \"\").length === 0) return \"\"\n\n\treturn getTrackingId(value)\n}\n\ninterface TrackingIdInputProps {\n\tvalue: Reduced<string | undefined>\n\tonChange: (value: string | undefined) => void\n\taiPrompt: Reduced<string>\n}\n\nexport function TrackingIdInput({ value, onChange, aiPrompt }: TrackingIdInputProps) {\n\tconst [editedValue, setEditedValue] = useState(value)\n\tconst [aiSuggestion, setAiSuggestion] = useState<string | undefined>(undefined)\n\tconst [inputFocused, setInputFocused] = useState(false)\n\n\tconst stringValue = isString(editedValue) ? editedValue : \"\"\n\tconst currentAiSuggestion = inputFocused && !stringValue ? aiSuggestion : undefined\n\n\t// Sync the edited value with the parent component's value\n\t// So that toggling between two nodes on the canvas would update the input value\n\tconst [previousValue, setPreviousValue] = useState(value)\n\tif (value !== previousValue) {\n\t\tsetPreviousValue(value)\n\t\tsetEditedValue(value)\n\t}\n\n\t// Reset the AI suggestion when the prompt changes\n\tconst [previousAiPrompt, setPreviousAiPrompt] = useState(aiPrompt)\n\tif (aiPrompt !== previousAiPrompt) {\n\t\tsetPreviousAiPrompt(aiPrompt)\n\t\tsetAiSuggestion(undefined)\n\t}\n\n\tuseEffect(() => {\n\t\t// Do not fetch AI suggestion if\n\t\t// - the input has value\n\t\t// - or AI suggestion is already available\n\t\t// - or AI prompt is not available\n\t\tif (editedValue || aiSuggestion || !isString(aiPrompt)) return\n\n\t\tconst abortController = new AbortController()\n\n\t\tvoid suggestTrackingId(aiPrompt, abortController.signal).then(\n\t\t\tsuggestedTrackingId => suggestedTrackingId && setAiSuggestion(suggestedTrackingId),\n\t\t)\n\n\t\treturn () => abortController.abort()\n\t}, [aiSuggestion, aiPrompt, editedValue])\n\n\tconst onInputChange = useCallback((newValue: string) => setEditedValue(getInputValue(newValue)), [])\n\n\tconst onInputBlur = useCallback(() => {\n\t\tsetInputFocused(false)\n\t\tonChange(getInputValue(stringValue))\n\t}, [stringValue, onChange])\n\n\tconst onInputFocus = useCallback(() => setInputFocused(true), [])\n\n\t// Update the value when the parent form is submitted on Enter\n\t// while this input is focused\n\tconst onInputKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\t\tswitch (event.key) {\n\t\t\t\tcase \"Enter\":\n\t\t\t\t\treturn onInputBlur()\n\t\t\t\tcase \"Tab\":\n\t\t\t\t\tif (currentAiSuggestion) {\n\t\t\t\t\t\tconst newValue = getTrackingId(currentAiSuggestion)\n\t\t\t\t\t\tsetEditedValue(newValue)\n\t\t\t\t\t\tonChange(newValue)\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[onInputBlur, onChange, currentAiSuggestion],\n\t)\n\n\treturn (\n\t\t<TextInput\n\t\t\tclassName={doubleColumnClass}\n\t\t\tconstantChange\n\t\t\tonBlur={onInputBlur}\n\t\t\tonChange={onInputChange}\n\t\t\tonFocus={onInputFocus}\n\t\t\tonKeyDown={onInputKeyDown}\n\t\t\tplaceholder={currentAiSuggestion ?? \"ID\"}\n\t\t\tvalue={stringValue}\n\t\t/>\n\t)\n}\n\nconst trackingIdSchema = z\n\t.object({\n\t\ttrackingId: z.string().describe(\"Tracking ID\"),\n\t})\n\t.strict()\n\t.describe(\"Schema for an object containing a single trackingId string field.\")\n\nasync function suggestTrackingId(content: string, signal: AbortSignal): Promise<string | undefined> {\n\ttry {\n\t\tconst { output } = await generateText({\n\t\t\tmodel: openRouter(LanguageModel.GeminiFlash25Lite, {\n\t\t\t\textraBody: createVekterOpenRouterExtraBody({\n\t\t\t\t\tfeatureCategory: \"canvas\",\n\t\t\t\t\tfeatureName: \"tracking-id\",\n\t\t\t\t\tstep: \"suggest\",\n\t\t\t\t\tsessionId: crypto.randomUUID(),\n\t\t\t\t}),\n\t\t\t}),\n\t\t\toutput: Output.object({ schema: trackingIdSchema }),\n\t\t\tmessages: [{ role: \"user\", content }],\n\t\t\tabortSignal: signal,\n\t\t})\n\t\treturn output?.trackingId\n\t} catch (error) {\n\t\tif (isAiDisabledError(error)) return\n\t\tif (!isAbortError(error)) unhandledError(error)\n\t}\n}\n", "import { unhandledError } from \"@framerjs/shared\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { isWebPageNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { isVekterEngine } from \"document/useVekterEngine.ts\"\nimport { useSignalState } from \"editorbar/engine/OnPageEngineSignals.ts\"\nimport { isOnPageEngine } from \"editorbar/engine/useOnPageEngine.ts\"\nimport { useBaseEngine } from \"./BaseEngine.ts\"\n\n/** Get the active scope id from either the vekter or on-page engine's scope store. */\nfunction useActiveScopeId(): NodeID {\n\tconst engine = useBaseEngine()\n\n\tif (isVekterEngine(engine)) {\n\t\t// biome-ignore lint/correctness/useHookAtTopLevel: engine can't change at runtime\n\t\treturn engine.stores.scopeStore.useState(state => state.active.id)\n\t}\n\n\tif (isOnPageEngine(engine)) {\n\t\t// biome-ignore lint/correctness/useHookAtTopLevel: engine can't change at runtime\n\t\treturn useSignalState(() => engine.stores.scopeStore.active.id, [])\n\t}\n\n\tthrow Error(\"Unsupported engine\")\n}\n\nexport function useWebPageScrollTargetOptions(webPageId: NodeID | undefined) {\n\tconst activeScopeId = useActiveScopeId()\n\tconst engine = useBaseEngine()\n\n\treturn useEngineState(\n\t\t() => {\n\t\t\tif (!webPageId) return null\n\n\t\t\tconst { tree } = engine\n\n\t\t\tconst abTestingParentIdMap = tree.root.getABTestingParentIdMap()\n\n\t\t\t// Collect scroll targets from the A/B variant page instead of the control page, but\n\t\t\t// only when the A/B variant page is the current scope.\n\t\t\tconst abTestingParentId = abTestingParentIdMap.get(activeScopeId)\n\t\t\tconst isLinkToVariantPage = abTestingParentId === webPageId\n\t\t\tconst activeVariantPageOrSelectedWebPageId = isLinkToVariantPage ? activeScopeId : webPageId\n\n\t\t\tconst webPage = tree.getNodeWithTrait(activeVariantPageOrSelectedWebPageId, isWebPageNode)\n\t\t\tif (!webPage) return null\n\n\t\t\tif (!webPage.isLoaded()) {\n\t\t\t\twebPage.load().catch(unhandledError)\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\treturn webPage.getScrollTargetOptions()\n\t\t},\n\t\t[webPageId],\n\t\tEngineChange.Tree,\n\t)\n}\n", "import type { DataDefinition } from \"@framerjs/framer-runtime\"\nimport type { ExternalModuleExportIdentifierString, ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport { isExternalModuleIdentifier } from \"@framerjs/shared\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { useEffect, useState } from \"react\"\n\nexport function useDataForIdentifier(identifier: ModuleExportIdentifierString | undefined): DataDefinition | null {\n\tconst engine = useBaseEngine()\n\n\tconst [data, setData] = useState<DataDefinition | null>(() => engine.componentLoader.dataForIdentifier(identifier))\n\n\tuseEffect(() => {\n\t\tconst updateData = () => {\n\t\t\tsetData(engine.componentLoader.dataForIdentifier(identifier))\n\t\t}\n\n\t\tupdateData()\n\n\t\t// Only observe component loader changes if we have an identifier\n\t\tif (!identifier) return\n\n\t\t// FIXME: allow listening for specific module updates\n\t\tconst token = engine.scheduler.changes.observe(EngineChange.ActiveBundle, updateData)\n\t\treturn () => {\n\t\t\tengine.scheduler.changes.removeObserver(token)\n\t\t}\n\t}, [identifier])\n\n\treturn data\n}\n\ninterface ExternalDataCollectionDefinition extends DataDefinition {\n\tidentifier: ExternalModuleExportIdentifierString\n}\n\nfunction isExternalDataCollectionDefinition(data: DataDefinition): data is ExternalDataCollectionDefinition {\n\treturn isExternalModuleIdentifier(data.identifier)\n}\n\nexport function useExternalDataForIdentifier(\n\tdataIdentifier: ModuleExportIdentifierString | undefined,\n): ExternalDataCollectionDefinition | null {\n\tconst data = useDataForIdentifier(dataIdentifier)\n\tif (!data) return null\n\treturn isExternalDataCollectionDefinition(data) ? data : null\n}\n", "import { AnnotationKey } from \"@framerjs/framer-runtime/crossorigin\"\nimport { PopupButton, PopupButtonItem } from \"@framerjs/fresco\"\nimport type { ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport { isMixed } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { useWebPageScrollTargetOptions } from \"document/base-engine/BaseEngineStore.utils.ts\"\nimport { PopoutButtonWithPreviewSuggestion } from \"document/components/chrome/shared/PopoutButtonWithPreviewSuggestion.tsx\"\nimport { VariableReferenceButton } from \"document/components/chrome/shared/VariableReferenceButton.tsx\"\nimport { useDataForIdentifier } from \"document/components/utils/useDataForIdentifier.ts\"\nimport type { CanvasNode, NodeID } from \"document/models/CanvasTree/index.ts\"\nimport type { DataRepeater } from \"document/models/CanvasTree/nodes/FrameNode.ts\"\nimport { isDataRepeater } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { TraitType } from \"document/models/CanvasTree/traits/TraitType.ts\"\nimport type { VariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { ScrollTargetOptions } from \"document/models/CanvasTree/traits/WithScrollTargetOptions.ts\"\nimport type { ReducedEffectScrollTarget } from \"document/models/CanvasTree/traits/utils/EffectScrollTarget.ts\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { isNotFound } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport type { ResolvedCollectionItemSelector } from \"document/models/CanvasTree/traits/utils/ResolvedCollectionItemSelector.ts\"\nimport { supportsScrollSectionRefControls } from \"document/models/CanvasTree/traits/utils/effects.ts\"\nimport { useDeprecatedEngineState } from \"document/useDeprecatedEngineState.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport type { ScopeType } from \"document/utils/scopeType.ts\"\nimport { ControlType } from \"library/index.ts\"\nimport { slugify } from \"library/utils/slugify.ts\"\nimport type React from \"react\"\nimport { useCallback, useRef } from \"react\"\nimport { commonValue } from \"utils/commonValue.ts\"\nimport { isSet, isString, isUndefined } from \"utils/typeChecks.ts\"\nimport { CollectionItemSelectorRow } from \"../../../panels/CollectionItemSelectorRow.tsx\"\nimport { createVariableInScope } from \"../../../utils/createVariableInScope.ts\"\nimport { doubleColumnClass } from \"../../../utils/doubleColumn.styles.ts\"\nimport { doubleColumn } from \"../../../utils/doubleColumn.ts\"\nimport type { PanelRowAPI } from \"../../PanelRow.tsx\"\nimport { PanelRow } from \"../../PanelRow.tsx\"\n\nfunction getTopmostAncestorRepeater(node: CanvasNode): DataRepeater | null {\n\tlet topmostRepeater: DataRepeater | null = null\n\n\tfor (const ancestor of node.ancestors()) {\n\t\tif (isDataRepeater(ancestor)) topmostRepeater = ancestor\n\t}\n\n\treturn topmostRepeater\n}\n\nexport function getSectionDataRepeaterIdentifierForTarget(\n\tengine: BaseEngine,\n\ttarget: Reduced<NodeID | undefined>,\n): ModuleExportIdentifierString | undefined {\n\tif (!isString(target)) return undefined\n\n\tconst node = engine.tree.get(target)\n\tif (!node) return undefined\n\n\tconst topmostAncestorRepeater = getTopmostAncestorRepeater(node)\n\treturn topmostAncestorRepeater?.dataIdentifier\n}\n\nfunction useCollectionDataForSelection(target: Reduced<NodeID | undefined>) {\n\tconst engine = useBaseEngine()\n\t// Check if the element is a descendant of a repeater, returning the\n\t// repeater node if so. We always use the top-most repeater because we don't\n\t// currently support nested repeaters.\n\tconst repeaterDataIdentifier = useDeprecatedEngineState(\n\t\tEngineChange.Tree,\n\t\t() => getSectionDataRepeaterIdentifierForTarget(engine, target),\n\t\t[target],\n\t)\n\n\tconst dataDefinition = useDataForIdentifier(repeaterDataIdentifier)\n\n\tconst slugKey = dataDefinition?.annotations?.[AnnotationKey.FramerSlug]\n\n\t// If the repeater data does not include a slug, we can't use the collection\n\t// for dynamic scroll sections.\n\tif (!dataDefinition || !slugKey) return\n\n\treturn { dataDefinition, slugKey } as const\n}\n\nexport function ScrollSectionCollectionItemRow({\n\tcommonTarget,\n\tcollectionItem,\n\tshowDisabledCollectionItemRow,\n\tonSelectCollectionItem,\n}: {\n\tcommonTarget: Reduced<NodeID | undefined>\n\tcollectionItem: ReducedEffectScrollTarget[\"collectionItem\"]\n\tshowDisabledCollectionItemRow: boolean\n\tonSelectCollectionItem: (value: ResolvedCollectionItemSelector | VariableReference | undefined) => void\n}) {\n\tconst collectionData = useCollectionDataForSelection(commonTarget)\n\n\tif (!collectionData) {\n\t\t// Unless we want to always show a disabled row (for code component control\n\t\t// props) if there are no CMS options (because the selected target isn't in\n\t\t// a repeater) don't render this control.\n\t\tif (!showDisabledCollectionItemRow) return null\n\t\treturn (\n\t\t\t<PanelRow title=\"Item\">\n\t\t\t\t<PopupButton enabled={false} wrapperClassName={doubleColumnClass}>\n\t\t\t\t\t<PopupButtonItem selected enabled={false} title=\"No Items\" />\n\t\t\t\t</PopupButton>\n\t\t\t</PanelRow>\n\t\t)\n\t}\n\n\treturn (\n\t\t<CollectionItemSelectorRow\n\t\t\ttitle=\"Item\"\n\t\t\tsupportsVariables\n\t\t\tvalue={collectionItem}\n\t\t\tonChange={onSelectCollectionItem}\n\t\t\tdataIdentifier={collectionData.dataDefinition.identifier}\n\t\t/>\n\t)\n}\n\nfunction isSelectedTarget(\n\tselectedTarget: ReducedEffectScrollTarget[\"targets\"] | Reduced<NodeID | VariableReference | undefined>,\n\ttarget: NodeID,\n): boolean {\n\tif (isSet(selectedTarget)) return selectedTarget.has(target)\n\treturn selectedTarget === target\n}\n\n// If the selected scroll section is undefined, NotFound, or no longer exists in\n// the page, the selection is not valid so we must show \"Set Section\u2026\".\nfunction optionIsInvalid(\n\toption: Reduced<string | VariableReference | undefined>,\n\toptions: ScrollTargetOptions | null,\n): boolean {\n\tif (isUndefined(option) || isNotFound(option)) return true\n\tif (!options || isMixed(option) || isVariableReference(option)) return false\n\treturn !options.has(option)\n}\n\nconst traitTypes = [TraitType.Effects]\n\nexport function EffectScrollTargetRows({\n\ttargets,\n\tcollectionItem,\n\tscopeId,\n\tscopeType,\n\tshowDisabledCollectionItemRow = false,\n\tonSelect,\n\tonRemove,\n\tonSelectCollectionItem,\n}: Pick<ReducedEffectScrollTarget, \"collectionItem\"> & {\n\ttargets: ReducedEffectScrollTarget[\"targets\"] | Reduced<NodeID | VariableReference | undefined>\n\tscopeId: NodeID\n\tscopeType: ScopeType\n\tshowDisabledCollectionItemRow?: boolean\n\tonSelect: (value: NodeID | VariableReference | undefined) => void\n\tonRemove?: () => void\n\tonSelectCollectionItem: (value: ResolvedCollectionItemSelector | VariableReference | undefined) => void\n}) {\n\tconst panelRowRef = useRef<PanelRowAPI | null>(null)\n\tconst engine = useBaseEngine()\n\tconst scrollTargetOptions = useWebPageScrollTargetOptions(scopeId)\n\tconst commonTarget = isSet(targets) ? commonValue(targets) : targets\n\tconst noTarget = optionIsInvalid(commonTarget, scrollTargetOptions)\n\tconst noScrollSectionOptions = !scrollTargetOptions || scrollTargetOptions.size === 0\n\tconst supportsVariables = supportsScrollSectionRefControls(scopeType)\n\n\tconst displayVariableAssignmentOptions = useCallback((event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n\t\tpanelRowRef.current?.displayPrimaryMenu?.(event)\n\t}, [])\n\n\tconst createVariable = useEngineCallback(() => {\n\t\tif (!supportsVariables) return\n\n\t\tconst variable = createVariableInScope({\n\t\t\ttype: ControlType.ScrollSectionRef,\n\t\t\tengine,\n\t\t\tshowEditor: true,\n\t\t\tname: Dictionary.ScrollSection,\n\t\t\tinitialValue: undefined,\n\t\t\tscopeId,\n\t\t})\n\n\t\tif (variable) onSelect(variable)\n\t}, [onSelect, scopeId, supportsVariables])\n\n\tconst selectVariable = useCallback(\n\t\t(variableReference: VariableReference) => {\n\t\t\tif (!supportsVariables) return\n\t\t\tonSelect(variableReference)\n\t\t},\n\t\t[onSelect, supportsVariables],\n\t)\n\n\tconst removeVariable = useCallback(() => onSelect(undefined), [onSelect])\n\n\tconst dynamicValue = isVariableReference(commonTarget) ? commonTarget : null\n\n\treturn (\n\t\t<>\n\t\t\t<PanelRow\n\t\t\t\ttitle={Dictionary.Section}\n\t\t\t\tvariableType={ControlType.ScrollSectionRef}\n\t\t\t\tonCreateVariable={createVariable}\n\t\t\t\tonRemoveDynamicValue={removeVariable}\n\t\t\t\tdynamicValue={dynamicValue}\n\t\t\t\tonSelectVariable={selectVariable}\n\t\t\t\ttraitTypes={traitTypes}\n\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\tpanelRowApiRef={panelRowRef}\n\t\t\t>\n\t\t\t\t{isVariableReference(commonTarget) ? (\n\t\t\t\t\t<VariableReferenceButton\n\t\t\t\t\t\tonRemove={removeVariable}\n\t\t\t\t\t\texpectedType={ControlType.ScrollSectionRef}\n\t\t\t\t\t\treference={commonTarget}\n\t\t\t\t\t/>\n\t\t\t\t) : supportsVariables ? (\n\t\t\t\t\t<PopoutButtonWithPreviewSuggestion type=\"scrollSection\" onClick={displayVariableAssignmentOptions} />\n\t\t\t\t) : (\n\t\t\t\t\t<div style={doubleColumn}>\n\t\t\t\t\t\t<PopupButton>\n\t\t\t\t\t\t\t{(noTarget || noScrollSectionOptions) && (\n\t\t\t\t\t\t\t\t<PopupButtonItem selected title={noScrollSectionOptions ? \"No Sections\" : Dictionary.SelectEllipsis} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{Array.from(scrollTargetOptions ?? []).map(([id, elementId]) => (\n\t\t\t\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\t\t\t\tkey={id}\n\t\t\t\t\t\t\t\t\tidentifier={id}\n\t\t\t\t\t\t\t\t\ttitle={`#${slugify(elementId)}`}\n\t\t\t\t\t\t\t\t\tselected={isSelectedTarget(targets, id)}\n\t\t\t\t\t\t\t\t\tonSelect={onSelect}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t<PopupButtonItem type=\"divider\" />\n\t\t\t\t\t\t\t<PopupButtonItem title=\"Remove\" onSelect={onRemove} visible={!!onRemove} />\n\t\t\t\t\t\t</PopupButton>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</PanelRow>\n\n\t\t\t{(!isVariableReference(commonTarget) || showDisabledCollectionItemRow) && (\n\t\t\t\t<ScrollSectionCollectionItemRow\n\t\t\t\t\tshowDisabledCollectionItemRow={showDisabledCollectionItemRow}\n\t\t\t\t\tcommonTarget={isVariableReference(commonTarget) ? undefined : commonTarget}\n\t\t\t\t\tcollectionItem={collectionItem}\n\t\t\t\t\tonSelectCollectionItem={onSelectCollectionItem}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t)\n}\n", "import { AnnotationKey } from \"@framerjs/framer-runtime/crossorigin\"\nimport type { ComboBoxListItem } from \"@framerjs/fresco\"\nimport { ComboBox } from \"@framerjs/fresco\"\nimport type { ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { experiments } from \"app/experiments.ts\"\nimport { type BaseEngine, useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { useDataForIdentifier } from \"document/components/utils/useDataForIdentifier.ts\"\nimport { isDataRepeater } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport type { VariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { VariableDefinition } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport type { ResolvedCollectionItemSelector } from \"document/models/CanvasTree/traits/utils/ResolvedCollectionItemSelector.ts\"\nimport { isResolvedCollectionItemSelector } from \"document/models/CanvasTree/traits/utils/ResolvedCollectionItemSelector.ts\"\nimport type { VariableProviderInfo } from \"document/utils/VariableProviderInfo.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { useCallback, useMemo } from \"react\"\nimport { useItemToSlug } from \"utils/useItemToSlug.ts\"\nimport { isSlugVariableFromDataSource } from \"utils/variableMetadata.ts\"\nimport { useIsWithinCollectionItem } from \"../../contentManagement/useIsWithinCollectionItem.tsx\"\nimport { VariableReferenceButton } from \"../../shared/VariableReferenceButton.tsx\"\nimport { usePopoverWithinPadding } from \"../../utils/usePopoverWithinPadding.ts\"\nimport { DescriptionRow } from \"../codeComponentRows/DescriptionRow.tsx\"\nimport { PanelRow } from \"../rows/PanelRow.tsx\"\nimport { useVariableProviderInfo } from \"../useVariableProviderInfo.ts\"\nimport { doubleColumnClass } from \"../utils/doubleColumn.styles.ts\"\n\ntype CollectionItemById = Map<string, ResolvedCollectionItemSelector>\n\ninterface SlugOptions {\n\tfirstCollectionItem: ResolvedCollectionItemSelector | undefined\n\tcollectionItemById: CollectionItemById\n\titems: ComboBoxListItem[]\n}\n\ninterface CollectionItemSelectorRowProps {\n\ttitle: string\n\tvalue: Reduced<ResolvedCollectionItemSelector | VariableReference | undefined>\n\tonChange: (value: ResolvedCollectionItemSelector | VariableReference | undefined, slugKey: string) => void\n\tdataIdentifier: ModuleExportIdentifierString\n\tsupportsVariables: boolean | undefined\n}\n\nexport function CollectionItemSelectorRow({\n\ttitle,\n\tvalue,\n\tonChange,\n\tdataIdentifier,\n\tsupportsVariables = false,\n}: CollectionItemSelectorRowProps) {\n\tconst popoverWithin = usePopoverWithinPadding()\n\tconst dataDefinition = useDataForIdentifier(dataIdentifier)\n\n\tconst slugKey = dataDefinition?.annotations?.[AnnotationKey.FramerSlug]\n\n\tconst itemToSlug = useItemToSlug(dataIdentifier)\n\n\tconst slugOptions = useMemo<null | SlugOptions>(() => {\n\t\tif (!dataDefinition || !itemToSlug || !slugKey) return null\n\n\t\tconst collectionItemById: CollectionItemById = new Map()\n\t\tconst items: ComboBoxListItem[] = []\n\t\tlet firstCollectionItem: ResolvedCollectionItemSelector | undefined\n\n\t\tObject.entries(itemToSlug).forEach(([id, slug]) => {\n\t\t\tconst collectionItem: ResolvedCollectionItemSelector = {\n\t\t\t\tidentifier: dataDefinition.identifier,\n\t\t\t\tcollectionItemId: id,\n\t\t\t\tkey: slugKey,\n\t\t\t\tvalue: slug,\n\t\t\t}\n\n\t\t\tfirstCollectionItem ??= collectionItem\n\t\t\tcollectionItemById.set(id, collectionItem)\n\n\t\t\titems.push({ type: \"option\", value: id, title: slug })\n\t\t})\n\n\t\treturn { collectionItemById, items, firstCollectionItem }\n\t}, [dataDefinition, slugKey, itemToSlug])\n\n\tconst removeSlugVariable = useCallback(() => {\n\t\tif (!slugKey) return\n\t\tonChange(slugOptions?.firstCollectionItem, slugKey)\n\t}, [onChange, slugKey, slugOptions?.firstCollectionItem])\n\n\tconst isMatchingSlug = useCallback(\n\t\t(variable: VariableDefinition) => {\n\t\t\tif (!dataIdentifier) return false\n\t\t\treturn isSlugVariableFromDataSource(variable, dataIdentifier)\n\t\t},\n\t\t[dataIdentifier],\n\t)\n\n\tconst onSelect = useCallback(\n\t\t(collectionItemId: string, _final: boolean, reset: VoidFunction) => {\n\t\t\tif (!slugOptions || !slugKey) return\n\n\t\t\tconst selectedCollectionItem = slugOptions.collectionItemById.get(collectionItemId)\n\t\t\tif (!selectedCollectionItem) {\n\t\t\t\treset()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tonChange(selectedCollectionItem, slugKey)\n\t\t},\n\t\t[onChange, slugKey, slugOptions],\n\t)\n\n\tif (!slugKey || !slugOptions) return null\n\n\tconst itemSelector = isResolvedCollectionItemSelector(value) && value.key === slugKey ? value : undefined\n\tconst slugVariable = isVariableReference(value) ? value : undefined\n\tconst selectedItemSlug = itemSelector\n\t\t? slugOptions.collectionItemById.get(itemSelector.collectionItemId)?.value\n\t\t: undefined\n\n\treturn (\n\t\t<>\n\t\t\t<PanelRow\n\t\t\t\ttitle={title}\n\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\tdynamicValue={slugVariable ?? null}\n\t\t\t\tvariableType={ControlType.String}\n\t\t\t\tonCreateVariable={undefined}\n\t\t\t\tonRemoveDynamicValue={removeSlugVariable}\n\t\t\t\tonSelectVariable={onChange}\n\t\t\t\tvariableFilter={isMatchingSlug}\n\t\t\t>\n\t\t\t\t{isVariableReference(slugVariable) ? (\n\t\t\t\t\t<VariableReferenceButton\n\t\t\t\t\t\texpectedType={ControlType.String}\n\t\t\t\t\t\treference={slugVariable}\n\t\t\t\t\t\tonRemove={removeSlugVariable}\n\t\t\t\t\t\thasError={!supportsVariables}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<ComboBox\n\t\t\t\t\t\titems={slugOptions.items}\n\t\t\t\t\t\tonChange={onSelect}\n\t\t\t\t\t\tplaceholder={Dictionary.SelectEllipsis}\n\t\t\t\t\t\tvalue={selectedItemSlug ?? \"\"}\n\t\t\t\t\t\tmenuWithin={popoverWithin}\n\t\t\t\t\t\tunsaturated={experiments.isOn(\"agent\")}\n\t\t\t\t\t\twrapperClassName={doubleColumnClass}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</PanelRow>\n\t\t\t<UnassignedSlugVariableWarning dataIdentifier={dataIdentifier} slugVariable={slugVariable} />\n\t\t</>\n\t)\n}\n\nfunction isSlugVariableProvidedByDataRepeater(\n\tengine: BaseEngine,\n\tvariableProviderInfo: VariableProviderInfo,\n\tdataIdentifier: ModuleExportIdentifierString,\n): boolean {\n\tfor (const providerId of variableProviderInfo.combined.keys()) {\n\t\t// It's safe to use the tree without adding an EngineChange dependency because we are\n\t\t// subscribing to the variable provider info which will already change when variable\n\t\t// providers do\n\t\tconst provider = engine.tree.get(providerId)\n\t\tif (!isDataRepeater(provider)) continue\n\t\tif (provider.dataIdentifier === dataIdentifier) return true\n\t}\n\treturn false\n}\n\ninterface UnassignedSlugVariableWarningProps {\n\tdataIdentifier: ModuleExportIdentifierString\n\tslugVariable: VariableReference | undefined\n}\n\nfunction UnassignedSlugVariableWarning({ dataIdentifier, slugVariable }: UnassignedSlugVariableWarningProps) {\n\tconst engine = useBaseEngine()\n\tconst variableProviderInfo = useVariableProviderInfo()\n\tconst isWithinCollectionItem = useIsWithinCollectionItem()\n\n\tif (isWithinCollectionItem) return null\n\tif (!variableProviderInfo) return null\n\tif (slugVariable) return null\n\tif (!isSlugVariableProvidedByDataRepeater(engine, variableProviderInfo, dataIdentifier)) return null\n\n\treturn <DescriptionRow description=\"All items link to this page unless you add a  variable via plus menu.\" />\n}\n", "import type { ComponentLoader } from \"@framerjs/framer-runtime\"\nimport type { CodeComponentNode } from \"document/models/CanvasTree/index.ts\"\nimport { ControlType } from \"library/index.ts\"\nimport { PanelElementId, highlightPanel } from \"../chrome/properties/panels/utils/highlightPanel.ts\"\nimport { popoutWindow } from \"../chrome/shared/PopoutWindow.tsx\"\n\nfunction getFirstLinkControlProp(componentLoader: ComponentLoader, node: CodeComponentNode) {\n\tconst component = componentLoader.componentForIdentifier(node.codeComponentIdentifier)\n\tif (!component) return null\n\tconst properties = component.properties\n\tfor (const propKey in properties) {\n\t\tconst definition = properties[propKey]\n\t\tif (definition?.type === ControlType.Link) return propKey\n\t}\n\n\treturn null\n}\n\nexport function openFirstLinkControlRow(componentLoader: ComponentLoader, node: CodeComponentNode) {\n\tconst prop = getFirstLinkControlProp(componentLoader, node)\n\tif (!prop) return null\n\tconst popoutId = getLinkPopoutId(prop)\n\thighlightPanel({ id: PanelElementId.CodeComponentPanel, flash: false })\n\tpopoutWindow.navigation.presentPopout(popoutId)\n}\n\nexport function getLinkPopoutId(prop: string) {\n\treturn `link-${prop}`\n}\n", "import \"CollectionReferenceInput.styles_1c34q2y.wyw.css\"; export const tokenText = \"tokenText_t1mopcx\";\nexport const menu = \"menu_m162n1n6\";\nexport const rightIcon = \"rightIcon_r1b5g1hs\";\nexport const clearButton = \"clearButton_clvv9xh\";\nexport const ghostButtonFocusOutline = \"ghostButtonFocusOutline_gvrb0fg\";", "import type { DataDefinition } from \"@framerjs/framer-runtime\"\nimport type { ComboBoxListItem, ComboBoxListItemOption } from \"@framerjs/fresco\"\nimport type { ModuleExportIdentifierString } from \"@framerjs/shared/src/moduleIdentifiers.ts\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useMemo } from \"react\"\nimport { getCollectionForIdentifier } from \"utils/getCollectionForIdentifier.ts\"\nimport { EngineChange } from \"../../../EngineChanges.ts\"\nimport { useBaseEngine } from \"../../../base-engine/BaseEngine.ts\"\nimport type { NodeID } from \"../../../models/CanvasTree/index.ts\"\nimport { useEngineState } from \"../../../useEngineState.ts\"\nimport { useDataForIdentifier } from \"../../utils/useDataForIdentifier.ts\"\nimport { DraftCollectionPillLabel } from \"./DraftCollectionPillLabel.tsx\"\n\nexport function useCollectionReferenceInputOptions(dataIdentifier: ModuleExportIdentifierString) {\n\tconst engine = useBaseEngine()\n\tconst dataDefinition = useDataForIdentifier(dataIdentifier)\n\n\tconst collectionNode = useEngineState(\n\t\t() => getCollectionForIdentifier(engine.tree, dataIdentifier),\n\t\t[dataIdentifier],\n\t\t[EngineChange.Tree],\n\t)\n\n\treturn useMemo(() => {\n\t\tconst collectionItems = collectionNode?.getReferenceListItems()\n\t\tconst collectionItemsById = collectionNode?.getReferenceListItemById()\n\n\t\tconst listItemsById = collectionItemsById ?? getListItemsByIdFromDataDefinition(dataDefinition)\n\t\tconst listItems = collectionItems ?? Object.values(listItemsById)\n\n\t\tconst itemOptions: ComboBoxListItemOption[] = []\n\t\tconst itemOptionsById: Record<string, ComboBoxListItemOption> = {}\n\n\t\tfor (const item of listItems) {\n\t\t\tconst isDraft = collectionItemsById?.[item.value]?.isDraft\n\t\t\tconst option = {\n\t\t\t\t...item,\n\t\t\t\ttype: \"option\",\n\t\t\t\tvalue: item.value,\n\t\t\t\tlabel: isDraft ? Dictionary.Draft : undefined,\n\t\t\t\tselectedItemLabel: isDraft ? <DraftCollectionPillLabel /> : undefined,\n\t\t\t} satisfies ComboBoxListItemOption\n\n\t\t\titemOptions.push(option)\n\t\t\titemOptionsById[item.value] = option\n\t\t}\n\n\t\treturn {\n\t\t\tlistItems,\n\t\t\tlistItemsById,\n\t\t\titemOptions: itemOptions as readonly ComboBoxListItemOption[],\n\t\t\titemOptionsById: itemOptionsById as Readonly<Record<string, ComboBoxListItemOption>>,\n\t\t}\n\t}, [dataDefinition, collectionNode])\n}\n\nfunction getListItemsByIdFromDataDefinition(dataDefinition: DataDefinition | null) {\n\treturn dataDefinition ? getListItemByIdForDataDefinition(dataDefinition) : {}\n}\n\ntype ListItemById = Record<NodeID, ComboBoxListItem>\n\nfunction getListItemByIdForDataDefinition(dataDefinition: DataDefinition) {\n\tconst result: ListItemById = {}\n\tconst itemToSlug = dataDefinition?.itemToSlug ?? {}\n\n\tfor (const itemId in itemToSlug) {\n\t\tconst slug = itemToSlug[itemId]\n\n\t\tresult[itemId] = {\n\t\t\ttype: \"option\",\n\t\t\tvalue: itemId,\n\t\t\ttitle: slug,\n\t\t}\n\t}\n\n\treturn result\n}\n", "import \"DraftCollectionPillLabel.styles_1nbdjio.wyw.css\"; export const listItemPillLabel = \"listItemPillLabel_l1ytj09l\";", "import { Dictionary } from \"app/dictionary.ts\"\nimport * as styles from \"./DraftCollectionPillLabel.styles.ts\"\n\nexport function DraftCollectionPillLabel() {\n\treturn (\n\t\t<>\n\t\t\t<span className={styles.listItemPillLabel}>\u00B7</span>\n\t\t\t<span className={styles.listItemPillLabel}>{Dictionary.Draft}</span>\n\t\t</>\n\t)\n}\n", "import type { ComboBoxListItem } from \"@framerjs/fresco\"\nimport { CenterChild, ComboBox, IconInputClose, IconInputDropdown, useReadOnly } from \"@framerjs/fresco\"\nimport { IconButton } from \"@framerjs/fresco/components/IconButton\"\nimport type { InputVariant } from \"@framerjs/fresco/src/components/types.ts\"\nimport type { ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport { isMixed } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { blurActiveElementAndPreventFocus } from \"utils/blurOnMouseDownAndPreventFocus.ts\"\nimport { isDefined, isString, isUndefined } from \"utils/typeChecks.ts\"\nimport * as styles from \"./CollectionReferenceInput.styles.ts\"\nimport { useCollectionReferenceInputOptions } from \"./useCollectionReferenceInputOptions.tsx\"\n\ninterface Props {\n\tdataIdentifier: ModuleExportIdentifierString\n\tvalue: Reduced<string | undefined>\n\tonChange(value: string | undefined): void\n\toptional?: boolean\n\tlarge?: boolean\n\tvariant?: InputVariant\n\tclassName?: string\n\twrapperClassName?: string\n\tmenuClassName?: string\n\ticonClassName?: string\n\tautoFocus?: boolean\n}\n\nexport function CollectionReferenceInput({\n\tdataIdentifier,\n\tvalue,\n\tonChange,\n\tlarge,\n\tvariant = \"default\",\n\tclassName,\n\twrapperClassName,\n\tmenuClassName,\n\ticonClassName,\n\tautoFocus,\n\toptional = false,\n}: Props) {\n\tconst readOnly = useReadOnly()\n\n\tconst { listItemsById, itemOptions } = useCollectionReferenceInputOptions(dataIdentifier)\n\n\tfunction handleChange(newValue: string, _final: boolean, reset: () => void) {\n\t\tif (value === newValue || newValue === \"\") {\n\t\t\tonChange(undefined)\n\t\t} else if (newValue in listItemsById) {\n\t\t\tonChange(newValue)\n\t\t} else {\n\t\t\treset()\n\t\t}\n\t}\n\n\tfunction clearValueAndPreventFocus(event: React.MouseEvent) {\n\t\tblurActiveElementAndPreventFocus(event)\n\t\tonChange(undefined)\n\t}\n\n\tconst selectedItem = getListItemForValue(value, listItemsById)\n\n\tconst title = isMixed(value) ? Dictionary.Mixed : selectedItem?.title\n\tconst checkedItems = selectedItem ? [selectedItem.value] : undefined\n\tconst showClearButton = optional && isDefined(value)\n\n\treturn (\n\t\t<ComboBox\n\t\t\tvalue={title ?? \"\"}\n\t\t\tcheckedItems={checkedItems}\n\t\t\tonChange={handleChange}\n\t\t\tlarge={large}\n\t\t\tvariant={variant}\n\t\t\tclassName={className}\n\t\t\twrapperClassName={wrapperClassName}\n\t\t\tmenuClassName={cx(styles.menu, menuClassName)}\n\t\t\tplaceholder={Dictionary.SelectEllipsis}\n\t\t\titems={itemOptions}\n\t\t\trightSlot={\n\t\t\t\tshowClearButton ? (\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\ticon={<IconInputClose />}\n\t\t\t\t\t\tonMouseDown={clearValueAndPreventFocus}\n\t\t\t\t\t\tlabel={Dictionary.Clear}\n\t\t\t\t\t\tclassName={cx(styles.clearButton, variant === \"ghost\" && styles.ghostButtonFocusOutline)}\n\t\t\t\t\t\ttitle={Dictionary.Clear}\n\t\t\t\t\t\tenabled={!readOnly}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<CenterChild className={cx(styles.rightIcon, iconClassName)}>\n\t\t\t\t\t\t<IconInputDropdown />\n\t\t\t\t\t</CenterChild>\n\t\t\t\t)\n\t\t\t}\n\t\t\tautoFocus={autoFocus}\n\t\t/>\n\t)\n}\n\ntype ListItemById = Record<NodeID, ComboBoxListItem>\n\nfunction getListItemForValue(value: Reduced<string | undefined>, listItemById: ListItemById) {\n\tif (!isString(value)) return\n\n\tconst listItem = listItemById[value]\n\tif (isUndefined(listItem)) return\n\n\treturn listItem\n}\n", "import { assert, List } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport React, { useCallback, useMemo, useState } from \"react\"\nimport { IconInputClose, IconMenuSearch } from \"../icons/index.ts\"\nimport { Sortable } from \"../layout-transitions/index.ts\"\nimport { Button } from \"./Button.tsx\"\nimport type { ComboBoxCommonProps, ComboBoxProps } from \"./ComboBox.tsx\"\nimport { ComboBoxCommon, keepInputFieldFocusedWhenClickedOnSideSlots } from \"./ComboBox.tsx\"\nimport { InputWrapper } from \"./InputWrapper.tsx\"\nimport * as styles from \"./MultiComboBox.styles.ts\"\nimport { TextInput } from \"./TextInput.tsx\"\nimport type { ComboBoxListItem } from \"./utils/useComboBox.ts\"\n\nfunction returnValue<T>(value: T): T {\n\treturn value\n}\n\nexport type MultiComboBoxProps = Omit<ComboBoxProps, \"onChange\" | \"value\" | \"constant_change\" | \"menuWidth\"> & {\n\tonChange: (value: readonly string[]) => void\n\tvalue: readonly string[]\n\tlarge?: boolean\n\tfullWidthTokensWhenSmall?: boolean\n\tsortingEnabled?: boolean\n\tonClickItem?: (itemValue: string) => void\n\thideSearchIcon?: boolean\n\ttokensClassName?: string\n\ttokenClassName?: string\n\ttokenTextClassName?: string\n\ttokenCloseButtonClassName?: string\n}\n\nexport const MultiComboBox = React.memo(\n\tReact.forwardRef(function MultiComboBox(props: MultiComboBoxProps, ref: ComboBoxCommonProps[\"ref\"]) {\n\t\tconst {\n\t\t\tonChange: onSelectedItemsChange,\n\t\t\tvalue: selectedItems,\n\t\t\tleftSlot,\n\t\t\trightSlot,\n\t\t\tvariant = \"default\",\n\t\t\twrapperClassName,\n\t\t\thasError,\n\t\t\titems,\n\t\t\tlarge = false,\n\t\t\tfullWidthTokensWhenSmall = true,\n\t\t\tsortingEnabled: externalSortingEnabled = true,\n\t\t\tonClickItem,\n\t\t\tplaceholder,\n\t\t\thideSearchIcon = false,\n\t\t\ttokensClassName,\n\t\t\ttokenClassName,\n\t\t\ttokenTextClassName,\n\t\t\ttokenCloseButtonClassName,\n\t\t\t...commonProps\n\t\t} = props\n\t\tconst [isSorting, setIsSorting] = useState(false)\n\t\tconst handleDragStart = useCallback(() => setIsSorting(true), [])\n\t\tconst handleDragComplete = useCallback(() => setIsSorting(false), [])\n\n\t\tconst itemLookupMap = useMemo(() => {\n\t\t\tconst map = new Map<string, ComboBoxListItem>()\n\t\t\titems.forEach(item => map.set(item.value, item))\n\t\t\treturn map\n\t\t}, [items])\n\n\t\tconst validSelectedItems = useMemo(\n\t\t\t() => selectedItems.filter(item => itemLookupMap.has(item)),\n\t\t\t[itemLookupMap, selectedItems],\n\t\t)\n\n\t\tconst onChange = useCallback(\n\t\t\t(value: string, final: boolean, reset: () => void) => {\n\t\t\t\tif (!final) return\n\t\t\t\treset()\n\n\t\t\t\tconst item = itemLookupMap.get(value)\n\t\t\t\tif (!item) return\n\n\t\t\t\tconst index = validSelectedItems.indexOf(value)\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tconst newSelectedItems = List.remove(validSelectedItems, index)\n\t\t\t\t\tonSelectedItemsChange(newSelectedItems)\n\t\t\t\t} else {\n\t\t\t\t\tconst newSelectedItems = List.push(validSelectedItems, value)\n\t\t\t\t\tonSelectedItemsChange(newSelectedItems)\n\t\t\t\t}\n\t\t\t},\n\t\t\t[itemLookupMap, onSelectedItemsChange, validSelectedItems],\n\t\t)\n\n\t\tconst onKeyDownCapture = useCallback(\n\t\t\t(event: React.KeyboardEvent, internalValue: string) => {\n\t\t\t\tif (event.key === \"Backspace\" && internalValue === \"\") {\n\t\t\t\t\tconst newSelectedItems = List.pop(validSelectedItems)\n\t\t\t\t\tonSelectedItemsChange(newSelectedItems)\n\t\t\t\t}\n\t\t\t},\n\t\t\t[onSelectedItemsChange, validSelectedItems],\n\t\t)\n\n\t\tconst moveSelectedItem = useCallback(\n\t\t\t(from: number, to: number) => {\n\t\t\t\tconst newSelectedItems = List.move(validSelectedItems, from, to)\n\t\t\t\tonSelectedItemsChange(newSelectedItems)\n\t\t\t},\n\t\t\t[onSelectedItemsChange, validSelectedItems],\n\t\t)\n\n\t\tconst removeItem = useCallback(\n\t\t\t(index: number, event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n\t\t\t\tevent?.stopPropagation() // Prevent the combobox from being focused\n\t\t\t\tconst newSelectedItems = List.remove(validSelectedItems, index)\n\t\t\t\tonSelectedItemsChange(newSelectedItems)\n\t\t\t},\n\t\t\t[validSelectedItems, onSelectedItemsChange],\n\t\t)\n\n\t\treturn (\n\t\t\t<ComboBoxCommon\n\t\t\t\t{...commonProps}\n\t\t\t\tconstantChange\n\t\t\t\tlarge={large}\n\t\t\t\tvalue=\"\"\n\t\t\t\tonChange={onChange}\n\t\t\t\titems={items}\n\t\t\t\tref={ref}\n\t\t\t\tclearSelectionOnEmptySearch={true}\n\t\t\t\tcloseAutoCompleteOnSelect={false}\n\t\t\t\tcheckedItems={validSelectedItems}\n\t\t\t\trenderInput={renderProps => {\n\t\t\t\t\tconst enabled = renderProps.enabled\n\t\t\t\t\tconst sortingEnabled = enabled && externalSortingEnabled\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<InputWrapper\n\t\t\t\t\t\t\tlarge={large}\n\t\t\t\t\t\t\tref={renderProps.inputWrapperRef}\n\t\t\t\t\t\t\tonClick={renderProps.clickHandler}\n\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\twrapperClassName,\n\t\t\t\t\t\t\t\tvariant === \"ghost\" && styles.wrapperGhost,\n\t\t\t\t\t\t\t\tvariant === \"ghost\" && isSorting && styles.wrapperGhostSorting,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\thasError={hasError}\n\t\t\t\t\t\t\tonMouseDown={keepInputFieldFocusedWhenClickedOnSideSlots}\n\t\t\t\t\t\t\tmultiline\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!hideSearchIcon && variant !== \"ghost\" && validSelectedItems.length === 0 && (\n\t\t\t\t\t\t\t\t<div className={styles.searchIcon}>\n\t\t\t\t\t\t\t\t\t<IconMenuSearch />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{leftSlot}\n\n\t\t\t\t\t\t\t<Sortable\n\t\t\t\t\t\t\t\tclassName={cx(styles.tokens, tokensClassName)}\n\t\t\t\t\t\t\t\tenabled={sortingEnabled}\n\t\t\t\t\t\t\t\tonDragStart={handleDragStart}\n\t\t\t\t\t\t\t\tonDragComplete={handleDragComplete}\n\t\t\t\t\t\t\t\tonlyAnimateItemPositionsWhileDragging={!sortingEnabled}\n\t\t\t\t\t\t\t\titems={validSelectedItems}\n\t\t\t\t\t\t\t\tmoveItem={moveSelectedItem}\n\t\t\t\t\t\t\t\tkeyForItem={returnValue}\n\t\t\t\t\t\t\t\tautoSizeAnimationEnabled={false}\n\t\t\t\t\t\t\t\tremoveItem={removeItem}\n\t\t\t\t\t\t\t\tfooter={\n\t\t\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\t\t\tid={props.id}\n\t\t\t\t\t\t\t\t\t\tconstantChange\n\t\t\t\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\t\t\t\t// The native browser autocomplete UI interferes with the combobox dropdown\n\t\t\t\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\t\t\t\taria-expanded={renderProps.isOpen}\n\t\t\t\t\t\t\t\t\t\taria-controls={renderProps.listBoxId}\n\t\t\t\t\t\t\t\t\t\taria-activedescendant={renderProps.highlightedItemId}\n\t\t\t\t\t\t\t\t\t\tvalue={renderProps.internalValue}\n\t\t\t\t\t\t\t\t\t\ttitle={renderProps.internalValue}\n\t\t\t\t\t\t\t\t\t\tonChange={renderProps.changeHandler}\n\t\t\t\t\t\t\t\t\t\tonFocus={renderProps.focusHandler}\n\t\t\t\t\t\t\t\t\t\tonBlur={renderProps.blurHandler}\n\t\t\t\t\t\t\t\t\t\tonKeyDownCapture={(event: React.KeyboardEvent) => {\n\t\t\t\t\t\t\t\t\t\t\tonKeyDownCapture(event, renderProps.internalValue)\n\t\t\t\t\t\t\t\t\t\t\trenderProps.keydownHandler(event)\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tenabled={enabled}\n\t\t\t\t\t\t\t\t\t\t{...renderProps.inputProps}\n\t\t\t\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\t\t\t\tstyles.inlineInput,\n\t\t\t\t\t\t\t\t\t\t\tvalidSelectedItems.length === 0 && styles.inlineInputNoItems,\n\t\t\t\t\t\t\t\t\t\t\tlarge && styles.inlineInputLarge,\n\t\t\t\t\t\t\t\t\t\t\trenderProps.inputProps.className,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t// Because ComboboxCommon is a forwardRef, we cannot use Generics on the component props.\n\t\t\t\t\t\t\t\t\t\t// so we need a typecast\n\t\t\t\t\t\t\t\t\t\tref={renderProps.ref as (ref: HTMLInputElement) => void}\n\t\t\t\t\t\t\t\t\t\tplaceholder={validSelectedItems.length === 0 ? placeholder : undefined}\n\t\t\t\t\t\t\t\t\t\tstopUpDownKeyPropagation={false}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{({ item: value, index }) => {\n\t\t\t\t\t\t\t\t\tconst itemData = itemLookupMap.get(value)\n\t\t\t\t\t\t\t\t\tassert(itemData, \"Item not found\")\n\n\t\t\t\t\t\t\t\t\tconst handleClickItem = (event: React.MouseEvent) => {\n\t\t\t\t\t\t\t\t\t\tevent.stopPropagation() // Prevent the combobox from being focused\n\t\t\t\t\t\t\t\t\t\tonClickItem?.(itemData.value)\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst handleKeyDownItem = (event: React.KeyboardEvent) => {\n\t\t\t\t\t\t\t\t\t\tevent.stopPropagation()\n\n\t\t\t\t\t\t\t\t\t\tif (event.key === \"Enter\") {\n\t\t\t\t\t\t\t\t\t\t\tonClickItem?.(itemData.value)\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ((event.key === \"Backspace\" || event.key === \"Delete\") && enabled) {\n\t\t\t\t\t\t\t\t\t\t\tremoveItem(index)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst tokenIsInteractive = Boolean(enabled || onClickItem)\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t// biome-ignore lint/nursery/noStaticElementInteractions: intentional\n\t\t\t\t\t\t\t\t\t\t// biome-ignore lint/a11y/useValidAriaProps: aria-description is intentionally used for shortcut guidance\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\trole={tokenIsInteractive ? \"button\" : undefined}\n\t\t\t\t\t\t\t\t\t\t\ttabIndex={tokenIsInteractive ? 0 : -1}\n\t\t\t\t\t\t\t\t\t\t\tkey={itemData.value}\n\t\t\t\t\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\t\t\t\t\tstyles.token,\n\t\t\t\t\t\t\t\t\t\t\t\t!large && styles.smallToken,\n\t\t\t\t\t\t\t\t\t\t\t\t!large && fullWidthTokensWhenSmall && styles.fullWidthTokens,\n\t\t\t\t\t\t\t\t\t\t\t\tsortingEnabled && styles.sortingEnabled,\n\t\t\t\t\t\t\t\t\t\t\t\tonClickItem && enabled && styles.tokenClickable,\n\t\t\t\t\t\t\t\t\t\t\t\tvariant === \"ghost\" && onClickItem && enabled && styles.ghostButtonFocusOutline,\n\t\t\t\t\t\t\t\t\t\t\t\t!enabled && styles.tokenDisabled,\n\t\t\t\t\t\t\t\t\t\t\t\ttokenClassName,\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tonKeyDown={handleKeyDownItem}\n\t\t\t\t\t\t\t\t\t\t\tonClick={handleClickItem}\n\t\t\t\t\t\t\t\t\t\t\taria-description={enabled ? \"Press Delete or Backspace to remove this item.\" : undefined}\n\t\t\t\t\t\t\t\t\t\t\taria-keyshortcuts={enabled ? \"Delete Backspace\" : undefined}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.tokenText,\n\t\t\t\t\t\t\t\t\t\t\t\t\t!large && styles.smallTokenText,\n\t\t\t\t\t\t\t\t\t\t\t\t\t!enabled && styles.tokenTextDisabled,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttokenTextClassName,\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className={styles.tokenTitle}>{itemData.title}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t{itemData.selectedItemLabel}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t{enabled && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.closeButton,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant === \"ghost\" && styles.ghostButtonFocusOutline,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttokenCloseButtonClassName,\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={event => removeItem(index, event)}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Remove\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"clean\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<IconInputClose />\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t</Sortable>\n\n\t\t\t\t\t\t\t{rightSlot}\n\t\t\t\t\t\t</InputWrapper>\n\t\t\t\t\t)\n\t\t\t\t}}\n\t\t\t/>\n\t\t)\n\t}),\n)\n", "import \"MultiComboBox.styles_zwqm5h.wyw.css\"; export const searchIcon = \"searchIcon_s9zlj05\";\nexport const wrapperGhost = \"wrapperGhost_w1y0m51v\";\nexport const wrapperGhostSorting = \"wrapperGhostSorting_wjnx9pp\";\nexport const tokens = \"tokens_t1bag03y\";\nexport const tokenText = \"tokenText_t1rfo2k\";\nexport const tokenTitle = \"tokenTitle_t1ksdcfq\";\nexport const tokenTextDisabled = \"tokenTextDisabled_trg4zcp\";\nexport const closeButton = \"closeButton_c14n18i8\";\nexport const ghostButtonFocusOutline = \"ghostButtonFocusOutline_gbl9luz\";\nexport const tokenClickable = \"tokenClickable_t8p63xo\";\nexport const token = \"token_tj3cx65\";\nexport const tokenDisabled = \"tokenDisabled_twc8g7t\";\nexport const sortingEnabled = \"sortingEnabled_sakx2m1\";\nexport const smallToken = \"smallToken_s7ell05\";\nexport const fullWidthTokens = \"fullWidthTokens_f19a54uj\";\nexport const smallTokenText = \"smallTokenText_sfme5j3\";\nexport const inlineInput = \"inlineInput_i1vxfnzw\";\nexport const inlineInputNoItems = \"inlineInputNoItems_iwc6bbg\";\nexport const inlineInputLarge = \"inlineInputLarge_i1123bbk\";", "import type { MultiComboBoxProps } from \"@framerjs/fresco/src/components/MultiComboBox\"\nimport { MultiComboBox } from \"@framerjs/fresco/src/components/MultiComboBox\"\nimport type { ModuleExportIdentifierString } from \"@framerjs/shared/src/moduleIdentifiers.ts\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport * as styles from \"./CollectionReferenceInput.styles.ts\"\nimport { useCollectionReferenceInputOptions } from \"./useCollectionReferenceInputOptions.tsx\"\n\ntype Props = Pick<\n\tMultiComboBoxProps,\n\t| \"onClickItem\"\n\t| \"hideSearchIcon\"\n\t| \"large\"\n\t| \"fullWidthTokensWhenSmall\"\n\t| \"className\"\n\t| \"variant\"\n\t| \"tokensClassName\"\n\t| \"tokenClassName\"\n\t| \"tokenTextClassName\"\n\t| \"tokenCloseButtonClassName\"\n> & {\n\tdataIdentifier: ModuleExportIdentifierString\n\tvalue: readonly string[]\n\tonChange(value: string[]): void\n\tclassName?: string\n\twrapperClassName?: string\n}\n\nexport function MultiCollectionReferenceInput({ dataIdentifier, value, tokenTextClassName, ...otherProps }: Props) {\n\tconst { itemOptions } = useCollectionReferenceInputOptions(dataIdentifier)\n\n\treturn (\n\t\t<MultiComboBox\n\t\t\t{...otherProps}\n\t\t\titems={itemOptions}\n\t\t\tvalue={value}\n\t\t\tmenuClassName={styles.menu}\n\t\t\ttokenTextClassName={cx(tokenTextClassName, styles.tokenText)}\n\t\t\tplaceholder={Dictionary.AddEllipsis}\n\t\t/>\n\t)\n}\n", "import { useThemeOverrideMode } from \"@framerjs/fresco\"\nimport { assert, isCommandKeyPressed, unhandledError } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { useStableCallback } from \"library/utils/useStableCallback.ts\"\nimport { TextSelection } from \"prosemirror-state\"\nimport { Decoration, DecorationSet, type EditorView } from \"prosemirror-view\"\nimport { setTransactionNeedsAssetReferencesUpdate } from \"prosemirror/addMedia.ts\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport { useCallback, useEffect, useLayoutEffect, useRef } from \"react\"\nimport { getHardCodedComponentsWithPresets } from \"utils/getComponentsWithPresets.ts\"\nimport { useConstant } from \"utils/useConstant.ts\"\nimport { useSet } from \"utils/useSet.ts\"\nimport { useDarkMode } from \"web/lib/useDarkMode.ts\"\nimport type { GeneratedComponentContext } from \"../preview/ModulePreviewWrapper.tsx\"\nimport { useControlPropRows } from \"../properties/codeComponentRows/ControlPropRowContext.tsx\"\nimport type { PopoutButtonProps } from \"../shared/PopoutButton.tsx\"\nimport * as styles from \"./RichTextEditorContent.styles.ts\"\nimport type { ComponentPresets, GetModuleNodeViewConstructor } from \"./getModuleNodeViewConstructor.ts\"\nimport { preloadModuleComponents } from \"./moduleUtils.ts\"\nimport { InlineFormattingMenu } from \"./selectionStyling/InlineFormattingMenu.tsx\"\nimport { SlashCommandsMenu } from \"./slashCommands/SlashCommandsMenu.tsx\"\nimport { useValueChangeListeners, useVoidChangeListeners } from \"./useChangeListeners.ts\"\n\ninterface Props extends React.HTMLAttributes<HTMLDivElement> {\n\tenabled?: boolean\n\tgetCanFocus?(): boolean\n\tsaveChanges?(): void\n\tschema: FramerProseMirrorSchema\n\teditorView: EditorView\n\tcomponentPresets?: ComponentPresets\n\tpopoverAttachmentEdge?: PopoutButtonProps[\"popoverAttachmentEdge\"]\n\tfallbackToModalAppearance?: PopoutButtonProps[\"fallbackToModalAppearance\"]\n\tgetModuleNodeViewConstructor?: GetModuleNodeViewConstructor\n\tgeneratedComponentContext?: GeneratedComponentContext\n}\n\nexport function RichTextEditorContent({\n\tenabled = true,\n\tclassName,\n\tgetCanFocus,\n\tsaveChanges,\n\tschema,\n\teditorView,\n\tcomponentPresets,\n\tpopoverAttachmentEdge,\n\tfallbackToModalAppearance,\n\tgetModuleNodeViewConstructor,\n\tgeneratedComponentContext,\n\t...props\n}: Props) {\n\tconst engine = useBaseEngine()\n\tconst themeOverrideMode = useThemeOverrideMode()\n\tconst { isDarkMode } = useDarkMode()\n\n\tconst ref = useRef<HTMLDivElement>(null)\n\tconst controlPropRows = useControlPropRows()\n\n\tconst didUnmountRef = useRef(false)\n\n\tuseLayoutEffect(() => {\n\t\tgetHardCodedComponentsWithPresets(engine).catch(unhandledError)\n\n\t\treturn () => {\n\t\t\tdidUnmountRef.current = true\n\t\t}\n\t}, [])\n\n\tuseEffect(() => {\n\t\t// Preload all CMS modules so they are available when inserting them.\n\t\tpreloadModuleComponents(engine).catch(unhandledError)\n\t}, [])\n\n\tuseEffect(() => {\n\t\tfunction updateAssetReferences() {\n\t\t\tconst state = editorView.state\n\t\t\tconst transaction = state.tr\n\t\t\tsetTransactionNeedsAssetReferencesUpdate(transaction)\n\t\t\teditorView.dispatch(transaction)\n\t\t}\n\n\t\t// Immediately replace asset references with real URLs.\n\t\tupdateAssetReferences()\n\n\t\tconst observer = engine.scheduler.changes.observe(EngineChange.AssetMap, updateAssetReferences)\n\n\t\treturn () => {\n\t\t\tengine.scheduler.changes.removeObserver(observer)\n\t\t}\n\t}, [editorView])\n\n\tconst blurAnimationFrameRef = useRef<number | null>(null)\n\n\tconst onBlur = useCallback(() => {\n\t\t// If we move focus from ProseMirror to CodeMirror or vice versa, we\n\t\t// don't want to call EditorView.setProps(). If the focus event is fired\n\t\t// in the same frame we cancel both events.\n\t\tblurAnimationFrameRef.current = requestAnimationFrame(() => {\n\t\t\tsaveChanges?.()\n\t\t\tblurAnimationFrameRef.current = null\n\n\t\t\t// When blurred, we copy the selection to a fake selection and clear\n\t\t\t// the DOM selection. This happens for example when opening the link\n\t\t\t// modal.\n\t\t\tif (didUnmountRef.current) return\n\t\t\tif (!editorView.editable) return\n\n\t\t\teditorView.setProps({\n\t\t\t\tdecorations(state) {\n\t\t\t\t\tconst selection = state.selection\n\t\t\t\t\tif (selection.from === selection.to) return\n\n\t\t\t\t\tconst isTextSelection = selection instanceof TextSelection\n\t\t\t\t\tif (!isTextSelection) return\n\n\t\t\t\t\tdocument.getSelection()?.removeAllRanges()\n\n\t\t\t\t\treturn DecorationSet.create(state.doc, [\n\t\t\t\t\t\tDecoration.inline(selection.from, selection.to, {\n\t\t\t\t\t\t\tclass: \"selection\",\n\t\t\t\t\t\t\tnodeName: \"mark\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t])\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t}, [saveChanges, editorView])\n\n\tconst onFocus = useCallback(() => {\n\t\tif (blurAnimationFrameRef.current) {\n\t\t\tcancelAnimationFrame(blurAnimationFrameRef.current)\n\t\t\tblurAnimationFrameRef.current = null\n\t\t} else {\n\t\t\t// When focused, we remove any fake selection, ProseMirror will sync\n\t\t\t// the editor selection back to the DOM.\n\t\t\tif (didUnmountRef.current) return\n\t\t\tif (!editorView.editable) return\n\n\t\t\tconst canFocus = getCanFocus ? getCanFocus() : true\n\t\t\tif (!canFocus) return\n\n\t\t\teditorView.setProps({\n\t\t\t\tdecorations() {\n\t\t\t\t\treturn undefined\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}, [editorView, getCanFocus])\n\n\t// Allow select all of disabled editor\n\tconst onKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\n\t\t\t\tif (document.activeElement instanceof HTMLElement) {\n\t\t\t\t\tdocument.activeElement.blur()\n\t\t\t\t}\n\t\t\t} else if (!enabled && ref.current && isCommandKeyPressed(event) && event.key === \"a\") {\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\tconst range = document.createRange()\n\t\t\t\trange.selectNodeContents(ref.current)\n\n\t\t\t\tconst selection = window.getSelection()\n\t\t\t\tselection?.removeAllRanges()\n\t\t\t\tselection?.addRange(range)\n\t\t\t}\n\t\t},\n\t\t[enabled],\n\t)\n\n\tconst componentPresetsRef = useRef<ComponentPresets | undefined>(componentPresets)\n\tcomponentPresetsRef.current = componentPresets\n\tconst generatedComponentContextRef = useRef<GeneratedComponentContext>(generatedComponentContext)\n\tgeneratedComponentContextRef.current = generatedComponentContext\n\tconst getThemeOverrideMode = useStableCallback(() => themeOverrideMode)\n\n\tconst enabledChangeListeners = useVoidChangeListeners(enabled)\n\tconst darkModeChangeListeners = useVoidChangeListeners(isDarkMode)\n\tconst componentPresetsChangeListeners = useValueChangeListeners(componentPresets)\n\tconst generatedComponentContextChangeListeners = useValueChangeListeners(generatedComponentContext)\n\tconst themeOverrideModeChangeListeners = useVoidChangeListeners(themeOverrideMode)\n\n\tconst modulePreviewCleanupListeners = useSet<VoidFunction>()\n\n\tconst moduleNodeViewConstructor = useConstant(() =>\n\t\tgetModuleNodeViewConstructor?.(\n\t\t\tengine,\n\t\t\tschema,\n\t\t\tsaveChanges,\n\t\t\tcontrolPropRows,\n\t\t\tcomponentPresetsRef,\n\t\t\tgeneratedComponentContextRef,\n\t\t\tgetThemeOverrideMode,\n\t\t\tpopoverAttachmentEdge,\n\t\t\tfallbackToModalAppearance,\n\t\t\tenabledChangeListeners,\n\t\t\tdarkModeChangeListeners,\n\t\t\tcomponentPresetsChangeListeners,\n\t\t\tgeneratedComponentContextChangeListeners,\n\t\t\tthemeOverrideModeChangeListeners,\n\t\t\tmodulePreviewCleanupListeners,\n\t\t),\n\t)\n\n\t// Initialize the node views with the moduleNodeViewConstructor.\n\tuseLayoutEffect(() => {\n\t\tif (!moduleNodeViewConstructor) return\n\n\t\teditorView.setProps({\n\t\t\tnodeViews: {\n\t\t\t\t...editorView.props.nodeViews,\n\t\t\t\tmodule: moduleNodeViewConstructor,\n\t\t\t},\n\t\t})\n\t}, [editorView])\n\n\tuseLayoutEffect(() => {\n\t\tconst element = ref.current\n\t\tassert(element, \"Element must exist\")\n\n\t\telement.appendChild(editorView.dom)\n\n\t\treturn () => {\n\t\t\t/*\n\t\t\t * We need to cleanup the module previews first so the atomic moveBefore happens before\n\t\t\t * the editor is removed from the DOM.\n\t\t\t */\n\t\t\tfor (const cleanup of modulePreviewCleanupListeners) {\n\t\t\t\tcleanup()\n\t\t\t}\n\n\t\t\telement.removeChild(editorView.dom)\n\t\t}\n\t}, [editorView, modulePreviewCleanupListeners])\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\t{...props}\n\t\t\t\tref={ref}\n\t\t\t\trole=\"textbox\"\n\t\t\t\tclassName={cx(className, styles.editor, !enabled && styles.editorDisabled)}\n\t\t\t\tonBlur={onBlur}\n\t\t\t\tonFocus={onFocus}\n\t\t\t\ttabIndex={!enabled ? 0 : undefined}\n\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t/>\n\n\t\t\t<SlashCommandsMenu schema={schema} editorView={editorView} />\n\t\t\t<InlineFormattingMenu schema={schema} editorView={editorView} />\n\t\t</>\n\t)\n}\n", "import \"RichTextEditorContent.styles_1scjv4v.wyw.css\"; export const editor = \"editor_e9a5os3\";\nexport const editorDisabled = \"editorDisabled_e1v6rduk\";", "import \"inlineEditing.styles_1disrhj.wyw.css\"; export const inlineEditingComboBoxMenu = \"inlineEditingComboBoxMenu_i1guv5zy\";", "import {\n\tIconTextBold,\n\tIconTextItalic,\n\tIconTextHeading1,\n\tIconTextHeading2,\n\tIconTextHeading3,\n\tIconTextHeading4,\n\tIconTextHeading5,\n\tIconTextHeading6,\n\tIconTextParagraph,\n\tPopover,\n\tStack,\n\tIconTextLink,\n\tIconTextImage,\n\tIconTextInlineCode,\n\tIconTextBlockquote,\n} from \"@framerjs/fresco\"\nimport type { AttachmentEdgePreferences } from \"@framerjs/fresco/src/components/Popover\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { isCommandKeyPressed } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport * as inlineEditingStyles from \"document/components/utils/inlineEditing.styles.ts\"\nimport type { Link } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { isValidURL, isValidURLWithoutProtocol } from \"document/utils/domainValidation.ts\"\nimport type { EditorView } from \"prosemirror-view\"\nimport { type FramerProseMirrorSchema, schemaSupportsLinks, schemaSupportsMedia } from \"prosemirror/schema/index.ts\"\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { getFirstItemFromIterable } from \"utils/getFirstItemFromIterable.ts\"\nimport { isUndefined } from \"utils/typeChecks.ts\"\nimport { LinkInput } from \"../../shared/LinkInput.tsx\"\nimport { usePopoverWithinPadding } from \"../../utils/usePopoverWithinPadding.ts\"\nimport { FormattingOption } from \"../formatting-option.types.ts\"\nimport {\n\tcreateRemoveLinkTransaction,\n\tcreateUpdateLinkTransaction,\n\tgetLinkAttrs,\n\tisFormattingOptionDisabled,\n} from \"../toolbarUtils.ts\"\nimport { type EditorSelectionState, useEditorSelectionState } from \"../useEditorSelectionState.tsx\"\nimport { ImagePopover } from \"./ImagePopover.tsx\"\nimport * as styles from \"./inlineFormattingMenu.styles.ts\"\nimport {\n\ttype TextBlockElement,\n\tapplyInlineFormatting,\n\tcloseInlineFormattingMenu,\n\tuseInlineFormattingPluginState,\n} from \"./inlineFormattingPlugin.ts\"\n\nconst popoverOffset = { x: 0, y: 10 }\n\nconst attachmentEdgePreferences: AttachmentEdgePreferences = [\"top\", \"bottom\"]\n\ninterface InlineFormattingMenuProps {\n\treadonly schema: FramerProseMirrorSchema\n\treadonly editorView: EditorView\n}\n\nexport function InlineFormattingMenu({ schema, editorView }: InlineFormattingMenuProps) {\n\tconst pluginState = useInlineFormattingPluginState(editorView)\n\n\tif (!pluginState.active) return null\n\n\treturn (\n\t\t<InlineFormattingMenuInner\n\t\t\tschema={schema}\n\t\t\teditorView={editorView}\n\t\t\tcoordinates={pluginState.coordinates}\n\t\t\tonLinkListOpenChange={pluginState.onLinkListOpenChange}\n\t\t/>\n\t)\n}\n\ninterface GroupMenuItem {\n\treadonly kind: \"group\"\n\treadonly items: readonly SelectableMenuItem[]\n}\n\ntype MenuItem = SelectableMenuItem | GroupMenuItem\n\ninterface MenuItemProps {\n\treadonly menuItem: MenuItem\n\treadonly isActive?: boolean\n\treadonly onMouseDown: () => unknown\n\treadonly icon?: JSX.Element | undefined\n\treadonly showTitle: boolean\n\treadonly isDisabled?: boolean\n}\n\nfunction MenuItemComponent({ menuItem, isActive, onMouseDown, icon, showTitle, isDisabled }: MenuItemProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null)\n\n\tconst iconToUse = icon || (\"icon\" in menuItem && menuItem.icon) || null\n\tconst titleToUse = showTitle && \"title\" in menuItem ? menuItem.title : null\n\n\treturn (\n\t\t<Stack\n\t\t\tref={containerRef}\n\t\t\tclassName={cx(\n\t\t\t\tstyles.menuItem,\n\t\t\t\ttitleToUse ? styles.fullMenuItem : styles.narrowMenuItem,\n\t\t\t\tisActive && styles.menuItemActive,\n\t\t\t\tisDisabled && styles.menuItemDisabled,\n\t\t\t)}\n\t\t\tonMouseDown={event => {\n\t\t\t\tif (isDisabled) return\n\t\t\t\tevent.preventDefault()\n\t\t\t\tonMouseDown()\n\t\t\t}}\n\t\t>\n\t\t\t{iconToUse ? <div className={styles.menuItemIconContainer}>{iconToUse}</div> : null}\n\t\t\t{titleToUse ? <div>{titleToUse}</div> : null}\n\t\t</Stack>\n\t)\n}\n\ninterface SelectableMenuItem {\n\treadonly display: \"inline\" | \"block\"\n\treadonly kind: \"selectable\"\n\treadonly type: FormattingOption\n\treadonly title: string\n\treadonly icon: JSX.Element\n\treadonly element?: string\n}\n\ninterface SelectableInlineMenuItem extends SelectableMenuItem {\n\treadonly display: \"inline\"\n}\n\ninterface SelectableBlockMenuItem extends SelectableMenuItem {\n\treadonly display: \"block\"\n\treadonly element: TextBlockElement\n}\n\nconst italicMenuItem: SelectableInlineMenuItem = {\n\tdisplay: \"inline\",\n\tkind: \"selectable\",\n\ttype: FormattingOption.Italic,\n\ttitle: \"Italic\",\n\ticon: <IconTextItalic />,\n}\n\nconst boldMenuItem: SelectableInlineMenuItem = {\n\tdisplay: \"inline\",\n\tkind: \"selectable\",\n\ttype: FormattingOption.Bold,\n\ttitle: \"Bold\",\n\ticon: <IconTextBold />,\n}\n\nconst paragraphMenuItem: SelectableBlockMenuItem = {\n\tdisplay: \"block\",\n\tkind: \"selectable\",\n\ttype: FormattingOption.Paragraph,\n\ttitle: \"Paragraph\",\n\telement: \"p\",\n\ticon: <IconTextParagraph />,\n}\n\nconst heading1MenuItem: SelectableBlockMenuItem = {\n\tdisplay: \"block\",\n\tkind: \"selectable\",\n\ttype: FormattingOption.Heading1,\n\ttitle: \"Heading 1\",\n\telement: \"h1\",\n\ticon: <IconTextHeading1 />,\n}\n\nconst heading2MenuItem: SelectableBlockMenuItem = {\n\tdisplay: \"block\",\n\tkind: \"selectable\",\n\ttype: FormattingOption.Heading2,\n\ttitle: \"Heading 2\",\n\telement: \"h2\",\n\ticon: <IconTextHeading2 />,\n}\n\nconst heading3MenuItem: SelectableBlockMenuItem = {\n\tdisplay: \"block\",\n\tkind: \"selectable\",\n\ttype: FormattingOption.Heading3,\n\ttitle: \"Heading 3\",\n\telement: \"h3\",\n\ticon: <IconTextHeading3 />,\n}\n\nconst heading4MenuItem: SelectableBlockMenuItem = {\n\tdisplay: \"block\",\n\tkind: \"selectable\",\n\ttype: FormattingOption.Heading4,\n\ttitle: \"Heading 4\",\n\telement: \"h4\",\n\ticon: <IconTextHeading4 />,\n}\n\nconst heading5MenuItem: SelectableBlockMenuItem = {\n\tdisplay: \"block\",\n\tkind: \"selectable\",\n\ttype: FormattingOption.Heading5,\n\ttitle: \"Heading 5\",\n\telement: \"h5\",\n\ticon: <IconTextHeading5 />,\n}\n\nconst heading6MenuItem: SelectableBlockMenuItem = {\n\tdisplay: \"block\",\n\tkind: \"selectable\",\n\ttype: FormattingOption.Heading6,\n\ttitle: \"Heading 6\",\n\telement: \"h6\",\n\ticon: <IconTextHeading6 />,\n}\n\nconst blockquoteMenuItem: SelectableBlockMenuItem = {\n\tdisplay: \"block\",\n\tkind: \"selectable\",\n\ttype: FormattingOption.Blockquote,\n\ttitle: Dictionary.Blockquote,\n\telement: \"blockquote\",\n\ticon: <IconTextBlockquote />,\n}\n\nconst inlineCodeMenuItem: SelectableInlineMenuItem = {\n\tdisplay: \"inline\",\n\tkind: \"selectable\",\n\ttype: FormattingOption.InlineCode,\n\ttitle: Dictionary.InlineCode,\n\ticon: <IconTextInlineCode />,\n}\n\nconst imageEditMenuItem: SelectableMenuItem = {\n\tdisplay: \"block\",\n\tkind: \"selectable\",\n\ttype: FormattingOption.ImageEdit,\n\ttitle: \"Image\",\n\ticon: <IconTextImage />,\n}\n\nconst linkMenuItem: SelectableInlineMenuItem = {\n\tdisplay: \"inline\",\n\tkind: \"selectable\",\n\ttype: FormattingOption.Link,\n\ttitle: \"Link\",\n\ticon: <IconTextLink />,\n}\n\n/** inline formatting toolbar might differ from toolbar in rich text editor */\ntype InlineFormattingOptions =\n\t| FormattingOption.Blockquote\n\t| FormattingOption.Bold\n\t| FormattingOption.Heading1\n\t| FormattingOption.Heading2\n\t| FormattingOption.Heading3\n\t| FormattingOption.Heading4\n\t| FormattingOption.Heading5\n\t| FormattingOption.Heading6\n\t| FormattingOption.ImageEdit\n\t| FormattingOption.InlineCode\n\t| FormattingOption.Italic\n\t| FormattingOption.Link\n\t| FormattingOption.Paragraph\n\nconst formattingOptionToSelectableMenuItem: Readonly<Record<InlineFormattingOptions, SelectableMenuItem>> = {\n\t[FormattingOption.Blockquote]: blockquoteMenuItem,\n\t[FormattingOption.Bold]: boldMenuItem,\n\t[FormattingOption.Heading1]: heading1MenuItem,\n\t[FormattingOption.Heading2]: heading2MenuItem,\n\t[FormattingOption.Heading3]: heading3MenuItem,\n\t[FormattingOption.Heading4]: heading4MenuItem,\n\t[FormattingOption.Heading5]: heading5MenuItem,\n\t[FormattingOption.Heading6]: heading6MenuItem,\n\t[FormattingOption.ImageEdit]: imageEditMenuItem,\n\t[FormattingOption.InlineCode]: inlineCodeMenuItem,\n\t[FormattingOption.Italic]: italicMenuItem,\n\t[FormattingOption.Link]: linkMenuItem,\n\t[FormattingOption.Paragraph]: paragraphMenuItem,\n} as const\n\nconst menuItemsMap = {\n\tblocks: {\n\t\tkind: \"group\",\n\t\titems: [\n\t\t\tformattingOptionToSelectableMenuItem[FormattingOption.Heading1],\n\t\t\tformattingOptionToSelectableMenuItem[FormattingOption.Heading2],\n\t\t\tformattingOptionToSelectableMenuItem[FormattingOption.Heading3],\n\t\t\tformattingOptionToSelectableMenuItem[FormattingOption.Heading4],\n\t\t\tformattingOptionToSelectableMenuItem[FormattingOption.Heading5],\n\t\t\tformattingOptionToSelectableMenuItem[FormattingOption.Heading6],\n\t\t\tformattingOptionToSelectableMenuItem[FormattingOption.Paragraph],\n\t\t],\n\t},\n\tbold: formattingOptionToSelectableMenuItem[FormattingOption.Bold],\n\titalic: formattingOptionToSelectableMenuItem[FormattingOption.Italic],\n\tlink: formattingOptionToSelectableMenuItem[FormattingOption.Link],\n\tblockquote: formattingOptionToSelectableMenuItem[FormattingOption.Blockquote],\n\tinlineCode: formattingOptionToSelectableMenuItem[FormattingOption.InlineCode],\n\timageEdit: formattingOptionToSelectableMenuItem[FormattingOption.ImageEdit],\n} as const\n\nconst isActiveMenuItem = (item: SelectableMenuItem, editorSelectionState: EditorSelectionState) => {\n\tswitch (item.type) {\n\t\tcase FormattingOption.Bold:\n\t\t\treturn editorSelectionState.isBold\n\t\tcase FormattingOption.Italic:\n\t\t\treturn editorSelectionState.isItalic\n\t\tcase FormattingOption.Link:\n\t\t\treturn editorSelectionState.isLink\n\t\tcase FormattingOption.InlineCode:\n\t\t\treturn editorSelectionState.isCode\n\t\tcase FormattingOption.Blockquote:\n\t\t\treturn !!editorSelectionState.blockquoteNode\n\t\tcase FormattingOption.ImageEdit:\n\t\t\treturn false\n\t\tcase FormattingOption.Heading1:\n\t\t\treturn editorSelectionState.selectedTags.has(\"h1\")\n\t\tcase FormattingOption.Heading2:\n\t\t\treturn editorSelectionState.selectedTags.has(\"h2\")\n\t\tcase FormattingOption.Heading3:\n\t\t\treturn editorSelectionState.selectedTags.has(\"h3\")\n\t\tcase FormattingOption.Heading4:\n\t\t\treturn editorSelectionState.selectedTags.has(\"h4\")\n\t\tcase FormattingOption.Heading5:\n\t\t\treturn editorSelectionState.selectedTags.has(\"h5\")\n\t\tcase FormattingOption.Heading6:\n\t\t\treturn editorSelectionState.selectedTags.has(\"h6\")\n\t\tcase FormattingOption.Paragraph:\n\t\t\treturn editorSelectionState.selectedTags.has(\"p\")\n\t}\n\n\treturn false\n}\n\ninterface InlineFormattingMenuInnerProps {\n\tschema: FramerProseMirrorSchema\n\teditorView: EditorView\n\tcoordinates: {\n\t\tleft: number\n\t\ttop: number\n\t}\n\tonLinkListOpenChange?: (open: boolean) => void\n}\n\nfunction validateLink(value: string): boolean {\n\tconst trimmedValue = value.trim()\n\n\tif (!trimmedValue) {\n\t\treturn false\n\t}\n\n\tif (trimmedValue.startsWith(\"/\") || trimmedValue.startsWith(\"#\")) {\n\t\ttry {\n\t\t\tnew URL(trimmedValue, window.location.origin)\n\t\t\treturn true\n\t\t} catch {\n\t\t\treturn false\n\t\t}\n\t} else if (isValidURL(trimmedValue) || isValidURLWithoutProtocol(trimmedValue)) {\n\t\treturn true\n\t} else {\n\t\treturn false\n\t}\n}\n\ninterface LinkPopoverProps {\n\tschema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithLinks\n\teditorView: EditorView\n\tonClose: () => void\n\tanchor: HTMLElement | null\n\teditorSelectionState: EditorSelectionState\n\twidth: number | undefined\n\tonListOpenChange?: (open: boolean) => void\n}\n\nconst linkMenuOffset = { x: -dimensions.values.menuPadding, y: dimensions.values.inputSpacing }\n\nconst linkPopoverMinWidth = 175\n\nfunction LinkPopover({\n\tschema,\n\teditorView,\n\tonClose,\n\tanchor,\n\teditorSelectionState,\n\twidth,\n\tonListOpenChange,\n}: LinkPopoverProps) {\n\tconst engine = useBaseEngine()\n\tconst tree = useEngineState(() => engine.tree, [], EngineChange.Tree)\n\tconst [showError, setShowError] = useState(false)\n\n\tconst popoverWithin = usePopoverWithinPadding()\n\n\tconst { commonLink } = editorSelectionState\n\n\tconst childWidth = Math.max(width ?? 0, linkPopoverMinWidth)\n\n\tconst handleChange = useCallback(\n\t\t(link: Link, final: boolean) => {\n\t\t\tif (!final) {\n\t\t\t\tsetShowError(false)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (isUndefined(link) || (link.type === \"url\" && link.url.trim() === \"\")) {\n\t\t\t\tremoveLink()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst isValidValue = link.type === \"url\" ? validateLink(link.url) : true\n\t\t\tif (!isValidValue) {\n\t\t\t\tsetShowError(true)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst transaction = createUpdateLinkTransaction(\n\t\t\t\tengine.tree,\n\t\t\t\tengine.componentLoader,\n\t\t\t\tschema,\n\t\t\t\teditorView,\n\t\t\t\tlink,\n\t\t\t\tgetLinkAttrs(\n\t\t\t\t\tlink,\n\t\t\t\t\t{\n\t\t\t\t\t\topenInNewTab: editorSelectionState.commonOpenInNewTab,\n\t\t\t\t\t\tsmoothScroll: editorSelectionState.commonSmoothScroll,\n\t\t\t\t\t\tclickTrackingId: editorSelectionState.commonClickTrackingId,\n\t\t\t\t\t\trelValues: editorSelectionState.commonRelValues,\n\t\t\t\t\t\tpreserveParams: editorSelectionState.commonPreserveParams,\n\t\t\t\t\t},\n\t\t\t\t\t{},\n\t\t\t\t),\n\t\t\t)\n\t\t\teditorView.dispatch(transaction)\n\n\t\t\tif (final) {\n\t\t\t\tonClose()\n\t\t\t}\n\t\t},\n\t\t[editorView, engine.tree, editorSelectionState],\n\t)\n\n\tfunction removeLink() {\n\t\tconst transaction = createRemoveLinkTransaction(schema, editorView)\n\t\teditorView.dispatch(transaction)\n\t\tonClose()\n\t}\n\n\treturn (\n\t\t<Popover\n\t\t\tanchor={anchor}\n\t\t\talignSelf=\"center\"\n\t\t\tbackdropEnabled={false}\n\t\t\tshowArrow={false}\n\t\t\tonClose={onClose}\n\t\t\tanimateAppear={false}\n\t\t\toffset={popoverOffset}\n\t\t\tfocusTrapEnabled={false}\n\t\t\tattachTo={attachmentEdgePreferences}\n\t\t\twithin={popoverWithin}\n\t\t\tclassName={cx(styles.inlineMenuPopover, styles.linkPopover)}\n\t\t\tstyle={{\n\t\t\t\twidth: `${childWidth}px`,\n\t\t\t}}\n\t\t>\n\t\t\t<div className={cx(styles.menuContainer, styles.horizontalMenuContainer, styles.linkInputContainer)}>\n\t\t\t\t<LinkInput\n\t\t\t\t\ttree={tree}\n\t\t\t\t\tlink={commonLink}\n\t\t\t\t\tsupportsPageLinks={true}\n\t\t\t\t\tvariableInfo={null}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tsupportsVariables={true}\n\t\t\t\t\tconstantChange={true}\n\t\t\t\t\tautoFocus\n\t\t\t\t\tonClear={removeLink}\n\t\t\t\t\tmenuOffset={linkMenuOffset}\n\t\t\t\t\tonOpenChange={onListOpenChange}\n\t\t\t\t\tclassName={cx(styles.linkInputWrapper, showError && styles.linkInputWrapperError)}\n\t\t\t\t\tbackdropEnabled={true}\n\t\t\t\t\tmenuWidth={childWidth}\n\t\t\t\t\tmenuClassName={inlineEditingStyles.inlineEditingComboBoxMenu}\n\t\t\t\t\tlinkListStickySectionHeaders={false}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</Popover>\n\t)\n}\n\nfunction InlineFormattingMenuInner({\n\tschema,\n\teditorView,\n\tcoordinates,\n\tonLinkListOpenChange,\n}: InlineFormattingMenuInnerProps) {\n\tconst engine = useBaseEngine()\n\n\tconst [anchorElement, setAnchorElement] = useState<HTMLDivElement | null>(null)\n\n\tconst [secondaryPopover, setSecondaryPopover] = useState<number | null>(null)\n\tconst menuRef = useRef<HTMLDivElement>(null)\n\tconst secondaryPopoverWidth = menuRef.current ? menuRef.current.getBoundingClientRect().width : undefined\n\n\tconst popoverWithin = usePopoverWithinPadding()\n\n\tconst closeMenu = useCallback(() => {\n\t\tcloseInlineFormattingMenu(editorView)\n\t\tsetSecondaryPopover(null)\n\t}, [editorView])\n\n\tconst closeSecondaryPopover = useCallback(() => {\n\t\tsetSecondaryPopover(null)\n\t\trequestAnimationFrame(() => {\n\t\t\teditorView.focus()\n\t\t})\n\t}, [editorView])\n\n\tconst toggleSecondaryPopover = useCallback(\n\t\t(itemIndex: number) => {\n\t\t\tconst alreadyOpen = secondaryPopover === itemIndex\n\t\t\tif (alreadyOpen) {\n\t\t\t\tcloseSecondaryPopover()\n\t\t\t} else {\n\t\t\t\tsetSecondaryPopover(itemIndex)\n\t\t\t}\n\t\t},\n\t\t[secondaryPopover, closeSecondaryPopover],\n\t)\n\n\tconst editorSelectionState = useEditorSelectionState(engine, editorView.state)\n\n\tconst relevantMenuItems = useMemo(() => {\n\t\tif (editorSelectionState.imageNodeSelected) {\n\t\t\tif (editorSelectionState.imageNodeSelected.attrs.type === \"video\") {\n\t\t\t\treturn [menuItemsMap.link]\n\t\t\t}\n\t\t\t// When image is selected, show only Image and Link buttons,\n\t\t\t// otherwise too many disabled items are shown\n\t\t\treturn [menuItemsMap.imageEdit, menuItemsMap.link]\n\t\t}\n\t\treturn [\n\t\t\tmenuItemsMap.blocks,\n\t\t\tmenuItemsMap.bold,\n\t\t\tmenuItemsMap.italic,\n\t\t\tmenuItemsMap.link,\n\t\t\tmenuItemsMap.blockquote,\n\t\t\tmenuItemsMap.inlineCode,\n\t\t]\n\t}, [editorSelectionState.imageNodeSelected])\n\n\tconst handleSelectItem = useCallback(\n\t\t(formattingOption: FormattingOption) => {\n\t\t\tcloseSecondaryPopover()\n\t\t\tapplyInlineFormatting(schema, editorView, editorSelectionState, formattingOption)\n\t\t},\n\t\t[editorView, editorSelectionState, closeSecondaryPopover, schema],\n\t)\n\n\tconst handleKeyDown = useCallback(\n\t\t(event: KeyboardEvent) => {\n\t\t\tif (isCommandKeyPressed(event) && event.key === \"k\" && !event.repeat) {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tevent.preventDefault()\n\t\t\t\ttoggleSecondaryPopover(\n\t\t\t\t\trelevantMenuItems.findIndex(item => item.kind === \"selectable\" && item.type === FormattingOption.Link),\n\t\t\t\t)\n\t\t\t}\n\t\t},\n\t\t[relevantMenuItems, toggleSecondaryPopover],\n\t)\n\tuseEffect(() => {\n\t\teditorView.dom.addEventListener(\"keydown\", handleKeyDown)\n\t\treturn () => {\n\t\t\teditorView.dom.removeEventListener(\"keydown\", handleKeyDown)\n\t\t}\n\t}, [handleKeyDown, editorView.dom])\n\n\tfunction getSelectedTagIcon() {\n\t\tconst firstSelectedBlock = getFirstItemFromIterable(editorSelectionState.selectedTags)\n\t\tif (!firstSelectedBlock) return null\n\n\t\tswitch (firstSelectedBlock) {\n\t\t\tcase \"p\":\n\t\t\t\treturn formattingOptionToSelectableMenuItem[FormattingOption.Paragraph].icon\n\t\t\tcase \"h1\":\n\t\t\t\treturn formattingOptionToSelectableMenuItem[FormattingOption.Heading1].icon\n\t\t\tcase \"h2\":\n\t\t\t\treturn formattingOptionToSelectableMenuItem[FormattingOption.Heading2].icon\n\t\t\tcase \"h3\":\n\t\t\t\treturn formattingOptionToSelectableMenuItem[FormattingOption.Heading3].icon\n\t\t\tcase \"h4\":\n\t\t\t\treturn formattingOptionToSelectableMenuItem[FormattingOption.Heading4].icon\n\t\t\tcase \"h5\":\n\t\t\t\treturn formattingOptionToSelectableMenuItem[FormattingOption.Heading5].icon\n\t\t\tcase \"h6\":\n\t\t\t\treturn formattingOptionToSelectableMenuItem[FormattingOption.Heading6].icon\n\t\t\tdefault:\n\t\t\t\treturn null\n\t\t}\n\t}\n\n\tconst { disabledItems, allItemsDisabled } = useMemo(() => {\n\t\tlet allItemsDisabled = true\n\t\tconst disabledItems: Set<MenuItem> = new Set()\n\n\t\tconst evaluateItem = (item: MenuItem & { kind: \"selectable\" }) => {\n\t\t\tif (isFormattingOptionDisabled(item.type, editorSelectionState, true)) {\n\t\t\t\tdisabledItems.add(item)\n\t\t\t} else {\n\t\t\t\tallItemsDisabled = false\n\t\t\t}\n\t\t}\n\n\t\trelevantMenuItems.forEach(item => (item.kind === \"group\" ? item.items.forEach(evaluateItem) : evaluateItem(item)))\n\n\t\treturn {\n\t\t\tdisabledItems,\n\t\t\tallItemsDisabled,\n\t\t}\n\t}, [editorSelectionState, relevantMenuItems])\n\n\tif (relevantMenuItems.length === 0) return null\n\n\tif (allItemsDisabled) return null\n\n\tconst isImageEditActive =\n\t\tsecondaryPopover !== null &&\n\t\trelevantMenuItems[secondaryPopover]?.kind === \"selectable\" &&\n\t\trelevantMenuItems[secondaryPopover].type === FormattingOption.ImageEdit\n\n\tconst isLinkActive =\n\t\tsecondaryPopover !== null &&\n\t\trelevantMenuItems[secondaryPopover]?.kind === \"selectable\" &&\n\t\trelevantMenuItems[secondaryPopover].type === FormattingOption.Link\n\n\treturn (\n\t\t<>\n\t\t\t{createPortal(\n\t\t\t\t<div\n\t\t\t\t\tref={setAnchorElement}\n\t\t\t\t\tclassName={styles.menuAnchor}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tleft: coordinates.left,\n\t\t\t\t\t\ttop: coordinates.top,\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t\tdocument.body,\n\t\t\t)}\n\n\t\t\t{anchorElement && (\n\t\t\t\t<Popover\n\t\t\t\t\tanchor={anchorElement}\n\t\t\t\t\talignSelf=\"center\"\n\t\t\t\t\tbackdropEnabled={false}\n\t\t\t\t\tshowArrow={false}\n\t\t\t\t\tonClose={closeMenu}\n\t\t\t\t\tanimateAppear={false}\n\t\t\t\t\toffset={popoverOffset}\n\t\t\t\t\tfocusTrapEnabled={false}\n\t\t\t\t\tattachTo={attachmentEdgePreferences}\n\t\t\t\t\twithin={popoverWithin}\n\t\t\t\t\tclassName={styles.inlineMenuPopover}\n\t\t\t\t>\n\t\t\t\t\t<div className={cx(styles.menuContainer, styles.horizontalMenuContainer)} ref={menuRef}>\n\t\t\t\t\t\t{relevantMenuItems.map((item, index) => {\n\t\t\t\t\t\t\tswitch (item.kind) {\n\t\t\t\t\t\t\t\tcase \"group\": {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<MenuItemComponent\n\t\t\t\t\t\t\t\t\t\t\tkey={`group-${item.kind}`}\n\t\t\t\t\t\t\t\t\t\t\tmenuItem={item}\n\t\t\t\t\t\t\t\t\t\t\tisActive={secondaryPopover === index}\n\t\t\t\t\t\t\t\t\t\t\tonMouseDown={() => toggleSecondaryPopover(index)}\n\t\t\t\t\t\t\t\t\t\t\tshowTitle={false}\n\t\t\t\t\t\t\t\t\t\t\ticon={getSelectedTagIcon() || undefined}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tcase \"selectable\":\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<MenuItemComponent\n\t\t\t\t\t\t\t\t\t\t\tkey={item.type}\n\t\t\t\t\t\t\t\t\t\t\tmenuItem={item}\n\t\t\t\t\t\t\t\t\t\t\tisActive={isActiveMenuItem(item, editorSelectionState) || secondaryPopover === index}\n\t\t\t\t\t\t\t\t\t\t\tonMouseDown={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (item.type === FormattingOption.Link || item.type === FormattingOption.ImageEdit) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleSecondaryPopover(index)\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleSelectItem(item.type)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tshowTitle={false}\n\t\t\t\t\t\t\t\t\t\t\tisDisabled={disabledItems.has(item)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t</Popover>\n\t\t\t)}\n\n\t\t\t{secondaryPopover !== null && relevantMenuItems[secondaryPopover]?.kind === \"group\" ? (\n\t\t\t\t<Popover\n\t\t\t\t\tanchor={menuRef.current}\n\t\t\t\t\talignSelf=\"start\"\n\t\t\t\t\tbackdropEnabled={false}\n\t\t\t\t\tshowArrow={false}\n\t\t\t\t\tonClose={closeSecondaryPopover}\n\t\t\t\t\tanimateAppear={false}\n\t\t\t\t\toffset={popoverOffset}\n\t\t\t\t\tfocusTrapEnabled={false}\n\t\t\t\t\tattachTo={attachmentEdgePreferences}\n\t\t\t\t\twithin={popoverWithin}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: secondaryPopoverWidth,\n\t\t\t\t\t}}\n\t\t\t\t\tclassName={styles.inlineMenuPopover}\n\t\t\t\t>\n\t\t\t\t\t<div className={cx(styles.menuContainer, styles.verticalMenuContainer)}>\n\t\t\t\t\t\t{relevantMenuItems[secondaryPopover] &&\n\t\t\t\t\t\t\t\"items\" in relevantMenuItems[secondaryPopover] &&\n\t\t\t\t\t\t\trelevantMenuItems[secondaryPopover].items.map(item => (\n\t\t\t\t\t\t\t\t<MenuItemComponent\n\t\t\t\t\t\t\t\t\tkey={item.type}\n\t\t\t\t\t\t\t\t\tmenuItem={item}\n\t\t\t\t\t\t\t\t\tisActive={isActiveMenuItem(item, editorSelectionState)}\n\t\t\t\t\t\t\t\t\tonMouseDown={() => handleSelectItem(item.type)}\n\t\t\t\t\t\t\t\t\tshowTitle={true}\n\t\t\t\t\t\t\t\t\tisDisabled={disabledItems.has(item)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</Popover>\n\t\t\t) : null}\n\n\t\t\t{isLinkActive && schemaSupportsLinks(schema) && (\n\t\t\t\t<LinkPopover\n\t\t\t\t\tschema={schema}\n\t\t\t\t\teditorView={editorView}\n\t\t\t\t\tonClose={closeSecondaryPopover}\n\t\t\t\t\teditorSelectionState={editorSelectionState}\n\t\t\t\t\twidth={secondaryPopoverWidth}\n\t\t\t\t\tanchor={menuRef.current}\n\t\t\t\t\tonListOpenChange={onLinkListOpenChange}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{isImageEditActive && schemaSupportsMedia(schema) && (\n\t\t\t\t<ImagePopover\n\t\t\t\t\tschema={schema}\n\t\t\t\t\teditorView={editorView}\n\t\t\t\t\tonClose={closeSecondaryPopover}\n\t\t\t\t\teditorSelectionState={editorSelectionState}\n\t\t\t\t\twidth={secondaryPopoverWidth}\n\t\t\t\t\tanchor={menuRef.current}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t)\n}\n", "import type { MenuItemOptions } from \"app/menu.ts\"\nimport { Fragment } from \"prosemirror-model\"\nimport type { EditorState } from \"prosemirror-state\"\nimport {\n\tCellSelection,\n\taddColumnAfter,\n\taddColumnBefore,\n\taddRowAfter,\n\taddRowBefore,\n\tdeleteColumn,\n\tdeleteRow,\n\tdeleteTable,\n\tmergeCells,\n\tsplitCell,\n\ttoggleHeaderCell,\n\ttoggleHeaderColumn,\n\ttoggleHeaderRow,\n} from \"prosemirror-tables\"\nimport type { EditorView } from \"prosemirror-view\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\n\nexport function tableContextMenuItems(editorView: EditorView): MenuItemOptions[] {\n\tconst selection = editorView.state.selection\n\tconst hasTableSelection = selection instanceof CellSelection\n\n\tconst selectedRowsIndices = new Set<number>()\n\tconst selectedColumnsIndices = new Set<number>()\n\n\tif (hasTableSelection) {\n\t\tselection.forEachCell((_, position) => {\n\t\t\tconst resolvedPosition = editorView.state.doc.resolve(position)\n\t\t\tselectedRowsIndices.add(resolvedPosition.index(-1))\n\t\t\tselectedColumnsIndices.add(resolvedPosition.index())\n\t\t})\n\t}\n\n\tconst hasMultipleRowsSelection = selectedRowsIndices.size > 1\n\tconst hasMultipleColumnsSelection = selectedColumnsIndices.size > 1\n\tconst hasMultipleCellsSelection = hasMultipleRowsSelection || hasMultipleColumnsSelection\n\tconst hasNoMultipleCellsSelection = !hasMultipleRowsSelection && !hasMultipleColumnsSelection\n\n\tconst menuItems: MenuItemOptions[] = []\n\n\tmenuItems.push(\n\t\t{\n\t\t\tlabel: \"Insert Column Before\",\n\t\t\tclick: () => addColumnBefore(editorView.state, editorView.dispatch),\n\t\t},\n\t\t{\n\t\t\tlabel: \"Insert Column After\",\n\t\t\tclick: () => addColumnAfter(editorView.state, editorView.dispatch),\n\t\t},\n\t)\n\n\tif (!hasTableSelection || !selection.isRowSelection()) {\n\t\tmenuItems.push({\n\t\t\tlabel: hasMultipleColumnsSelection ? \"Delete Columns\" : \"Delete Column\",\n\t\t\tclick: () => deleteColumn(editorView.state, editorView.dispatch),\n\t\t})\n\t}\n\n\tmenuItems.push(\n\t\t{ type: \"separator\" },\n\t\t{\n\t\t\tlabel: \"Insert Row Before\",\n\t\t\tclick: () => addRowBefore(editorView.state, editorView.dispatch),\n\t\t},\n\t\t{\n\t\t\tlabel: \"Insert Row After\",\n\t\t\tclick: () => addRowAfter(editorView.state, editorView.dispatch),\n\t\t},\n\t)\n\n\tif (!hasTableSelection || !selection.isColSelection()) {\n\t\tmenuItems.push({\n\t\t\tlabel: hasMultipleRowsSelection ? \"Delete Rows\" : \"Delete Row\",\n\t\t\tclick: () => deleteRow(editorView.state, editorView.dispatch),\n\t\t})\n\t}\n\n\tmenuItems.push({ type: \"separator\" })\n\n\tif (!hasMultipleRowsSelection) {\n\t\tmenuItems.push({\n\t\t\tlabel: hasMultipleColumnsSelection ? \"Toggle Header Columns\" : \"Toggle Header Column\",\n\t\t\tclick: () => toggleHeaderColumn(editorView.state, editorView.dispatch),\n\t\t})\n\t}\n\n\tif (!hasMultipleColumnsSelection) {\n\t\tmenuItems.push({\n\t\t\tlabel: hasMultipleRowsSelection ? \"Toggle Header Rows\" : \"Toggle Header Row\",\n\t\t\tclick: () => toggleHeaderRow(editorView.state, editorView.dispatch),\n\t\t})\n\t}\n\n\tmenuItems.push({\n\t\tlabel: hasMultipleCellsSelection ? \"Toggle Header Cells\" : \"Toggle Header Cell\",\n\t\tclick: () => toggleHeaderCell(editorView.state, editorView.dispatch),\n\t})\n\n\tif (hasMultipleColumnsSelection) {\n\t\tmenuItems.push(\n\t\t\t{ type: \"separator\" },\n\t\t\t{\n\t\t\t\tlabel: \"Merge Cells\",\n\t\t\t\tclick: () => mergeCells(editorView.state, editorView.dispatch),\n\t\t\t},\n\t\t)\n\t}\n\n\tconst canSplitCells = splitCell(editorView.state)\n\n\tif (hasNoMultipleCellsSelection && canSplitCells) {\n\t\tmenuItems.push(\n\t\t\t{ type: \"separator\" },\n\t\t\t{\n\t\t\t\tlabel: \"Split Cell\",\n\t\t\t\tclick: () => splitCell(editorView.state, editorView.dispatch),\n\t\t\t},\n\t\t)\n\t}\n\n\tmenuItems.push(\n\t\t{ type: \"separator\" },\n\t\t{\n\t\t\tlabel: \"Delete Table\",\n\t\t\tclick: () => deleteTable(editorView.state, editorView.dispatch),\n\t\t},\n\t)\n\n\treturn menuItems\n}\n\nexport function areAllSelectedTableCellsEmpty(state: EditorState): boolean {\n\tif (!(state.selection instanceof CellSelection)) return false\n\n\treturn state.selection.ranges.every(range => {\n\t\tlet areAllEmpty = true\n\n\t\tstate.doc.nodesBetween(range.$from.pos, range.$to.pos, node => {\n\t\t\tif (node.isTextblock && node.content.size > 0) {\n\t\t\t\tareAllEmpty = false\n\t\t\t\treturn false // stop descending into this node's children\n\t\t\t}\n\n\t\t\treturn areAllEmpty // continue checking other nodes if this node is empty\n\t\t})\n\n\t\treturn areAllEmpty\n\t})\n}\n\nexport function createInitialTable(\n\t{ rowsCount, columnsCount }: Record<\"rowsCount\" | \"columnsCount\", number>,\n\tschema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithTables,\n) {\n\tconst { table, table_cell: tableCell, table_header: tableHeader, table_row: tableRow } = schema.nodes\n\n\tconst headerRow = tableRow.create(\n\t\t{},\n\t\tFragment.from(\n\t\t\tArray.from({ length: columnsCount }).map((_column, columnIndex) =>\n\t\t\t\ttableHeader.create(\n\t\t\t\t\tnull,\n\t\t\t\t\tschema.nodes.textBlock.create(null, schema.text(`Header ${columnIndex + 1}`, [schema.marks.bold.create()])),\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t)\n\n\tconst bodyRows = Array.from({ length: rowsCount - 1 }).map((_row, rowIndex) =>\n\t\ttableRow.create(\n\t\t\tnull,\n\t\t\tFragment.from(\n\t\t\t\tArray.from({ length: columnsCount }).map((_column, columnIndex) =>\n\t\t\t\t\ttableCell.create(\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\tschema.nodes.textBlock.create(null, schema.text(`Cell ${rowIndex + 1}-${columnIndex + 1}`)),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t)\n\n\treturn table.create(null, Fragment.from([headerRow].concat(bodyRows)))\n}\n", "import type { ComponentLoader } from \"@framerjs/framer-runtime\"\nimport { assert } from \"@framerjs/shared\"\nimport { getRawWebPagePath } from \"document/components/utils/getWebPagePath.ts\"\nimport type { CanvasTree } from \"document/models/CanvasTree/index.ts\"\nimport { isWebPageNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { shouldOpenLinkInNewTab } from \"document/models/CanvasTree/traits/WithLink.ts\"\nimport type { RichTextTag } from \"document/models/CanvasTree/traits/WithRichTextTag.ts\"\nimport type { Link } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport { isLinkToURL } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport type { ReducedRecord } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { isResolvedCollectionItemSelector } from \"document/models/CanvasTree/traits/utils/ResolvedCollectionItemSelector.ts\"\nimport { isSupportedLinkRelValueArray } from \"document/models/SupportedRelValue.ts\"\nimport { wrapIn } from \"prosemirror-commands\"\nimport type { Mark, MarkType, Node, Node as ProseMirrorNode } from \"prosemirror-model\"\nimport type { EditorState, Transaction } from \"prosemirror-state\"\nimport { liftTarget } from \"prosemirror-transform\"\nimport type { EditorView } from \"prosemirror-view\"\nimport { findLinkEnd, findLinkStart } from \"prosemirror/linkBoundaries.ts\"\nimport { isImageNode } from \"prosemirror/schema/image.ts\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport { type LinkAttrs, isLinkMark } from \"prosemirror/schema/link.ts\"\nimport { isProseMirrorTextNode } from \"prosemirror/schema/text.ts\"\nimport { isTextBlockNode } from \"prosemirror/schema/textBlock.ts\"\nimport type { Mutable } from \"utils/Mutable.ts\"\nimport { getItemToSlug } from \"utils/collectionSlugUtils.ts\"\nimport { extractPathVariables } from \"utils/pathVariables.ts\"\nimport { isBoolean, isString } from \"utils/typeChecks.ts\"\nimport { FormattingOption } from \"./formatting-option.types.ts\"\nimport { areAllSelectedTableCellsEmpty } from \"./tableUtils.ts\"\nimport type { EditorSelectionState } from \"./useEditorSelectionState.tsx\"\n\nexport function forEachMarksOfNode(state: EditorState, callback: (marks: readonly Mark[]) => void) {\n\tconst selection = state.selection\n\tif (selection.empty) {\n\t\t// Get the marks at the cursor position (if the selection is empty)\n\t\tconst marksAtCursor = state.storedMarks ?? selection.$head.marks()\n\t\tcallback(marksAtCursor)\n\t} else if (areAllSelectedTableCellsEmpty(state)) {\n\t\tcallback([])\n\t} else {\n\t\t// Get the marks within the selection's ranges otherwise\n\t\tselection.ranges.forEach(range => {\n\t\t\tstate.doc.nodesBetween(range.$from.pos, range.$to.pos, node => {\n\t\t\t\tif (!isProseMirrorTextNode(node)) return\n\t\t\t\tcallback(node.marks)\n\t\t\t})\n\t\t})\n\t}\n}\n\nexport function createToggleMarkTransaction(state: EditorState, markType: MarkType): Transaction {\n\tconst selection = state.selection\n\tconst transaction = state.tr\n\n\tlet isEnabled = true\n\n\tforEachMarksOfNode(state, marks => {\n\t\tisEnabled &&= marks.some(mark => mark.type === markType)\n\t})\n\n\tif (isEnabled) {\n\t\tif (selection.empty) {\n\t\t\ttransaction.removeStoredMark(markType)\n\t\t} else {\n\t\t\tselection.ranges.forEach(range => {\n\t\t\t\ttransaction.removeMark(range.$from.pos, range.$to.pos, markType)\n\t\t\t})\n\t\t}\n\t} else {\n\t\tif (selection.empty) {\n\t\t\ttransaction.addStoredMark(markType.create())\n\t\t} else {\n\t\t\tselection.ranges.forEach(range => {\n\t\t\t\ttransaction.addMark(range.$from.pos, range.$to.pos, markType.create())\n\t\t\t})\n\t\t}\n\t}\n\n\treturn transaction\n}\n\nexport function toggleMark(markType: MarkType) {\n\treturn (state: EditorState, dispatch: (transaction: Transaction) => void): boolean => {\n\t\tconst transaction = createToggleMarkTransaction(state, markType)\n\t\tdispatch(transaction)\n\t\treturn true\n\t}\n}\n\n/** Toggle blockquote for the current selection */\nexport function createBlockquoteTransaction(\n\tcurrentBlockquoteNode: Node | null,\n\tschema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithBlockquotes,\n\teditorView: EditorView,\n): Transaction | null {\n\tconst state = editorView.state\n\n\tif (!currentBlockquoteNode) {\n\t\t// capture the transaction from wrapIn instead of dispatching it\n\t\tlet capturedTransaction: Transaction | null = null\n\n\t\tconst result = wrapIn(schema.nodes.blockquote)(\n\t\t\tstate,\n\t\t\t(tr: Transaction) => {\n\t\t\t\tcapturedTransaction = tr\n\t\t\t},\n\t\t\teditorView,\n\t\t)\n\n\t\tif (result && capturedTransaction) {\n\t\t\treturn capturedTransaction\n\t\t}\n\n\t\treturn null\n\t}\n\n\tconst range = getNodeRange(editorView.state.doc, node => node === currentBlockquoteNode)\n\tif (!range) return null\n\n\tconst liftRangeFrom = editorView.state.doc.resolve(range.start + 1)\n\tconst liftRangeTo = editorView.state.doc.resolve(range.end - 1)\n\tconst liftRange = liftRangeFrom.blockRange(liftRangeTo)\n\tconst target = liftRange && liftTarget(liftRange)\n\tif (target == null || !liftRange) return null\n\n\tconst transaction = editorView.state.tr.lift(liftRange, target).scrollIntoView()\n\treturn transaction\n}\n\nexport function createChangeTagTransaction(\n\tschema: FramerProseMirrorSchema,\n\teditorView: EditorView,\n\ttag: RichTextTag | undefined,\n): Transaction {\n\tassert(tag, \"Tag should be defined\")\n\tconst state = editorView.state\n\tconst selection = state.selection\n\tconst transaction = state.tr\n\n\t// Handle each range in the selection\n\tselection.ranges.forEach(range => {\n\t\tstate.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, position) => {\n\t\t\tif (isTextBlockNode(node)) {\n\t\t\t\ttransaction.setNodeMarkup(position, schema.nodes.textBlock, {\n\t\t\t\t\t...node.attrs,\n\t\t\t\t\ttag,\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t})\n\n\treturn transaction\n}\n\nfunction getNodeRange(doc: ProseMirrorNode, condition: (node: ProseMirrorNode) => boolean) {\n\tlet start, end\n\n\tdoc.descendants((node, pos) => {\n\t\tif (condition(node)) {\n\t\t\tstart = pos\n\t\t\tend = pos + node.nodeSize\n\t\t\treturn false // Stop iteration\n\t\t}\n\t})\n\n\tif (start !== undefined && end !== undefined) {\n\t\treturn { start, end }\n\t}\n\n\treturn null // Node not found\n}\n\nexport function isFormattingOptionDisabled(\n\toption: FormattingOption,\n\teditorSelectionState: EditorSelectionState,\n\tisInlineFormatting: boolean = false,\n) {\n\tconst isNonTextBlockSelected = !!editorSelectionState.moduleNodeSelected || !!editorSelectionState.imageNodeSelected\n\n\tif (editorSelectionState.moduleNodeSelected && isInlineFormatting) {\n\t\treturn true\n\t}\n\n\tswitch (option) {\n\t\tcase FormattingOption.Bold:\n\t\tcase FormattingOption.Italic:\n\t\tcase FormattingOption.InlineCode:\n\t\t\treturn isTextFormattingDisabled(editorSelectionState)\n\n\t\tcase FormattingOption.Blockquote:\n\t\t\treturn (\n\t\t\t\tisNonTextBlockSelected ||\n\t\t\t\teditorSelectionState.hasMixedSelection ||\n\t\t\t\teditorSelectionState.isMultipleTableCellsSelected\n\t\t\t)\n\t\tcase FormattingOption.Heading1:\n\t\tcase FormattingOption.Heading2:\n\t\tcase FormattingOption.Heading3:\n\t\tcase FormattingOption.Heading4:\n\t\tcase FormattingOption.Heading5:\n\t\tcase FormattingOption.Heading6:\n\t\tcase FormattingOption.Paragraph:\n\t\t\treturn isNonTextBlockSelected || isTagChangeDisabled(editorSelectionState)\n\n\t\tcase FormattingOption.Link:\n\t\t\treturn (\n\t\t\t\teditorSelectionState.hasMixedSelection ||\n\t\t\t\t!!editorSelectionState.moduleNodeSelected ||\n\t\t\t\teditorSelectionState.isMultipleTableCellsSelected ||\n\t\t\t\t!editorSelectionState.canAddOrEditLink\n\t\t\t)\n\n\t\tcase FormattingOption.ImageEdit:\n\t\t\treturn (\n\t\t\t\teditorSelectionState.hasMixedSelection ||\n\t\t\t\t!!editorSelectionState.moduleNodeSelected ||\n\t\t\t\t!editorSelectionState.imageNodeSelected ||\n\t\t\t\teditorSelectionState.isMultipleTableCellsSelected\n\t\t\t)\n\n\t\tcase FormattingOption.Table:\n\t\t\treturn (\n\t\t\t\tisNonTextBlockSelected ||\n\t\t\t\teditorSelectionState.hasMixedSelection ||\n\t\t\t\teditorSelectionState.isMultipleTableCellsSelected\n\t\t\t)\n\n\t\tcase FormattingOption.List:\n\t\t\treturn (\n\t\t\t\tisNonTextBlockSelected ||\n\t\t\t\teditorSelectionState.hasMixedSelection ||\n\t\t\t\teditorSelectionState.isMultipleTableCellsSelected ||\n\t\t\t\teditorSelectionState.listState === \"disabled\"\n\t\t\t)\n\n\t\tcase FormattingOption.ImageUpload:\n\t\tcase FormattingOption.YouTube:\n\t\tcase FormattingOption.CodeBlock:\n\t\tcase FormattingOption.Twitter:\n\t\tcase FormattingOption.ProjectComponent:\n\t\t\treturn (\n\t\t\t\tisNonTextBlockSelected ||\n\t\t\t\teditorSelectionState.hasMixedSelection ||\n\t\t\t\teditorSelectionState.isMultipleTableCellsSelected\n\t\t\t)\n\n\t\tdefault:\n\t\t\treturn false\n\t}\n}\n\nexport function isTextFormattingDisabled(editorSelectionState: EditorSelectionState) {\n\tconst isNonTextBlockSelected =\n\t\tBoolean(editorSelectionState.imageNodeSelected) || Boolean(editorSelectionState.moduleNodeSelected)\n\n\treturn (\n\t\teditorSelectionState.hasMixedSelection || isNonTextBlockSelected || editorSelectionState.allSelectedTableCellsEmpty\n\t)\n}\n\nexport function isTagChangeDisabled(editorSelectionState: EditorSelectionState) {\n\tconst isNonTextBlockSelected =\n\t\tBoolean(editorSelectionState.imageNodeSelected) || Boolean(editorSelectionState.moduleNodeSelected)\n\n\treturn editorSelectionState.selectedTags.size === 0 || isNonTextBlockSelected\n}\n\nexport type LinkAttrsUpdate = Omit<Mutable<LinkAttrs>, \"link\" | \"linkStylePreset\">\n\nexport function getLinkAttrs(\n\tlink: Link,\n\tcurrent: ReducedRecord<LinkAttrsUpdate>,\n\tupdate: Partial<LinkAttrsUpdate>,\n): LinkAttrsUpdate {\n\tconst clickTrackingId = \"clickTrackingId\" in update ? update.clickTrackingId : current.clickTrackingId\n\tconst openInNewTab = \"openInNewTab\" in update ? update.openInNewTab : current.openInNewTab\n\tconst smoothScroll = \"smoothScroll\" in update ? update.smoothScroll : current.smoothScroll\n\tconst relValues = \"relValues\" in update ? update.relValues : current.relValues\n\tconst preserveParams = \"preserveParams\" in update ? update.preserveParams : current.preserveParams\n\n\tassert(!isVariableReference(clickTrackingId), \"variable references are not supported in rich text\")\n\tassert(!isVariableReference(openInNewTab), \"variable references are not supported in rich text\")\n\tassert(!isVariableReference(smoothScroll), \"variable references are not supported in rich text\")\n\tassert(!isVariableReference(relValues), \"variable references are not supported in rich text\")\n\tassert(!isVariableReference(preserveParams), \"variable references are not supported in rich text\")\n\n\treturn {\n\t\tclickTrackingId: isString(clickTrackingId) ? clickTrackingId : undefined,\n\t\topenInNewTab: isBoolean(openInNewTab) ? openInNewTab : shouldOpenLinkInNewTab(link),\n\t\tsmoothScroll: isBoolean(smoothScroll) ? smoothScroll : false,\n\t\trelValues: isSupportedLinkRelValueArray(relValues) ? relValues : undefined,\n\t\tpreserveParams: isBoolean(preserveParams) ? preserveParams : undefined,\n\t}\n}\n\nfunction getWebPageName(tree: CanvasTree, componentLoader: ComponentLoader, link: Link): string {\n\tif (isLinkToURL(link)) return link.url\n\n\tconst targetNode = tree.get(link.webPageId)\n\tconst webPageName = targetNode?.resolveValue(\"name\") ?? \"No name\"\n\tif (!link.pathVariables || !isWebPageNode(targetNode) || !targetNode.dataIdentifier) {\n\t\treturn webPageName\n\t}\n\n\tconst targetLinkPagePath = getRawWebPagePath(tree, targetNode)\n\tif (!targetLinkPagePath) {\n\t\treturn webPageName\n\t}\n\n\tconst targetLinkPathVariables = extractPathVariables(targetLinkPagePath)\n\tif (!targetLinkPathVariables) {\n\t\treturn webPageName\n\t}\n\n\tconst itemToSlug = getItemToSlug(tree, componentLoader, targetNode.dataIdentifier)\n\tif (!itemToSlug) {\n\t\treturn webPageName\n\t}\n\n\t// Any Link variable can provide the resolved slug value. Since pagePaths\n\t// currently only support a single path variable, we can return as soon as\n\t// we find a variable from the path. In the future we may want to continue\n\t// looping until all variables that fill a path are found.\n\tfor (const variable of targetLinkPathVariables) {\n\t\tconst value = link.pathVariables[variable]\n\t\tif (!isResolvedCollectionItemSelector(value)) continue\n\n\t\tconst selectedSlug = itemToSlug[value.collectionItemId]\n\t\tif (!selectedSlug) continue\n\n\t\treturn selectedSlug\n\t}\n\n\treturn webPageName\n}\n\nexport function createUpdateLinkTransaction(\n\ttree: CanvasTree,\n\tcomponentLoader: ComponentLoader,\n\tschema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithLinks,\n\teditorView: EditorView,\n\tlink: Link,\n\tattrs: Omit<LinkAttrs, \"link\" | \"linkStylePreset\">,\n) {\n\tconst state = editorView.state\n\tconst selection = state.selection\n\tconst transaction = state.tr\n\n\tif (selection.empty && !selection.$head.marks().some(isLinkMark)) {\n\t\t// No text selected yet\n\t\tconst newMark = schema.marks.link.create({\n\t\t\t...attrs,\n\t\t\tlinkStylePreset: undefined,\n\t\t\tlink,\n\t\t})\n\t\tconst textNode = schema.text(getWebPageName(tree, componentLoader, link), [newMark])\n\t\ttransaction.replaceSelectionWith(textNode, false)\n\t} else {\n\t\t// Expand the selection to include the whole link.\n\t\tconst start = findLinkStart(selection)\n\t\tconst end = findLinkEnd(selection)\n\n\t\tstate.doc.nodesBetween(start, end, (node, position) => {\n\t\t\tif (isImageNode(node)) {\n\t\t\t\ttransaction.setNodeMarkup(position, node.type, {\n\t\t\t\t\t...node.attrs,\n\t\t\t\t\t...attrs,\n\t\t\t\t\tlink,\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\n\t\ttransaction.addMark(\n\t\t\tstart,\n\t\t\tend,\n\t\t\tschema.marks.link.create({\n\t\t\t\t...attrs,\n\t\t\t\tlinkStylePreset: undefined,\n\t\t\t\tlink,\n\t\t\t}),\n\t\t)\n\t}\n\n\treturn transaction\n}\n\nexport function createRemoveLinkTransaction(\n\tschema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithLinks,\n\teditorView: EditorView,\n) {\n\tconst state = editorView.state\n\tconst selection = state.selection\n\tconst transaction = state.tr\n\n\t// Expand the selection to include the whole link.\n\tconst start = findLinkStart(selection)\n\tconst end = findLinkEnd(selection)\n\n\ttransaction.removeMark(start, end, schema.marks.link)\n\n\tstate.doc.nodesBetween(start, end, (node, position) => {\n\t\tif (isImageNode(node)) {\n\t\t\ttransaction.setNodeMarkup(position, node.type, {\n\t\t\t\t...node.attrs,\n\t\t\t\tlink: undefined,\n\t\t\t\tsmoothScroll: undefined,\n\t\t\t\topenInNewTab: undefined,\n\t\t\t})\n\t\t}\n\t})\n\n\treturn transaction\n}\n", "import { Mixed } from \"@framerjs/shared\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { type RichTextTag, isRichTextTag } from \"document/models/CanvasTree/traits/WithRichTextTag.ts\"\nimport { type Link, isLink } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { NotFound, isFound, isNotFound } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { makeAiPromptForLinkClickTrackingId } from \"document/models/CanvasTree/traits/utils/reduceTrackingIdAIPrompt.ts\"\nimport type { SupportedLinkRelValue } from \"document/models/SupportedRelValue.ts\"\nimport type { NodeType, Node as ProseMirrorNode } from \"prosemirror-model\"\nimport type { EditorState } from \"prosemirror-state\"\nimport { CellSelection } from \"prosemirror-tables\"\nimport { isBlockquoteNode } from \"prosemirror/schema/blockquote.ts\"\nimport { isBoldMark } from \"prosemirror/schema/bold.ts\"\nimport { type ImageNode, isImageNode } from \"prosemirror/schema/image.ts\"\nimport { isInlineCodeMark } from \"prosemirror/schema/inlineCode.ts\"\nimport { isItalicMark } from \"prosemirror/schema/italic.ts\"\nimport { type LinkMark, isLinkMark } from \"prosemirror/schema/link.ts\"\nimport { isBulletedListNode, isNumberedListNode } from \"prosemirror/schema/list.ts\"\nimport { type ModuleNode, isModuleNode } from \"prosemirror/schema/module.ts\"\nimport { isTextBlockNode } from \"prosemirror/schema/textBlock.ts\"\nimport { useMemo } from \"react\"\nimport { isBoolean } from \"utils/typeChecks.ts\"\nimport { areAllSelectedTableCellsEmpty } from \"./tableUtils.ts\"\nimport { forEachMarksOfNode } from \"./toolbarUtils.ts\"\n\ntype ListState = \"enabled\" | \"disabled\" | NodeType\nexport interface EditorSelectionState {\n\treadonly clickTrackingIdAIPrompt: string | undefined\n\treadonly listState: ListState\n\treadonly blockquoteNode: ProseMirrorNode | null\n\treadonly imageNodeSelected: ImageNode | null\n\treadonly moduleNodeSelected: ModuleNode | null\n\treadonly hasMixedSelection: boolean\n\treadonly selectedTags: Set<RichTextTag>\n\treadonly isBold: boolean\n\treadonly isItalic: boolean\n\treadonly isCode: boolean\n\treadonly isLink: boolean\n\treadonly canAddOrEditLink: boolean\n\treadonly commonLink: Reduced<Link>\n\treadonly commonOpenInNewTab: Reduced<boolean>\n\treadonly commonSmoothScroll: Reduced<boolean>\n\treadonly commonClickTrackingId: Reduced<string | undefined>\n\treadonly commonRelValues: Reduced<readonly SupportedLinkRelValue[] | undefined>\n\treadonly commonPreserveParams: Reduced<boolean | undefined>\n\treadonly allSelectedTableCellsEmpty: boolean\n\treadonly isMultipleTableCellsSelected: boolean\n}\n\nexport const useEditorSelectionState = (engine: BaseEngine, editorState: EditorState): EditorSelectionState => {\n\treturn useMemo(() => {\n\t\tconst tags = new Set<RichTextTag>()\n\n\t\tconst selection = editorState.selection\n\n\t\t// Typescript isn't aware that the nodesBetween callback is\n\t\t// run sync so they assume the values are unassigned. So to\n\t\t// fix the types we have to coerce it to think it is either\n\t\t// value, and type guard below.\n\t\tlet imageNode = null as ImageNode | null\n\t\tlet moduleNode = null as ModuleNode | null\n\t\tlet hasList = false\n\t\tlet nextBlockquoteNode = null as ProseMirrorNode | null\n\n\t\tselection.ranges.forEach(range => {\n\t\t\teditorState.doc.nodesBetween(range.$from.pos, range.$to.pos, node => {\n\t\t\t\tif (isTextBlockNode(node) && isRichTextTag(node.attrs.tag)) {\n\t\t\t\t\ttags.add(node.attrs.tag)\n\t\t\t\t}\n\n\t\t\t\tif (isImageNode(node) && !imageNode) {\n\t\t\t\t\timageNode = node\n\t\t\t\t}\n\n\t\t\t\tif (isModuleNode(node) && !moduleNode) {\n\t\t\t\t\tmoduleNode = node\n\t\t\t\t}\n\n\t\t\t\tif (isBlockquoteNode(node)) {\n\t\t\t\t\tnextBlockquoteNode = node\n\t\t\t\t}\n\n\t\t\t\thasList ||= isBulletedListNode(node) || isNumberedListNode(node)\n\t\t\t})\n\t\t})\n\n\t\tlet nextListState: ListState\n\n\t\tif (hasList) {\n\t\t\tconst selectionFromList: ProseMirrorNode<unknown> | undefined = selection.$from.node(-2)\n\t\t\tconst selectionToList: ProseMirrorNode<unknown> | undefined = selection.$to.node(-2)\n\t\t\tconst isListNode = isBulletedListNode(selectionFromList) || isNumberedListNode(selectionFromList)\n\t\t\tif (isListNode && selectionFromList === selectionToList) {\n\t\t\t\tnextListState = selectionFromList.type\n\t\t\t} else {\n\t\t\t\tnextListState = \"disabled\"\n\t\t\t}\n\t\t} else {\n\t\t\tnextListState = \"enabled\"\n\t\t}\n\n\t\tconst { entireSelectionIsBold, entireSelectionIsItalic, entireSelectionIsCode, ...linkBoldAndItalic } =\n\t\t\tgetLinksBoldAndItalicFromSelection(editorState)\n\n\t\tconst nextClickTrackingIdAIPrompt = makeAiPromptForLinkClickTrackingId(engine.tree, {\n\t\t\tlinkText: editorState.doc.textBetween(selection.from, selection.to),\n\t\t\ttextContent: editorState.doc.textContent,\n\t\t\tlink: isLink(linkBoldAndItalic.commonLink) ? linkBoldAndItalic.commonLink : undefined,\n\t\t})\n\n\t\treturn {\n\t\t\tclickTrackingIdAIPrompt: nextClickTrackingIdAIPrompt,\n\t\t\tlistState: nextListState,\n\t\t\tblockquoteNode: nextBlockquoteNode,\n\t\t\timageNodeSelected: imageNode && tags.size === 0 ? imageNode : null,\n\t\t\tmoduleNodeSelected: moduleNode && tags.size === 0 ? moduleNode : null,\n\t\t\thasMixedSelection: tags.size !== 0 && (Boolean(imageNode) || Boolean(moduleNode)),\n\t\t\tselectedTags: tags,\n\t\t\tisBold: entireSelectionIsBold,\n\t\t\tisItalic: entireSelectionIsItalic,\n\t\t\tisCode: entireSelectionIsCode,\n\t\t\tisLink: isLink(linkBoldAndItalic.commonLink),\n\t\t\t...linkBoldAndItalic,\n\t\t\t// we disable the link button if the selection is empty and there is no link at the current cursor position\n\t\t\t// TODO: Instead we should include the link when the selection is at the end https://github.com/framer/company/issues/32914\n\t\t\tcanAddOrEditLink: isFound(linkBoldAndItalic.commonLink) || !selection.empty,\n\t\t\tallSelectedTableCellsEmpty: areAllSelectedTableCellsEmpty(editorState),\n\t\t\tisMultipleTableCellsSelected:\n\t\t\t\teditorState.selection instanceof CellSelection && editorState.selection.ranges.length > 1,\n\t\t} as const\n\t}, [editorState, engine.tree])\n}\n\ninterface LinkBoldAndItalicResult {\n\tcommonLink: Reduced<Link>\n\tcommonOpenInNewTab: Reduced<boolean>\n\tcommonSmoothScroll: Reduced<boolean>\n\tcommonClickTrackingId: Reduced<string | undefined>\n\tcommonRelValues: Reduced<readonly SupportedLinkRelValue[] | undefined>\n\tcommonPreserveParams: Reduced<boolean | undefined>\n\tentireSelectionIsBold: boolean\n\tentireSelectionIsItalic: boolean\n\tentireSelectionIsCode: boolean\n}\n\nfunction getLinksBoldAndItalicFromSelection(state: EditorState): LinkBoldAndItalicResult {\n\tconst result: LinkBoldAndItalicResult = {\n\t\tcommonLink: NotFound,\n\t\tcommonOpenInNewTab: NotFound,\n\t\tcommonSmoothScroll: NotFound,\n\t\tcommonClickTrackingId: NotFound,\n\t\tcommonRelValues: NotFound,\n\t\tcommonPreserveParams: NotFound,\n\t\tentireSelectionIsBold: true,\n\t\tentireSelectionIsItalic: true,\n\t\tentireSelectionIsCode: true,\n\t}\n\n\tforEachMarksOfNode(state, marks => {\n\t\tconst linkMark = marks.find(isLinkMark)\n\n\t\tif (linkMark) {\n\t\t\treduceLinkAttrs(linkMark, result)\n\t\t}\n\n\t\t// Nodes can have multiple different marks, so we check that the marks\n\t\t// contain the required one.\n\t\tresult.entireSelectionIsBold &&= marks.some(isBoldMark)\n\t\tresult.entireSelectionIsItalic &&= marks.some(isItalicMark)\n\t\tresult.entireSelectionIsCode &&= marks.some(isInlineCodeMark)\n\t})\n\tconst selection = state.selection\n\n\tselection.ranges.forEach(range => {\n\t\tstate.doc.nodesBetween(range.$from.pos, range.$to.pos, node => {\n\t\t\tif (isImageNode(node) || isModuleNode(node)) {\n\t\t\t\t// Images and CMS Modules don't support bold, italic or inline code, so set these values to false.\n\t\t\t\tresult.entireSelectionIsBold = false\n\t\t\t\tresult.entireSelectionIsItalic = false\n\t\t\t\tresult.entireSelectionIsCode = false\n\t\t\t}\n\n\t\t\tif (isImageNode(node) && node.attrs.link) {\n\t\t\t\treduceLinkAttrs(node, result)\n\t\t\t}\n\t\t})\n\t})\n\n\treturn result\n}\n\nfunction reduceLinkAttrs(nodeOrMark: ImageNode | LinkMark, result: LinkBoldAndItalicResult) {\n\tconst link = nodeOrMark.attrs.link\n\tif (isNotFound(result.commonLink) && isLink(link)) {\n\t\tresult.commonLink = link\n\t} else if (result.commonLink !== link) {\n\t\tresult.commonLink = Mixed\n\t}\n\n\tconst openInNewTab = nodeOrMark.attrs.openInNewTab\n\tif (isNotFound(result.commonOpenInNewTab) && isBoolean(openInNewTab)) {\n\t\tresult.commonOpenInNewTab = openInNewTab\n\t} else if (result.commonOpenInNewTab !== openInNewTab) {\n\t\tresult.commonOpenInNewTab = Mixed\n\t}\n\n\tconst smoothScroll = nodeOrMark.attrs.smoothScroll\n\tif (isNotFound(result.commonSmoothScroll) && isBoolean(smoothScroll)) {\n\t\tresult.commonSmoothScroll = smoothScroll\n\t} else if (result.commonSmoothScroll !== smoothScroll) {\n\t\tresult.commonSmoothScroll = Mixed\n\t}\n\n\tconst clickTrackingId = nodeOrMark.attrs.clickTrackingId\n\tif (isNotFound(result.commonClickTrackingId) && !isVariableReference(clickTrackingId)) {\n\t\tresult.commonClickTrackingId = clickTrackingId\n\t} else if (result.commonClickTrackingId !== clickTrackingId) {\n\t\tresult.commonClickTrackingId = Mixed\n\t}\n\n\tconst relValues = nodeOrMark.attrs.relValues\n\tif (isNotFound(result.commonRelValues) && !isVariableReference(relValues)) {\n\t\tresult.commonRelValues = relValues\n\t} else if (result.commonRelValues !== relValues) {\n\t\tresult.commonRelValues = Mixed\n\t}\n\n\tconst preserveParams = nodeOrMark.attrs.preserveParams\n\tif (isNotFound(result.commonPreserveParams) && !isVariableReference(preserveParams)) {\n\t\tresult.commonPreserveParams = preserveParams\n\t} else if (result.commonPreserveParams !== preserveParams) {\n\t\tresult.commonPreserveParams = Mixed\n\t}\n}\n", "import { type AssetSize, isAssetReference, updateAssetReferencePreferredSize } from \"@framerjs/assets\"\nimport { assert } from \"@framerjs/shared\"\nimport { ImagePopout } from \"document/components/chrome/shared/ImagePopout.tsx\"\nimport { createAssetReferenceForUploadImageResult } from \"document/utils/createAssetReferenceFromImageUpload.ts\"\nimport type { EditorView } from \"prosemirror-view\"\nimport type { ImageAttrs, ImageNode } from \"prosemirror/schema/image.ts\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport type React from \"react\"\nimport { imageSizeToNonZero } from \"web/lib/images/image.ts\"\nimport type { ImageUploadResult } from \"web/pages/project/lib/UploadService.ts\"\n\ninterface ImageEditPopoutProps {\n\tnode: ImageNode\n\tschema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithMedia\n\teditorView: EditorView\n\tgetPosition: () => number\n}\n\nexport const ImageEditPopout: React.FC<ImageEditPopoutProps> = ({ node, schema, editorView, getPosition }) => {\n\tconst setNodeAttrs = (attrs: Partial<ImageAttrs>) => {\n\t\tconst position = getPosition()\n\t\tconst view = editorView\n\t\tconst state = view.state\n\t\tconst transaction = state.tr\n\n\t\ttransaction.setNodeMarkup(position, schema.nodes.image, {\n\t\t\t...node.attrs,\n\t\t\t...attrs,\n\t\t})\n\n\t\tview.dispatch(transaction)\n\t}\n\n\tconst handleChangeAssetReference = async (imageUploadPromise: Promise<ImageUploadResult[]>) => {\n\t\tconst [uploadResult] = await imageUploadPromise\n\t\tassert(uploadResult, \"Image upload result must be defined\")\n\t\tconst { nonZeroNaturalWidth, nonZeroNaturalHeight } = imageSizeToNonZero(uploadResult.imageSize)\n\t\tsetNodeAttrs({\n\t\t\tsrc: createAssetReferenceForUploadImageResult(uploadResult),\n\t\t\tpixelWidth: nonZeroNaturalWidth,\n\t\t\tpixelHeight: nonZeroNaturalHeight,\n\t\t})\n\t}\n\n\tconst handleChangeAssetSize = (size: AssetSize) => {\n\t\tconst assetReference = node.attrs.src\n\t\tif (!isAssetReference(assetReference)) return\n\n\t\tsetNodeAttrs({\n\t\t\tsrc: updateAssetReferencePreferredSize(assetReference, size),\n\t\t})\n\t}\n\n\tconst handleChangeAltText = (altText: string) => {\n\t\tsetNodeAttrs({\n\t\t\talt: altText,\n\t\t})\n\t}\n\n\treturn (\n\t\t<ImagePopout\n\t\t\taltText={node.attrs.alt ?? \"\"}\n\t\t\timageReference={node.attrs.src}\n\t\t\tonChange={handleChangeAssetReference}\n\t\t\tonChangeAssetSize={handleChangeAssetSize}\n\t\t\tonChangeAltText={handleChangeAltText}\n\t\t/>\n\t)\n}\n", "import \"inlineFormattingMenu.styles_1ctet42.wyw.css\"; export const inlineMenuPopover = \"inlineMenuPopover_i1f59oh4\";\nexport const menuContainer = \"menuContainer_mzvqkuw\";\nexport const verticalMenuContainer = \"verticalMenuContainer_vzu732f\";\nexport const horizontalMenuContainer = \"horizontalMenuContainer_h3dulv0\";\nexport const menuAnchor = \"menuAnchor_m1l54qbq\";\nexport const menuItemIconContainer = \"menuItemIconContainer_mcxywt1\";\nexport const menuItem = \"menuItem_m1n1xdw8\";\nexport const menuItemActive = \"menuItemActive_mmincqg\";\nexport const menuItemDisabled = \"menuItemDisabled_m1vwuag\";\nexport const fullMenuItem = \"fullMenuItem_fjs6qg1\";\nexport const narrowMenuItem = \"narrowMenuItem_n1yp6toc\";\nexport const linkInputContainer = \"linkInputContainer_lq7wyq2\";\nexport const linkInputWrapper = \"linkInputWrapper_l1j5jsrv\";\nexport const linkInputWrapperError = \"linkInputWrapperError_l19u02vq\";\nexport const linkPopover = \"linkPopover_lnkpte6\";\nexport const imagePopover = \"imagePopover_ilzpwww\";", "import { Popover } from \"@framerjs/fresco\"\nimport type { AttachmentEdgePreferences } from \"@framerjs/fresco/src/components/Popover\"\nimport { cx } from \"@linaria/core\"\nimport {\n\tImagePluginPickerButtonProvider,\n\tuseImagePluginPickerButton,\n} from \"document/components/chrome/shared/ImagePluginPickerButtonContext.tsx\"\nimport type { Node as ProseMirrorNode } from \"prosemirror-model\"\nimport { NodeSelection } from \"prosemirror-state\"\nimport type { EditorView } from \"prosemirror-view\"\nimport { ImageEditPopout } from \"prosemirror/plugins/ImageEditPopout.tsx\"\nimport { isImageNode } from \"prosemirror/schema/image.ts\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport { usePopoverWithinPadding } from \"../../utils/usePopoverWithinPadding.ts\"\nimport type { EditorSelectionState } from \"../useEditorSelectionState.tsx\"\nimport * as styles from \"./inlineFormattingMenu.styles.ts\"\n\nconst popoverOffset = { x: 0, y: 10 }\nconst attachmentEdgePreferences: AttachmentEdgePreferences = [\"top\", \"bottom\"]\n\ninterface ImagePopoverProps {\n\tschema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithMedia\n\teditorView: EditorView\n\tonClose: () => void\n\tanchor: HTMLElement | null\n\teditorSelectionState: EditorSelectionState\n\twidth: number | undefined\n}\n\nexport function ImagePopover({ editorView, schema, onClose, anchor, width }: ImagePopoverProps) {\n\tconst popoverWithin = usePopoverWithinPadding()\n\tconst imagePluginPickerButton = useImagePluginPickerButton()\n\n\tconst selection = editorView.state.selection\n\tlet selectedNode: ProseMirrorNode | null = null\n\n\tif (selection instanceof NodeSelection) {\n\t\tselectedNode = selection.node\n\t} else if (selection.from === selection.to) {\n\t\tselectedNode = editorView.state.doc.resolve(selection.from).nodeAfter\n\t}\n\n\tif (!selectedNode || !isImageNode(selectedNode)) {\n\t\treturn null\n\t}\n\n\tconst getPosition = () => {\n\t\tconst selection = editorView.state.selection\n\t\treturn selection.from\n\t}\n\n\treturn (\n\t\t<Popover\n\t\t\tanchor={anchor}\n\t\t\talignSelf=\"center\"\n\t\t\tbackdropEnabled={false}\n\t\t\tshowArrow={false}\n\t\t\tonClose={onClose}\n\t\t\tanimateAppear={false}\n\t\t\toffset={popoverOffset}\n\t\t\tfocusTrapEnabled={false}\n\t\t\tattachTo={attachmentEdgePreferences}\n\t\t\twithin={popoverWithin}\n\t\t\tclassName={cx(styles.inlineMenuPopover, styles.imagePopover)}\n\t\t\tstyle={{\n\t\t\t\twidth,\n\t\t\t}}\n\t\t>\n\t\t\t<ImagePluginPickerButtonProvider component={imagePluginPickerButton}>\n\t\t\t\t<ImageEditPopout node={selectedNode} schema={schema} editorView={editorView} getPosition={getPosition} />\n\t\t\t</ImagePluginPickerButtonProvider>\n\t\t</Popover>\n\t)\n}\n", "import { assert } from \"@framerjs/shared\"\nimport { type EditorState, Plugin, PluginKey, type Transaction } from \"prosemirror-state\"\nimport type { EditorView } from \"prosemirror-view\"\nimport { type FramerProseMirrorSchema, schemaSupportsBlockquotes } from \"prosemirror/schema/index.ts\"\nimport { useEffect, useState } from \"react\"\nimport { isObject } from \"utils/typeChecks.ts\"\nimport { FormattingOption } from \"../formatting-option.types.ts\"\nimport {\n\tcreateBlockquoteTransaction,\n\tcreateChangeTagTransaction,\n\tcreateToggleMarkTransaction,\n} from \"../toolbarUtils.ts\"\nimport type { EditorSelectionState } from \"../useEditorSelectionState.tsx\"\n\n// data stored in ProseMirror plugin state\ninterface InlineFormattingPluginActiveStateInternal {\n\treadonly active: true\n\treadonly selectionFrom: number\n\treadonly selectionTo: number\n}\n\ninterface InlineFormattingPluginInactiveState {\n\treadonly active: false\n}\n\ntype InlineFormattingPluginState = InlineFormattingPluginInactiveState | InlineFormattingPluginActiveStateInternal\n\nconst inlineFormattingPluginKey = new PluginKey<InlineFormattingPluginState>(\"selection-styling\")\n\n/**\n * Handles ProseMirror state related to the inline formatting menu in CMS rich text editor.\n * UI is handled by the <InlineFormattingMenu /> component.\n */\nexport function inlineFormattingPlugin(): Plugin<InlineFormattingPluginState> {\n\treturn new Plugin<InlineFormattingPluginState>({\n\t\tkey: inlineFormattingPluginKey,\n\n\t\tstate: {\n\t\t\tinit(): InlineFormattingPluginState {\n\t\t\t\treturn inactiveState\n\t\t\t},\n\n\t\t\tapply(\n\t\t\t\ttransaction: Transaction,\n\t\t\t\tpluginState: InlineFormattingPluginState,\n\t\t\t\t_oldState: EditorState,\n\t\t\t\tnewState: EditorState,\n\t\t\t): InlineFormattingPluginState {\n\t\t\t\tconst meta: unknown = transaction.getMeta(inlineFormattingPluginKey)\n\n\t\t\t\tif (isInlineFormattingPluginInactiveState(meta)) return inactiveState\n\n\t\t\t\tif (transaction.docChanged || transaction.selectionSet) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tactive: true,\n\t\t\t\t\t\tselectionFrom: newState.selection.from,\n\t\t\t\t\t\tselectionTo: newState.selection.to,\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn pluginState\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunction checkHighlightedAreaIsVisible(editorView: EditorView, coordinates: { left: number; top: number }): boolean {\n\tconst editorElement = editorView.dom\n\tconst visibleElementAtCoordinates = document.elementFromPoint(coordinates.left, coordinates.top)\n\n\tlet isVisibleElementInsideEditor = editorElement.contains(visibleElementAtCoordinates)\n\t// The highlighted area might be covered by its own popover\n\tif (!isVisibleElementInsideEditor) {\n\t\tdocument.querySelectorAll(\"[data-is-popover-backdrop]\").forEach(openPopover => {\n\t\t\tif (openPopover.contains(visibleElementAtCoordinates)) {\n\t\t\t\tisVisibleElementInsideEditor = true\n\t\t\t}\n\t\t})\n\t}\n\n\treturn isVisibleElementInsideEditor\n}\n\n// public active state (includes computed values that are not part of the state but are useful for the UI)\ninterface InlineFormattingPluginActiveState {\n\treadonly active: true\n\treadonly coordinates: { left: number; top: number }\n\treadonly selectionFrom: number\n\treadonly selectionTo: number\n\treadonly highlightRange: Range\n\treadonly onLinkListOpenChange: (open: boolean) => void\n}\n\nexport function useInlineFormattingPluginState(\n\teditorView: EditorView,\n): InlineFormattingPluginActiveState | InlineFormattingPluginInactiveState {\n\tconst [internalPluginState, setInternalPluginState] = useState<InlineFormattingPluginState | undefined>(() =>\n\t\tinlineFormattingPluginKey.getState(editorView.state),\n\t)\n\n\t// Initially true to ensure that an initial double click that highlights straight into the text area opens the menu\n\tconst [shouldShowMenu, setShouldShowMenu] = useState(true)\n\tconst [temporarilyHideMenu, setTemporarilyHideMenu] = useState(false)\n\tconst [linkListIsOpen, setLinkListIsOpen] = useState(false)\n\n\t// Ensure that when the highlighted text is panned around the view, the menu is removed and\n\t// re-added when scrolling stops in the right place.\n\tuseEffect(() => {\n\t\tlet scrollTimeout: ReturnType<typeof setTimeout> | null = null\n\t\tconst handleWheel = (event: WheelEvent) => {\n\t\t\tif (linkListIsOpen && event.target instanceof HTMLElement && event.target.closest(\"[data-is-popover]\")) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tsetTemporarilyHideMenu(true)\n\n\t\t\tif (scrollTimeout) {\n\t\t\t\tclearTimeout(scrollTimeout)\n\t\t\t}\n\n\t\t\t// Set a new timeout to re-show the menu after scrolling stops\n\t\t\tscrollTimeout = setTimeout(() => {\n\t\t\t\tsetTemporarilyHideMenu(false)\n\t\t\t}, 200) // 200ms delay to detect when scrolling has stopped\n\t\t}\n\n\t\tdocument.addEventListener(\"wheel\", handleWheel, { passive: true })\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"wheel\", handleWheel)\n\t\t\tif (scrollTimeout) clearTimeout(scrollTimeout)\n\t\t}\n\t}, [linkListIsOpen])\n\n\tuseEffect(() => {\n\t\tlet hasSelection: boolean = false\n\n\t\tconst originalDispatchTransaction = editorView.props.dispatchTransaction\n\n\t\tfunction wrappedDispatchTransaction(transaction: Transaction) {\n\t\t\tconst prevPluginState = inlineFormattingPluginKey.getState(editorView.state)\n\n\t\t\tif (originalDispatchTransaction) {\n\t\t\t\toriginalDispatchTransaction(transaction)\n\t\t\t} else {\n\t\t\t\teditorView.updateState(editorView.state.apply(transaction))\n\t\t\t}\n\n\t\t\tconst newPluginState = inlineFormattingPluginKey.getState(editorView.state)\n\t\t\tif (newPluginState !== prevPluginState) {\n\t\t\t\tsetInternalPluginState(newPluginState)\n\n\t\t\t\t// Track if we have a selection\n\t\t\t\thasSelection = newPluginState?.active || false\n\t\t\t\tif (!hasSelection) {\n\t\t\t\t\tsetShouldShowMenu(false)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst handleMouseDown = () => {\n\t\t\tsetShouldShowMenu(false)\n\t\t}\n\n\t\tconst handleMouseUp = () => {\n\t\t\tif (hasSelection) {\n\t\t\t\tsetShouldShowMenu(true)\n\t\t\t}\n\t\t}\n\n\t\tconst handleKeyUp = (event: KeyboardEvent) => {\n\t\t\tif (\n\t\t\t\tevent.shiftKey &&\n\t\t\t\t(event.key === \"ArrowLeft\" ||\n\t\t\t\t\tevent.key === \"ArrowRight\" ||\n\t\t\t\t\tevent.key === \"ArrowUp\" ||\n\t\t\t\t\tevent.key === \"ArrowDown\")\n\t\t\t) {\n\t\t\t\tif (hasSelection) {\n\t\t\t\t\tsetShouldShowMenu(true)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst abortController = new AbortController()\n\t\tconst editorElement = editorView.dom\n\t\tconst eventListenerOptions = { passive: false, signal: abortController.signal }\n\n\t\teditorElement.addEventListener(\"mousedown\", handleMouseDown, eventListenerOptions)\n\t\teditorElement.addEventListener(\"touchstart\", handleMouseDown, eventListenerOptions)\n\t\teditorElement.addEventListener(\"touchend\", handleMouseUp, eventListenerOptions)\n\t\teditorElement.addEventListener(\"keyup\", handleKeyUp, eventListenerOptions)\n\t\t// Handle mouseup on the document as the user can release their mouse outside of the editor\n\t\tdocument.addEventListener(\"mouseup\", handleMouseUp, eventListenerOptions)\n\n\t\teditorView.setProps({ dispatchTransaction: wrappedDispatchTransaction })\n\n\t\treturn () => {\n\t\t\teditorView.setProps({ dispatchTransaction: originalDispatchTransaction })\n\t\t\tabortController.abort()\n\t\t}\n\t}, [editorView])\n\n\tif (\n\t\t!internalPluginState?.active ||\n\t\t!shouldShowMenu ||\n\t\ttemporarilyHideMenu ||\n\t\teditorView.state.selection.from === editorView.state.selection.to\n\t) {\n\t\treturn inactiveState\n\t}\n\n\tconst anchor = editorView.domAtPos(editorView.state.selection.from)\n\tconst head = editorView.domAtPos(editorView.state.selection.to)\n\tconst highlightRange = document.createRange()\n\thighlightRange.setStart(anchor.node, anchor.offset)\n\thighlightRange.setEnd(head.node, head.offset)\n\tconst highlightBoundingRectangle = highlightRange.getBoundingClientRect()\n\n\tconst coordinates = {\n\t\tleft: highlightBoundingRectangle.left + highlightBoundingRectangle.width / 2,\n\t\ttop: highlightBoundingRectangle.top,\n\t}\n\n\tif (!checkHighlightedAreaIsVisible(editorView, coordinates)) {\n\t\treturn inactiveState\n\t}\n\n\treturn {\n\t\tactive: true,\n\t\tcoordinates,\n\t\tselectionFrom: internalPluginState.selectionFrom,\n\t\tselectionTo: internalPluginState.selectionTo,\n\t\thighlightRange,\n\t\tonLinkListOpenChange: setLinkListIsOpen,\n\t}\n}\n\nexport function applyInlineFormatting(\n\tschema: FramerProseMirrorSchema,\n\teditorView: EditorView,\n\teditorSelectionState: EditorSelectionState,\n\tstyleType: FormattingOption,\n): void {\n\tconst activePluginState = inlineFormattingPluginKey.getState(editorView.state)\n\tassert(activePluginState?.active, \"Selection styling plugin should be active to apply a style\")\n\n\tlet transaction: Transaction | null = null\n\tswitch (styleType) {\n\t\tcase FormattingOption.Bold:\n\t\t\ttransaction = createToggleMarkTransaction(editorView.state, schema.marks.bold)\n\t\t\tbreak\n\t\tcase FormattingOption.Italic:\n\t\t\ttransaction = createToggleMarkTransaction(editorView.state, schema.marks.italic)\n\t\t\tbreak\n\t\tcase FormattingOption.InlineCode:\n\t\t\ttransaction = createToggleMarkTransaction(editorView.state, schema.marks.inlineCode)\n\t\t\tbreak\n\t\tcase FormattingOption.Blockquote:\n\t\t\tassert(\n\t\t\t\tschemaSupportsBlockquotes(schema),\n\t\t\t\t\"applyInlineFormatting: Applying a blockquote, but schema does not support blockquotes\",\n\t\t\t)\n\t\t\ttransaction = createBlockquoteTransaction(editorSelectionState.blockquoteNode, schema, editorView)\n\t\t\tbreak\n\t\tcase FormattingOption.Paragraph:\n\t\t\ttransaction = createChangeTagTransaction(schema, editorView, \"p\")\n\t\t\tbreak\n\t\tcase FormattingOption.Heading1:\n\t\t\ttransaction = createChangeTagTransaction(schema, editorView, \"h1\")\n\t\t\tbreak\n\t\tcase FormattingOption.Heading2:\n\t\t\ttransaction = createChangeTagTransaction(schema, editorView, \"h2\")\n\t\t\tbreak\n\t\tcase FormattingOption.Heading3:\n\t\t\ttransaction = createChangeTagTransaction(schema, editorView, \"h3\")\n\t\t\tbreak\n\t\tcase FormattingOption.Heading4:\n\t\t\ttransaction = createChangeTagTransaction(schema, editorView, \"h4\")\n\t\t\tbreak\n\t\tcase FormattingOption.Heading5:\n\t\t\ttransaction = createChangeTagTransaction(schema, editorView, \"h5\")\n\t\t\tbreak\n\t\tcase FormattingOption.Heading6:\n\t\t\ttransaction = createChangeTagTransaction(schema, editorView, \"h6\")\n\t\t\tbreak\n\t}\n\tif (!transaction) return\n\n\ttransaction.setMeta(inlineFormattingPluginKey, { active: true })\n\teditorView.dispatch(transaction)\n\teditorView.focus()\n}\n\nexport function closeInlineFormattingMenu(editorView: EditorView): void {\n\teditorView.state.tr.setMeta(inlineFormattingPluginKey, inactiveState)\n\teditorView.dispatch(editorView.state.tr)\n}\n\nconst inactiveState: InlineFormattingPluginInactiveState = { active: false }\n\nfunction isInlineFormattingPluginInactiveState(value: unknown): value is InlineFormattingPluginInactiveState {\n\treturn isObject(value) && value.active === false\n}\n\nconst textBlockElements = [\"p\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"blockquote\"] as const\nexport type TextBlockElement = (typeof textBlockElements)[number]\n", "import { useViewportResize } from \"@framerjs/fresco\"\nimport { useDimensionValue } from \"app/agent/hooks/useDimensionValue.ts\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { FormattingOption } from \"document/components/chrome/richTextEditor/formatting-option.types.ts\"\nimport { isFormattingOptionDisabled } from \"document/components/chrome/richTextEditor/toolbarUtils.ts\"\nimport { useEditorSelectionState } from \"document/components/chrome/richTextEditor/useEditorSelectionState.tsx\"\nimport { ComponentEntityTypeRootNode } from \"document/models/CanvasTree/nodes/EntityTypeRootNode.ts\"\nimport type { EditorView } from \"prosemirror-view\"\nimport { type FramerProseMirrorSchema, schemaSupportsEmbeds } from \"prosemirror/schema/index.ts\"\nimport { type RefObject, useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { usePopoverWithinPadding } from \"../../utils/usePopoverWithinPadding.ts\"\nimport * as styles from \"./SlashCommandsMenu.styles.ts\"\nimport {\n\ttype SlashCommandComponentItem,\n\tSlashCommandGroupMenuItem,\n\tSlashCommandMenuItem,\n\ttype SlashCommandRootMenuItem,\n\tSlashCommandSubmenuType,\n\tcreateSlashCommandsMenuItems,\n\theadingCommandItems,\n} from \"./SlashCommandsMenuItem.tsx\"\nimport { SlashCommandsMenuPopover } from \"./SlashCommandsMenuPopover.tsx\"\nimport { SlashCommandsComponentsSubmenu, SlashCommandsHeadingsSubmenu } from \"./SlashCommandsSubmenu.tsx\"\nimport { getComponentMenuItems } from \"./getComponentMenuItems.tsx\"\nimport { SlashCommandType } from \"./slash-commands.types.ts\"\nimport {\n\ttype SlashCommandPluginActiveState,\n\tcloseSlashCommandsMenu,\n\tselectSlashCommand,\n\tuseSlashCommandsPluginState,\n} from \"./slashCommandsPlugin.ts\"\n\nconst noSelectionIndex = -1\nconst minDynamicMaxHeightPx = 100\nconst popoverOffset = { x: 0, y: 4 }\n\ninterface SlashCommandsMenuProps {\n\treadonly schema: FramerProseMirrorSchema\n\treadonly editorView: EditorView\n}\n\n// UI part of the slash commands menu in CMS rich text editor. Prosemirror state is handled by slashCommandsPlugin.\nexport function SlashCommandsMenu({ schema, editorView }: SlashCommandsMenuProps) {\n\tconst pluginState = useSlashCommandsPluginState(editorView)\n\tif (!pluginState.active) return null\n\n\treturn <SlashCommandsMenuInner schema={schema} editorView={editorView} activePluginState={pluginState} />\n}\n\ninterface SlashCommandsMenuInnerProps extends SlashCommandsMenuProps {\n\treadonly activePluginState: SlashCommandPluginActiveState\n}\n\ninterface SlashCommandsSubmenuStateActive {\n\treadonly type: \"active\"\n\treadonly submenuType: SlashCommandSubmenuType\n\treadonly submenuAnchor: HTMLElement\n}\n\nconst slashCommandsSubmenuStateInActive = { type: \"inactive\" } as const\n\ntype SlashCommandsSubmenuState = SlashCommandsSubmenuStateActive | typeof slashCommandsSubmenuStateInActive\n\nfunction SlashCommandsMenuInner({ schema, editorView, activePluginState }: SlashCommandsMenuInnerProps) {\n\tconst engine = useBaseEngine()\n\tconst editorSelectionState = useEditorSelectionState(engine, editorView.state)\n\tconst normalizedQuery = activePluginState.query.trim().toLowerCase()\n\tconst isFiltering = normalizedQuery.length > 0\n\n\tconst [activeSubmenu, setActiveSubmenu] = useState<SlashCommandsSubmenuState>(slashCommandsSubmenuStateInActive)\n\tconst [focused, setFocused] = useState(true)\n\tconst [anchorElement, setAnchorElement] = useState<HTMLDivElement | null>(null)\n\n\tconst popoverPaddingPx = useDimensionValue(\"popoverPadding\")\n\tconst preservedSpaceAroundMenuPx = popoverPaddingPx\n\n\tconst popoverWithin = usePopoverWithinPadding()\n\n\tconst { attachToDirection, dynamicMaxHeight } = useMemo(() => {\n\t\tconst { top } = activePluginState.coordinates\n\t\tconst spaceAbove = top - popoverPaddingPx - preservedSpaceAroundMenuPx\n\t\tconst spaceBelow = window.innerHeight - top - popoverPaddingPx - preservedSpaceAroundMenuPx\n\t\tconst maxAvailableSpace = Math.max(spaceAbove, spaceBelow)\n\n\t\treturn {\n\t\t\tattachToDirection: spaceBelow >= spaceAbove ? (\"bottom\" as const) : (\"top\" as const),\n\t\t\tdynamicMaxHeight: Math.max(maxAvailableSpace, minDynamicMaxHeightPx),\n\t\t}\n\t}, [activePluginState.coordinates, popoverPaddingPx, preservedSpaceAroundMenuPx])\n\n\tconst submenuComponentsAnchorRef = useRef<HTMLDivElement>(null)\n\tconst submenuHeadingsAnchorRef = useRef<HTMLDivElement>(null)\n\n\tconst submenuAnchorRef: Readonly<Record<SlashCommandSubmenuType, RefObject<HTMLDivElement>>> = useMemo(\n\t\t() => ({\n\t\t\t[SlashCommandSubmenuType.Component]: submenuComponentsAnchorRef,\n\t\t\t[SlashCommandSubmenuType.Heading]: submenuHeadingsAnchorRef,\n\t\t}),\n\t\t[],\n\t)\n\n\tconst isProjectComponentDisabled = isFormattingOptionDisabled(FormattingOption.ProjectComponent, editorSelectionState)\n\n\tconst componentMenuItems = useMemo(() => {\n\t\tif (isProjectComponentDisabled || !schemaSupportsEmbeds(schema)) return []\n\n\t\tconst entityTypeRootNode = ComponentEntityTypeRootNode.get(engine.tree)\n\t\tif (!entityTypeRootNode) return []\n\n\t\treturn getComponentMenuItems({\n\t\t\tengine,\n\t\t\tschema,\n\t\t\teditorView,\n\t\t\tentityTypeRootNode,\n\t\t\tslashPosition: activePluginState.slashPosition,\n\t\t})\n\t}, [schema, editorView, activePluginState.slashPosition, isProjectComponentDisabled])\n\n\tconst getComponentMenuChildren = useCallback(\n\t\t(parentFolderId?: string) => componentMenuItems.filter(item => item.parentId === parentFolderId),\n\t\t[componentMenuItems],\n\t)\n\tconst rootComponentItems = useMemo(() => getComponentMenuChildren(), [getComponentMenuChildren])\n\tconst hasComponentItems = rootComponentItems.length > 0\n\n\tconst baseMenuItems = useMemo(\n\t\t() => createSlashCommandsMenuItems(schema, hasComponentItems),\n\t\t[schema, hasComponentItems],\n\t)\n\n\tconst getComponentChildrenForFolder = useCallback(\n\t\t(parentFolderId: string) => getComponentMenuChildren(parentFolderId),\n\t\t[getComponentMenuChildren],\n\t)\n\n\tconst headingSubmenuItems = headingCommandItems\n\n\tconst flattenedComponentMatches = useMemo(() => {\n\t\tif (!isFiltering) return []\n\t\treturn componentMenuItems.filter(\n\t\t\t(item): item is SlashCommandComponentItem =>\n\t\t\t\titem.type === \"component\" && item.title.toLowerCase().startsWith(normalizedQuery),\n\t\t)\n\t}, [componentMenuItems, normalizedQuery, isFiltering])\n\n\tconst filteredMenuItems = useMemo(() => {\n\t\tif (!isFiltering) {\n\t\t\t// When not filtering, return items in their original order\n\t\t\treturn baseMenuItems\n\t\t}\n\n\t\t// When filtering, collect items by group and add them in the correct order\n\t\tconst filteredCommandsWithGroups: SlashCommandRootMenuItem[] = []\n\t\tlet lastMatchedGroup: SlashCommandRootMenuItem | null = null\n\t\tconst blockCommandTypes = new Set([\n\t\t\tSlashCommandType.YouTube,\n\t\t\tSlashCommandType.Image,\n\t\t\tSlashCommandType.CodeBlock,\n\t\t\tSlashCommandType.Table,\n\t\t])\n\t\tconst matchedFormattingItems: SlashCommandRootMenuItem[] = []\n\t\tconst matchedBlockItems: SlashCommandRootMenuItem[] = []\n\t\tconst matchedHeadingItems: SlashCommandRootMenuItem[] = []\n\n\t\tfor (const item of baseMenuItems) {\n\t\t\tif (item.type === \"group\") {\n\t\t\t\tlastMatchedGroup = item\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"submenu\" && item.submenuType === SlashCommandSubmenuType.Component) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"submenu\" && item.submenuType === SlashCommandSubmenuType.Heading) {\n\t\t\t\tconst headingMatches = item.title.toLowerCase().startsWith(normalizedQuery)\n\n\t\t\t\tconst anyHeadingMatches = headingCommandItems.some(heading =>\n\t\t\t\t\theading.title.toLowerCase().startsWith(normalizedQuery),\n\t\t\t\t)\n\n\t\t\t\tif (headingMatches || anyHeadingMatches) {\n\t\t\t\t\theadingCommandItems.forEach(heading => {\n\t\t\t\t\t\tconst matches = heading.title.toLowerCase().startsWith(normalizedQuery)\n\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\tmatchedHeadingItems.push(heading)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst matchesQuery = item.title.toLowerCase().startsWith(normalizedQuery)\n\n\t\t\tif (matchesQuery) {\n\t\t\t\tif (item.type === \"command\" && blockCommandTypes.has(item.commandType)) {\n\t\t\t\t\t// Collect block items separately\n\t\t\t\t\tmatchedBlockItems.push(item)\n\t\t\t\t} else if (lastMatchedGroup?.title === \"Formatting\") {\n\t\t\t\t\t// Collect formatting items separately\n\t\t\t\t\tmatchedFormattingItems.push(item)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add items in the correct order: Formatting, Headings, Blocks, Components\n\t\tif (matchedFormattingItems.length > 0) {\n\t\t\tfilteredCommandsWithGroups.push({ type: \"group\", title: \"Formatting\" })\n\t\t\tfilteredCommandsWithGroups.push(...matchedFormattingItems)\n\t\t}\n\n\t\tif (matchedHeadingItems.length > 0) {\n\t\t\tfilteredCommandsWithGroups.push({ type: \"group\", title: \"Headings\" })\n\t\t\tfilteredCommandsWithGroups.push(...matchedHeadingItems)\n\t\t}\n\n\t\tif (matchedBlockItems.length > 0) {\n\t\t\tfilteredCommandsWithGroups.push({ type: \"group\", title: \"Blocks\" })\n\t\t\tfilteredCommandsWithGroups.push(...matchedBlockItems)\n\t\t}\n\n\t\tif (flattenedComponentMatches.length > 0) {\n\t\t\tfilteredCommandsWithGroups.push({ type: \"group\", title: Dictionary.Components })\n\t\t\tfilteredCommandsWithGroups.push(...flattenedComponentMatches)\n\t\t}\n\n\t\treturn filteredCommandsWithGroups\n\t}, [baseMenuItems, normalizedQuery, isFiltering, flattenedComponentMatches])\n\n\tfunction findFirstSelectableItemIndex() {\n\t\tconst firstSelectableIndex = filteredMenuItems.findIndex(item => item.type !== \"group\")\n\t\treturn Math.max(0, firstSelectableIndex)\n\t}\n\n\tconst [selectedIndex, setSelectedIndex] = useState(findFirstSelectableItemIndex)\n\tconst [previousFilteredMenuItems, setPreviousFilteredMenuItems] = useState(filteredMenuItems)\n\n\tif (previousFilteredMenuItems !== filteredMenuItems) {\n\t\tsetSelectedIndex(findFirstSelectableItemIndex)\n\t\tsetPreviousFilteredMenuItems(filteredMenuItems)\n\t}\n\n\tconst closeMenu = useCallback(() => closeSlashCommandsMenu(editorView), [editorView])\n\n\tuseViewportResize(closeMenu)\n\n\tconst closeSubmenu = useCallback(() => {\n\t\tsetActiveSubmenu(slashCommandsSubmenuStateInActive)\n\t\tsetFocused(true)\n\t}, [])\n\n\tconst openSubmenu = useCallback(\n\t\t(submenuType: SlashCommandSubmenuType, anchor?: HTMLElement) => {\n\t\t\tconst submenuAnchor = anchor ?? submenuAnchorRef[submenuType].current\n\t\t\tif (submenuAnchor === null) return\n\t\t\tsetActiveSubmenu({ submenuAnchor, type: \"active\", submenuType })\n\t\t},\n\t\t[submenuAnchorRef],\n\t)\n\n\tconst handleEnterKeyPress = useCallback(\n\t\t(item: SlashCommandRootMenuItem) => {\n\t\t\tswitch (item.type) {\n\t\t\t\tcase \"component\":\n\t\t\t\t\titem.onSelect()\n\t\t\t\t\tbreak\n\n\t\t\t\tcase \"command\":\n\t\t\t\t\tselectSlashCommand(engine, schema, editorView, item.commandType)\n\t\t\t\t\tbreak\n\n\t\t\t\tcase \"submenu\": {\n\t\t\t\t\topenSubmenu(item.submenuType)\n\t\t\t\t\tsetFocused(false)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase \"group\":\n\t\t\t\t\tbreak\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn item satisfies never\n\t\t\t}\n\t\t},\n\t\t[schema, editorView, openSubmenu],\n\t)\n\n\tconst handleKeyDown = useCallback(\n\t\t(event: KeyboardEvent) => {\n\t\t\tif (!focused && activeSubmenu.type !== \"inactive\") return\n\n\t\t\tconst selectedItem = filteredMenuItems.at(selectedIndex)\n\n\t\t\tswitch (event.key) {\n\t\t\t\tcase \"ArrowDown\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tsetSelectedIndex(prevSelectedIndex => {\n\t\t\t\t\t\tconst nextSelectedIndex = filteredMenuItems.findIndex(\n\t\t\t\t\t\t\t(item, i) => i > prevSelectedIndex && item.type !== \"group\",\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\treturn nextSelectedIndex === -1 ? prevSelectedIndex : nextSelectedIndex\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase \"ArrowUp\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tsetSelectedIndex(prevSelectedIndex => {\n\t\t\t\t\t\tconst nextSelectedIndex = filteredMenuItems.findLastIndex(\n\t\t\t\t\t\t\t(item, i) => i < prevSelectedIndex && item.type !== \"group\",\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\treturn nextSelectedIndex === -1 ? prevSelectedIndex : nextSelectedIndex\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase \"ArrowRight\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\n\t\t\t\t\tif (selectedItem?.type === \"submenu\") {\n\t\t\t\t\t\topenSubmenu(selectedItem.submenuType)\n\t\t\t\t\t\tsetFocused(false)\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase \"ArrowLeft\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase \"Enter\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tif (selectedItem !== undefined) handleEnterKeyPress(selectedItem)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase \"Escape\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\n\t\t\t\t\tif (activeSubmenu.type !== \"inactive\") {\n\t\t\t\t\t\tcloseSubmenu()\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tcloseMenu()\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\thandleEnterKeyPress,\n\t\t\tfilteredMenuItems,\n\t\t\tselectedIndex,\n\t\t\tcloseMenu,\n\t\t\tfocused,\n\t\t\tactiveSubmenu,\n\t\t\topenSubmenu,\n\t\t\tcloseSubmenu,\n\t\t],\n\t)\n\n\tuseEffect(() => {\n\t\tconst abortController = new AbortController()\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown, { capture: true, signal: abortController.signal })\n\t\treturn () => abortController.abort()\n\t}, [handleKeyDown])\n\n\tconst renderedItems = useMemo(() => {\n\t\treturn filteredMenuItems.map((item, index) => {\n\t\t\tswitch (item.type) {\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SlashCommandGroupMenuItem\n\t\t\t\t\t\t\tkey={item.title}\n\t\t\t\t\t\t\tisFirst={index === 0}\n\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\tonMouseEnter={() => {\n\t\t\t\t\t\t\t\tcloseSubmenu()\n\t\t\t\t\t\t\t\tsetSelectedIndex(noSelectionIndex)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\n\t\t\t\tcase \"command\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SlashCommandMenuItem\n\t\t\t\t\t\t\tkey={item.commandType}\n\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\tisSelected={index === selectedIndex}\n\t\t\t\t\t\t\tonMouseEnter={() => {\n\t\t\t\t\t\t\t\tsetSelectedIndex(index)\n\t\t\t\t\t\t\t\tcloseSubmenu()\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonMouseDown={() => selectSlashCommand(engine, schema, editorView, item.commandType)}\n\t\t\t\t\t\t\twithIcon\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\n\t\t\t\tcase \"submenu\": {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SlashCommandMenuItem\n\t\t\t\t\t\t\tkey={item.title}\n\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\tisSelected={index === selectedIndex}\n\t\t\t\t\t\t\tonMouseEnter={event => {\n\t\t\t\t\t\t\t\tsetSelectedIndex(index)\n\t\t\t\t\t\t\t\topenSubmenu(item.submenuType, event.currentTarget)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tref={submenuAnchorRef[item.submenuType]}\n\t\t\t\t\t\t\tisParentSubmenuActive={activeSubmenu.type === \"active\" && activeSubmenu.submenuType === item.submenuType}\n\t\t\t\t\t\t\tisParentFocused={focused}\n\t\t\t\t\t\t\twithIcon\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tcase \"component\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SlashCommandMenuItem\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\tisSelected={index === selectedIndex}\n\t\t\t\t\t\t\tonMouseEnter={() => {\n\t\t\t\t\t\t\t\tsetSelectedIndex(index)\n\t\t\t\t\t\t\t\tcloseSubmenu()\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonMouseDown={() => item.onSelect()}\n\t\t\t\t\t\t\twithIcon={isFiltering}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t}\n\t\t})\n\t}, [\n\t\tfilteredMenuItems,\n\t\tselectedIndex,\n\t\tactiveSubmenu,\n\t\tcloseSubmenu,\n\t\topenSubmenu,\n\t\tisFiltering,\n\t\tfocused,\n\t\tsubmenuAnchorRef,\n\t\teditorView,\n\t\tschema,\n\t])\n\n\tif (filteredMenuItems.length === 0) return null\n\n\treturn (\n\t\t<>\n\t\t\t{createPortal(\n\t\t\t\t<div\n\t\t\t\t\tref={setAnchorElement}\n\t\t\t\t\tclassName={styles.menuAnchor}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tleft: activePluginState.coordinates.left,\n\t\t\t\t\t\ttop: adjustTopOffestForAttachToDirection({\n\t\t\t\t\t\t\tattachToDirection,\n\t\t\t\t\t\t\teditorView,\n\t\t\t\t\t\t\ttop: activePluginState.coordinates.top,\n\t\t\t\t\t\t}),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t\tdocument.body,\n\t\t\t)}\n\n\t\t\t{anchorElement && (\n\t\t\t\t<SlashCommandsMenuPopover\n\t\t\t\t\tanchor={anchorElement}\n\t\t\t\t\talignSelf=\"start\"\n\t\t\t\t\tattachTo={attachToDirection}\n\t\t\t\t\tonClose={closeMenu}\n\t\t\t\t\tdynamicMaxHeight={dynamicMaxHeight}\n\t\t\t\t\toffset={popoverOffset}\n\t\t\t\t\twithin={popoverWithin}\n\t\t\t\t\tonMouseEnter={() => setFocused(true)}\n\t\t\t\t\tonMouseLeave={() => {\n\t\t\t\t\t\tsetFocused(false)\n\t\t\t\t\t\tsetSelectedIndex(noSelectionIndex)\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{renderedItems}\n\t\t\t\t</SlashCommandsMenuPopover>\n\t\t\t)}\n\n\t\t\t{activeSubmenu.type === \"active\" && activeSubmenu.submenuType === SlashCommandSubmenuType.Heading && (\n\t\t\t\t<SlashCommandsHeadingsSubmenu\n\t\t\t\t\tanchorElement={activeSubmenu.submenuAnchor}\n\t\t\t\t\titems={headingSubmenuItems}\n\t\t\t\t\tonClose={closeSubmenu}\n\t\t\t\t\tdynamicMaxHeight={dynamicMaxHeight}\n\t\t\t\t\tparentFocused={focused}\n\t\t\t\t\tengine={engine}\n\t\t\t\t\tschema={schema}\n\t\t\t\t\teditorView={editorView}\n\t\t\t\t\tpopoverWithin={popoverWithin}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{activeSubmenu.type === \"active\" && activeSubmenu.submenuType === SlashCommandSubmenuType.Component && (\n\t\t\t\t<SlashCommandsComponentsSubmenu\n\t\t\t\t\tanchorElement={activeSubmenu.submenuAnchor}\n\t\t\t\t\titems={rootComponentItems}\n\t\t\t\t\tgetChildren={getComponentChildrenForFolder}\n\t\t\t\t\tonClose={closeSubmenu}\n\t\t\t\t\tdynamicMaxHeight={dynamicMaxHeight}\n\t\t\t\t\tattachToDirection={attachToDirection}\n\t\t\t\t\tparentFocused={focused}\n\t\t\t\t\tpopoverWithin={popoverWithin}\n\t\t\t\t\tisFiltering={isFiltering}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t)\n}\n\nfunction adjustTopOffestForAttachToDirection(params: {\n\tattachToDirection: \"top\" | \"bottom\"\n\teditorView: EditorView\n\ttop: number\n}): number {\n\tswitch (params.attachToDirection) {\n\t\t// no adjustment needed (the menu is by default shown above the current line)\n\t\tcase \"top\":\n\t\t\treturn params.top\n\n\t\tcase \"bottom\": {\n\t\t\tconst cursorPosition = params.editorView.state.selection.$from.pos\n\t\t\treturn params.editorView.coordsAtPos(cursorPosition).bottom\n\t\t}\n\t}\n}\n", "import \"SlashCommandsMenu.styles_tkd6wi.wyw.css\"; export const menuAnchor = \"menuAnchor_m1gm2i1x\";", "import { Stack, truncateWithEllipsis } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { type FramerProseMirrorSchema, schemaSupportsEmbeds, schemaSupportsMedia } from \"prosemirror/schema/index.ts\"\nimport { type ComponentProps, type JSX, forwardRef } from \"react\"\nimport * as styles from \"./SlashCommandsMenuItem.styles.ts\"\nimport { SlashCommandType } from \"./slash-commands.types.ts\"\n\nexport enum SlashCommandSubmenuType {\n\tComponent = \"Component\",\n\tHeading = \"Heading\",\n}\n\nexport interface SlashCommandCommandItem {\n\treadonly type: \"command\"\n\treadonly commandType: SlashCommandType\n\treadonly title: string\n\treadonly icon: JSX.Element\n}\n\ninterface SlashCommandGroupMenuItem {\n\treadonly type: \"group\"\n\treadonly title: string\n}\n\ninterface SlashCommandSubmenuItem {\n\treadonly type: \"submenu\"\n\treadonly title: string\n\treadonly icon: JSX.Element\n\treadonly submenuType: SlashCommandSubmenuType\n}\n\nexport interface SlashCommandComponentItem {\n\treadonly type: \"component\"\n\treadonly id: string\n\treadonly title: string\n\treadonly onSelect: () => void\n\treadonly depth: number\n\treadonly ancestors: readonly string[]\n\treadonly parentId: string | undefined\n\treadonly icon: JSX.Element\n}\n\nexport interface SlashCommandFolderItem {\n\treadonly type: \"folder\"\n\treadonly id: string\n\treadonly title: string\n\treadonly depth: number\n\treadonly ancestors: readonly string[]\n\treadonly parentId: string | undefined\n}\n\nexport type SlashCommandRootMenuItem =\n\t| SlashCommandCommandItem\n\t| SlashCommandGroupMenuItem\n\t| SlashCommandComponentItem\n\t| SlashCommandSubmenuItem\n\ninterface SlashCommandMenuItemProps extends ComponentProps<\"div\"> {\n\treadonly item: SlashCommandCommandItem | SlashCommandSubmenuItem | SlashCommandComponentItem | SlashCommandFolderItem\n\treadonly isSelected: boolean\n\treadonly withIcon?: boolean\n\treadonly isParentSubmenuActive?: boolean\n\treadonly isParentFocused?: boolean\n}\n\nexport const SlashCommandMenuItem = forwardRef<HTMLDivElement, SlashCommandMenuItemProps>(function SlashCommandMenuItem(\n\t{\n\t\titem,\n\t\tisSelected,\n\t\twithIcon = false,\n\t\tisParentSubmenuActive = false,\n\t\tisParentFocused = false,\n\t\tclassName,\n\t\t...restProps\n\t},\n\tref,\n) {\n\tconst isSubmenuTrigger = item.type === \"submenu\" || item.type === \"folder\"\n\tconst shouldShowSubmenuActiveState = isSubmenuTrigger && isParentSubmenuActive && !isParentFocused\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={cx(\n\t\t\t\tstyles.menuItem,\n\t\t\t\tisSelected && styles.menuItemSelected,\n\t\t\t\t!withIcon && styles.menuItemWithoutIcon,\n\t\t\t\tshouldShowSubmenuActiveState && styles.menuItemWithSubmenuSelected,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\trole=\"menuitem\"\n\t\t\ttabIndex={-1}\n\t\t\t{...restProps}\n\t\t>\n\t\t\t{withIcon && \"icon\" in item && <div className={styles.menuItemIconContainer}>{item.icon}</div>}\n\n\t\t\t<div className={cx(truncateWithEllipsis, styles.menuItemTitle)}>{item.title}</div>\n\n\t\t\t{isSubmenuTrigger && <div className={styles.menuItemArrowContainer}>{submenuArrowIcon}</div>}\n\t\t</div>\n\t)\n})\n\ninterface SlashCommandGroupMenuItemProps extends ComponentProps<\"div\"> {\n\treadonly item: SlashCommandGroupMenuItem\n\treadonly isFirst: boolean\n}\n\nexport function SlashCommandGroupMenuItem({ item, isFirst }: SlashCommandGroupMenuItemProps) {\n\treturn (\n\t\t<div key={item.title} role=\"menuitem\" tabIndex={-1}>\n\t\t\t{!isFirst && (\n\t\t\t\t<Stack className={styles.menuGroupDivideContainer} justifyContent=\"center\">\n\t\t\t\t\t<span className={styles.menuGroupDivider} />\n\t\t\t\t</Stack>\n\t\t\t)}\n\n\t\t\t<div className={styles.menuGroup}>{item.title}</div>\n\t\t</div>\n\t)\n}\n\nexport function createSlashCommandsMenuItems(\n\tschema: FramerProseMirrorSchema,\n\tincludeComponentSubmenu: boolean,\n): readonly SlashCommandRootMenuItem[] {\n\tconst blocks: SlashCommandRootMenuItem[] = [\n\t\t{ type: \"group\", title: \"Formatting\" },\n\t\theadingSubmenuItem,\n\t\tcommandTypeToSelectableMenuItem[SlashCommandType.Blockquote],\n\t\tcommandTypeToSelectableMenuItem[SlashCommandType.InlineCode],\n\t\tcommandTypeToSelectableMenuItem[SlashCommandType.BulletedList],\n\t\tcommandTypeToSelectableMenuItem[SlashCommandType.NumberedList],\n\t]\n\n\tif (schemaSupportsEmbeds(schema) || schemaSupportsMedia(schema)) {\n\t\tblocks.push({ type: \"group\", title: \"Blocks\" })\n\n\t\tif (includeComponentSubmenu && schemaSupportsEmbeds(schema)) {\n\t\t\tblocks.push(componentSubmenuItem)\n\t\t}\n\n\t\tif (schemaSupportsMedia(schema)) {\n\t\t\tblocks.push(commandTypeToSelectableMenuItem[SlashCommandType.Image])\n\t\t}\n\n\t\tif (schemaSupportsEmbeds(schema)) {\n\t\t\tblocks.push(\n\t\t\t\tcommandTypeToSelectableMenuItem[SlashCommandType.YouTube],\n\t\t\t\tcommandTypeToSelectableMenuItem[SlashCommandType.CodeBlock],\n\t\t\t\tcommandTypeToSelectableMenuItem[SlashCommandType.Table],\n\t\t\t)\n\t\t}\n\t}\n\n\treturn blocks\n}\n\nconst headingSubmenuIcon = (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t<g fill=\"transparent\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.5\">\n\t\t\t<path d=\"M7 9v8M14 9v8M7 13h7\" />\n\t\t</g>\n\t\t<path\n\t\t\tfill=\"transparent\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t\tstrokeWidth=\"1.5\"\n\t\t\td=\"m18 15.5 2-1.5v6\"\n\t\t/>\n\t</svg>\n)\n\nconst heading1Command: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.Heading1,\n\ttitle: \"Heading 1\",\n\ticon: headingSubmenuIcon,\n}\n\nconst heading2Command: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.Heading2,\n\ttitle: \"Heading 2\",\n\ticon: (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t<g fill=\"transparent\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.5\">\n\t\t\t\t<path d=\"M7 9v8M14 9v8M7 13h7\" />\n\t\t\t</g>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M18.118 14.828a1.494 1.494 0 0 1 2.687-.178 1.496 1.496 0 0 1-.07 1.589L18 19.893h2.992\"\n\t\t\t/>\n\t\t</svg>\n\t),\n}\n\nconst heading3Command: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.Heading3,\n\ttitle: \"Heading 3\",\n\ticon: (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t<g fill=\"transparent\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.5\">\n\t\t\t\t<path d=\"M7 9v8M14 9v8M7 13h7\" />\n\t\t\t</g>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M18 14h3l-1.8 2.4a1.8 1.8 0 1 1-1.2 3.142\"\n\t\t\t/>\n\t\t</svg>\n\t),\n}\n\nconst heading4Command: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.Heading4,\n\ttitle: \"Heading 4\",\n\ticon: (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t<g fill=\"transparent\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.5\">\n\t\t\t\t<path d=\"M7 9v8M14 9v8M7 13h7\" />\n\t\t\t</g>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M21.5 18.5H17l3.5-4.5v6\"\n\t\t\t/>\n\t\t</svg>\n\t),\n}\n\nconst heading5Command: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.Heading5,\n\ttitle: \"Heading 5\",\n\ticon: (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t<g fill=\"transparent\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.5\">\n\t\t\t\t<path d=\"M7 9v8M14 9v8M7 13h7\" />\n\t\t\t</g>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M21 14h-2.5l-.5 3c.332-.329.783-.51 1.25-.5a1.75 1.75 0 1 1 0 3.5 1.73 1.73 0 0 1-1.25-.5\"\n\t\t\t/>\n\t\t</svg>\n\t),\n}\n\nconst heading6Command: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.Heading6,\n\ttitle: \"Heading 6\",\n\ticon: (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t<g fill=\"transparent\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth=\"1.5\">\n\t\t\t\t<path d=\"M7 9v8M14 9v8M7 13h7\" />\n\t\t\t</g>\n\t\t\t<g fill=\"transparent\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.5\">\n\t\t\t\t<path d=\"M18 18.25a1.75 1.75 0 1 1 3.501.001A1.75 1.75 0 0 1 18 18.25M18.25 17.375 20.266 14\" />\n\t\t\t</g>\n\t\t</svg>\n\t),\n}\n\nconst blockquoteCommand: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.Blockquote,\n\ttitle: Dictionary.Blockquote,\n\ticon: (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M7.75 15.5v-3a3 3 0 0 1 3-3h0\"\n\t\t\t/>\n\t\t\t<path fill=\"currentColor\" d=\"M7 15a2 2 0 0 1 2-2h.5a2 2 0 0 1 2 2v.5a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2Z\" />\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M14.75 15.5v-3a3 3 0 0 1 3-3h0\"\n\t\t\t/>\n\t\t\t<path fill=\"currentColor\" d=\"M14 15a2 2 0 0 1 2-2h.5a2 2 0 0 1 2 2v.5a2 2 0 0 1-2 2H16a2 2 0 0 1-2-2Z\" />\n\t\t</svg>\n\t),\n}\n\nconst inlineCodeCommand: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.InlineCode,\n\ttitle: Dictionary.InlineCode,\n\ticon: (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t<g fill=\"transparent\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.5\">\n\t\t\t\t<path d=\"M15.5 9.5 19 13l-3.5 3.5M10.5 9.5 7 13l3.5 3.5\" />\n\t\t\t</g>\n\t\t</svg>\n\t),\n}\n\nconst bulletedListCommand: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.BulletedList,\n\ttitle: \"Bulleted List\",\n\ticon: (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\td=\"M7 7.75a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM7 11.75a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM7 15.75a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM10.75 8h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 4h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 4h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Z\"\n\t\t\t/>\n\t\t</svg>\n\t),\n}\n\nconst numberedListCommand: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.NumberedList,\n\ttitle: \"Numbered List\",\n\ticon: (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"m6.438 7.156 1.375-.687v4.812m-1.281 3.833a1.204 1.204 0 1 1 2.105 1.134l-2.199 2.939h2.406\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\td=\"M11.75 8h7.5a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5Zm0 4h7.5a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5Zm0 4h7.5a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5Z\"\n\t\t\t/>\n\t\t</svg>\n\t),\n}\n\nconst tableCommand: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.Table,\n\ttitle: Dictionary.Table,\n\ticon: (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M6 13h14M13 6v14M6 10a4 4 0 0 1 4-4h6a4 4 0 0 1 4 4v6a4 4 0 0 1-4 4h-6a4 4 0 0 1-4-4Z\"\n\t\t\t/>\n\t\t</svg>\n\t),\n}\n\nconst youtubeCommand: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.YouTube,\n\ttitle: \"YouTube\",\n\ticon: (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M6 10a4 4 0 0 1 4-4h6a4 4 0 0 1 4 4v6a4 4 0 0 1-4 4h-6a4 4 0 0 1-4-4Z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\td=\"M15.8 12.307a.8.8 0 0 1 0 1.386l-3.6 2.078a.8.8 0 0 1-1.2-.693v-4.156a.8.8 0 0 1 1.2-.693Z\"\n\t\t\t/>\n\t\t</svg>\n\t),\n}\n\nconst codeBlockCommand: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.CodeBlock,\n\ttitle: \"Code Block\",\n\ticon: (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M6 10a4 4 0 0 1 4-4h6a4 4 0 0 1 4 4v6a4 4 0 0 1-4 4h-6a4 4 0 0 1-4-4ZM15 10l-4 6\"\n\t\t\t/>\n\t\t</svg>\n\t),\n}\n\nconst imageCommand: SlashCommandCommandItem = {\n\ttype: \"command\",\n\tcommandType: SlashCommandType.Image,\n\ttitle: Dictionary.Image,\n\ticon: (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"M6 10a4 4 0 0 1 4-4h6a4 4 0 0 1 4 4v6a4 4 0 0 1-4 4h-6a4 4 0 0 1-4-4Z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"m6.5 16 3.5-3 6.5 6.5\"\n\t\t\t/>\n\t\t\t<path fill=\"currentColor\" d=\"M15 9a2 2 0 1 1 .001 3.999A2 2 0 0 1 15 9Z\" />\n\t\t</svg>\n\t),\n}\n\nexport const componentSubmenuIcon = (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" fill=\"none\" aria-hidden=\"true\">\n\t\t<path\n\t\t\td=\"M6 10a4 4 0 0 1 4-4h6a4 4 0 0 1 4 4v6a4 4 0 0 1-4 4h-6a4 4 0 0 1-4-4Z\"\n\t\t\tfill=\"transparent\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"1.5\"\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t/>\n\t\t<path\n\t\t\td=\"M12.115 8.866c.489-.488 1.281-.488 1.77 0l.976.976a.5.5 0 0 1 0 .707l-1.507 1.507a.5.5 0 0 1-.708 0l-1.507-1.508a.5.5 0 0 1 0-.707Zm-1.567 5.995a.5.5 0 0 1-.707 0l-.974-.975A1.254 1.254 0 0 1 8.5 13c0-.333.132-.652.366-.887l.974-.974a.5.5 0 0 1 .708 0l1.507 1.508a.5.5 0 0 1 0 .707Zm6.585-2.747a1.254 1.254 0 0 1 0 1.773l-.975.973a.5.5 0 0 1-.706 0l-1.508-1.506a.5.5 0 0 1 0-.707l1.508-1.508a.5.5 0 0 1 .707 0Zm-3.249 5.02c-.489.488-1.281.488-1.77 0l-.975-.974a.5.5 0 0 1 0-.707l1.508-1.508a.5.5 0 0 1 .708 0l1.507 1.508a.5.5 0 0 1 0 .707Z\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</svg>\n)\n\nconst componentSubmenuItem: SlashCommandSubmenuItem = {\n\ttype: \"submenu\",\n\tsubmenuType: SlashCommandSubmenuType.Component,\n\ttitle: Dictionary.Component,\n\ticon: componentSubmenuIcon,\n}\n\nconst headingSubmenuItem: SlashCommandSubmenuItem = {\n\ttype: \"submenu\",\n\tsubmenuType: SlashCommandSubmenuType.Heading,\n\ttitle: \"Heading\",\n\ticon: headingSubmenuIcon,\n}\n\nconst commandTypeToSelectableMenuItem: Readonly<Record<SlashCommandType, SlashCommandCommandItem>> = {\n\t[SlashCommandType.Blockquote]: blockquoteCommand,\n\t[SlashCommandType.BulletedList]: bulletedListCommand,\n\t[SlashCommandType.CodeBlock]: codeBlockCommand,\n\t[SlashCommandType.Heading1]: heading1Command,\n\t[SlashCommandType.Heading2]: heading2Command,\n\t[SlashCommandType.Heading3]: heading3Command,\n\t[SlashCommandType.Heading4]: heading4Command,\n\t[SlashCommandType.Heading5]: heading5Command,\n\t[SlashCommandType.Heading6]: heading6Command,\n\t[SlashCommandType.Image]: imageCommand,\n\t[SlashCommandType.InlineCode]: inlineCodeCommand,\n\t[SlashCommandType.NumberedList]: numberedListCommand,\n\t[SlashCommandType.Table]: tableCommand,\n\t[SlashCommandType.YouTube]: youtubeCommand,\n}\n\nexport const headingCommandItems: readonly SlashCommandCommandItem[] = [\n\tcommandTypeToSelectableMenuItem[SlashCommandType.Heading1],\n\tcommandTypeToSelectableMenuItem[SlashCommandType.Heading2],\n\tcommandTypeToSelectableMenuItem[SlashCommandType.Heading3],\n\tcommandTypeToSelectableMenuItem[SlashCommandType.Heading4],\n\tcommandTypeToSelectableMenuItem[SlashCommandType.Heading5],\n\tcommandTypeToSelectableMenuItem[SlashCommandType.Heading6],\n]\n\nconst submenuArrowIcon = (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"8\" height=\"8\" fill=\"none\" aria-hidden=\"true\">\n\t\t<path\n\t\t\td=\"M0 3 3 0l3 3\"\n\t\t\ttransform=\"translate(1 2.5) rotate(90 3 1.5)\"\n\t\t\tfill=\"transparent\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"1.5\"\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t/>\n\t</svg>\n)\n", "import \"SlashCommandsMenuItem.styles_wo6o7o.wyw.css\"; export const menuItem = \"menuItem_m177mjw3\";\nexport const menuItemWithoutIcon = \"menuItemWithoutIcon_m1xqe9f5\";\nexport const menuItemIconContainer = \"menuItemIconContainer_ma77w9\";\nexport const menuItemArrowContainer = \"menuItemArrowContainer_m1j5dy6n\";\nexport const menuItemSelected = \"menuItemSelected_mfawtvq\";\nexport const menuItemTitle = \"menuItemTitle_mlb48gz\";\nexport const menuItemWithSubmenuSelected = \"menuItemWithSubmenuSelected_m12uuo9c\";\nexport const menuGroup = \"menuGroup_m19q2dju\";\nexport const menuGroupDivideContainer = \"menuGroupDivideContainer_m66minz\";\nexport const menuGroupDivider = \"menuGroupDivider_m1w3vw2o\";", "import \"SlashCommandsMenuPopover.styles_1gbxfce.wyw.css\"; export const menuPopover = \"menuPopover_mp0o2z3\";\nexport const menuContainer = \"menuContainer_m1393aqm\";\nexport const submenuContainer = \"submenuContainer_sdm0csv\";\nexport const scrollContainer = \"scrollContainer_sjks6u1\";", "import { Popover, Scroll } from \"@framerjs/fresco\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { cx } from \"@linaria/core\"\nimport type { ComponentProps } from \"react\"\nimport * as styles from \"./SlashCommandsMenuPopover.styles.ts\"\n\ntype SlashCommandsSubmenuPopoverProps = ComponentProps<typeof Popover> & {\n\treadonly dynamicMaxHeight: number\n}\n\nexport function SlashCommandsMenuPopover({\n\tclassName,\n\tdynamicMaxHeight,\n\tchildren,\n\t...restProps\n}: SlashCommandsSubmenuPopoverProps) {\n\treturn (\n\t\t<Popover\n\t\t\tshowArrow={false}\n\t\t\tanimateAppear={false}\n\t\t\toffset={{ x: dimensions.values.menuPadding * 2, y: -dimensions.values.menuPadding }}\n\t\t\tfocusTrapEnabled={false}\n\t\t\tclassName={cx(className, styles.menuPopover)}\n\t\t\tbackdropEnabled={false}\n\t\t\tbackdropTintEnabled={false}\n\t\t\tthemeBehavior=\"none\"\n\t\t\t{...restProps}\n\t\t>\n\t\t\t<div className={cx(styles.menuContainer, styles.submenuContainer)} style={{ maxHeight: dynamicMaxHeight }}>\n\t\t\t\t<Scroll className={cx(styles.scrollContainer)}>{children}</Scroll>\n\t\t\t</div>\n\t\t</Popover>\n\t)\n}\n", "import { type BaseEngine, useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { EditorView } from \"prosemirror-view\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport { type Dispatch, type SetStateAction, useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport {\n\ttype SlashCommandCommandItem,\n\ttype SlashCommandComponentItem,\n\ttype SlashCommandFolderItem,\n\tSlashCommandMenuItem,\n} from \"./SlashCommandsMenuItem.tsx\"\nimport { SlashCommandsMenuPopover } from \"./SlashCommandsMenuPopover.tsx\"\nimport { selectSlashCommand } from \"./slashCommandsPlugin.ts\"\n\nconst noSelectionIndex = -1\n\ninterface SlashCommandsComponentsSubmenuProps {\n\treadonly anchorElement: HTMLElement\n\treadonly items: readonly (SlashCommandComponentItem | SlashCommandFolderItem)[]\n\treadonly getChildren: (parentFolderId: string) => readonly (SlashCommandComponentItem | SlashCommandFolderItem)[]\n\treadonly onClose: () => void\n\treadonly dynamicMaxHeight: number\n\treadonly attachToDirection: \"top\" | \"bottom\"\n\treadonly parentFocused: boolean\n\treadonly popoverWithin: PopoverWithin\n\treadonly isFiltering: boolean\n}\n\ninterface SubmenuStateActive {\n\treadonly type: \"active\"\n\treadonly folderAnchor: HTMLElement\n\treadonly folderItem: SlashCommandFolderItem\n}\n\nconst submenuStateInactive = { type: \"inactive\" } as const\n\ntype SubmenuState = SubmenuStateActive | typeof submenuStateInactive\n\nexport function SlashCommandsComponentsSubmenu({\n\tanchorElement,\n\titems,\n\tgetChildren,\n\tonClose,\n\tdynamicMaxHeight,\n\tattachToDirection,\n\tparentFocused,\n\tpopoverWithin,\n\tisFiltering,\n}: SlashCommandsComponentsSubmenuProps) {\n\tconst [submenuState, setSubmenuState] = useState<SubmenuState>(submenuStateInactive)\n\tconst [selectedIndex, setSelectedIndex] = useState(parentFocused ? noSelectionIndex : 0)\n\tconst [focused, setFocused] = useState(() => !parentFocused)\n\tconst folderAnchorsRef = useRef(new Map<string, HTMLDivElement>())\n\n\tconst handleItemKeyboardSelect = useCallback(\n\t\t(item: SlashCommandComponentItem | SlashCommandFolderItem) => {\n\t\t\tswitch (item.type) {\n\t\t\t\tcase \"component\": {\n\t\t\t\t\titem.onSelect()\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase \"folder\": {\n\t\t\t\t\tconst folderAnchor = folderAnchorsRef.current.get(item.id)\n\t\t\t\t\tif (folderAnchor === undefined || getChildren(item.id).length === 0) return\n\n\t\t\t\t\tsetSubmenuState({ type: \"active\", folderAnchor, folderItem: item })\n\t\t\t\t\tsetFocused(false)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[getChildren],\n\t)\n\n\tconst onArrowRight = useCallback(\n\t\t(selectedItem: SlashCommandComponentItem | SlashCommandFolderItem) =>\n\t\t\tselectedItem?.type === \"folder\" && handleItemKeyboardSelect(selectedItem),\n\t\t[handleItemKeyboardSelect],\n\t)\n\n\tuseSlashCommandsSubmenuKeyboardNavigation({\n\t\titems,\n\t\tselectedIndex,\n\t\tsetSelectedIndex,\n\t\tonEnterKeyPress: handleItemKeyboardSelect,\n\t\tonClose,\n\t\tisEnabled: submenuState.type === \"inactive\",\n\t\tonArrowRight,\n\t})\n\n\tconst renderedItems = useMemo(() => {\n\t\treturn items.map((item, index) => {\n\t\t\tswitch (item.type) {\n\t\t\t\tcase \"component\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SlashCommandMenuItem\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\tisSelected={index === selectedIndex}\n\t\t\t\t\t\t\tonMouseDown={() => item.onSelect()}\n\t\t\t\t\t\t\tonMouseEnter={() => {\n\t\t\t\t\t\t\t\tsetSelectedIndex(index)\n\t\t\t\t\t\t\t\tsetSubmenuState(submenuStateInactive)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\twithIcon={isFiltering}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\n\t\t\t\tcase \"folder\": {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SlashCommandMenuItem\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tref={element => {\n\t\t\t\t\t\t\t\tif (element !== null) folderAnchorsRef.current.set(item.id, element)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\tisSelected={index === selectedIndex}\n\t\t\t\t\t\t\tonMouseEnter={event => {\n\t\t\t\t\t\t\t\tsetSelectedIndex(index)\n\n\t\t\t\t\t\t\t\tif (getChildren(item.id).length > 0) {\n\t\t\t\t\t\t\t\t\tsetSubmenuState({\n\t\t\t\t\t\t\t\t\t\ttype: \"active\",\n\t\t\t\t\t\t\t\t\t\tfolderAnchor: event.currentTarget,\n\t\t\t\t\t\t\t\t\t\tfolderItem: item,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tisParentSubmenuActive={submenuState.type === \"active\" && submenuState.folderItem.id === item.id}\n\t\t\t\t\t\t\tisParentFocused={focused}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}, [items, selectedIndex, getChildren, isFiltering, focused, submenuState])\n\n\treturn (\n\t\t<>\n\t\t\t<SlashCommandsMenuPopover\n\t\t\t\tanchor={anchorElement}\n\t\t\t\talignSelf=\"start\"\n\t\t\t\tattachTo=\"right\"\n\t\t\t\tonClose={onClose}\n\t\t\t\tdynamicMaxHeight={dynamicMaxHeight}\n\t\t\t\twithin={popoverWithin}\n\t\t\t\tonMouseEnter={() => setFocused(true)}\n\t\t\t\tonMouseLeave={() => {\n\t\t\t\t\tsetFocused(false)\n\t\t\t\t\tsetSelectedIndex(noSelectionIndex)\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{renderedItems}\n\t\t\t</SlashCommandsMenuPopover>\n\n\t\t\t{submenuState.type === \"active\" && (\n\t\t\t\t<SlashCommandsComponentsSubmenu\n\t\t\t\t\tanchorElement={submenuState.folderAnchor}\n\t\t\t\t\titems={getChildren(submenuState.folderItem.id)}\n\t\t\t\t\tgetChildren={getChildren}\n\t\t\t\t\tonClose={() => {\n\t\t\t\t\t\tsetSubmenuState(submenuStateInactive)\n\t\t\t\t\t\tsetFocused(true)\n\t\t\t\t\t}}\n\t\t\t\t\tdynamicMaxHeight={dynamicMaxHeight}\n\t\t\t\t\tattachToDirection={attachToDirection}\n\t\t\t\t\tparentFocused={focused}\n\t\t\t\t\tpopoverWithin={popoverWithin}\n\t\t\t\t\tisFiltering={isFiltering}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t)\n}\n\ninterface SlashCommandsHeadingsSubmenuProps {\n\treadonly anchorElement: HTMLElement\n\treadonly items: readonly SlashCommandCommandItem[]\n\treadonly onClose: () => void\n\treadonly dynamicMaxHeight: number\n\treadonly parentFocused: boolean\n\treadonly engine: BaseEngine\n\treadonly schema: FramerProseMirrorSchema\n\treadonly editorView: EditorView\n\treadonly popoverWithin: PopoverWithin\n}\n\nexport function SlashCommandsHeadingsSubmenu({\n\tanchorElement,\n\titems,\n\tonClose,\n\tdynamicMaxHeight,\n\tparentFocused,\n\tschema,\n\teditorView,\n\tpopoverWithin,\n}: SlashCommandsHeadingsSubmenuProps) {\n\tconst engine = useBaseEngine()\n\tconst [selectedIndex, setSelectedIndex] = useState(() => (parentFocused ? noSelectionIndex : 0))\n\n\tconst handleItemSelect = useCallback(\n\t\t(item: SlashCommandCommandItem) => {\n\t\t\tselectSlashCommand(engine, schema, editorView, item.commandType)\n\t\t},\n\t\t[schema, editorView],\n\t)\n\n\tuseSlashCommandsSubmenuKeyboardNavigation({\n\t\titems,\n\t\tselectedIndex,\n\t\tsetSelectedIndex,\n\t\tonEnterKeyPress: handleItemSelect,\n\t\tonClose,\n\t})\n\n\tconst renderedItems = useMemo(\n\t\t() =>\n\t\t\titems.map((item, index) => (\n\t\t\t\t<SlashCommandMenuItem\n\t\t\t\t\tkey={item.commandType}\n\t\t\t\t\titem={item}\n\t\t\t\t\tisSelected={index === selectedIndex}\n\t\t\t\t\tonMouseEnter={() => setSelectedIndex(index)}\n\t\t\t\t\tonMouseDown={() => handleItemSelect(item)}\n\t\t\t\t\twithIcon\n\t\t\t\t/>\n\t\t\t)),\n\t\t[items, selectedIndex, handleItemSelect],\n\t)\n\n\treturn (\n\t\t<SlashCommandsMenuPopover\n\t\t\tanchor={anchorElement}\n\t\t\talignSelf=\"start\"\n\t\t\tattachTo=\"right\"\n\t\t\tonClose={onClose}\n\t\t\tonMouseLeave={() => setSelectedIndex(noSelectionIndex)}\n\t\t\tdynamicMaxHeight={dynamicMaxHeight}\n\t\t\twithin={popoverWithin}\n\t\t>\n\t\t\t{renderedItems}\n\t\t</SlashCommandsMenuPopover>\n\t)\n}\n\ninterface PopoverWithin {\n\treadonly top: number\n\treadonly right: number\n\treadonly bottom: number\n\treadonly left: number\n}\n\ninterface SlashCommandsKeyboardNavigationOptions<T> {\n\treadonly items: readonly T[]\n\treadonly selectedIndex: number\n\treadonly setSelectedIndex: Dispatch<SetStateAction<number>>\n\treadonly onEnterKeyPress: (item: T) => void\n\treadonly onClose: () => void\n\treadonly isEnabled?: boolean\n\treadonly onArrowRight?: (item: T | undefined, event: KeyboardEvent) => void\n}\n\nfunction useSlashCommandsSubmenuKeyboardNavigation<T>({\n\titems,\n\tselectedIndex,\n\tsetSelectedIndex,\n\tonEnterKeyPress,\n\tonClose,\n\tisEnabled = true,\n\tonArrowRight,\n}: SlashCommandsKeyboardNavigationOptions<T>) {\n\tconst handleKeyDown = useCallback(\n\t\t(event: KeyboardEvent) => {\n\t\t\tif (!isEnabled) return\n\n\t\t\tconst selectedItem = items.at(selectedIndex)\n\n\t\t\tswitch (event.key) {\n\t\t\t\tcase \"ArrowDown\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tsetSelectedIndex(i => Math.min(i + 1, items.length - 1))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase \"ArrowUp\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tsetSelectedIndex(i => Math.max(i - 1, 0))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\tcase \"Escape\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tonClose()\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase \"ArrowRight\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tonArrowRight?.(selectedItem, event)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase \"Enter\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tif (selectedItem) {\n\t\t\t\t\t\tonEnterKeyPress(selectedItem)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[isEnabled, items, selectedIndex, setSelectedIndex, onEnterKeyPress, onClose, onArrowRight],\n\t)\n\n\tuseEffect(() => {\n\t\tconst abortController = new AbortController()\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown, { capture: true, signal: abortController.signal })\n\t\treturn () => abortController.abort()\n\t}, [handleKeyDown])\n}\n", "import { assert } from \"@framerjs/shared\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { InlineCodeStylePresetNode } from \"document/models/CanvasTree/nodes/InlineCodeStylePresetNode.ts\"\nimport type { Node, ResolvedPos } from \"prosemirror-model\"\nimport { type EditorState, Plugin, PluginKey, TextSelection, type Transaction } from \"prosemirror-state\"\nimport { Decoration, DecorationSet, type EditorView } from \"prosemirror-view\"\nimport { pickAndAddMedia } from \"prosemirror/addMedia.ts\"\nimport { isBlockquoteNode } from \"prosemirror/schema/blockquote.ts\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport {\n\tschemaSupportsBlockquotes,\n\tschemaSupportsEmbeds,\n\tschemaSupportsMedia,\n\tschemaSupportsTables,\n} from \"prosemirror/schema/index.ts\"\nimport { isBulletedListNode, isNumberedListNode } from \"prosemirror/schema/list.ts\"\nimport { isTableCellNode, isTableHeaderNode } from \"prosemirror/schema/table.ts\"\nimport { getDefaultTextBlockAttrs, isTextBlockNode } from \"prosemirror/schema/textBlock.ts\"\nimport { useEffect, useState } from \"react\"\nimport { getDefaultInlineCodeStylePreset } from \"utils/inlineCodeStylePresetUtils.ts\"\nimport { isObject } from \"utils/typeChecks.ts\"\nimport { insertCodeBlock, insertYouTube } from \"../richTextEditorModules.ts\"\nimport { createInitialTable } from \"../tableUtils.ts\"\nimport { SlashCommandType } from \"./slash-commands.types.ts\"\nimport * as styles from \"./slashCommandsPlugin.styles.ts\"\n\n// data stored in ProseMirror plugin state\ninterface SlashCommandPluginActiveStateInternal {\n\treadonly active: true\n\treadonly slashPosition: number\n}\n\ninterface SlashCommandPluginInactiveState {\n\treadonly active: false\n}\n\ntype SlashCommandPluginState = SlashCommandPluginInactiveState | SlashCommandPluginActiveStateInternal\n\nconst slashCommandsPluginKey = new PluginKey<SlashCommandPluginState>(\"slash-commands\")\n\n/**\n * Handles Prosemirror state related to the slash commands menu in CMS rich text editor.\n * UI is handled by the <SlashCommandsMenu /> component.\n */\nexport function slashCommandsPlugin(): Plugin<SlashCommandPluginState> {\n\treturn new Plugin<SlashCommandPluginState>({\n\t\tkey: slashCommandsPluginKey,\n\n\t\tstate: {\n\t\t\tinit(): SlashCommandPluginState {\n\t\t\t\treturn inactiveState\n\t\t\t},\n\n\t\t\tapply(\n\t\t\t\ttransaction: Transaction,\n\t\t\t\tpluginState: SlashCommandPluginState,\n\t\t\t\t_oldState: EditorState,\n\t\t\t\tnewState: EditorState,\n\t\t\t): SlashCommandPluginState {\n\t\t\t\tconst meta: unknown = transaction.getMeta(slashCommandsPluginKey)\n\t\t\t\tif (isSlashCommandPluginInactiveState(meta)) return inactiveState\n\n\t\t\t\tif (transaction.docChanged || transaction.selectionSet) {\n\t\t\t\t\tconst slashMatch = extractSlashCommandMatch(newState)\n\n\t\t\t\t\tif (slashMatch) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tactive: true,\n\t\t\t\t\t\t\tslashPosition: slashMatch.slashPosition,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn inactiveState\n\t\t\t\t}\n\n\t\t\t\treturn pluginState\n\t\t\t},\n\t\t},\n\n\t\tprops: {\n\t\t\tdecorations(state: EditorState): DecorationSet | null {\n\t\t\t\tconst pluginState = this.getState(state)\n\t\t\t\tconst decorationsList: Decoration[] = []\n\n\t\t\t\t// placeholder for an empty paragraph when the plugin is not active\n\t\t\t\tif (pluginState === undefined || !pluginState.active) {\n\t\t\t\t\tif (state.selection.empty) {\n\t\t\t\t\t\tconst $from = state.selection.$from\n\t\t\t\t\t\tconst parent = $from.parent\n\n\t\t\t\t\t\tif (isTextBlockNode(parent) && parent.childCount === 0 && parent.attrs.tag === \"p\") {\n\t\t\t\t\t\t\tconst placeholderText = getContextAwarePlaceholderText($from, state)\n\t\t\t\t\t\t\tif (placeholderText === undefined) return null\n\n\t\t\t\t\t\t\tdecorationsList.push(\n\t\t\t\t\t\t\t\tDecoration.node($from.start() - 1, $from.end() + 1, {\n\t\t\t\t\t\t\t\t\tclass: styles.paragraphWithPlaceholder,\n\t\t\t\t\t\t\t\t\t\"data-placeholder\": placeholderText,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn DecorationSet.create(state.doc, decorationsList)\n\t\t\t\t}\n\n\t\t\t\tconst query = extractSlashCommandQuery(state)\n\n\t\t\t\t// a hint for the user to filter the slash commands\n\t\t\t\tif (query === \"\") {\n\t\t\t\t\tdecorationsList.push(\n\t\t\t\t\t\tDecoration.widget(pluginState.slashPosition + 1, () => {\n\t\t\t\t\t\t\tconst placeholder = document.createElement(\"span\")\n\t\t\t\t\t\t\tplaceholder.textContent = \" Filter\u2026\"\n\t\t\t\t\t\t\tplaceholder.className = styles.inlineFilterPlaceholder\n\t\t\t\t\t\t\tplaceholder.setAttribute(\"dir\", \"ltr\")\n\t\t\t\t\t\t\treturn placeholder\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\treturn DecorationSet.create(state.doc, decorationsList)\n\t\t\t},\n\n\t\t\thandleKeyDown(view: EditorView, event: KeyboardEvent): boolean {\n\t\t\t\tconst pluginState = slashCommandsPluginKey.getState(view.state)\n\t\t\t\tif (!pluginState?.active) return false\n\n\t\t\t\tswitch (event.key) {\n\t\t\t\t\tcase \"Backspace\": {\n\t\t\t\t\t\tconst query = extractSlashCommandQuery(view.state)\n\t\t\t\t\t\tif (query !== \"\") return false\n\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\tconst { slashPosition } = pluginState\n\t\t\t\t\t\tconst deleteSlash = view.state.tr.delete(slashPosition, slashPosition + 1)\n\t\t\t\t\t\tview.dispatch(createTransactionWithMeta(deleteSlash, inactiveState))\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t})\n}\n\n// public active state (includes computed values that are not part of the state but are useful for the UI)\nexport interface SlashCommandPluginActiveState {\n\treadonly active: true\n\treadonly coordinates: { left: number; top: number }\n\treadonly query: string\n\treadonly slashPosition: number\n}\n\n// React hook to watch slash commands plugin state and compute derived values\nexport function useSlashCommandsPluginState(\n\teditorView: EditorView,\n): SlashCommandPluginActiveState | SlashCommandPluginInactiveState {\n\tconst [internalPluginState, setInternalPluginState] = useState<SlashCommandPluginState | undefined>(() =>\n\t\tslashCommandsPluginKey.getState(editorView.state),\n\t)\n\n\tuseEffect(() => {\n\t\tconst originalDispatchTransaction = editorView.props.dispatchTransaction\n\n\t\tfunction wrappedDispatchTransaction(transaction: Transaction) {\n\t\t\tconst prevPluginState = slashCommandsPluginKey.getState(editorView.state)\n\n\t\t\tif (originalDispatchTransaction) {\n\t\t\t\t// use the custom prop function if it was already provided elsewhere\n\t\t\t\toriginalDispatchTransaction(transaction)\n\t\t\t} else {\n\t\t\t\t// use the default ProseMirror behavior if the custom prop function was not yet provided.\n\t\t\t\teditorView.updateState(editorView.state.apply(transaction))\n\t\t\t}\n\n\t\t\tconst newPluginState = slashCommandsPluginKey.getState(editorView.state)\n\t\t\tif (newPluginState !== prevPluginState) {\n\t\t\t\tsetInternalPluginState(newPluginState)\n\t\t\t}\n\t\t}\n\n\t\t// wrapping the `dispatchTransaction` prop is the only way to bridge ProseMirror's state with React's.\n\t\teditorView.setProps({ dispatchTransaction: wrappedDispatchTransaction })\n\t\treturn () => editorView.setProps({ dispatchTransaction: originalDispatchTransaction })\n\t}, [editorView])\n\n\tif (!internalPluginState?.active) return inactiveState\n\n\treturn {\n\t\tactive: true,\n\t\tcoordinates: editorView.coordsAtPos(internalPluginState.slashPosition),\n\t\tquery: extractSlashCommandQuery(editorView.state),\n\t\tslashPosition: internalPluginState.slashPosition,\n\t}\n}\n\n// updates ProseMirror state based on the selected slash command type\nexport function selectSlashCommand(\n\tengine: BaseEngine,\n\tschema: FramerProseMirrorSchema,\n\teditorView: EditorView,\n\tcommandType: SlashCommandType,\n): void {\n\tconst activePluginState = slashCommandsPluginKey.getState(editorView.state)\n\tassert(activePluginState?.active, \"Slash commands plugin should be active to select a slash command\")\n\n\tconst currentPosition = editorView.state.selection.$from.pos\n\n\tlet transaction = editorView.state.tr.delete(activePluginState.slashPosition, currentPosition)\n\tconst insertPosition = activePluginState.slashPosition\n\n\ttransaction = commandTypeToSelectHandler[commandType]({\n\t\tengine,\n\t\ttransaction,\n\t\tinsertPosition,\n\t\tview: editorView,\n\t\tschema,\n\t})\n\teditorView.dispatch(transaction.setMeta(slashCommandsPluginKey, { active: false }))\n\teditorView.focus()\n}\n\nexport function closeSlashCommandsMenu(editorView: EditorView): void {\n\teditorView.dispatch(createTransactionWithMeta(editorView.state.tr, inactiveState))\n}\n\nconst inactiveState: SlashCommandPluginInactiveState = { active: false }\n\nfunction isSlashCommandPluginInactiveState(value: unknown): value is SlashCommandPluginInactiveState {\n\treturn isObject(value) && value.active === false\n}\n\nconst objectReplacementCharacter = \"\\ufffc\"\nconst alphanumericQueryRegExp = /\\/(?<query>\\w{0,25})$/u\n\ninterface SlashCommandMatch {\n\treadonly query: string\n\treadonly slashPosition: number\n}\n\nfunction extractSlashCommandMatch(state: EditorState): SlashCommandMatch | undefined {\n\tconst { selection } = state\n\tconst { $from } = selection\n\n\tif (!selection.empty || !$from.parent.isTextblock) return undefined\n\n\tconst textBefore = $from.parent.textBetween(0, $from.parentOffset, undefined, objectReplacementCharacter)\n\n\tif (!textBefore.startsWith(\"/\")) return undefined // show the slash commands menu only on a new line\n\n\tconst match = alphanumericQueryRegExp.exec(textBefore)\n\n\tif (!match?.groups) return undefined\n\n\tconst query = match.groups.query ?? \"\"\n\tconst slashPosition = $from.pos - query.length - 1\n\n\treturn { query, slashPosition }\n}\n\nfunction extractSlashCommandQuery(state: EditorState): string {\n\treturn extractSlashCommandMatch(state)?.query ?? \"\"\n}\n\ntype SlashCommandSelectHandler = (params: {\n\tengine: BaseEngine\n\ttransaction: Transaction\n\tinsertPosition: number\n\tview: EditorView\n\tschema: FramerProseMirrorSchema\n}) => Transaction\n\nconst commandTypeToSelectHandler: Readonly<Record<SlashCommandType, SlashCommandSelectHandler>> = {\n\t[SlashCommandType.Heading1]: createBlockAction({\n\t\tgetNode: schema =>\n\t\t\tschema.nodes.textBlock.create({\n\t\t\t\t...getDefaultTextBlockAttrs(),\n\t\t\t\ttextStylePreset: \"stylesPresetHeading1\",\n\t\t\t\ttag: \"h1\",\n\t\t\t}),\n\t\tselectionOffset: 1,\n\t}),\n\t[SlashCommandType.Heading2]: createBlockAction({\n\t\tgetNode: schema =>\n\t\t\tschema.nodes.textBlock.create({\n\t\t\t\t...getDefaultTextBlockAttrs(),\n\t\t\t\ttextStylePreset: \"stylesPresetHeading2\",\n\t\t\t\ttag: \"h2\",\n\t\t\t}),\n\t\tselectionOffset: 1,\n\t}),\n\t[SlashCommandType.Heading3]: createBlockAction({\n\t\tgetNode: schema =>\n\t\t\tschema.nodes.textBlock.create({\n\t\t\t\t...getDefaultTextBlockAttrs(),\n\t\t\t\ttextStylePreset: \"stylesPresetHeading3\",\n\t\t\t\ttag: \"h3\",\n\t\t\t}),\n\t\tselectionOffset: 1,\n\t}),\n\t[SlashCommandType.Heading4]: createBlockAction({\n\t\tgetNode: schema =>\n\t\t\tschema.nodes.textBlock.create({\n\t\t\t\t...getDefaultTextBlockAttrs(),\n\t\t\t\ttextStylePreset: \"stylesPresetHeading4\",\n\t\t\t\ttag: \"h4\",\n\t\t\t}),\n\t\tselectionOffset: 1,\n\t}),\n\t[SlashCommandType.Heading5]: createBlockAction({\n\t\tgetNode: schema =>\n\t\t\tschema.nodes.textBlock.create({\n\t\t\t\t...getDefaultTextBlockAttrs(),\n\t\t\t\ttextStylePreset: \"stylesPresetHeading5\",\n\t\t\t\ttag: \"h5\",\n\t\t\t}),\n\t\tselectionOffset: 1,\n\t}),\n\t[SlashCommandType.Heading6]: createBlockAction({\n\t\tgetNode: schema =>\n\t\t\tschema.nodes.textBlock.create({\n\t\t\t\t...getDefaultTextBlockAttrs(),\n\t\t\t\ttextStylePreset: \"stylesPresetHeading6\",\n\t\t\t\ttag: \"h6\",\n\t\t\t}),\n\t\tselectionOffset: 1,\n\t}),\n\t[SlashCommandType.BulletedList]: createBlockAction({\n\t\tgetNode: schema => {\n\t\t\tconst listItem = schema.nodes.listItem.create(null, schema.nodes.textBlock.create())\n\t\t\treturn schema.nodes.bulletedList.create(null, listItem)\n\t\t},\n\t\tselectionOffset: 3, // 1 for list tag + 1 for listItem tag + 1 for textBlock tag\n\t}),\n\t[SlashCommandType.NumberedList]: createBlockAction({\n\t\tgetNode: schema => {\n\t\t\tconst listItem = schema.nodes.listItem.create(null, schema.nodes.textBlock.create())\n\t\t\treturn schema.nodes.numberedList.create(null, listItem)\n\t\t},\n\t\tselectionOffset: 3, // 1 for list tag + 1 for listItem tag + 1 for textBlock tag\n\t}),\n\t[SlashCommandType.Blockquote]: createBlockAction({\n\t\tgetNode: schema => {\n\t\t\tassert(\n\t\t\t\tschemaSupportsBlockquotes(schema),\n\t\t\t\t\"Blockquote slash command should only be available when blockquotes are supported\",\n\t\t\t)\n\t\t\treturn schema.nodes.blockquote.create(null, schema.nodes.textBlock.create())\n\t\t},\n\t\tselectionOffset: 2,\n\t}),\n\t[SlashCommandType.InlineCode]: ({ engine, transaction, schema }) => {\n\t\t// TODO: The newly created preset has to be added to the tree.\n\t\tconst preset = getDefaultInlineCodeStylePreset(engine.tree) ?? new InlineCodeStylePresetNode()\n\t\tconst mark = schema.marks.inlineCode.create({ inlineCodeStylePreset: preset.id })\n\t\ttransaction.addStoredMark(mark)\n\t\treturn transaction\n\t},\n\t[SlashCommandType.CodeBlock]: ({ engine, schema, transaction, view }) => {\n\t\tassert(schemaSupportsEmbeds(schema), \"Code block slash command should only be available when embeds are supported\")\n\t\tvoid insertCodeBlock(engine, schema, view)\n\t\treturn transaction\n\t},\n\t[SlashCommandType.YouTube]: ({ engine, schema, transaction, view }) => {\n\t\tassert(schemaSupportsEmbeds(schema), \"YouTube slash command should only be available when embeds are supported\")\n\t\tvoid insertYouTube(engine, schema, view, undefined)\n\t\treturn transaction\n\t},\n\t[SlashCommandType.Image]: ({ engine, schema, transaction, view }) => {\n\t\tassert(schemaSupportsMedia(schema), \"Image slash command should only be available when media is supported\")\n\t\tvoid pickAndAddMedia(engine, schema, view, { type: \"upload\" })\n\t\treturn transaction\n\t},\n\t[SlashCommandType.Table]: ({ transaction, insertPosition, schema }) => {\n\t\tassert(schemaSupportsTables(schema), \"Table slash command should only be available when tables are supported\")\n\t\tconst createdTable = createInitialTable({ rowsCount: 3, columnsCount: 3 }, schema)\n\t\tconst firstHeaderCell = createdTable.firstChild?.firstChild\n\t\tconst textContent = firstHeaderCell?.firstChild?.textContent ?? \"\"\n\t\tconst resolvedInsertPosition = transaction.doc.resolve(insertPosition)\n\t\tconst replacementRange = getReplacementRange(resolvedInsertPosition)\n\t\tconst newTransaction = transaction.replaceWith(replacementRange.start, replacementRange.end, createdTable)\n\t\tconst nodeStructureOffset = 5\n\t\tconst selectionTargetPosition = replacementRange.start + nodeStructureOffset + textContent.length\n\t\tconst safeSelectionPosition = Math.min(selectionTargetPosition, newTransaction.doc.content.size - 1)\n\t\treturn newTransaction.setSelection(TextSelection.create(newTransaction.doc, safeSelectionPosition))\n\t},\n}\n\ninterface CreateBlockActionParams {\n\treadonly getNode: (schema: FramerProseMirrorSchema) => Node\n\treadonly selectionOffset?: number\n}\n\nfunction createBlockAction({ getNode, selectionOffset = 0 }: CreateBlockActionParams): SlashCommandSelectHandler {\n\treturn function ({ insertPosition, transaction, schema }) {\n\t\tconst resolvedInsertPosition = transaction.doc.resolve(insertPosition)\n\t\tconst newNode = getNode(schema)\n\t\tconst replacementRange = getReplacementRange(resolvedInsertPosition)\n\n\t\ttransaction = transaction.replaceWith(replacementRange.start, replacementRange.end, newNode)\n\t\tconst selectionTargetPosition = replacementRange.start + selectionOffset\n\t\tconst safeSelectionPosition = Math.min(selectionTargetPosition, transaction.doc.content.size - 1)\n\t\ttransaction = transaction.setSelection(TextSelection.create(transaction.doc, safeSelectionPosition))\n\t\treturn transaction\n\t}\n}\n\ninterface ReplacementRange {\n\treadonly start: number\n\treadonly end: number\n}\n\nfunction getReplacementRange(resolvedPosition: ResolvedPos): ReplacementRange {\n\tconst isEmptyTextBlockAtBeginningOfLine =\n\t\tresolvedPosition.parent.isTextblock && resolvedPosition.parent.content.size === 0 && resolvedPosition.depth > 0\n\n\tif (isEmptyTextBlockAtBeginningOfLine) {\n\t\treturn {\n\t\t\tstart: resolvedPosition.before(resolvedPosition.depth),\n\t\t\tend: resolvedPosition.after(resolvedPosition.depth),\n\t\t}\n\t}\n\n\treturn { start: resolvedPosition.pos, end: resolvedPosition.pos }\n}\n\n// creates transaction with meta for the slash commands plugin accepting only the allowed types\nfunction createTransactionWithMeta(transaction: Transaction, meta: SlashCommandPluginState): Transaction {\n\treturn transaction.setMeta(slashCommandsPluginKey, meta)\n}\n\nfunction getContextAwarePlaceholderText($from: ResolvedPos, state: EditorState): string | undefined {\n\t// don't show any placeholder when there are storedMarks (active formatting)\n\tif (state.storedMarks && state.storedMarks.length > 0) return undefined\n\n\tfor (let depth = $from.depth; depth >= 0; depth--) {\n\t\tconst node = $from.node(depth)\n\n\t\t// if we're inside a table cell - don't show placeholder\n\t\tif (isTableCellNode(node) || isTableHeaderNode(node)) return undefined\n\n\t\tif (isBlockquoteNode(node)) return \"Quote\u2026\"\n\n\t\tif (isBulletedListNode(node) || isNumberedListNode(node)) return \"List\u2026\"\n\t}\n\n\treturn \"Write or type / to add blocks\u2026\"\n}\n", "import \"slashCommandsPlugin.styles_jrxd5w.wyw.css\"; export const inlineFilterPlaceholder = \"inlineFilterPlaceholder_itiggrx\";\nexport const paragraphWithPlaceholder = \"paragraphWithPlaceholder_pfd4ue7\";", "import type { ComponentLoader, EntityDefinition } from \"@framerjs/framer-runtime\"\nimport type { ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport { ModuleType, isLocalModuleIdentifier, isModuleExportIdentifier, parseModuleIdentifier } from \"@framerjs/shared\"\n\ntype ComponentEntityDefinition = Omit<EntityDefinition, \"identifier\"> & {\n\treadonly identifier: ModuleExportIdentifierString\n}\n\n// Collects all component definitions from the component loader and groups them by referenceId.\nexport function collectComponentDefinitions(\n\tcomponentLoader: ComponentLoader,\n): Map<string, ComponentEntityDefinition[]> {\n\tconst referenceIdToEntityDefinitions = new Map<string, ComponentEntityDefinition[]>()\n\n\tfor (const entity of componentLoader.getAllEntities()) {\n\t\tconst { identifier } = entity\n\t\tconst parsed = parseModuleIdentifier(entity.identifier)\n\n\t\tconst isComponent =\n\t\t\tparsed !== undefined &&\n\t\t\tparsed.kind === \"localModuleExport\" &&\n\t\t\tparsed.type === ModuleType.Canvas &&\n\t\t\tisModuleExportIdentifier(identifier) &&\n\t\t\tisLocalModuleIdentifier(parsed)\n\n\t\tif (!isComponent) continue\n\n\t\tconst component = { ...entity, identifier } satisfies ComponentEntityDefinition\n\t\tconst referenceId = parsed.localIdName\n\t\tconst existingEntry = referenceIdToEntityDefinitions.get(referenceId)\n\n\t\tif (existingEntry) {\n\t\t\texistingEntry.push(component)\n\t\t} else {\n\t\t\treferenceIdToEntityDefinitions.set(referenceId, [component])\n\t\t}\n\t}\n\n\treturn referenceIdToEntityDefinitions\n}\n", "import type { ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { collectComponentDefinitions } from \"document/components/chrome/richTextEditor/collectComponentDefinitions.ts\"\nimport { insertModule } from \"document/components/chrome/richTextEditor/richTextEditorModules.ts\"\nimport { getMetricsInteractionSourceForScopeType } from \"document/components/utils/getMetricsInteractionSourceForScopeType.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/index.ts\"\nimport type { ComponentEntityTypeRootNode } from \"document/models/CanvasTree/nodes/EntityTypeRootNode.ts\"\nimport {\n\tisEntityFolderNode,\n\tisEntityReferenceNode,\n\tisSmartComponentNode,\n} from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport type { EditorView } from \"prosemirror-view\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport { isDefined } from \"utils/typeChecks.ts\"\nimport { record } from \"web/lib/tracker.ts\"\nimport {\n\ttype SlashCommandComponentItem,\n\ttype SlashCommandFolderItem,\n\tcomponentSubmenuIcon,\n} from \"./SlashCommandsMenuItem.tsx\"\nimport { closeSlashCommandsMenu } from \"./slashCommandsPlugin.ts\"\n\ninterface ComponentTreeFolder {\n\treadonly type: \"folder\"\n\treadonly id: string\n\treadonly name: string\n\treadonly children: readonly ComponentTree[]\n}\n\ninterface ComponentTreeReference {\n\treadonly type: \"reference\"\n\treadonly referenceId: string\n\treadonly nodeId: string\n}\n\ntype ComponentTree = ComponentTreeFolder | ComponentTreeReference\n\ninterface ComponentMenuEntryBase {\n\treadonly id: string\n\treadonly title: string\n\treadonly depth: number\n\treadonly ancestors: readonly string[]\n\treadonly parentId: string | undefined\n}\n\ninterface ComponentMenuEntryComponent extends ComponentMenuEntryBase {\n\treadonly type: \"component\"\n\treadonly identifier: ModuleExportIdentifierString\n}\n\ninterface ComponentMenuEntryFolder extends ComponentMenuEntryBase {\n\treadonly type: \"folder\"\n}\n\ntype ComponentMenuEntry = ComponentMenuEntryComponent | ComponentMenuEntryFolder\n\ninterface GetComponentMenuItemsParams {\n\treadonly editorView: EditorView\n\treadonly engine: BaseEngine\n\treadonly entityTypeRootNode: ComponentEntityTypeRootNode\n\treadonly schema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithEmbeds\n\treadonly slashPosition: number\n}\n\n// Returns a list of component menu items based on the current component tree.\nexport function getComponentMenuItems({\n\teditorView,\n\tengine,\n\tentityTypeRootNode,\n\tschema,\n\tslashPosition,\n}: GetComponentMenuItemsParams): (SlashCommandComponentItem | SlashCommandFolderItem)[] {\n\tconst trees: ComponentTree[] = []\n\tfor (const child of entityTypeRootNode.children) {\n\t\tconst componentTree = createComponentTree(child)\n\t\tif (componentTree) trees.push(componentTree)\n\t}\n\n\tconst componentEntries = buildComponentMenuEntries(engine, trees)\n\n\tif (componentEntries.length === 0) return []\n\n\treturn componentEntries.map<SlashCommandComponentItem | SlashCommandFolderItem>(item => {\n\t\tif (item.type === \"folder\") {\n\t\t\treturn {\n\t\t\t\ttype: \"folder\",\n\t\t\t\tid: item.id,\n\t\t\t\ttitle: item.title,\n\t\t\t\tdepth: item.depth,\n\t\t\t\tancestors: item.ancestors,\n\t\t\t\tparentId: item.parentId,\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttype: \"component\",\n\t\t\tid: item.id,\n\t\t\ttitle: item.title,\n\t\t\tdepth: item.depth,\n\t\t\tancestors: item.ancestors,\n\t\t\tparentId: item.parentId,\n\t\t\ticon: componentSubmenuIcon,\n\t\t\tonSelect: () =>\n\t\t\t\tinsertComponent({\n\t\t\t\t\tcomponentIdentifier: item.identifier,\n\t\t\t\t\teditorView,\n\t\t\t\t\tengine,\n\t\t\t\t\tschema,\n\t\t\t\t\tslashPosition,\n\t\t\t\t}),\n\t\t}\n\t})\n}\n\n// Builds a list of component menu entries recursively from the given component tree.\nfunction buildComponentMenuEntries(engine: BaseEngine, trees: readonly ComponentTree[]): ComponentMenuEntry[] {\n\tconst rows: ComponentMenuEntry[] = []\n\tconst seenReferenceIds = new Set<string>()\n\tconst referenceIdToDefinitions = collectComponentDefinitions(engine.componentLoader)\n\n\tfunction processTree(\n\t\ttree: ComponentTree,\n\t\tdepth: number,\n\t\tancestors: readonly string[],\n\t\tparentId: string | undefined,\n\t): boolean {\n\t\tif (tree.type === \"folder\") {\n\t\t\tconst folderId = `folder-${tree.id}`\n\t\t\tconst folderRowIndex = rows.length\n\t\t\trows.push({\n\t\t\t\ttype: \"folder\",\n\t\t\t\tid: folderId,\n\t\t\t\ttitle: tree.name,\n\t\t\t\tdepth,\n\t\t\t\tancestors,\n\t\t\t\tparentId,\n\t\t\t})\n\n\t\t\tconst childAncestors = [...ancestors, folderId]\n\t\t\tlet hasVisibleChild = false\n\t\t\tfor (const child of tree.children) {\n\t\t\t\thasVisibleChild = processTree(child, depth + 1, childAncestors, folderId) || hasVisibleChild\n\t\t\t}\n\n\t\t\tif (!hasVisibleChild) rows.splice(folderRowIndex, 1)\n\t\t\treturn hasVisibleChild\n\t\t}\n\n\t\tconst components = referenceIdToDefinitions.get(tree.referenceId)\n\t\tconst componentNode = engine.tree.get(tree.referenceId)\n\t\tif (!components || components.length === 0 || !isSmartComponentNode(componentNode)) return false\n\n\t\tseenReferenceIds.add(tree.referenceId)\n\n\t\tcomponents.forEach(component => {\n\t\t\tconst entryId = `component-${component.identifier}-${tree.nodeId}`\n\t\t\trows.push({\n\t\t\t\ttype: \"component\",\n\t\t\t\tid: entryId,\n\t\t\t\ttitle: component.name,\n\t\t\t\tdepth,\n\t\t\t\tancestors,\n\t\t\t\tparentId,\n\t\t\t\tidentifier: component.identifier,\n\t\t\t})\n\t\t})\n\n\t\treturn true\n\t}\n\n\ttrees.forEach(tree => processTree(tree, 0, [], undefined))\n\n\tfor (const [referenceId, components] of referenceIdToDefinitions.entries()) {\n\t\tif (seenReferenceIds.has(referenceId)) continue\n\n\t\tconst componentNode = engine.tree.get(referenceId)\n\t\tif (!isSmartComponentNode(componentNode)) continue\n\n\t\tfor (const component of components) {\n\t\t\trows.push({\n\t\t\t\ttype: \"component\",\n\t\t\t\tid: `component-${component.identifier}`,\n\t\t\t\ttitle: component.name,\n\t\t\t\tdepth: 0,\n\t\t\t\tancestors: [],\n\t\t\t\tparentId: undefined,\n\t\t\t\tidentifier: component.identifier,\n\t\t\t})\n\t\t}\n\t}\n\n\treturn rows\n}\n\nfunction createComponentTree(node: CanvasNode): ComponentTree | undefined {\n\tif (isEntityFolderNode(node)) {\n\t\tconst name = node.resolveValue(\"name\")\n\t\tif (!name) return undefined\n\n\t\tconst children = node.children.map(createComponentTree).filter(isDefined)\n\t\tif (children.length === 0) return undefined\n\n\t\treturn { children, id: node.id, name, type: \"folder\" }\n\t}\n\n\tif (isEntityReferenceNode(node)) {\n\t\treturn { type: \"reference\", referenceId: node.referenceId, nodeId: node.id }\n\t}\n\n\treturn undefined\n}\n\nfunction deleteSlashTriggerIfNeeded(editorView: EditorView, slashPosition: number): void {\n\tconst { state } = editorView\n\tif (!state.selection.empty) return\n\tconst currentPosition = state.selection.$from.pos\n\tif (currentPosition <= slashPosition) return\n\tconst transaction = state.tr.delete(slashPosition, currentPosition)\n\teditorView.dispatch(transaction)\n}\n\ninterface InsertComponentParams {\n\treadonly editorView: EditorView\n\treadonly engine: BaseEngine\n\treadonly componentIdentifier: ModuleExportIdentifierString\n\treadonly schema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithEmbeds\n\treadonly slashPosition: number\n}\n\nasync function insertComponent({\n\tcomponentIdentifier,\n\teditorView,\n\tengine,\n\tschema,\n\tslashPosition,\n}: InsertComponentParams) {\n\trecord(\"collection_record_component_add\", {\n\t\tsource: getMetricsInteractionSourceForScopeType(engine.stores.scopeStore.scopeType),\n\t})\n\tdeleteSlashTriggerIfNeeded(editorView, slashPosition)\n\tawait insertModule(engine, schema, editorView, componentIdentifier, {})\n\tcloseSlashCommandsMenu(editorView)\n\teditorView.focus()\n}\n", "import { useEffect } from \"react\"\nimport { useSet } from \"utils/useSet.ts\"\n\nexport function useValueChangeListeners<T>(value: T) {\n\tconst listeners = useSet<(value: T) => void>()\n\n\tuseEffect(() => {\n\t\tfor (const listener of listeners) {\n\t\t\tlistener(value)\n\t\t}\n\t}, [listeners, value])\n\n\treturn listeners\n}\n\nexport function useVoidChangeListeners(value: unknown) {\n\tconst listeners = useSet<VoidFunction>()\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: Value changes are used only to trigger listeners.\n\tuseEffect(() => {\n\t\tfor (const listener of listeners) {\n\t\t\tlistener()\n\t\t}\n\t}, [listeners, value])\n\n\treturn listeners\n}\n", "import {\n\tCenterChild,\n\tIconCodeBlock,\n\tIconImageStylePreset,\n\tIconLayerComponent,\n\tIconTableStylePreset,\n\tIconVideo,\n\tScroll,\n\tSearchBar,\n} from \"@framerjs/fresco\"\nimport { palette } from \"@framerjs/fresco/tokens\"\nimport { type ModuleExportIdentifierString, emptySet } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { IconAgentCode } from \"document/components/chrome/agentPanel/components/IconAgentCode.tsx\"\nimport { IconAgentComponent } from \"document/components/chrome/agentPanel/components/IconAgentComponent.tsx\"\nimport { IconAgentVideo } from \"document/components/chrome/agentPanel/components/IconAgentVideo.tsx\"\nimport { IconAgentLayerImage } from \"document/components/chrome/layers/AgentLayerIcons.tsx\"\nimport { IconAgentLayerGrid } from \"document/components/chrome/layers/IconAgentLayerGrid.tsx\"\nimport { FormattingOption } from \"document/components/chrome/richTextEditor/formatting-option.types.ts\"\nimport { isFormattingOptionDisabled } from \"document/components/chrome/richTextEditor/toolbarUtils.ts\"\nimport { useEditorSelectionState } from \"document/components/chrome/richTextEditor/useEditorSelectionState.tsx\"\nimport { getMetricsInteractionSourceForScopeType } from \"document/components/utils/getMetricsInteractionSourceForScopeType.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/index.ts\"\nimport { ComponentEntityTypeRootNode } from \"document/models/CanvasTree/nodes/EntityTypeRootNode.ts\"\nimport {\n\tisEntityFolderNode,\n\tisEntityReferenceNode,\n\tisSmartComponentNode,\n} from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { getNameFromPath } from \"document/utils/assetPath.ts\"\nimport type { EditorView } from \"prosemirror-view\"\nimport { pickAndAddMedia } from \"prosemirror/addMedia.ts\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport { schemaSupportsEmbeds, schemaSupportsMedia, schemaSupportsTables } from \"prosemirror/schema/index.ts\"\nimport type React from \"react\"\nimport { createRef, startTransition, useCallback, useContext, useEffect, useMemo, useState } from \"react\"\nimport { record } from \"web/lib/tracker.ts\"\nimport { PopoutContext } from \"../../shared/PopoutContext.ts\"\nimport { insertCodeBlock, insertModule, insertYouTube } from \"../richTextEditorModules.ts\"\nimport { createInitialTable } from \"../tableUtils.ts\"\nimport * as styles from \"./InsertMenuPopout.styles.ts\"\nimport {\n\tInsertMenuPopoutRow,\n\ttype InsertMenuPopoutRowData,\n\ttype ReferenceInsertMenuPopoutRow,\n} from \"./InsertMenuPopoutRow.tsx\"\n\ninterface InsertMenuPopoutProps {\n\treadonly editorView: EditorView\n\treadonly saveChanges: () => unknown\n\treadonly schema: FramerProseMirrorSchema\n}\n\nexport function InsertMenuPopout({ editorView, saveChanges, schema }: InsertMenuPopoutProps) {\n\tconst engine = useBaseEngine()\n\tconst tree = useEngineState(() => engine.tree, [], [EngineChange.Tree])\n\tconst popoutNavigation = useContext(PopoutContext)\n\tconst editorSelectionState = useEditorSelectionState(engine, editorView.state)\n\tconst [searchValue, setSearchValue] = useState(\"\")\n\tconst isSearching = searchValue.length > 0\n\tconst agentExperimentEnabled = useExperimentIsOn(\"agent\")\n\n\tconst [expandedFolders, setExpandedFolders] = useState(emptySet<string>())\n\n\tconst saveChangesAndClosePopout = useCallback(() => {\n\t\tsaveChanges()\n\t\tpopoutNavigation?.close()\n\t}, [saveChanges, popoutNavigation])\n\n\tconst builtInEmbedRows: readonly ReferenceInsertMenuPopoutRow[] = useMemo(() => {\n\t\tconst rows: ReferenceInsertMenuPopoutRow[] = []\n\n\t\tif (schemaSupportsMedia(schema)) {\n\t\t\trows.push({\n\t\t\t\tancestors: [],\n\t\t\t\tdepth: 0,\n\t\t\t\tenabled: !isFormattingOptionDisabled(FormattingOption.ImageUpload, editorSelectionState),\n\t\t\t\thidden: false,\n\t\t\t\ticon: agentExperimentEnabled ? <IconAgentLayerImage /> : <IconImageStylePreset />,\n\t\t\t\ticonColor: palette.blue60,\n\t\t\t\tid: \"image\",\n\t\t\t\tonSelect: () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvoid pickAndAddMedia(engine, schema, editorView, { type: \"upload\" }).finally(saveChangesAndClosePopout)\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// ignore error.\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttitle: \"Image & Video\",\n\t\t\t\ttype: \"reference\",\n\t\t\t})\n\t\t}\n\n\t\tif (schemaSupportsEmbeds(schema)) {\n\t\t\trows.push(\n\t\t\t\t{\n\t\t\t\t\tancestors: [],\n\t\t\t\t\tdepth: 0,\n\t\t\t\t\tenabled: !isFormattingOptionDisabled(FormattingOption.YouTube, editorSelectionState),\n\t\t\t\t\thidden: false,\n\t\t\t\t\ticon: agentExperimentEnabled ? <IconAgentVideo /> : <IconVideo />,\n\t\t\t\t\ticonColor: palette.blue60,\n\t\t\t\t\tid: \"youtube\",\n\t\t\t\t\tonSelect: () => insertYouTube(engine, schema, editorView, saveChangesAndClosePopout),\n\t\t\t\t\ttitle: \"YouTube\",\n\t\t\t\t\ttype: \"reference\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tancestors: [],\n\t\t\t\t\tdepth: 0,\n\t\t\t\t\tenabled: !isFormattingOptionDisabled(FormattingOption.CodeBlock, editorSelectionState),\n\t\t\t\t\thidden: false,\n\t\t\t\t\ticon: agentExperimentEnabled ? <IconAgentCode /> : <IconCodeBlock />,\n\t\t\t\t\ticonColor: palette.blue60,\n\t\t\t\t\tid: \"code\",\n\t\t\t\t\tonSelect: () =>\n\t\t\t\t\t\tinsertCodeBlock(\n\t\t\t\t\t\t\tengine,\n\t\t\t\t\t\t\tschema,\n\t\t\t\t\t\t\teditorView,\n\t\t\t\t\t\t\teditorView.state.doc.textBetween(editorView.state.selection.from, editorView.state.selection.to, \"\\n\"),\n\t\t\t\t\t\t\tsaveChangesAndClosePopout,\n\t\t\t\t\t\t),\n\t\t\t\t\ttitle: \"Code Block\",\n\t\t\t\t\ttype: \"reference\",\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\n\t\tif (schemaSupportsTables(schema)) {\n\t\t\trows.push({\n\t\t\t\tancestors: [],\n\t\t\t\tdepth: 0,\n\t\t\t\tenabled: !isFormattingOptionDisabled(FormattingOption.Table, editorSelectionState),\n\t\t\t\thidden: false,\n\t\t\t\ticon: agentExperimentEnabled ? <IconAgentLayerGrid /> : <IconTableStylePreset />,\n\t\t\t\ticonColor: palette.blue60,\n\t\t\t\tid: \"table\",\n\t\t\t\tonSelect: () => {\n\t\t\t\t\teditorView.dispatch(\n\t\t\t\t\t\teditorView.state.tr.replaceSelectionWith(createInitialTable({ rowsCount: 3, columnsCount: 3 }, schema)),\n\t\t\t\t\t)\n\t\t\t\t\tsaveChangesAndClosePopout()\n\t\t\t\t},\n\t\t\t\ttitle: Dictionary.Table,\n\t\t\t\ttype: \"reference\",\n\t\t\t})\n\t\t}\n\n\t\treturn rows\n\t}, [agentExperimentEnabled, editorSelectionState, editorView, saveChangesAndClosePopout, schema])\n\n\tconst toggleFolderCollapse = useCallback((folderId: string) => {\n\t\tsetExpandedFolders(prev => {\n\t\t\tconst newSet = new Set(prev)\n\t\t\tif (newSet.has(folderId)) {\n\t\t\t\tnewSet.delete(folderId)\n\t\t\t} else {\n\t\t\t\tnewSet.add(folderId)\n\t\t\t}\n\t\t\treturn newSet\n\t\t})\n\t}, [])\n\n\tconst projectComponentRows: readonly InsertMenuPopoutRowData[] = useMemo(() => {\n\t\tif (!schemaSupportsEmbeds(schema)) return []\n\t\tconst schemaWithEmbeds = schema\n\n\t\tconst entityTypeRootNode = ComponentEntityTypeRootNode.get(tree)\n\t\tif (!entityTypeRootNode) return []\n\n\t\tconst enabled = !isFormattingOptionDisabled(FormattingOption.ProjectComponent, editorSelectionState)\n\n\t\tconst rows: InsertMenuPopoutRowData[] = []\n\t\tconst seenComponentNodeIds = new Set<string>()\n\n\t\tasync function insertComponent(componentIdentifier: ModuleExportIdentifierString) {\n\t\t\trecord(\"collection_record_component_add\", {\n\t\t\t\tsource: getMetricsInteractionSourceForScopeType(engine.stores.scopeStore.scopeType),\n\t\t\t})\n\t\t\tawait insertModule(engine, schemaWithEmbeds, editorView, componentIdentifier, {})\n\t\t\tsaveChangesAndClosePopout()\n\t\t}\n\n\t\tfunction processNode(\n\t\t\tnode: CanvasNode,\n\t\t\tdepth: number = 0,\n\t\t\tparentCollapsed: boolean = false,\n\t\t\tancestorFolderIds: readonly string[] = [],\n\t\t): InsertMenuPopoutRowData[] {\n\t\t\tif (isEntityFolderNode(node)) {\n\t\t\t\tconst name = node.resolveValue(\"name\")\n\t\t\t\tif (!name) return []\n\n\t\t\t\tconst folderId = `folder-${node.id}`\n\t\t\t\tconst isCollapsed = !expandedFolders.has(folderId)\n\t\t\t\tconst nextParentCollapsed = parentCollapsed || isCollapsed\n\t\t\t\tconst childAncestors = [...ancestorFolderIds, folderId]\n\t\t\t\tconst childRows: InsertMenuPopoutRowData[] = []\n\n\t\t\t\tfor (const child of node.children) {\n\t\t\t\t\tchildRows.push(...processNode(child, depth + 1, nextParentCollapsed, childAncestors))\n\t\t\t\t}\n\n\t\t\t\tif (childRows.length === 0) return []\n\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tancestors: ancestorFolderIds,\n\t\t\t\t\t\tcollapsed: isCollapsed,\n\t\t\t\t\t\tdepth,\n\t\t\t\t\t\thidden: parentCollapsed,\n\t\t\t\t\t\ticonColor: palette.purple100,\n\t\t\t\t\t\tid: folderId,\n\t\t\t\t\t\tonSelect: () => toggleFolderCollapse(folderId),\n\t\t\t\t\t\ttitle: name,\n\t\t\t\t\t\ttype: \"folder\",\n\t\t\t\t\t},\n\t\t\t\t\t...childRows,\n\t\t\t\t]\n\t\t\t}\n\n\t\t\tif (isEntityReferenceNode(node)) {\n\t\t\t\tconst componentNode = tree.get(node.referenceId)\n\t\t\t\tif (!componentNode || !isSmartComponentNode(componentNode)) return []\n\n\t\t\t\tconst componentIdentifier = componentNode.instanceIdentifier\n\t\t\t\tconst componentName = getNameFromPath(componentNode.resolveValue(\"name\") || Dictionary.Unknown)\n\n\t\t\t\tseenComponentNodeIds.add(componentNode.id)\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tancestors: ancestorFolderIds,\n\t\t\t\t\t\tdepth,\n\t\t\t\t\t\tenabled,\n\t\t\t\t\t\thidden: parentCollapsed,\n\t\t\t\t\t\ticon: agentExperimentEnabled ? <IconAgentComponent /> : <IconLayerComponent />,\n\t\t\t\t\t\ticonColor: palette.purple100,\n\t\t\t\t\t\tid: `component-${componentIdentifier}`,\n\t\t\t\t\t\tonSelect: () => insertComponent(componentIdentifier),\n\t\t\t\t\t\ttitle: componentName,\n\t\t\t\t\t\ttype: \"reference\",\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t}\n\n\t\t\treturn []\n\t\t}\n\n\t\tfor (const child of entityTypeRootNode.children) {\n\t\t\trows.push(...processNode(child, 0, false, []))\n\t\t}\n\n\t\t// add any remaining components at the root level (components not yet referenced, e.g. when the tree hasn't yet\n\t\t// caught up after creating a component)\n\t\tfor (const node of tree.root.children) {\n\t\t\tif (!isSmartComponentNode(node) || seenComponentNodeIds.has(node.id)) continue\n\t\t\tconst componentIdentifier = node.instanceIdentifier\n\t\t\tconst componentName = getNameFromPath(node.resolveValue(\"name\") || Dictionary.Unknown)\n\n\t\t\trows.push({\n\t\t\t\tancestors: [],\n\t\t\t\tdepth: 0,\n\t\t\t\tenabled,\n\t\t\t\thidden: false,\n\t\t\t\ticon: agentExperimentEnabled ? <IconAgentComponent /> : <IconLayerComponent />,\n\t\t\t\ticonColor: palette.purple100,\n\t\t\t\tid: `component-${componentIdentifier}`,\n\t\t\t\tonSelect: () => insertComponent(componentIdentifier),\n\t\t\t\ttitle: componentName,\n\t\t\t\ttype: \"reference\",\n\t\t\t})\n\t\t}\n\n\t\treturn rows\n\t}, [\n\t\tagentExperimentEnabled,\n\t\teditorSelectionState,\n\t\teditorView,\n\t\texpandedFolders,\n\t\tsaveChangesAndClosePopout,\n\t\tschema,\n\t\ttoggleFolderCollapse,\n\t\ttree,\n\t])\n\n\tconst filteredBuiltInEmbedRows = useMemo(() => {\n\t\tif (!searchValue) return builtInEmbedRows\n\t\treturn builtInEmbedRows.filter(row => row.title.toLowerCase().includes(searchValue.toLowerCase()))\n\t}, [builtInEmbedRows, searchValue])\n\n\tconst filteredComponentRows: readonly InsertMenuPopoutRowData[] = useMemo(() => {\n\t\tif (!searchValue) {\n\t\t\treturn projectComponentRows.filter(row => !row.hidden)\n\t\t}\n\n\t\tconst query = searchValue.toLowerCase()\n\t\tconst matchedReferenceIds = new Set<string>()\n\t\tconst matchedFolderIds = new Set<string>()\n\n\t\tfor (const row of projectComponentRows) {\n\t\t\tconst titleMatches = row.title.toLowerCase().includes(query)\n\n\t\t\tif (row.type === \"reference\") {\n\t\t\t\tif (titleMatches) {\n\t\t\t\t\tmatchedReferenceIds.add(row.id)\n\t\t\t\t\trow.ancestors.forEach(folderId => matchedFolderIds.add(folderId))\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (titleMatches) {\n\t\t\t\tmatchedFolderIds.add(row.id)\n\t\t\t\trow.ancestors.forEach(folderId => matchedFolderIds.add(folderId))\n\t\t\t}\n\t\t}\n\n\t\tconst results: InsertMenuPopoutRowData[] = []\n\n\t\tfor (const row of projectComponentRows) {\n\t\t\tif (row.type === \"folder\") {\n\t\t\t\tif (!matchedFolderIds.has(row.id)) continue\n\t\t\t\tresults.push({ ...row, hidden: false, collapsed: false })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (!matchedReferenceIds.has(row.id)) continue\n\n\t\t\tresults.push({ ...row, hidden: false })\n\t\t}\n\n\t\treturn results\n\t}, [projectComponentRows, searchValue])\n\n\tconst visibleBuiltInEmbedRows = useMemo(\n\t\t() => filteredBuiltInEmbedRows.filter(row => !row.hidden),\n\t\t[filteredBuiltInEmbedRows],\n\t)\n\tconst visibleComponentRows = useMemo(() => filteredComponentRows.filter(row => !row.hidden), [filteredComponentRows])\n\n\tconst hasMatchingBuiltInEmbeds = visibleBuiltInEmbedRows.length > 0\n\tconst hasMatchingComponents = visibleComponentRows.length > 0\n\tconst noMatches = !hasMatchingBuiltInEmbeds && !hasMatchingComponents\n\n\tconst showComponentsHint = !isSearching && hasMatchingBuiltInEmbeds && !hasMatchingComponents\n\n\tconst allVisibleRows = useMemo(() => {\n\t\treturn [...visibleBuiltInEmbedRows, ...visibleComponentRows]\n\t}, [visibleBuiltInEmbedRows, visibleComponentRows])\n\n\tconst [highlightedRowId, setHighlightedRowId] = useState<string | null>(null)\n\n\tconst highlightedIndex = useMemo(() => {\n\t\tif (highlightedRowId === null) return 0\n\t\tconst index = allVisibleRows.findIndex(row => row.id === highlightedRowId)\n\t\treturn index === -1 ? 0 : index\n\t}, [allVisibleRows, highlightedRowId])\n\n\tconst rowRefs = useMemo(() => allVisibleRows.map(() => createRef<HTMLButtonElement>()), [allVisibleRows])\n\n\tuseEffect(() => {\n\t\trowRefs[highlightedIndex]?.current?.scrollIntoView({ block: \"nearest\" })\n\t}, [highlightedIndex, rowRefs])\n\n\tconst handleSearchKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent) => {\n\t\t\tswitch (event.key) {\n\t\t\t\tcase \"ArrowDown\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tconst nextRow = allVisibleRows[highlightedIndex + 1]\n\t\t\t\t\tif (nextRow) {\n\t\t\t\t\t\tsetHighlightedRowId(nextRow.id)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase \"ArrowUp\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tconst previousRow = allVisibleRows[highlightedIndex - 1]\n\t\t\t\t\tif (previousRow) {\n\t\t\t\t\t\tsetHighlightedRowId(previousRow.id)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase \"Enter\": {\n\t\t\t\t\tconst highlightedRow = allVisibleRows[highlightedIndex]\n\t\t\t\t\tif (!highlightedRow) break\n\t\t\t\t\tif (highlightedRow.type === \"reference\" && !highlightedRow.enabled) break\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\thighlightedRow.onSelect()\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase \"Escape\": {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tpopoutNavigation?.close()\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[allVisibleRows, highlightedIndex, popoutNavigation],\n\t)\n\n\treturn (\n\t\t<Scroll className={styles.scroll}>\n\t\t\t<div className={styles.content}>\n\t\t\t\t<div className={styles.searchContainer}>\n\t\t\t\t\t<SearchBar\n\t\t\t\t\t\taria-label=\"Search embeds\"\n\t\t\t\t\t\tisIconVisible={false}\n\t\t\t\t\t\tonChange={value => startTransition(() => setSearchValue(value))}\n\t\t\t\t\t\tonKeyDown={handleSearchKeyDown}\n\t\t\t\t\t\tplaceholder=\"Search\"\n\t\t\t\t\t\tshowClearButton\n\t\t\t\t\t\tvalue={searchValue}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{noMatches && <p className={styles.emptyState}>{Dictionary.NoSearchResults}</p>}\n\n\t\t\t\t{hasMatchingBuiltInEmbeds && (\n\t\t\t\t\t<div className={styles.itemsWrapper}>\n\t\t\t\t\t\t{visibleBuiltInEmbedRows.map((row, index) => (\n\t\t\t\t\t\t\t<InsertMenuPopoutRow\n\t\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\t\trow={row}\n\t\t\t\t\t\t\t\tisHighlighted={index === highlightedIndex}\n\t\t\t\t\t\t\t\trowRef={rowRefs[index]}\n\t\t\t\t\t\t\t\tonMouseEnter={() => setHighlightedRowId(row.id)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{hasMatchingBuiltInEmbeds && (hasMatchingComponents || showComponentsHint) && (\n\t\t\t\t\t<div className={styles.divider} />\n\t\t\t\t)}\n\n\t\t\t\t{showComponentsHint && (\n\t\t\t\t\t<div className={styles.hintContents}>\n\t\t\t\t\t\t<CenterChild className={styles.icon}>\n\t\t\t\t\t\t\t{agentExperimentEnabled ? <IconAgentComponent /> : <IconLayerComponent />}\n\t\t\t\t\t\t</CenterChild>\n\t\t\t\t\t\t<div className={styles.hintText}>\n\t\t\t\t\t\t\t<div className={styles.heading}>No Components</div>\n\t\t\t\t\t\t\t<div className={styles.description}>\n\t\t\t\t\t\t\t\tAdd components to your project so you can insert them into rich text.\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{hasMatchingComponents && (\n\t\t\t\t\t<div className={styles.itemsWrapper}>\n\t\t\t\t\t\t{visibleComponentRows.map((row, componentIndex) => {\n\t\t\t\t\t\t\tconst flatIndex = visibleBuiltInEmbedRows.length + componentIndex\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<InsertMenuPopoutRow\n\t\t\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\t\t\trow={row}\n\t\t\t\t\t\t\t\t\tisHighlighted={flatIndex === highlightedIndex}\n\t\t\t\t\t\t\t\t\trowRef={rowRefs[flatIndex]}\n\t\t\t\t\t\t\t\t\tonMouseEnter={() => setHighlightedRowId(row.id)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</Scroll>\n\t)\n}\n", "import \"InsertMenuPopout.styles_kczv78.wyw.css\"; export const scroll = \"scroll_ssfdtv5\";\nexport const content = \"content_c4uzvtl\";\nexport const searchContainer = \"searchContainer_s1y4e589\";\nexport const itemsWrapper = \"itemsWrapper_i2o91mt\";\nexport const divider = \"divider_demlih4\";\nexport const emptyState = \"emptyState_evch5aa\";\nexport const hintContents = \"hintContents_h1ahy7pd\";\nexport const icon = \"icon_it5qojy\";\nexport const hintText = \"hintText_h1hjxase\";\nexport const heading = \"heading_h12tejfd\";\nexport const description = \"description_d1olb771\";", "import \"InsertMenuPopoutRow.styles_1c78rih.wyw.css\"; export const rowPaddingLeftPx = 25;\nexport const row = \"row_r1edqvg7\";\nexport const contentWrapperGapPx = 10;\nexport const contentWrapper = \"contentWrapper_c1h6t8yz\";\nexport const button = \"button_bado22j\";\nexport const highlighted = \"highlighted_hkwi3cj\";\nexport const iconSizePx = 12;\nexport const icon = \"icon_i1bkz7kn\";\nexport const title = \"title_t8xa1qh\";\nexport const caret = \"caret_cffs9mb\";\nexport const caretCollapsed = \"caretCollapsed_c1fgb2vw\";", "import { IconEntityFolder, IconSectionCollapsed } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport type { CSSProperties, ReactNode, RefObject } from \"react\"\nimport * as styles from \"./InsertMenuPopoutRow.styles.ts\"\n\ninterface BaseInsertMenuRow {\n\treadonly ancestors: readonly string[]\n\treadonly depth: number\n\treadonly hidden: boolean\n\treadonly iconColor: string\n\treadonly id: string\n\treadonly onSelect: () => unknown\n\treadonly title: string\n}\n\ninterface FolderInsertMenuPopoutRow extends BaseInsertMenuRow {\n\treadonly collapsed: boolean\n\treadonly type: \"folder\"\n}\n\nexport interface ReferenceInsertMenuPopoutRow extends BaseInsertMenuRow {\n\treadonly enabled: boolean\n\treadonly icon: ReactNode\n\treadonly type: \"reference\"\n}\n\nexport type InsertMenuPopoutRowData = FolderInsertMenuPopoutRow | ReferenceInsertMenuPopoutRow\n\ninterface InsertMenuPopoutRowProps {\n\treadonly row: ReferenceInsertMenuPopoutRow | FolderInsertMenuPopoutRow\n\treadonly isHighlighted?: boolean\n\treadonly rowRef?: RefObject<HTMLButtonElement>\n\treadonly onMouseEnter?: () => void\n}\n\nexport function InsertMenuPopoutRow({ row, isHighlighted, rowRef, onMouseEnter }: InsertMenuPopoutRowProps) {\n\tconst rowStyles: CSSProperties = {\n\t\tpaddingLeft: styles.rowPaddingLeftPx + row.depth * (styles.iconSizePx + styles.contentWrapperGapPx),\n\t}\n\n\tconst commonContent = (\n\t\t<>\n\t\t\t<span className={styles.icon} style={{ color: row.iconColor }}>\n\t\t\t\t{row.type === \"folder\" ? <IconEntityFolder /> : row.icon}\n\t\t\t</span>\n\n\t\t\t<span className={styles.title}>{row.title}</span>\n\t\t</>\n\t)\n\n\tif (row.type === \"reference\") {\n\t\treturn (\n\t\t\t<button\n\t\t\t\tref={rowRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={cx(styles.row, styles.button, isHighlighted && styles.highlighted)}\n\t\t\t\tonClick={row.onSelect}\n\t\t\t\tonMouseEnter={onMouseEnter}\n\t\t\t\tdisabled={!row.enabled}\n\t\t\t\tstyle={rowStyles}\n\t\t\t\ttabIndex={-1}\n\t\t\t>\n\t\t\t\t<div className={styles.contentWrapper}>{commonContent}</div>\n\t\t\t</button>\n\t\t)\n\t}\n\n\treturn (\n\t\t<button\n\t\t\tref={rowRef}\n\t\t\ttype=\"button\"\n\t\t\tclassName={cx(styles.row, styles.button, isHighlighted && styles.highlighted)}\n\t\t\tonClick={row.onSelect}\n\t\t\tonMouseEnter={onMouseEnter}\n\t\t\taria-expanded={!row.collapsed}\n\t\t\taria-label={`${row.collapsed ? Dictionary.Expand : Dictionary.Collapse} ${row.title}`}\n\t\t\tstyle={rowStyles}\n\t\t\ttabIndex={-1}\n\t\t>\n\t\t\t<div className={styles.contentWrapper}>\n\t\t\t\t<span className={cx(styles.caret, row.collapsed && styles.caretCollapsed)} aria-hidden=\"true\">\n\t\t\t\t\t<IconSectionCollapsed />\n\t\t\t\t</span>\n\n\t\t\t\t{commonContent}\n\t\t\t</div>\n\t\t</button>\n\t)\n}\n", "import type { ReactComponentDefinition } from \"@framerjs/framer-runtime\"\nimport {\n\tIconTextBlockquote,\n\tIconTextBold,\n\tIconTextBulletList,\n\tIconTextHeading1,\n\tIconTextHeading2,\n\tIconTextHeading3,\n\tIconTextHeading4,\n\tIconTextHeading5,\n\tIconTextHeading6,\n\tIconTextInlineCode,\n\tIconTextItalic,\n\tIconTextLink,\n\tIconTextNumberList,\n\tIconTextParagraph,\n\tPopupButton,\n\tPopupButtonDisplayTitle,\n\tPopupButtonItem,\n\tResetWarningThemeOverride,\n\tScrollWithGradient,\n\tSpinner,\n\tStack,\n\tuseReadOnly,\n\tuseThemeOverrideMode,\n} from \"@framerjs/fresco\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { RichTextEditorContent } from \"document/components/chrome/richTextEditor/RichTextEditorContent.tsx\"\nimport { InsertMenuPopout } from \"document/components/chrome/richTextEditor/insertMenuPopout/InsertMenuPopout.tsx\"\nimport { getModuleProps } from \"document/models/CanvasTree/nodes/utils/compileRichText.tsx\"\nimport type { RichTextTag } from \"document/models/CanvasTree/traits/WithRichTextTag.ts\"\nimport { getRichTextTagName, richTextTags } from \"document/models/CanvasTree/traits/WithRichTextTag.ts\"\nimport { isLink } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport { NotFound } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport {\n\tgetHTMLFromRichTextTreeValue,\n\tgetProseMirrorDocFromRichTextTreeValue,\n} from \"document/models/richText/richTextPmAdapter.ts\"\nimport type { RichTextTreeValue } from \"document/models/richText/richTextStorage.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { isVekterEngine } from \"document/useVekterEngine.ts\"\nimport type { ScopeType } from \"document/utils/scopeType.ts\"\nimport { ControlType } from \"library/index.ts\"\nimport { assert } from \"library/utils/assert.ts\"\nimport { useStableCallback } from \"library/utils/useStableCallback.ts\"\nimport type { NodeType } from \"prosemirror-model\"\nimport { liftListItem, wrapInList } from \"prosemirror-schema-list\"\nimport { EditorState, Selection, TextSelection } from \"prosemirror-state\"\nimport type { EditorView } from \"prosemirror-view\"\nimport { normalizeProseMirrorDoc } from \"prosemirror/editorState.ts\"\nimport { useImportProseMirror } from \"prosemirror/loader.ts\"\nimport {\n\ttype FramerProseMirrorSchema,\n\tschemaSupportsBlockquotes,\n\tschemaSupportsEmbeds,\n\tschemaSupportsLinks,\n\tschemaSupportsMedia,\n} from \"prosemirror/schema/index.ts\"\nimport { type ModuleNode, isModuleNode } from \"prosemirror/schema/module.ts\"\nimport { serializeRichText } from \"prosemirror/serialization/dom.ts\"\nimport { type ElementType, Suspense, useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport type { TextDirection } from \"text/types.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { useConstant } from \"utils/useConstant.ts\"\nimport { useMediaQuery } from \"utils/useMediaQuery.ts\"\nimport type { GeneratedComponentContext } from \"../preview/ModulePreviewWrapper.tsx\"\nimport { useImagePluginPickerButton } from \"../shared/ImagePluginPickerButtonContext.tsx\"\nimport { PopoutButton, type PopoutButtonProps } from \"../shared/PopoutButton.tsx\"\nimport { isCodeBlockIdentifier } from \"./CodeBlockView/CodeBlockView.tsx\"\nimport {\n\tPageLinkPopoverForRichText,\n\ttype PageLinkPopoverForRichTextChangeHandler,\n} from \"./PageLinkPopoverForRichText.tsx\"\nimport * as styles from \"./RichTextEditorWithToolbar.styles.ts\"\nimport { RichTextToolbarButton } from \"./RichTextToolbarButton.tsx\"\nimport { createMissingPresetsForHTML } from \"./createMissingPresetsForHTML.ts\"\nimport { createRichTextEditorState } from \"./createRichTextEditorState.ts\"\nimport { createRichTextEditorView } from \"./createRichTextEditorView.ts\"\nimport { FormattingOption } from \"./formatting-option.types.ts\"\nimport type { GetModuleNodeViewConstructor } from \"./getModuleNodeViewConstructor.ts\"\nimport {\n\tcreateBlockquoteTransaction,\n\tcreateChangeTagTransaction,\n\tcreateRemoveLinkTransaction,\n\tcreateToggleMarkTransaction,\n\tcreateUpdateLinkTransaction,\n\tisFormattingOptionDisabled,\n\tisTagChangeDisabled,\n\tisTextFormattingDisabled,\n} from \"./toolbarUtils.ts\"\nimport { useVoidChangeListeners } from \"./useChangeListeners.ts\"\nimport { useReactComponentDefinition } from \"./useCodeBlockLanguages.ts\"\nimport { useEditorSelectionState } from \"./useEditorSelectionState.tsx\"\n\nexport type InsertButtonPopoverOptions = Pick<\n\tPopoutButtonProps,\n\t\"displayInPopover\" | \"popoverAttachmentEdge\" | \"popoverOffset\" | \"showArrow\"\n>\n\nfunction IconBold() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\">\n\t\t\t<path\n\t\t\t\td=\"M 7 6.1 C 7 6.045 7.045 6 7.1 6 L 11.5 6 C 12.881 6 14 7.119 14 8.5 L 14 8.5 C 14 9.881 12.881 11 11.5 11 L 7 11 L 12.5 11 C 13.881 11 15 12.119 15 13.5 L 15 13.5 C 15 14.881 13.881 16 12.5 16 L 7.1 16 C 7.045 16 7 15.955 7 15.9 Z\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconCode() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\">\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\td=\"m8 6-5 5 5 5m6-10 5 5-5 5\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconItalic() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\">\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\td=\"M6 16h6m1.5-10-5 10M10 6h6\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconToggleBulletList() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\">\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\td=\"M4 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm0 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm0 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM8 5h10a1 1 0 0 1 0 2H8a1 1 0 0 1 0-2Zm0 5h10a1 1 0 0 1 0 2H8a1 1 0 0 1 0-2Zm0 5h10a1 1 0 0 1 0 2H8a1 1 0 0 1 0-2Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconToggleNumberList() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\">\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\td=\"m3.44 5.16 1.37-.7v4.82m-1.28 3.83a1.2 1.2 0 1 1 2.1 1.14l-2.2 2.94h2.41\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\td=\"M9 5h9a1 1 0 0 1 0 2H9a1 1 0 0 1 0-2Zm0 5h9a1 1 0 0 1 0 2H9a1 1 0 0 1 0-2Zm0 5h9a1 1 0 0 1 0 2H9a1 1 0 0 1 0-2Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconTable() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"M2 6a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4v10a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4Zm3 9c0 1.1.9 2 2 2h8a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2Zm2-8h3v3H7Zm5 0h3v3h-3Zm0 5h3v3h-3Zm-5 0h3v3H7Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconLink() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\">\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\td=\"m6.97 9.39-.8.8a3.99 3.99 0 0 0 0 5.64h0a3.99 3.99 0 0 0 5.63 0l.81-.8m2.42-2.42.8-.8a3.99 3.99 0 0 0 0-5.64h0a3.99 3.99 0 0 0-5.64 0l-.8.8m.41 5.23 2.4-2.4\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconPlusCompact() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"M 9 5.539 C 9 5.103 9.336 4.75 9.75 4.75 C 10.164 4.75 10.5 5.103 10.5 5.539 L 10.5 9 L 13.961 9 C 14.397 9 14.75 9.336 14.75 9.75 C 14.75 10.164 14.397 10.5 13.961 10.5 L 10.5 10.5 L 10.5 13.961 C 10.5 14.397 10.164 14.75 9.75 14.75 C 9.336 14.75 9 14.397 9 13.961 L 9 10.5 L 5.539 10.5 C 5.103 10.5 4.75 10.164 4.75 9.75 C 4.75 9.336 5.103 9 5.539 9 L 9 9 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconPlusWithBackground() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"none\">\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\td=\"M0 4a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4v10a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4Zm8 4H5a1 1 0 0 0 0 2h3v3a1 1 0 0 0 2 0v-3h3a1 1 0 0 0 0-2h-3V5a1 1 0 0 0-2 0Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconBlockquote() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\">\n\t\t\t<path\n\t\t\t\td=\"M 5 12 L 8 12 C 8.552 12 9 12.448 9 13 L 9 15 C 9 15.552 8.552 16 8 16 L 6 16 C 5.448 16 5 15.552 5 15 L 5 10 C 5 7.791 6.791 6 9 6 L 9 6\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M 13 12 L 16 12 C 16.552 12 17 12.448 17 13 L 17 15 C 17 15.552 16.552 16 16 16 L 14 16 C 13.448 16 13 15.552 13 15 L 13 10 C 13 7.791 14.791 6 17 6 L 17 6\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M 7 12 C 8.105 12 9 12.895 9 14 C 9 15.105 8.105 16 7 16 C 5.895 16 5 15.105 5 14 C 5 12.895 5.895 12 7 12 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M 15 12 C 16.105 12 17 12.895 17 14 C 17 15.105 16.105 16 15 16 C 13.895 16 13 15.105 13 14 C 13 12.895 13.895 12 15 12 Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconAgentBold() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"M2.75 2.25a.5.5 0 0 1 .5-.5h3a2 2 0 0 1 2 2h0a2 2 0 0 1-2 2h-3.5H7A2.25 2.25 0 0 1 9.25 8h0A2.25 2.25 0 0 1 7 10.25H3.341a.592.592 0 0 1-.591-.591Z\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconAgentItalic() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"M4.75 1.75h4.5M7.25 10.25h-4.5M7 2 5 9.5\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconAgentBlockquote() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"M.75 7.25a1.5 1.5 0 0 1 1.5-1.5h1a1.5 1.5 0 0 1 1.5 1.5v1.5a1.5 1.5 0 0 1-1.5 1.5h-1a1.5 1.5 0 0 1-1.5-1.5ZM7.25 7.25a1.5 1.5 0 0 1 1.5-1.5h1a1.5 1.5 0 0 1 1.5 1.5v1.5a1.5 1.5 0 0 1-1.5 1.5h-1a1.5 1.5 0 0 1-1.5-1.5Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity={0.2}\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M.75 7.5V4.75A3.25 3.25 0 0 1 4 1.5h0M7.25 7.5V4.75A3.25 3.25 0 0 1 10.5 1.5h0\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconAgentCode() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"M3.5 3 1.207 5.293a1 1 0 0 0 0 1.414L3.5 9M8.5 3l2.293 2.293a1 1 0 0 1 0 1.414L8.5 9\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconAgentToggleBulletList() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"M5 2.25h5M1.75 2.25H2M5 6.25h5M5 10.25h5M1.75 10.25H2M1.75 6.25H2\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeMiterlimit=\"10\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconAgentToggleNumberList() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"M6 2.25h5M8 10.25h3M6 6.25h5\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeMiterlimit=\"10\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M.75 2.25h2v8h-2 4\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconAgentLink() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"m5 7 2-2M4.75 2.279A3.515 3.515 0 0 1 9.721 7.25M7.25 9.721A3.515 3.515 0 0 1 2.279 4.75\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nfunction IconAgentPlusCompact() {\n\treturn (\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\">\n\t\t\t<path\n\t\t\t\td=\"M10 4v12M4 10h12\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport function ToolbarItemGroup({\n\tchildren,\n\tclassName,\n\tcompact = false,\n\tgap = 2,\n\tpadding = \"0px 5px\",\n}: {\n\tchildren: React.ReactNode\n\tclassName?: string\n\tcompact?: boolean\n\tgap?: number | string\n\tpadding?: number | string\n}) {\n\treturn (\n\t\t<Stack\n\t\t\tdirection=\"row\"\n\t\t\tgap={gap}\n\t\t\talignItems=\"center\"\n\t\t\tpadding={padding}\n\t\t\tclassName={cx(className, styles.toolbarButtonGroup, compact && styles.toolbarButtonGroupCompact)}\n\t\t>\n\t\t\t{children}\n\t\t</Stack>\n\t)\n}\n\nfunction ToolbarButtonDivider() {\n\treturn <div aria-hidden=\"true\" className={styles.toolbarButtonDivider} />\n}\n\ntype ToolbarIconType = \"link\" | \"bold\" | \"italic\" | \"blockquote\" | \"inlineCode\" | \"bulletedList\" | \"numberedList\"\n\nconst legacyToolbarIcons: Record<ToolbarIconType, ElementType> = {\n\tlink: IconLink,\n\tbold: IconBold,\n\titalic: IconItalic,\n\tblockquote: IconBlockquote,\n\tinlineCode: IconCode,\n\tbulletedList: IconToggleBulletList,\n\tnumberedList: IconToggleNumberList,\n}\n\nconst minimalToolbarIcons: Record<ToolbarIconType, ElementType> = {\n\tlink: IconTextLink,\n\tbold: IconTextBold,\n\titalic: IconTextItalic,\n\tblockquote: IconTextBlockquote,\n\tinlineCode: IconTextInlineCode,\n\tbulletedList: IconTextBulletList,\n\tnumberedList: IconTextNumberList,\n}\n\nconst minimalAgentToolbarIcons: Record<ToolbarIconType, ElementType> = {\n\tlink: IconAgentLink,\n\tbold: IconAgentBold,\n\titalic: IconAgentItalic,\n\tblockquote: IconAgentBlockquote,\n\tinlineCode: IconAgentCode,\n\tbulletedList: IconAgentToggleBulletList,\n\tnumberedList: IconAgentToggleNumberList,\n}\n\nfunction getToolbarIcon(type: ToolbarIconType, isMinimal: boolean, agentExperimentEnabled: boolean) {\n\tif (!isMinimal) return legacyToolbarIcons[type]\n\treturn agentExperimentEnabled ? minimalAgentToolbarIcons[type] : minimalToolbarIcons[type]\n}\n\nfunction ToolbarIcon({\n\ttype,\n\tisMinimal,\n\tagentExperimentEnabled,\n}: {\n\ttype: ToolbarIconType\n\tisMinimal: boolean\n\tagentExperimentEnabled: boolean\n}) {\n\tconst Icon = getToolbarIcon(type, isMinimal, agentExperimentEnabled)\n\treturn <Icon />\n}\n\ntype RichTextEditorWithToolbarVariant = \"legacy\" | \"legacyCompact\" | \"minimal\"\n\nexport interface RichTextEditorWithToolbarProps {\n\t/** Overrides the `defaultValue`, and changes will override the current editor state. */\n\tvalue?: RichTextTreeValue | undefined\n\t/**\n\t * Updates won't override the editor state if editor is focused.\n\t * Non optional so you can't accidentally use the wrong API.\n\t */\n\tdefaultValue: RichTextTreeValue\n\t// TODO: Can we replace ScopeType with supportsPageLinks?\n\tscopeType: ScopeType\n\tonChange: (value: string) => void\n\tonUnsavedChange?: (value: string) => void\n\tgetCanFocus?: () => boolean\n\tvariant: RichTextEditorWithToolbarVariant\n\tcompactTagSelector?: boolean\n\thideNonInformativeToolbarItems?: boolean\n\tschema: FramerProseMirrorSchema\n\tsupportedTags?: Set<string>\n\tlimitMaxHeight?: boolean\n\tclassName?: string\n\theaderClassName?: string\n\ttextEditorWrapperClassName?: string\n\tenabled?: boolean\n\tleftToolbarSlot?: React.ReactNode\n\trightToolbarSlot?: React.ReactNode\n\tlayoutDirection?: TextDirection\n\tsaveOnMetaArrowNavigation?: boolean\n\tpopoverAttachmentEdge?: PopoutButtonProps[\"popoverAttachmentEdge\"]\n\tfallbackToModalAppearance?: PopoutButtonProps[\"fallbackToModalAppearance\"]\n\t/**\n\t * Custom popover configuration for the Insert button\n\t */\n\tinsertButtonPopoverOptions?: InsertButtonPopoverOptions\n\t/**\n\t * To avoid circular dependencies, we need to inject the node view for modules, since it renders\n\t * property controls which once again can render this component.\n\t */\n\tgetModuleNodeViewConstructor?: GetModuleNodeViewConstructor\n\tgeneratedComponentContext?: GeneratedComponentContext\n}\n\nexport function RichTextEditorWithToolbar(props: RichTextEditorWithToolbarProps) {\n\treturn (\n\t\t<Suspense fallback={null}>\n\t\t\t<AsyncRichTextEditorWithToolbar {...props} />\n\t\t</Suspense>\n\t)\n}\n\nfunction AsyncRichTextEditorWithToolbar({\n\tvalue,\n\tdefaultValue,\n\tscopeType,\n\tonChange,\n\tonUnsavedChange,\n\tgetCanFocus,\n\tvariant,\n\tcompactTagSelector = false,\n\tschema,\n\tsupportedTags,\n\tlimitMaxHeight = false,\n\tenabled: externalEnabled = true,\n\thideNonInformativeToolbarItems = false,\n\tclassName,\n\theaderClassName,\n\ttextEditorWrapperClassName,\n\tpopoverAttachmentEdge,\n\tfallbackToModalAppearance,\n\tinsertButtonPopoverOptions,\n\tgetModuleNodeViewConstructor,\n\tgeneratedComponentContext,\n\tleftToolbarSlot,\n\trightToolbarSlot,\n\tsaveOnMetaArrowNavigation,\n\tlayoutDirection,\n}: RichTextEditorWithToolbarProps) {\n\tconst proseMirror = useImportProseMirror()\n\tconst engine = useBaseEngine()\n\tconst themeOverrideMode = useThemeOverrideMode()\n\n\tconst isLegacy = variant === \"legacy\"\n\tconst isMinimal = variant === \"minimal\"\n\tconst isLegacyCompact = variant === \"legacyCompact\"\n\tconst isCompact = isLegacyCompact || isMinimal\n\tconst agentExperimentEnabled = useExperimentIsOn(\"agent\")\n\n\tconst isReadOnly = useReadOnly()\n\tconst enabled = externalEnabled && !isReadOnly\n\n\tconst isMobileToolbar = useMediaQuery(styles.mobileToolbarMediaQuery)\n\n\tconst isInsertSidebarLoaded = useEngineState<boolean>(\n\t\t() => {\n\t\t\tif (!isVekterEngine(engine)) return true\n\t\t\treturn engine.stores.insertSidebarStore.isLoaded\n\t\t},\n\t\t[],\n\t\tisVekterEngine(engine) ? [engine.stores.insertSidebarStore] : [],\n\t)\n\n\tconst linkButtonRef = useRef<HTMLButtonElement>(null)\n\tconst handleLinkShortcut = useStableCallback((event: KeyboardEvent) => {\n\t\tif (editLinkDisabled) return\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t\tshowLinkPopover()\n\t})\n\n\tconst serializedValue = useMemo(\n\t\t() => (value === undefined ? undefined : getHTMLFromRichTextTreeValue(value, schema)),\n\t\t[value, schema],\n\t)\n\tconst serializedDefaultValue = useMemo(\n\t\t() => getHTMLFromRichTextTreeValue(defaultValue, schema),\n\t\t[defaultValue, schema],\n\t)\n\n\tconst [isDirty, setIsDirty] = useState(false)\n\n\tconst stableOnUnsavedChange = useStableCallback((html: string) => {\n\t\tonUnsavedChange?.(html)\n\t\tsetIsDirty(true)\n\t})\n\n\tconst saveChanges = useStableCallback(() => {\n\t\tif (!enabled) return\n\n\t\t// TODO(RichTextJson): Stop comparing via serialized HTML once the editor save path can compare JSON-backed values directly.\n\t\tconst html = serializeRichText(editorView.state.doc, schema)\n\t\tconst sourceHTML = serializedValue ?? serializedDefaultValue\n\t\tif (html === sourceHTML) {\n\t\t\tsetIsDirty(false)\n\t\t\treturn\n\t\t}\n\n\t\tcreateMissingPresetsForHTML(engine, html)\n\t\tonChange(html)\n\t\tsetIsDirty(false)\n\t})\n\n\t// The <p> tag is the default tag and therefore always supported.\n\tsupportedTags = useMemo(() => {\n\t\tif (!supportedTags) return\n\t\tconst newSupportedTags = new Set(supportedTags)\n\t\tnewSupportedTags.add(\"p\")\n\t\treturn newSupportedTags\n\t}, [supportedTags])\n\n\tconst supportedTagsRef = useRef<Set<string>>()\n\tsupportedTagsRef.current = supportedTags\n\n\tconst supportsLinks = (supportedTags?.has(\"a\") ?? true) && schemaSupportsLinks(schema)\n\n\tconst supportsInlineCode = supportedTags?.has(\"code\") ?? true\n\n\tconst imagePluginPickerButton = useImagePluginPickerButton()\n\tconst getThemeOverrideMode = useStableCallback(() => themeOverrideMode)\n\tconst themeOverrideModeChangeListeners = useVoidChangeListeners(themeOverrideMode)\n\n\tconst [editorState, setEditorState] = useState(() =>\n\t\tcreateRichTextEditorState({\n\t\t\tengine,\n\t\t\tschema,\n\t\t\tinitialValue: value ?? defaultValue,\n\t\t\twithMediaPopout: true,\n\t\t\timagePluginPickerButton,\n\t\t\tgetThemeOverrideMode,\n\t\t\tthemeOverrideModeChangeListeners,\n\t\t\tsupportsSlashCommands: !isLegacyCompact,\n\t\t\tsupportedTags,\n\t\t\tproseMirror,\n\t\t\tsaveChanges,\n\t\t}),\n\t)\n\n\tconst editorView = useConstant(() =>\n\t\tcreateRichTextEditorView({\n\t\t\tengine,\n\t\t\tschema,\n\t\t\tenabled,\n\t\t\teditorState,\n\t\t\tsetEditorState,\n\t\t\tonChange: stableOnUnsavedChange,\n\t\t\tsaveChanges,\n\t\t\tproseMirror,\n\t\t\tsaveOnMetaArrowNavigation,\n\t\t\tonLinkShortcut: handleLinkShortcut,\n\t\t}),\n\t)\n\n\tconst {\n\t\tlistState,\n\t\tblockquoteNode,\n\t\timageNodeSelected,\n\t\tmoduleNodeSelected,\n\t\thasMixedSelection,\n\t\tselectedTags,\n\t\tisBold,\n\t\tisItalic,\n\t\tisCode,\n\t\tclickTrackingIdAIPrompt,\n\t\tcommonLink,\n\t\tcommonOpenInNewTab,\n\t\tcommonSmoothScroll,\n\t\tcommonClickTrackingId,\n\t\tcommonRelValues,\n\t\tcommonPreserveParams,\n\t} = useEditorSelectionState(engine, editorView.state)\n\n\tconst hasLink = isLink(commonLink)\n\n\tconst [linkPopoverActive, setLinkPopoverActive] = useState(false)\n\n\t// https://react.dev/learn/you-might-not-need-an-effect#adjusting-some-state-when-a-prop-changes\n\tconst [previousEnabled, setPreviousEnabled] = useState(enabled)\n\tif (previousEnabled !== enabled) {\n\t\tsetPreviousEnabled(enabled)\n\t\tif (editorView) {\n\t\t\teditorView.setProps({ editable: () => enabled })\n\t\t}\n\t}\n\n\t// https://react.dev/learn/you-might-not-need-an-effect#adjusting-some-state-when-a-prop-changes\n\tconst [previousValueHTML, setPreviousValueHTML] = useState(serializedValue)\n\tif (previousValueHTML !== serializedValue) {\n\t\tsetPreviousValueHTML(serializedValue)\n\t\tif (editorView) {\n\t\t\tconst nextValue = value ?? defaultValue\n\t\t\t// TODO(RichTextJson): Avoid rebuilding editor state from serialized HTML once controlled rich text updates can stay JSON-native end to end.\n\t\t\teditorView.updateState(\n\t\t\t\tcreateEditorStateWithPreservedSelection(\n\t\t\t\t\teditorView,\n\t\t\t\t\tnormalizeProseMirrorDoc(getProseMirrorDocFromRichTextTreeValue(nextValue, schema), schema),\n\t\t\t\t),\n\t\t\t)\n\t\t}\n\t}\n\n\t// Keep the uncontrolled editor (value === undefined) in sync with external defaultValue changes,\n\t// but only when the editor has no current changes.\n\t// (to support undo/redo without focus, and safe updates from other editors)\n\tconst [previousDefaultHTML, setPreviousDefaultHTML] = useState(serializedDefaultValue)\n\tif (value === undefined && previousDefaultHTML !== serializedDefaultValue) {\n\t\tsetPreviousDefaultHTML(serializedDefaultValue)\n\t\tif (editorView) {\n\t\t\tconst nextDefaultDoc = normalizeProseMirrorDoc(\n\t\t\t\tgetProseMirrorDocFromRichTextTreeValue(defaultValue, schema),\n\t\t\t\tschema,\n\t\t\t)\n\n\t\t\tif (!editorView.state.doc.eq(nextDefaultDoc) && !isDirty) {\n\t\t\t\teditorView.updateState(createEditorStateWithPreservedSelection(editorView, nextDefaultDoc))\n\t\t\t}\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\t// This is silencing an error in ModulePreviewView. The problem is\n\t\t\t// that we are unmounting another React root when this callback is\n\t\t\t// called in rendering.\n\t\t\tsetImmediate(() => editorView.destroy())\n\t\t}\n\t}, [])\n\n\tconst selectTag = (tag: RichTextTag | undefined) => {\n\t\tconst transaction = createChangeTagTransaction(schema, editorView, tag)\n\t\teditorView.dispatch(transaction)\n\t\tsaveChanges()\n\t}\n\n\tconst toggleBold = (event: React.MouseEvent) => {\n\t\tevent.preventDefault()\n\t\tconst transaction = createToggleMarkTransaction(editorView.state, schema.marks.bold)\n\t\teditorView.dispatch(transaction)\n\t\teditorView.focus()\n\t}\n\n\tconst toggleItalic = (event: React.MouseEvent) => {\n\t\tevent.preventDefault()\n\t\tconst transaction = createToggleMarkTransaction(editorView.state, schema.marks.italic)\n\t\teditorView.dispatch(transaction)\n\t\teditorView.focus()\n\t}\n\n\tconst toggleCode = (event: React.MouseEvent) => {\n\t\tevent.preventDefault()\n\t\tconst transaction = createToggleMarkTransaction(editorView.state, schema.marks.inlineCode)\n\t\teditorView.dispatch(transaction)\n\t\teditorView.focus()\n\t}\n\n\tconst toggleList = (event: React.MouseEvent, nodeType: NodeType) => {\n\t\tevent.preventDefault()\n\t\tif (listState === \"disabled\") {\n\t\t\tthrow new Error(\"Unreachable list state\")\n\t\t} else if (listState === \"enabled\") {\n\t\t\twrapInList(nodeType)(editorView.state, editorView.dispatch)\n\t\t} else if (listState === nodeType) {\n\t\t\tliftListItem(schema.nodes.listItem)(editorView.state, editorView.dispatch)\n\t\t} else {\n\t\t\t// change the listNode type\n\t\t\tconst state = editorView.state\n\t\t\tconst selection = state.selection\n\t\t\tconst transaction = state.tr\n\t\t\tconst grandparent = selection.$from.node(-2)\n\t\t\tif (grandparent.type !== listState) {\n\t\t\t\tthrow new Error(\"Invalid grandparent type\")\n\t\t\t}\n\t\t\tconst pos = selection.$from.before(-2)\n\t\t\ttransaction.setNodeMarkup(pos, nodeType, grandparent.attrs)\n\t\t\teditorView.dispatch(transaction)\n\t\t}\n\t\tsaveChanges()\n\t}\n\n\tconst handleToggleBlockquote = (event: React.MouseEvent) => {\n\t\tevent.preventDefault()\n\n\t\tassert(schemaSupportsBlockquotes(schema), \"handleToggleBlockquote: Schema does not support blockquotes\")\n\t\tconst transaction = createBlockquoteTransaction(blockquoteNode, schema, editorView)\n\t\tif (transaction) {\n\t\t\teditorView.dispatch(transaction)\n\t\t}\n\t}\n\n\tconst editorSelectionState = useEditorSelectionState(engine, editorView.state)\n\n\tconst hasModuleSelected = !!moduleNodeSelected\n\tconst isLoading = !editorView || !isInsertSidebarLoaded\n\tconst alwaysDisabled = isLoading || !enabled || hasMixedSelection\n\tconst isNonTextBlockSelected = Boolean(imageNodeSelected) || hasModuleSelected\n\tconst selectedModuleIsCodeBlock = hasModuleSelected && isCodeBlockIdentifier(moduleNodeSelected.attrs.identifier)\n\n\tconst formatTextDisabled = alwaysDisabled || isTextFormattingDisabled(editorSelectionState)\n\tconst blockQuoteDisabled =\n\t\talwaysDisabled || isFormattingOptionDisabled(FormattingOption.Blockquote, editorSelectionState)\n\tconst tableDisabled = alwaysDisabled || isFormattingOptionDisabled(FormattingOption.Table, editorSelectionState)\n\tconst inlineCodeDisabled =\n\t\talwaysDisabled ||\n\t\t!supportsInlineCode ||\n\t\tisFormattingOptionDisabled(FormattingOption.InlineCode, editorSelectionState)\n\tconst listsDisabled = alwaysDisabled || isFormattingOptionDisabled(FormattingOption.List, editorSelectionState)\n\tconst editLinkDisabled =\n\t\tisLoading || !supportsLinks || isFormattingOptionDisabled(FormattingOption.Link, editorSelectionState)\n\n\tconst imageUploadDisabled =\n\t\talwaysDisabled || isFormattingOptionDisabled(FormattingOption.ImageUpload, editorSelectionState)\n\tconst youtubeDisabled = alwaysDisabled || isFormattingOptionDisabled(FormattingOption.YouTube, editorSelectionState)\n\tconst codeBlockDisabled =\n\t\talwaysDisabled || isFormattingOptionDisabled(FormattingOption.CodeBlock, editorSelectionState)\n\tconst projectComponentDisabled =\n\t\talwaysDisabled || isFormattingOptionDisabled(FormattingOption.ProjectComponent, editorSelectionState)\n\n\tconst canFormatTextBlock = !isLoading && enabled && !isTagChangeDisabled(editorSelectionState)\n\n\tconst showLinkPopover = () => {\n\t\tsetLinkPopoverActive(true)\n\t}\n\n\tconst handleLinkButtonMouseDown = (event: React.MouseEvent<HTMLButtonElement>) => {\n\t\tevent.preventDefault()\n\t\tshowLinkPopover()\n\t}\n\n\tconst handleLinkButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n\t\t// Pointer interaction is handled on mousedown so the editor selection survives the popover open.\n\t\tif (event.detail !== 0) return\n\t\tshowLinkPopover()\n\t}\n\n\tconst updateLink = useStableCallback<\n\t\tParameters<PageLinkPopoverForRichTextChangeHandler>,\n\t\tReturnType<PageLinkPopoverForRichTextChangeHandler>\n\t>((link, attrs) => {\n\t\tassert(schemaSupportsLinks(schema), \"updateLink: Schema must support links\")\n\t\tconst transaction = createUpdateLinkTransaction(\n\t\t\tengine.tree,\n\t\t\tengine.componentLoader,\n\t\t\tschema,\n\t\t\teditorView,\n\t\t\tlink,\n\t\t\tattrs,\n\t\t)\n\n\t\teditorView.dispatch(transaction)\n\t\tsaveChanges()\n\t})\n\n\tconst removeLink = useStableCallback(() => {\n\t\tassert(schemaSupportsLinks(schema), \"removeLink: Schema must support links\")\n\t\tconst transaction = createRemoveLinkTransaction(schema, editorView)\n\n\t\teditorView.dispatch(transaction)\n\t\tsaveChanges()\n\t})\n\n\tconst dismissLinkPopover = useCallback(() => {\n\t\tsetLinkPopoverActive(false)\n\t\trequestAnimationFrame(() => {\n\t\t\teditorView.focus()\n\t\t})\n\t}, [])\n\n\tconst handleChangeCodeBlockLanguage = useCallback(\n\t\t(language: string) => {\n\t\t\tconst state = editorView.state\n\t\t\tconst selection = state.selection\n\t\t\tconst transaction = state.tr\n\n\t\t\tstate.doc.nodesBetween(selection.from, selection.to, (node, position) => {\n\t\t\t\tif (isModuleNode(node) && isCodeBlockIdentifier(node.attrs.identifier)) {\n\t\t\t\t\tassert(schemaSupportsEmbeds(schema), \"handleChangeCodeBlockLanguage: Schema must support embeds\")\n\t\t\t\t\ttransaction.setNodeMarkup(position, schema.nodes.module, {\n\t\t\t\t\t\t...node.attrs,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t...node.attrs.props,\n\t\t\t\t\t\t\tlanguage: {\n\t\t\t\t\t\t\t\ttype: ControlType.Enum,\n\t\t\t\t\t\t\t\tvalue: language,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\n\t\t\teditorView.dispatch(transaction)\n\t\t\tsaveChanges()\n\t\t},\n\t\t[schema],\n\t)\n\n\tconst {\n\t\tdisplayInPopover: insertButtonDisplayInPopover,\n\t\tpopoverAttachmentEdge: insertButtonPopoverAttachmentEdge,\n\t\tpopoverOffset: insertButtonPopoverOffset,\n\t\tshowArrow: insertButtonShowArrow,\n\t} = insertButtonPopoverOptions ?? {}\n\n\tconst insertButtonDisabled =\n\t\timageUploadDisabled && youtubeDisabled && codeBlockDisabled && tableDisabled && projectComponentDisabled\n\tconst useAgentToolbarDesign = isMinimal && agentExperimentEnabled\n\tconst toolbarButtonCompact = isCompact && !useAgentToolbarDesign\n\tconst hideToolbarButtonActiveBackground = useAgentToolbarDesign\n\n\treturn (\n\t\t<Stack gap={0} className={cx(styles.container, className)}>\n\t\t\t<ResetWarningThemeOverride>\n\t\t\t\t<div className={cx(styles.textStyleHeaderStickyWrapper, isLegacy && styles.textStyleHeaderStickyWrapperLegacy)}>\n\t\t\t\t\t<ScrollWithGradient orientation=\"horizontal\" className={cx(styles.scrollableHeader)} direction=\"both\">\n\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\tgap={dimensions.css.inputSpacing}\n\t\t\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\t\tclassName={cx(styles.textStyleHeader, isMinimal && styles.textStyleHeaderMinimal, headerClassName)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{(schemaSupportsMedia(schema) || schemaSupportsEmbeds(schema)) && (\n\t\t\t\t\t\t\t\t<PopoutButton\n\t\t\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\t\t\tstyles.insertButton,\n\t\t\t\t\t\t\t\t\t\tisMinimal && styles.insertButtonMinimal,\n\t\t\t\t\t\t\t\t\t\tisLegacy && styles.insertButtonLegacy,\n\t\t\t\t\t\t\t\t\t\tinsertButtonDisabled && styles.insertButtonDisabled,\n\t\t\t\t\t\t\t\t\t\tisLegacy && insertButtonDisabled && styles.insertButtonDisabledLegacy,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tenabled={!insertButtonDisabled}\n\t\t\t\t\t\t\t\t\tnavigationTitle={Dictionary.Insert}\n\t\t\t\t\t\t\t\t\tpopout={<InsertMenuPopout editorView={editorView} saveChanges={saveChanges} schema={schema} />}\n\t\t\t\t\t\t\t\t\ttitle={isLegacy ? undefined : Dictionary.Insert}\n\t\t\t\t\t\t\t\t\tpopoverAttachmentEdge={insertButtonPopoverAttachmentEdge}\n\t\t\t\t\t\t\t\t\tpopoverOffset={insertButtonPopoverOffset}\n\t\t\t\t\t\t\t\t\tdisplayInPopover={insertButtonDisplayInPopover}\n\t\t\t\t\t\t\t\t\tshowArrow={insertButtonShowArrow}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isLegacy ? (\n\t\t\t\t\t\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t\t\t\t\t\t\t<IconPlusWithBackground />\n\t\t\t\t\t\t\t\t\t\t\t{Dictionary.Insert}\n\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t) : useAgentToolbarDesign ? (\n\t\t\t\t\t\t\t\t\t\t<IconAgentPlusCompact />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<IconPlusCompact />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</PopoutButton>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{leftToolbarSlot}\n\t\t\t\t\t\t\t{selectedModuleIsCodeBlock ? (\n\t\t\t\t\t\t\t\t<CodeBlockLanguagePicker\n\t\t\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\t\t\tnode={moduleNodeSelected}\n\t\t\t\t\t\t\t\t\tenabled={!alwaysDisabled}\n\t\t\t\t\t\t\t\t\tonChange={handleChangeCodeBlockLanguage}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<RichTextTagPicker\n\t\t\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\t\t\tselectedTags={selectedTags}\n\t\t\t\t\t\t\t\t\tcanFormatTextBlock={canFormatTextBlock}\n\t\t\t\t\t\t\t\t\tcompact={isCompact}\n\t\t\t\t\t\t\t\t\tcompactTagSelector={compactTagSelector}\n\t\t\t\t\t\t\t\t\tisNonTextBlockSelected={isNonTextBlockSelected}\n\t\t\t\t\t\t\t\t\tisMobileToolbar={isMobileToolbar}\n\t\t\t\t\t\t\t\t\tsupportedTags={supportedTags}\n\t\t\t\t\t\t\t\t\tselectTag={selectTag}\n\t\t\t\t\t\t\t\t\tagentExperimentEnabled={agentExperimentEnabled}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<ToolbarItemGroup\n\t\t\t\t\t\t\t\tcompact={isCompact}\n\t\t\t\t\t\t\t\tclassName={isLegacyCompact ? styles.linkToolbarButtonGroupCompact : undefined}\n\t\t\t\t\t\t\t\tgap={useAgentToolbarDesign ? 0 : undefined}\n\t\t\t\t\t\t\t\tpadding={isLegacyCompact || useAgentToolbarDesign ? 0 : undefined}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\t\t\tcompact={toolbarButtonCompact}\n\t\t\t\t\t\t\t\t\tfocusOutline={isMinimal}\n\t\t\t\t\t\t\t\t\thideActiveBackground={hideToolbarButtonActiveBackground}\n\t\t\t\t\t\t\t\t\tref={linkButtonRef}\n\t\t\t\t\t\t\t\t\tisActive={hasLink}\n\t\t\t\t\t\t\t\t\ttitle={hasLink ? \"Edit Link\" : \"Add Link\"}\n\t\t\t\t\t\t\t\t\tdisabled={editLinkDisabled}\n\t\t\t\t\t\t\t\t\tonMouseDown={handleLinkButtonMouseDown}\n\t\t\t\t\t\t\t\t\tonClick={handleLinkButtonClick}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ToolbarIcon type=\"link\" isMinimal={isMinimal} agentExperimentEnabled={agentExperimentEnabled} />\n\t\t\t\t\t\t\t\t</RichTextToolbarButton>\n\t\t\t\t\t\t\t\t{linkPopoverActive && linkButtonRef.current && (\n\t\t\t\t\t\t\t\t\t<PageLinkPopoverForRichText\n\t\t\t\t\t\t\t\t\t\tlink={commonLink}\n\t\t\t\t\t\t\t\t\t\topenInNewTab={commonOpenInNewTab}\n\t\t\t\t\t\t\t\t\t\tsmoothScroll={commonSmoothScroll}\n\t\t\t\t\t\t\t\t\t\tclickTrackingId={commonClickTrackingId}\n\t\t\t\t\t\t\t\t\t\trelValues={commonRelValues}\n\t\t\t\t\t\t\t\t\t\tpreserveParams={commonPreserveParams}\n\t\t\t\t\t\t\t\t\t\tclickTrackingIdAIPrompt={clickTrackingIdAIPrompt || NotFound}\n\t\t\t\t\t\t\t\t\t\tscopeType={scopeType}\n\t\t\t\t\t\t\t\t\t\tonChange={updateLink}\n\t\t\t\t\t\t\t\t\t\tonRemove={removeLink}\n\t\t\t\t\t\t\t\t\t\thasLinkSelected={hasLink}\n\t\t\t\t\t\t\t\t\t\tdismiss={dismissLinkPopover}\n\t\t\t\t\t\t\t\t\t\tanchor={linkButtonRef.current}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!isLegacyCompact && !hideNonInformativeToolbarItems && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{useAgentToolbarDesign && <ToolbarButtonDivider />}\n\t\t\t\t\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\t\t\t\t\tcompact={toolbarButtonCompact}\n\t\t\t\t\t\t\t\t\t\t\tfocusOutline={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\thideActiveBackground={hideToolbarButtonActiveBackground}\n\t\t\t\t\t\t\t\t\t\t\tisActive={isBold}\n\t\t\t\t\t\t\t\t\t\t\ttitle=\"Bold\"\n\t\t\t\t\t\t\t\t\t\t\tdisabled={formatTextDisabled}\n\t\t\t\t\t\t\t\t\t\t\tonMouseDown={toggleBold}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<ToolbarIcon type=\"bold\" isMinimal={isMinimal} agentExperimentEnabled={agentExperimentEnabled} />\n\t\t\t\t\t\t\t\t\t\t</RichTextToolbarButton>\n\t\t\t\t\t\t\t\t\t\t{useAgentToolbarDesign && <ToolbarButtonDivider />}\n\t\t\t\t\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\t\t\t\t\tcompact={toolbarButtonCompact}\n\t\t\t\t\t\t\t\t\t\t\tfocusOutline={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\thideActiveBackground={hideToolbarButtonActiveBackground}\n\t\t\t\t\t\t\t\t\t\t\tisActive={isItalic}\n\t\t\t\t\t\t\t\t\t\t\ttitle=\"Italic\"\n\t\t\t\t\t\t\t\t\t\t\tdisabled={formatTextDisabled}\n\t\t\t\t\t\t\t\t\t\t\tonMouseDown={toggleItalic}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<ToolbarIcon\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"italic\"\n\t\t\t\t\t\t\t\t\t\t\t\tisMinimal={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\tagentExperimentEnabled={agentExperimentEnabled}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</RichTextToolbarButton>\n\t\t\t\t\t\t\t\t\t\t{useAgentToolbarDesign && <ToolbarButtonDivider />}\n\t\t\t\t\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\t\t\t\t\tcompact={toolbarButtonCompact}\n\t\t\t\t\t\t\t\t\t\t\tfocusOutline={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\thideActiveBackground={hideToolbarButtonActiveBackground}\n\t\t\t\t\t\t\t\t\t\t\tisActive={!!blockquoteNode}\n\t\t\t\t\t\t\t\t\t\t\ttitle={Dictionary.Blockquote}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={blockQuoteDisabled}\n\t\t\t\t\t\t\t\t\t\t\tonMouseDown={handleToggleBlockquote}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<ToolbarIcon\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"blockquote\"\n\t\t\t\t\t\t\t\t\t\t\t\tisMinimal={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\tagentExperimentEnabled={agentExperimentEnabled}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</RichTextToolbarButton>\n\t\t\t\t\t\t\t\t\t\t{useAgentToolbarDesign ? (\n\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t<ToolbarButtonDivider />\n\t\t\t\t\t\t\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\t\t\t\t\t\t\tcompact={toolbarButtonCompact}\n\t\t\t\t\t\t\t\t\t\t\t\t\tfocusOutline={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\t\thideActiveBackground={hideToolbarButtonActiveBackground}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisActive={listState === schema.nodes.bulletedList}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Bulleted List\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={listsDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseDown={event => toggleList(event, schema.nodes.bulletedList)}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ToolbarIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"bulletedList\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisMinimal={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tagentExperimentEnabled={agentExperimentEnabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</RichTextToolbarButton>\n\t\t\t\t\t\t\t\t\t\t\t\t<ToolbarButtonDivider />\n\t\t\t\t\t\t\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\t\t\t\t\t\t\tcompact={toolbarButtonCompact}\n\t\t\t\t\t\t\t\t\t\t\t\t\tfocusOutline={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\t\thideActiveBackground={hideToolbarButtonActiveBackground}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisActive={listState === schema.nodes.numberedList}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Numbered List\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={listsDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseDown={event => toggleList(event, schema.nodes.numberedList)}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ToolbarIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"numberedList\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisMinimal={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tagentExperimentEnabled={agentExperimentEnabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</RichTextToolbarButton>\n\t\t\t\t\t\t\t\t\t\t\t\t<ToolbarButtonDivider />\n\t\t\t\t\t\t\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\t\t\t\t\t\t\tcompact={toolbarButtonCompact}\n\t\t\t\t\t\t\t\t\t\t\t\t\tfocusOutline={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\t\thideActiveBackground={hideToolbarButtonActiveBackground}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisActive={isCode}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={Dictionary.Code}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={inlineCodeDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseDown={toggleCode}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ToolbarIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"inlineCode\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisMinimal={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tagentExperimentEnabled={agentExperimentEnabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</RichTextToolbarButton>\n\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\t\t\t\t\t\t\tcompact={isCompact}\n\t\t\t\t\t\t\t\t\t\t\t\t\tfocusOutline={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisActive={isCode}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={Dictionary.Code}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={inlineCodeDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseDown={toggleCode}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ToolbarIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"inlineCode\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisMinimal={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tagentExperimentEnabled={agentExperimentEnabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</RichTextToolbarButton>\n\t\t\t\t\t\t\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\t\t\t\t\t\t\tcompact={isCompact}\n\t\t\t\t\t\t\t\t\t\t\t\t\tfocusOutline={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisActive={listState === schema.nodes.bulletedList}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Bulleted List\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={listsDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseDown={event => toggleList(event, schema.nodes.bulletedList)}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ToolbarIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"bulletedList\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisMinimal={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tagentExperimentEnabled={agentExperimentEnabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</RichTextToolbarButton>\n\t\t\t\t\t\t\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\t\t\t\t\t\t\tcompact={isCompact}\n\t\t\t\t\t\t\t\t\t\t\t\t\tfocusOutline={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisActive={listState === schema.nodes.numberedList}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Numbered List\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={listsDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseDown={event => toggleList(event, schema.nodes.numberedList)}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ToolbarIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"numberedList\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisMinimal={isMinimal}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tagentExperimentEnabled={agentExperimentEnabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</RichTextToolbarButton>\n\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</ToolbarItemGroup>\n\t\t\t\t\t\t\t{rightToolbarSlot}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</ScrollWithGradient>\n\t\t\t\t</div>\n\t\t\t</ResetWarningThemeOverride>\n\t\t\t{isLoading && (\n\t\t\t\t<Stack\n\t\t\t\t\tpadding={`calc(${dimensions.css.panelPadding} * 2)`}\n\t\t\t\t\tjustifyContent=\"center\"\n\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\tclassName={styles.fadeIn}\n\t\t\t\t>\n\t\t\t\t\t<Spinner inline />\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t\t<RichTextEditorContent\n\t\t\t\tenabled={enabled}\n\t\t\t\tclassName={cx(\n\t\t\t\t\tstyles.textEditorWrapper,\n\t\t\t\t\tisMinimal && styles.textEditorWrapperMinimalTextStyles,\n\t\t\t\t\tisMinimal && styles.textEditorWrapperMinimal,\n\t\t\t\t\tisCompact && styles.textEditorWrapperCompact,\n\t\t\t\t\tlimitMaxHeight && styles.textEditorWrapperWithMaxHeight,\n\t\t\t\t\t!enabled && styles.textEditorWrapperDisabled,\n\t\t\t\t\tisLoading && styles.editorWrapperHidden,\n\t\t\t\t\ttextEditorWrapperClassName,\n\t\t\t\t)}\n\t\t\t\tdir={layoutDirection}\n\t\t\t\tgetCanFocus={getCanFocus}\n\t\t\t\tsaveChanges={saveChanges}\n\t\t\t\tschema={schema}\n\t\t\t\teditorView={editorView}\n\t\t\t\tpopoverAttachmentEdge={popoverAttachmentEdge}\n\t\t\t\tfallbackToModalAppearance={fallbackToModalAppearance}\n\t\t\t\tgetModuleNodeViewConstructor={getModuleNodeViewConstructor}\n\t\t\t\tgeneratedComponentContext={generatedComponentContext}\n\t\t\t/>\n\t\t</Stack>\n\t)\n}\n\ninterface RichTextTagPickerProps {\n\tvariant: RichTextEditorWithToolbarVariant\n\tselectedTags: Set<RichTextTag>\n\tcanFormatTextBlock: boolean\n\tcompact: boolean\n\tcompactTagSelector: boolean\n\tisNonTextBlockSelected: boolean\n\tisMobileToolbar: boolean\n\tsupportedTags: Set<string> | undefined\n\tselectTag: (tag: RichTextTag) => void\n\tagentExperimentEnabled: boolean\n}\n\nfunction getIconForRichTextTag(tags: Set<RichTextTag>) {\n\tif (tags.has(\"p\")) return <IconTextParagraph />\n\tif (tags.has(\"h1\")) return <IconTextHeading1 />\n\tif (tags.has(\"h2\")) return <IconTextHeading2 />\n\tif (tags.has(\"h3\")) return <IconTextHeading3 />\n\tif (tags.has(\"h4\")) return <IconTextHeading4 />\n\tif (tags.has(\"h5\")) return <IconTextHeading5 />\n\tif (tags.has(\"h6\")) return <IconTextHeading6 />\n\treturn <IconTextParagraph />\n}\n\nfunction RichTextTagPicker({\n\tvariant,\n\tselectedTags,\n\tcanFormatTextBlock,\n\tcompactTagSelector,\n\tisNonTextBlockSelected,\n\tisMobileToolbar,\n\tsupportedTags,\n\tselectTag,\n\tagentExperimentEnabled,\n}: RichTextTagPickerProps) {\n\tconst isCompact = variant === \"legacyCompact\" || variant === \"minimal\"\n\tconst isMinimal = variant === \"minimal\"\n\tconst iconInsteadOfText = isMinimal && !agentExperimentEnabled\n\n\tconst popupButton = (\n\t\t<PopupButton\n\t\t\tlarge={!isCompact}\n\t\t\tenabled={canFormatTextBlock}\n\t\t\tnudgeDropdownIconHorizontally={isMinimal && agentExperimentEnabled ? -2 : undefined}\n\t\t\twrapperClassName={cx(\n\t\t\t\tstyles.toolbarButtonGroup,\n\t\t\t\tcompactTagSelector && !isCompact && styles.toolbarButtonGroupCompactTagSelector,\n\t\t\t\tisCompact && styles.toolbarButtonGroupCompact,\n\t\t\t\tisMinimal && agentExperimentEnabled && styles.toolbarButtonGroupMinimalTagSelector,\n\t\t\t\tvariant === \"legacyCompact\" && styles.popupButtonWrapperStretch,\n\t\t\t)}\n\t\t\tclassName={cx(\n\t\t\t\tstyles.popupButton,\n\t\t\t\tisCompact && styles.popupButtonCompact,\n\t\t\t\tisMinimal && styles.toolbarButtonFocusOutline,\n\t\t\t\tisMinimal && styles.toolbarButtonBorderless,\n\t\t\t\tisMinimal && agentExperimentEnabled && styles.popupButtonMinimalTagSelector,\n\t\t\t\tcompactTagSelector && !isCompact && styles.popupButtonCompactTagSelector,\n\t\t\t\ticonInsteadOfText && styles.popupButtonWithIconInsteadOfText,\n\t\t\t)}\n\t\t>\n\t\t\t{isNonTextBlockSelected ? (\n\t\t\t\t<PopupButtonItem selected title={getRichTextTagName(\"p\", isMobileToolbar || compactTagSelector)} />\n\t\t\t) : (\n\t\t\t\trichTextTags.map(tag => (\n\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\tkey={tag}\n\t\t\t\t\t\tidentifier={tag}\n\t\t\t\t\t\ttitle={getRichTextTagName(tag, isMobileToolbar || compactTagSelector)}\n\t\t\t\t\t\tonSelect={selectTag}\n\t\t\t\t\t\tselected={selectedTags.has(tag)}\n\t\t\t\t\t\tenabled={supportedTags?.has(tag) ?? true}\n\t\t\t\t\t/>\n\t\t\t\t))\n\t\t\t)}\n\t\t</PopupButton>\n\t)\n\n\tif (!iconInsteadOfText) return popupButton\n\n\treturn (\n\t\t<PopupButtonDisplayTitle\n\t\t\tdisplayTitle={getIconForRichTextTag(selectedTags)}\n\t\t\tenabled={canFormatTextBlock}\n\t\t\ttitleContainerClassName={cx(\n\t\t\t\tstyles.popupButtonWrapperIconWrapper,\n\t\t\t\t!canFormatTextBlock && styles.popupButtonWrapperIconDisabled,\n\t\t\t)}\n\t\t>\n\t\t\t{popupButton}\n\t\t</PopupButtonDisplayTitle>\n\t)\n}\n\ninterface CodeBlockLanguagePickerProps {\n\tvariant: RichTextEditorWithToolbarVariant\n\tnode: ModuleNode\n\tenabled: boolean\n\tonChange(language: string): void\n}\n\nfunction CodeBlockLanguagePicker({ variant, node, enabled, onChange }: CodeBlockLanguagePickerProps) {\n\tconst { identifier, props: rawControlProps } = node.attrs\n\n\tconst isMinimal = variant === \"minimal\"\n\tconst isCompact = variant === \"legacyCompact\" || isMinimal\n\tconst component = useReactComponentDefinition(identifier)\n\tconst languages = getCodeBlockLanguages(component)\n\n\tconst moduleProps = getModuleProps(component, rawControlProps)\n\n\treturn (\n\t\t<PopupButton\n\t\t\tlarge={variant === \"legacy\"}\n\t\t\tenabled={enabled}\n\t\t\twrapperClassName={cx(\n\t\t\t\tstyles.toolbarButtonGroup,\n\t\t\t\tisCompact && styles.toolbarButtonGroupCompact,\n\t\t\t\tvariant === \"legacyCompact\" && styles.popupButtonWrapperStretch,\n\t\t\t)}\n\t\t\tclassName={cx(\n\t\t\t\tstyles.popupButton,\n\t\t\t\tisCompact && styles.popupButtonCompact,\n\t\t\t\tisMinimal && styles.toolbarButtonFocusOutline,\n\t\t\t\tisMinimal && styles.toolbarButtonBorderless,\n\t\t\t)}\n\t\t>\n\t\t\t{languages.map(language => (\n\t\t\t\t<PopupButtonItem\n\t\t\t\t\tkey={language}\n\t\t\t\t\tidentifier={language}\n\t\t\t\t\ttitle={language}\n\t\t\t\t\tonSelect={onChange}\n\t\t\t\t\tselected={moduleProps.language?.value === language}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</PopupButton>\n\t)\n}\n\nfunction getCodeBlockLanguages(component: ReactComponentDefinition | null) {\n\tconst controlProp = component?.properties.language\n\tif (controlProp?.type !== ControlType.Enum) return []\n\n\treturn controlProp.options.filter(isString)\n}\n\nfunction createEditorStateWithPreservedSelection(editorView: EditorView, doc: EditorState[\"doc\"]) {\n\treturn EditorState.create({\n\t\tdoc,\n\t\tschema: editorView.state.schema,\n\t\tplugins: editorView.state.plugins,\n\t\tselection: getSelectionForNextDoc(editorView.state.selection, doc),\n\t})\n}\n\nfunction getSelectionForNextDoc(selection: Selection, doc: EditorState[\"doc\"]) {\n\ttry {\n\t\treturn Selection.fromJSON(doc, selection.toJSON())\n\t} catch {\n\t\tconst from = Math.min(selection.from, doc.content.size)\n\t\tconst to = Math.min(selection.to, doc.content.size)\n\n\t\tif (from !== to) {\n\t\t\ttry {\n\t\t\t\treturn TextSelection.create(doc, from, to)\n\t\t\t} catch {\n\t\t\t\t// Fall through to a nearby valid cursor position.\n\t\t\t}\n\t\t}\n\n\t\treturn Selection.near(doc.resolve(from))\n\t}\n}\n", "// These are filled with ranges (rangeFrom[i] up to but not including\n// rangeTo[i]) of code points that count as extending characters.\nlet rangeFrom = [], rangeTo = []\n\n;(() => {\n  // Compressed representation of the Grapheme_Cluster_Break=Extend\n  // information from\n  // http://www.unicode.org/Public/16.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.\n  // Each pair of elements represents a range, as an offet from the\n  // previous range and a length. Numbers are in base-36, with the empty\n  // string being a shorthand for 1.\n  let numbers = \"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map(s => s ? parseInt(s, 36) : 1)\n  for (let i = 0, n = 0; i < numbers.length; i++)\n    (i % 2 ? rangeTo : rangeFrom).push(n = n + numbers[i])\n})()\n\nexport function isExtendingChar(code) {\n  if (code < 768) return false\n  for (let from = 0, to = rangeFrom.length;;) {\n    let mid = (from + to) >> 1\n    if (code < rangeFrom[mid]) to = mid\n    else if (code >= rangeTo[mid]) from = mid + 1\n    else return true\n    if (from == to) return false\n  }\n}\n\nfunction isRegionalIndicator(code) {\n  return code >= 0x1F1E6 && code <= 0x1F1FF\n}\n\nfunction check(code) {\n  for (let i = 0; i < rangeFrom.length; i++) {\n    if (rangeTo[i] > code) return rangeFrom[i] <= code\n  }\n  return false\n}\n\nconst ZWJ = 0x200d\n\nexport function findClusterBreak(str, pos, forward = true, includeExtending = true) {\n  return (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending)\n}\n\nfunction nextClusterBreak(str, pos, includeExtending) {\n  if (pos == str.length) return pos\n  // If pos is in the middle of a surrogate pair, move to its start\n  if (pos && surrogateLow(str.charCodeAt(pos)) && surrogateHigh(str.charCodeAt(pos - 1))) pos--\n  let prev = codePointAt(str, pos)\n  pos += codePointSize(prev)\n  while (pos < str.length) {\n    let next = codePointAt(str, pos)\n    if (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {\n      pos += codePointSize(next)\n      prev = next\n    } else if (isRegionalIndicator(next)) {\n      let countBefore = 0, i = pos - 2\n      while (i >= 0 && isRegionalIndicator(codePointAt(str, i))) { countBefore++; i -= 2 }\n      if (countBefore % 2 == 0) break\n      else pos += 2\n    } else {\n      break\n    }\n  }\n  return pos\n}\n\nfunction prevClusterBreak(str, pos, includeExtending) {\n  while (pos > 0) {\n    let found = nextClusterBreak(str, pos - 2, includeExtending)\n    if (found < pos) return found\n    pos--\n  }\n  return 0\n}\n\nfunction codePointAt(str, pos) {\n  let code0 = str.charCodeAt(pos)\n  if (!surrogateHigh(code0) || pos + 1 == str.length) return code0\n  let code1 = str.charCodeAt(pos + 1)\n  if (!surrogateLow(code1)) return code0\n  return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000\n}\n\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000 }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00 }\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2 }\n", "import { findClusterBreak as findClusterBreak$1 } from '@marijn/find-cluster-break';\n\n/**\nThe data structure for documents. @nonabstract\n*/\nclass Text {\n    /**\n    Get the line description around the given position.\n    */\n    lineAt(pos) {\n        if (pos < 0 || pos > this.length)\n            throw new RangeError(`Invalid position ${pos} in document of length ${this.length}`);\n        return this.lineInner(pos, false, 1, 0);\n    }\n    /**\n    Get the description for the given (1-based) line number.\n    */\n    line(n) {\n        if (n < 1 || n > this.lines)\n            throw new RangeError(`Invalid line number ${n} in ${this.lines}-line document`);\n        return this.lineInner(n, true, 1, 0);\n    }\n    /**\n    Replace a range of the text with the given content.\n    */\n    replace(from, to, text) {\n        [from, to] = clip(this, from, to);\n        let parts = [];\n        this.decompose(0, from, parts, 2 /* Open.To */);\n        if (text.length)\n            text.decompose(0, text.length, parts, 1 /* Open.From */ | 2 /* Open.To */);\n        this.decompose(to, this.length, parts, 1 /* Open.From */);\n        return TextNode.from(parts, this.length - (to - from) + text.length);\n    }\n    /**\n    Append another document to this one.\n    */\n    append(other) {\n        return this.replace(this.length, this.length, other);\n    }\n    /**\n    Retrieve the text between the given points.\n    */\n    slice(from, to = this.length) {\n        [from, to] = clip(this, from, to);\n        let parts = [];\n        this.decompose(from, to, parts, 0);\n        return TextNode.from(parts, to - from);\n    }\n    /**\n    Test whether this text is equal to another instance.\n    */\n    eq(other) {\n        if (other == this)\n            return true;\n        if (other.length != this.length || other.lines != this.lines)\n            return false;\n        let start = this.scanIdentical(other, 1), end = this.length - this.scanIdentical(other, -1);\n        let a = new RawTextCursor(this), b = new RawTextCursor(other);\n        for (let skip = start, pos = start;;) {\n            a.next(skip);\n            b.next(skip);\n            skip = 0;\n            if (a.lineBreak != b.lineBreak || a.done != b.done || a.value != b.value)\n                return false;\n            pos += a.value.length;\n            if (a.done || pos >= end)\n                return true;\n        }\n    }\n    /**\n    Iterate over the text. When `dir` is `-1`, iteration happens\n    from end to start. This will return lines and the breaks between\n    them as separate strings.\n    */\n    iter(dir = 1) { return new RawTextCursor(this, dir); }\n    /**\n    Iterate over a range of the text. When `from` > `to`, the\n    iterator will run in reverse.\n    */\n    iterRange(from, to = this.length) { return new PartialTextCursor(this, from, to); }\n    /**\n    Return a cursor that iterates over the given range of lines,\n    _without_ returning the line breaks between, and yielding empty\n    strings for empty lines.\n    \n    When `from` and `to` are given, they should be 1-based line numbers.\n    */\n    iterLines(from, to) {\n        let inner;\n        if (from == null) {\n            inner = this.iter();\n        }\n        else {\n            if (to == null)\n                to = this.lines + 1;\n            let start = this.line(from).from;\n            inner = this.iterRange(start, Math.max(start, to == this.lines + 1 ? this.length : to <= 1 ? 0 : this.line(to - 1).to));\n        }\n        return new LineCursor(inner);\n    }\n    /**\n    Return the document as a string, using newline characters to\n    separate lines.\n    */\n    toString() { return this.sliceString(0); }\n    /**\n    Convert the document to an array of lines (which can be\n    deserialized again via [`Text.of`](https://codemirror.net/6/docs/ref/#state.Text^of)).\n    */\n    toJSON() {\n        let lines = [];\n        this.flatten(lines);\n        return lines;\n    }\n    /**\n    @internal\n    */\n    constructor() { }\n    /**\n    Create a `Text` instance for the given array of lines.\n    */\n    static of(text) {\n        if (text.length == 0)\n            throw new RangeError(\"A document must have at least one line\");\n        if (text.length == 1 && !text[0])\n            return Text.empty;\n        return text.length <= 32 /* Tree.Branch */ ? new TextLeaf(text) : TextNode.from(TextLeaf.split(text, []));\n    }\n}\n// Leaves store an array of line strings. There are always line breaks\n// between these strings. Leaves are limited in size and have to be\n// contained in TextNode instances for bigger documents.\nclass TextLeaf extends Text {\n    constructor(text, length = textLength(text)) {\n        super();\n        this.text = text;\n        this.length = length;\n    }\n    get lines() { return this.text.length; }\n    get children() { return null; }\n    lineInner(target, isLine, line, offset) {\n        for (let i = 0;; i++) {\n            let string = this.text[i], end = offset + string.length;\n            if ((isLine ? line : end) >= target)\n                return new Line(offset, end, line, string);\n            offset = end + 1;\n            line++;\n        }\n    }\n    decompose(from, to, target, open) {\n        let text = from <= 0 && to >= this.length ? this\n            : new TextLeaf(sliceText(this.text, from, to), Math.min(to, this.length) - Math.max(0, from));\n        if (open & 1 /* Open.From */) {\n            let prev = target.pop();\n            let joined = appendText(text.text, prev.text.slice(), 0, text.length);\n            if (joined.length <= 32 /* Tree.Branch */) {\n                target.push(new TextLeaf(joined, prev.length + text.length));\n            }\n            else {\n                let mid = joined.length >> 1;\n                target.push(new TextLeaf(joined.slice(0, mid)), new TextLeaf(joined.slice(mid)));\n            }\n        }\n        else {\n            target.push(text);\n        }\n    }\n    replace(from, to, text) {\n        if (!(text instanceof TextLeaf))\n            return super.replace(from, to, text);\n        [from, to] = clip(this, from, to);\n        let lines = appendText(this.text, appendText(text.text, sliceText(this.text, 0, from)), to);\n        let newLen = this.length + text.length - (to - from);\n        if (lines.length <= 32 /* Tree.Branch */)\n            return new TextLeaf(lines, newLen);\n        return TextNode.from(TextLeaf.split(lines, []), newLen);\n    }\n    sliceString(from, to = this.length, lineSep = \"\\n\") {\n        [from, to] = clip(this, from, to);\n        let result = \"\";\n        for (let pos = 0, i = 0; pos <= to && i < this.text.length; i++) {\n            let line = this.text[i], end = pos + line.length;\n            if (pos > from && i)\n                result += lineSep;\n            if (from < end && to > pos)\n                result += line.slice(Math.max(0, from - pos), to - pos);\n            pos = end + 1;\n        }\n        return result;\n    }\n    flatten(target) {\n        for (let line of this.text)\n            target.push(line);\n    }\n    scanIdentical() { return 0; }\n    static split(text, target) {\n        let part = [], len = -1;\n        for (let line of text) {\n            part.push(line);\n            len += line.length + 1;\n            if (part.length == 32 /* Tree.Branch */) {\n                target.push(new TextLeaf(part, len));\n                part = [];\n                len = -1;\n            }\n        }\n        if (len > -1)\n            target.push(new TextLeaf(part, len));\n        return target;\n    }\n}\n// Nodes provide the tree structure of the `Text` type. They store a\n// number of other nodes or leaves, taking care to balance themselves\n// on changes. There are implied line breaks _between_ the children of\n// a node (but not before the first or after the last child).\nclass TextNode extends Text {\n    constructor(children, length) {\n        super();\n        this.children = children;\n        this.length = length;\n        this.lines = 0;\n        for (let child of children)\n            this.lines += child.lines;\n    }\n    lineInner(target, isLine, line, offset) {\n        for (let i = 0;; i++) {\n            let child = this.children[i], end = offset + child.length, endLine = line + child.lines - 1;\n            if ((isLine ? endLine : end) >= target)\n                return child.lineInner(target, isLine, line, offset);\n            offset = end + 1;\n            line = endLine + 1;\n        }\n    }\n    decompose(from, to, target, open) {\n        for (let i = 0, pos = 0; pos <= to && i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (from <= end && to >= pos) {\n                let childOpen = open & ((pos <= from ? 1 /* Open.From */ : 0) | (end >= to ? 2 /* Open.To */ : 0));\n                if (pos >= from && end <= to && !childOpen)\n                    target.push(child);\n                else\n                    child.decompose(from - pos, to - pos, target, childOpen);\n            }\n            pos = end + 1;\n        }\n    }\n    replace(from, to, text) {\n        [from, to] = clip(this, from, to);\n        if (text.lines < this.lines)\n            for (let i = 0, pos = 0; i < this.children.length; i++) {\n                let child = this.children[i], end = pos + child.length;\n                // Fast path: if the change only affects one child and the\n                // child's size remains in the acceptable range, only update\n                // that child\n                if (from >= pos && to <= end) {\n                    let updated = child.replace(from - pos, to - pos, text);\n                    let totalLines = this.lines - child.lines + updated.lines;\n                    if (updated.lines < (totalLines >> (5 /* Tree.BranchShift */ - 1)) &&\n                        updated.lines > (totalLines >> (5 /* Tree.BranchShift */ + 1))) {\n                        let copy = this.children.slice();\n                        copy[i] = updated;\n                        return new TextNode(copy, this.length - (to - from) + text.length);\n                    }\n                    return super.replace(pos, end, updated);\n                }\n                pos = end + 1;\n            }\n        return super.replace(from, to, text);\n    }\n    sliceString(from, to = this.length, lineSep = \"\\n\") {\n        [from, to] = clip(this, from, to);\n        let result = \"\";\n        for (let i = 0, pos = 0; i < this.children.length && pos <= to; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (pos > from && i)\n                result += lineSep;\n            if (from < end && to > pos)\n                result += child.sliceString(from - pos, to - pos, lineSep);\n            pos = end + 1;\n        }\n        return result;\n    }\n    flatten(target) {\n        for (let child of this.children)\n            child.flatten(target);\n    }\n    scanIdentical(other, dir) {\n        if (!(other instanceof TextNode))\n            return 0;\n        let length = 0;\n        let [iA, iB, eA, eB] = dir > 0 ? [0, 0, this.children.length, other.children.length]\n            : [this.children.length - 1, other.children.length - 1, -1, -1];\n        for (;; iA += dir, iB += dir) {\n            if (iA == eA || iB == eB)\n                return length;\n            let chA = this.children[iA], chB = other.children[iB];\n            if (chA != chB)\n                return length + chA.scanIdentical(chB, dir);\n            length += chA.length + 1;\n        }\n    }\n    static from(children, length = children.reduce((l, ch) => l + ch.length + 1, -1)) {\n        let lines = 0;\n        for (let ch of children)\n            lines += ch.lines;\n        if (lines < 32 /* Tree.Branch */) {\n            let flat = [];\n            for (let ch of children)\n                ch.flatten(flat);\n            return new TextLeaf(flat, length);\n        }\n        let chunk = Math.max(32 /* Tree.Branch */, lines >> 5 /* Tree.BranchShift */), maxChunk = chunk << 1, minChunk = chunk >> 1;\n        let chunked = [], currentLines = 0, currentLen = -1, currentChunk = [];\n        function add(child) {\n            let last;\n            if (child.lines > maxChunk && child instanceof TextNode) {\n                for (let node of child.children)\n                    add(node);\n            }\n            else if (child.lines > minChunk && (currentLines > minChunk || !currentLines)) {\n                flush();\n                chunked.push(child);\n            }\n            else if (child instanceof TextLeaf && currentLines &&\n                (last = currentChunk[currentChunk.length - 1]) instanceof TextLeaf &&\n                child.lines + last.lines <= 32 /* Tree.Branch */) {\n                currentLines += child.lines;\n                currentLen += child.length + 1;\n                currentChunk[currentChunk.length - 1] = new TextLeaf(last.text.concat(child.text), last.length + 1 + child.length);\n            }\n            else {\n                if (currentLines + child.lines > chunk)\n                    flush();\n                currentLines += child.lines;\n                currentLen += child.length + 1;\n                currentChunk.push(child);\n            }\n        }\n        function flush() {\n            if (currentLines == 0)\n                return;\n            chunked.push(currentChunk.length == 1 ? currentChunk[0] : TextNode.from(currentChunk, currentLen));\n            currentLen = -1;\n            currentLines = currentChunk.length = 0;\n        }\n        for (let child of children)\n            add(child);\n        flush();\n        return chunked.length == 1 ? chunked[0] : new TextNode(chunked, length);\n    }\n}\nText.empty = /*@__PURE__*/new TextLeaf([\"\"], 0);\nfunction textLength(text) {\n    let length = -1;\n    for (let line of text)\n        length += line.length + 1;\n    return length;\n}\nfunction appendText(text, target, from = 0, to = 1e9) {\n    for (let pos = 0, i = 0, first = true; i < text.length && pos <= to; i++) {\n        let line = text[i], end = pos + line.length;\n        if (end >= from) {\n            if (end > to)\n                line = line.slice(0, to - pos);\n            if (pos < from)\n                line = line.slice(from - pos);\n            if (first) {\n                target[target.length - 1] += line;\n                first = false;\n            }\n            else\n                target.push(line);\n        }\n        pos = end + 1;\n    }\n    return target;\n}\nfunction sliceText(text, from, to) {\n    return appendText(text, [\"\"], from, to);\n}\nclass RawTextCursor {\n    constructor(text, dir = 1) {\n        this.dir = dir;\n        this.done = false;\n        this.lineBreak = false;\n        this.value = \"\";\n        this.nodes = [text];\n        this.offsets = [dir > 0 ? 1 : (text instanceof TextLeaf ? text.text.length : text.children.length) << 1];\n    }\n    nextInner(skip, dir) {\n        this.done = this.lineBreak = false;\n        for (;;) {\n            let last = this.nodes.length - 1;\n            let top = this.nodes[last], offsetValue = this.offsets[last], offset = offsetValue >> 1;\n            let size = top instanceof TextLeaf ? top.text.length : top.children.length;\n            if (offset == (dir > 0 ? size : 0)) {\n                if (last == 0) {\n                    this.done = true;\n                    this.value = \"\";\n                    return this;\n                }\n                if (dir > 0)\n                    this.offsets[last - 1]++;\n                this.nodes.pop();\n                this.offsets.pop();\n            }\n            else if ((offsetValue & 1) == (dir > 0 ? 0 : 1)) {\n                this.offsets[last] += dir;\n                if (skip == 0) {\n                    this.lineBreak = true;\n                    this.value = \"\\n\";\n                    return this;\n                }\n                skip--;\n            }\n            else if (top instanceof TextLeaf) {\n                // Move to the next string\n                let next = top.text[offset + (dir < 0 ? -1 : 0)];\n                this.offsets[last] += dir;\n                if (next.length > Math.max(0, skip)) {\n                    this.value = skip == 0 ? next : dir > 0 ? next.slice(skip) : next.slice(0, next.length - skip);\n                    return this;\n                }\n                skip -= next.length;\n            }\n            else {\n                let next = top.children[offset + (dir < 0 ? -1 : 0)];\n                if (skip > next.length) {\n                    skip -= next.length;\n                    this.offsets[last] += dir;\n                }\n                else {\n                    if (dir < 0)\n                        this.offsets[last]--;\n                    this.nodes.push(next);\n                    this.offsets.push(dir > 0 ? 1 : (next instanceof TextLeaf ? next.text.length : next.children.length) << 1);\n                }\n            }\n        }\n    }\n    next(skip = 0) {\n        if (skip < 0) {\n            this.nextInner(-skip, (-this.dir));\n            skip = this.value.length;\n        }\n        return this.nextInner(skip, this.dir);\n    }\n}\nclass PartialTextCursor {\n    constructor(text, start, end) {\n        this.value = \"\";\n        this.done = false;\n        this.cursor = new RawTextCursor(text, start > end ? -1 : 1);\n        this.pos = start > end ? text.length : 0;\n        this.from = Math.min(start, end);\n        this.to = Math.max(start, end);\n    }\n    nextInner(skip, dir) {\n        if (dir < 0 ? this.pos <= this.from : this.pos >= this.to) {\n            this.value = \"\";\n            this.done = true;\n            return this;\n        }\n        skip += Math.max(0, dir < 0 ? this.pos - this.to : this.from - this.pos);\n        let limit = dir < 0 ? this.pos - this.from : this.to - this.pos;\n        if (skip > limit)\n            skip = limit;\n        limit -= skip;\n        let { value } = this.cursor.next(skip);\n        this.pos += (value.length + skip) * dir;\n        this.value = value.length <= limit ? value : dir < 0 ? value.slice(value.length - limit) : value.slice(0, limit);\n        this.done = !this.value;\n        return this;\n    }\n    next(skip = 0) {\n        if (skip < 0)\n            skip = Math.max(skip, this.from - this.pos);\n        else if (skip > 0)\n            skip = Math.min(skip, this.to - this.pos);\n        return this.nextInner(skip, this.cursor.dir);\n    }\n    get lineBreak() { return this.cursor.lineBreak && this.value != \"\"; }\n}\nclass LineCursor {\n    constructor(inner) {\n        this.inner = inner;\n        this.afterBreak = true;\n        this.value = \"\";\n        this.done = false;\n    }\n    next(skip = 0) {\n        let { done, lineBreak, value } = this.inner.next(skip);\n        if (done && this.afterBreak) {\n            this.value = \"\";\n            this.afterBreak = false;\n        }\n        else if (done) {\n            this.done = true;\n            this.value = \"\";\n        }\n        else if (lineBreak) {\n            if (this.afterBreak) {\n                this.value = \"\";\n            }\n            else {\n                this.afterBreak = true;\n                this.next();\n            }\n        }\n        else {\n            this.value = value;\n            this.afterBreak = false;\n        }\n        return this;\n    }\n    get lineBreak() { return false; }\n}\nif (typeof Symbol != \"undefined\") {\n    Text.prototype[Symbol.iterator] = function () { return this.iter(); };\n    RawTextCursor.prototype[Symbol.iterator] = PartialTextCursor.prototype[Symbol.iterator] =\n        LineCursor.prototype[Symbol.iterator] = function () { return this; };\n}\n/**\nThis type describes a line in the document. It is created\non-demand when lines are [queried](https://codemirror.net/6/docs/ref/#state.Text.lineAt).\n*/\nclass Line {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The position of the start of the line.\n    */\n    from, \n    /**\n    The position at the end of the line (_before_ the line break,\n    or at the end of document for the last line).\n    */\n    to, \n    /**\n    This line's line number (1-based).\n    */\n    number, \n    /**\n    The line's content.\n    */\n    text) {\n        this.from = from;\n        this.to = to;\n        this.number = number;\n        this.text = text;\n    }\n    /**\n    The length of the line (not including any line break after it).\n    */\n    get length() { return this.to - this.from; }\n}\nfunction clip(text, from, to) {\n    from = Math.max(0, Math.min(text.length, from));\n    return [from, Math.max(from, Math.min(text.length, to))];\n}\n\n/**\nReturns a next grapheme cluster break _after_ (not equal to)\n`pos`, if `forward` is true, or before otherwise. Returns `pos`\nitself if no further cluster break is available in the string.\nMoves across surrogate pairs, extending characters (when\n`includeExtending` is true), characters joined with zero-width\njoiners, and flag emoji.\n*/\nfunction findClusterBreak(str, pos, forward = true, includeExtending = true) {\n    return findClusterBreak$1(str, pos, forward, includeExtending);\n}\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000; }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00; }\n/**\nFind the code point at the given position in a string (like the\n[`codePointAt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt)\nstring method).\n*/\nfunction codePointAt(str, pos) {\n    let code0 = str.charCodeAt(pos);\n    if (!surrogateHigh(code0) || pos + 1 == str.length)\n        return code0;\n    let code1 = str.charCodeAt(pos + 1);\n    if (!surrogateLow(code1))\n        return code0;\n    return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000;\n}\n/**\nGiven a Unicode codepoint, return the JavaScript string that\nrespresents it (like\n[`String.fromCodePoint`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint)).\n*/\nfunction fromCodePoint(code) {\n    if (code <= 0xffff)\n        return String.fromCharCode(code);\n    code -= 0x10000;\n    return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00);\n}\n/**\nThe amount of positions a character takes up in a JavaScript string.\n*/\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2; }\n\nconst DefaultSplit = /\\r\\n?|\\n/;\n/**\nDistinguishes different ways in which positions can be mapped.\n*/\nvar MapMode = /*@__PURE__*/(function (MapMode) {\n    /**\n    Map a position to a valid new position, even when its context\n    was deleted.\n    */\n    MapMode[MapMode[\"Simple\"] = 0] = \"Simple\";\n    /**\n    Return null if deletion happens across the position.\n    */\n    MapMode[MapMode[\"TrackDel\"] = 1] = \"TrackDel\";\n    /**\n    Return null if the character _before_ the position is deleted.\n    */\n    MapMode[MapMode[\"TrackBefore\"] = 2] = \"TrackBefore\";\n    /**\n    Return null if the character _after_ the position is deleted.\n    */\n    MapMode[MapMode[\"TrackAfter\"] = 3] = \"TrackAfter\";\nreturn MapMode})(MapMode || (MapMode = {}));\n/**\nA change description is a variant of [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet)\nthat doesn't store the inserted text. As such, it can't be\napplied, but is cheaper to store and manipulate.\n*/\nclass ChangeDesc {\n    // Sections are encoded as pairs of integers. The first is the\n    // length in the current document, and the second is -1 for\n    // unaffected sections, and the length of the replacement content\n    // otherwise. So an insertion would be (0, n>0), a deletion (n>0,\n    // 0), and a replacement two positive numbers.\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    sections) {\n        this.sections = sections;\n    }\n    /**\n    The length of the document before the change.\n    */\n    get length() {\n        let result = 0;\n        for (let i = 0; i < this.sections.length; i += 2)\n            result += this.sections[i];\n        return result;\n    }\n    /**\n    The length of the document after the change.\n    */\n    get newLength() {\n        let result = 0;\n        for (let i = 0; i < this.sections.length; i += 2) {\n            let ins = this.sections[i + 1];\n            result += ins < 0 ? this.sections[i] : ins;\n        }\n        return result;\n    }\n    /**\n    False when there are actual changes in this set.\n    */\n    get empty() { return this.sections.length == 0 || this.sections.length == 2 && this.sections[1] < 0; }\n    /**\n    Iterate over the unchanged parts left by these changes. `posA`\n    provides the position of the range in the old document, `posB`\n    the new position in the changed document.\n    */\n    iterGaps(f) {\n        for (let i = 0, posA = 0, posB = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            if (ins < 0) {\n                f(posA, posB, len);\n                posB += len;\n            }\n            else {\n                posB += ins;\n            }\n            posA += len;\n        }\n    }\n    /**\n    Iterate over the ranges changed by these changes. (See\n    [`ChangeSet.iterChanges`](https://codemirror.net/6/docs/ref/#state.ChangeSet.iterChanges) for a\n    variant that also provides you with the inserted text.)\n    `fromA`/`toA` provides the extent of the change in the starting\n    document, `fromB`/`toB` the extent of the replacement in the\n    changed document.\n    \n    When `individual` is true, adjacent changes (which are kept\n    separate for [position mapping](https://codemirror.net/6/docs/ref/#state.ChangeDesc.mapPos)) are\n    reported separately.\n    */\n    iterChangedRanges(f, individual = false) {\n        iterChanges(this, f, individual);\n    }\n    /**\n    Get a description of the inverted form of these changes.\n    */\n    get invertedDesc() {\n        let sections = [];\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            if (ins < 0)\n                sections.push(len, ins);\n            else\n                sections.push(ins, len);\n        }\n        return new ChangeDesc(sections);\n    }\n    /**\n    Compute the combined effect of applying another set of changes\n    after this one. The length of the document after this set should\n    match the length before `other`.\n    */\n    composeDesc(other) { return this.empty ? other : other.empty ? this : composeSets(this, other); }\n    /**\n    Map this description, which should start with the same document\n    as `other`, over another set of changes, so that it can be\n    applied after it. When `before` is true, map as if the changes\n    in `this` happened before the ones in `other`.\n    */\n    mapDesc(other, before = false) { return other.empty ? this : mapSet(this, other, before); }\n    mapPos(pos, assoc = -1, mode = MapMode.Simple) {\n        let posA = 0, posB = 0;\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++], endA = posA + len;\n            if (ins < 0) {\n                if (endA > pos)\n                    return posB + (pos - posA);\n                posB += len;\n            }\n            else {\n                if (mode != MapMode.Simple && endA >= pos &&\n                    (mode == MapMode.TrackDel && posA < pos && endA > pos ||\n                        mode == MapMode.TrackBefore && posA < pos ||\n                        mode == MapMode.TrackAfter && endA > pos))\n                    return null;\n                if (endA > pos || endA == pos && assoc < 0 && !len)\n                    return pos == posA || assoc < 0 ? posB : posB + ins;\n                posB += ins;\n            }\n            posA = endA;\n        }\n        if (pos > posA)\n            throw new RangeError(`Position ${pos} is out of range for changeset of length ${posA}`);\n        return posB;\n    }\n    /**\n    Check whether these changes touch a given range. When one of the\n    changes entirely covers the range, the string `\"cover\"` is\n    returned.\n    */\n    touchesRange(from, to = from) {\n        for (let i = 0, pos = 0; i < this.sections.length && pos <= to;) {\n            let len = this.sections[i++], ins = this.sections[i++], end = pos + len;\n            if (ins >= 0 && pos <= to && end >= from)\n                return pos < from && end > to ? \"cover\" : true;\n            pos = end;\n        }\n        return false;\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let result = \"\";\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            result += (result ? \" \" : \"\") + len + (ins >= 0 ? \":\" + ins : \"\");\n        }\n        return result;\n    }\n    /**\n    Serialize this change desc to a JSON-representable value.\n    */\n    toJSON() { return this.sections; }\n    /**\n    Create a change desc from its JSON representation (as produced\n    by [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeDesc.toJSON).\n    */\n    static fromJSON(json) {\n        if (!Array.isArray(json) || json.length % 2 || json.some(a => typeof a != \"number\"))\n            throw new RangeError(\"Invalid JSON representation of ChangeDesc\");\n        return new ChangeDesc(json);\n    }\n    /**\n    @internal\n    */\n    static create(sections) { return new ChangeDesc(sections); }\n}\n/**\nA change set represents a group of modifications to a document. It\nstores the document length, and can only be applied to documents\nwith exactly that length.\n*/\nclass ChangeSet extends ChangeDesc {\n    constructor(sections, \n    /**\n    @internal\n    */\n    inserted) {\n        super(sections);\n        this.inserted = inserted;\n    }\n    /**\n    Apply the changes to a document, returning the modified\n    document.\n    */\n    apply(doc) {\n        if (this.length != doc.length)\n            throw new RangeError(\"Applying change set to a document with the wrong length\");\n        iterChanges(this, (fromA, toA, fromB, _toB, text) => doc = doc.replace(fromB, fromB + (toA - fromA), text), false);\n        return doc;\n    }\n    mapDesc(other, before = false) { return mapSet(this, other, before, true); }\n    /**\n    Given the document as it existed _before_ the changes, return a\n    change set that represents the inverse of this set, which could\n    be used to go from the document created by the changes back to\n    the document as it existed before the changes.\n    */\n    invert(doc) {\n        let sections = this.sections.slice(), inserted = [];\n        for (let i = 0, pos = 0; i < sections.length; i += 2) {\n            let len = sections[i], ins = sections[i + 1];\n            if (ins >= 0) {\n                sections[i] = ins;\n                sections[i + 1] = len;\n                let index = i >> 1;\n                while (inserted.length < index)\n                    inserted.push(Text.empty);\n                inserted.push(len ? doc.slice(pos, pos + len) : Text.empty);\n            }\n            pos += len;\n        }\n        return new ChangeSet(sections, inserted);\n    }\n    /**\n    Combine two subsequent change sets into a single set. `other`\n    must start in the document produced by `this`. If `this` goes\n    `docA` \u2192 `docB` and `other` represents `docB` \u2192 `docC`, the\n    returned value will represent the change `docA` \u2192 `docC`.\n    */\n    compose(other) { return this.empty ? other : other.empty ? this : composeSets(this, other, true); }\n    /**\n    Given another change set starting in the same document, maps this\n    change set over the other, producing a new change set that can be\n    applied to the document produced by applying `other`. When\n    `before` is `true`, order changes as if `this` comes before\n    `other`, otherwise (the default) treat `other` as coming first.\n    \n    Given two changes `A` and `B`, `A.compose(B.map(A))` and\n    `B.compose(A.map(B, true))` will produce the same document. This\n    provides a basic form of [operational\n    transformation](https://en.wikipedia.org/wiki/Operational_transformation),\n    and can be used for collaborative editing.\n    */\n    map(other, before = false) { return other.empty ? this : mapSet(this, other, before, true); }\n    /**\n    Iterate over the changed ranges in the document, calling `f` for\n    each, with the range in the original document (`fromA`-`toA`)\n    and the range that replaces it in the new document\n    (`fromB`-`toB`).\n    \n    When `individual` is true, adjacent changes are reported\n    separately.\n    */\n    iterChanges(f, individual = false) {\n        iterChanges(this, f, individual);\n    }\n    /**\n    Get a [change description](https://codemirror.net/6/docs/ref/#state.ChangeDesc) for this change\n    set.\n    */\n    get desc() { return ChangeDesc.create(this.sections); }\n    /**\n    @internal\n    */\n    filter(ranges) {\n        let resultSections = [], resultInserted = [], filteredSections = [];\n        let iter = new SectionIter(this);\n        done: for (let i = 0, pos = 0;;) {\n            let next = i == ranges.length ? 1e9 : ranges[i++];\n            while (pos < next || pos == next && iter.len == 0) {\n                if (iter.done)\n                    break done;\n                let len = Math.min(iter.len, next - pos);\n                addSection(filteredSections, len, -1);\n                let ins = iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0;\n                addSection(resultSections, len, ins);\n                if (ins > 0)\n                    addInsert(resultInserted, resultSections, iter.text);\n                iter.forward(len);\n                pos += len;\n            }\n            let end = ranges[i++];\n            while (pos < end) {\n                if (iter.done)\n                    break done;\n                let len = Math.min(iter.len, end - pos);\n                addSection(resultSections, len, -1);\n                addSection(filteredSections, len, iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0);\n                iter.forward(len);\n                pos += len;\n            }\n        }\n        return { changes: new ChangeSet(resultSections, resultInserted),\n            filtered: ChangeDesc.create(filteredSections) };\n    }\n    /**\n    Serialize this change set to a JSON-representable value.\n    */\n    toJSON() {\n        let parts = [];\n        for (let i = 0; i < this.sections.length; i += 2) {\n            let len = this.sections[i], ins = this.sections[i + 1];\n            if (ins < 0)\n                parts.push(len);\n            else if (ins == 0)\n                parts.push([len]);\n            else\n                parts.push([len].concat(this.inserted[i >> 1].toJSON()));\n        }\n        return parts;\n    }\n    /**\n    Create a change set for the given changes, for a document of the\n    given length, using `lineSep` as line separator.\n    */\n    static of(changes, length, lineSep) {\n        let sections = [], inserted = [], pos = 0;\n        let total = null;\n        function flush(force = false) {\n            if (!force && !sections.length)\n                return;\n            if (pos < length)\n                addSection(sections, length - pos, -1);\n            let set = new ChangeSet(sections, inserted);\n            total = total ? total.compose(set.map(total)) : set;\n            sections = [];\n            inserted = [];\n            pos = 0;\n        }\n        function process(spec) {\n            if (Array.isArray(spec)) {\n                for (let sub of spec)\n                    process(sub);\n            }\n            else if (spec instanceof ChangeSet) {\n                if (spec.length != length)\n                    throw new RangeError(`Mismatched change set length (got ${spec.length}, expected ${length})`);\n                flush();\n                total = total ? total.compose(spec.map(total)) : spec;\n            }\n            else {\n                let { from, to = from, insert } = spec;\n                if (from > to || from < 0 || to > length)\n                    throw new RangeError(`Invalid change range ${from} to ${to} (in doc of length ${length})`);\n                let insText = !insert ? Text.empty : typeof insert == \"string\" ? Text.of(insert.split(lineSep || DefaultSplit)) : insert;\n                let insLen = insText.length;\n                if (from == to && insLen == 0)\n                    return;\n                if (from < pos)\n                    flush();\n                if (from > pos)\n                    addSection(sections, from - pos, -1);\n                addSection(sections, to - from, insLen);\n                addInsert(inserted, sections, insText);\n                pos = to;\n            }\n        }\n        process(changes);\n        flush(!total);\n        return total;\n    }\n    /**\n    Create an empty changeset of the given length.\n    */\n    static empty(length) {\n        return new ChangeSet(length ? [length, -1] : [], []);\n    }\n    /**\n    Create a changeset from its JSON representation (as produced by\n    [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeSet.toJSON).\n    */\n    static fromJSON(json) {\n        if (!Array.isArray(json))\n            throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n        let sections = [], inserted = [];\n        for (let i = 0; i < json.length; i++) {\n            let part = json[i];\n            if (typeof part == \"number\") {\n                sections.push(part, -1);\n            }\n            else if (!Array.isArray(part) || typeof part[0] != \"number\" || part.some((e, i) => i && typeof e != \"string\")) {\n                throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n            }\n            else if (part.length == 1) {\n                sections.push(part[0], 0);\n            }\n            else {\n                while (inserted.length < i)\n                    inserted.push(Text.empty);\n                inserted[i] = Text.of(part.slice(1));\n                sections.push(part[0], inserted[i].length);\n            }\n        }\n        return new ChangeSet(sections, inserted);\n    }\n    /**\n    @internal\n    */\n    static createSet(sections, inserted) {\n        return new ChangeSet(sections, inserted);\n    }\n}\nfunction addSection(sections, len, ins, forceJoin = false) {\n    if (len == 0 && ins <= 0)\n        return;\n    let last = sections.length - 2;\n    if (last >= 0 && ins <= 0 && ins == sections[last + 1])\n        sections[last] += len;\n    else if (last >= 0 && len == 0 && sections[last] == 0)\n        sections[last + 1] += ins;\n    else if (forceJoin) {\n        sections[last] += len;\n        sections[last + 1] += ins;\n    }\n    else\n        sections.push(len, ins);\n}\nfunction addInsert(values, sections, value) {\n    if (value.length == 0)\n        return;\n    let index = (sections.length - 2) >> 1;\n    if (index < values.length) {\n        values[values.length - 1] = values[values.length - 1].append(value);\n    }\n    else {\n        while (values.length < index)\n            values.push(Text.empty);\n        values.push(value);\n    }\n}\nfunction iterChanges(desc, f, individual) {\n    let inserted = desc.inserted;\n    for (let posA = 0, posB = 0, i = 0; i < desc.sections.length;) {\n        let len = desc.sections[i++], ins = desc.sections[i++];\n        if (ins < 0) {\n            posA += len;\n            posB += len;\n        }\n        else {\n            let endA = posA, endB = posB, text = Text.empty;\n            for (;;) {\n                endA += len;\n                endB += ins;\n                if (ins && inserted)\n                    text = text.append(inserted[(i - 2) >> 1]);\n                if (individual || i == desc.sections.length || desc.sections[i + 1] < 0)\n                    break;\n                len = desc.sections[i++];\n                ins = desc.sections[i++];\n            }\n            f(posA, endA, posB, endB, text);\n            posA = endA;\n            posB = endB;\n        }\n    }\n}\nfunction mapSet(setA, setB, before, mkSet = false) {\n    // Produce a copy of setA that applies to the document after setB\n    // has been applied (assuming both start at the same document).\n    let sections = [], insert = mkSet ? [] : null;\n    let a = new SectionIter(setA), b = new SectionIter(setB);\n    // Iterate over both sets in parallel. inserted tracks, for changes\n    // in A that have to be processed piece-by-piece, whether their\n    // content has been inserted already, and refers to the section\n    // index.\n    for (let inserted = -1;;) {\n        if (a.done && b.len || b.done && a.len) {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n        else if (a.ins == -1 && b.ins == -1) {\n            // Move across ranges skipped by both sets.\n            let len = Math.min(a.len, b.len);\n            addSection(sections, len, -1);\n            a.forward(len);\n            b.forward(len);\n        }\n        else if (b.ins >= 0 && (a.ins < 0 || inserted == a.i || a.off == 0 && (b.len < a.len || b.len == a.len && !before))) {\n            // If there's a change in B that comes before the next change in\n            // A (ordered by start pos, then len, then before flag), skip\n            // that (and process any changes in A it covers).\n            let len = b.len;\n            addSection(sections, b.ins, -1);\n            while (len) {\n                let piece = Math.min(a.len, len);\n                if (a.ins >= 0 && inserted < a.i && a.len <= piece) {\n                    addSection(sections, 0, a.ins);\n                    if (insert)\n                        addInsert(insert, sections, a.text);\n                    inserted = a.i;\n                }\n                a.forward(piece);\n                len -= piece;\n            }\n            b.next();\n        }\n        else if (a.ins >= 0) {\n            // Process the part of a change in A up to the start of the next\n            // non-deletion change in B (if overlapping).\n            let len = 0, left = a.len;\n            while (left) {\n                if (b.ins == -1) {\n                    let piece = Math.min(left, b.len);\n                    len += piece;\n                    left -= piece;\n                    b.forward(piece);\n                }\n                else if (b.ins == 0 && b.len < left) {\n                    left -= b.len;\n                    b.next();\n                }\n                else {\n                    break;\n                }\n            }\n            addSection(sections, len, inserted < a.i ? a.ins : 0);\n            if (insert && inserted < a.i)\n                addInsert(insert, sections, a.text);\n            inserted = a.i;\n            a.forward(a.len - left);\n        }\n        else if (a.done && b.done) {\n            return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n        }\n        else {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n    }\n}\nfunction composeSets(setA, setB, mkSet = false) {\n    let sections = [];\n    let insert = mkSet ? [] : null;\n    let a = new SectionIter(setA), b = new SectionIter(setB);\n    for (let open = false;;) {\n        if (a.done && b.done) {\n            return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n        }\n        else if (a.ins == 0) { // Deletion in A\n            addSection(sections, a.len, 0, open);\n            a.next();\n        }\n        else if (b.len == 0 && !b.done) { // Insertion in B\n            addSection(sections, 0, b.ins, open);\n            if (insert)\n                addInsert(insert, sections, b.text);\n            b.next();\n        }\n        else if (a.done || b.done) {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n        else {\n            let len = Math.min(a.len2, b.len), sectionLen = sections.length;\n            if (a.ins == -1) {\n                let insB = b.ins == -1 ? -1 : b.off ? 0 : b.ins;\n                addSection(sections, len, insB, open);\n                if (insert && insB)\n                    addInsert(insert, sections, b.text);\n            }\n            else if (b.ins == -1) {\n                addSection(sections, a.off ? 0 : a.len, len, open);\n                if (insert)\n                    addInsert(insert, sections, a.textBit(len));\n            }\n            else {\n                addSection(sections, a.off ? 0 : a.len, b.off ? 0 : b.ins, open);\n                if (insert && !b.off)\n                    addInsert(insert, sections, b.text);\n            }\n            open = (a.ins > len || b.ins >= 0 && b.len > len) && (open || sections.length > sectionLen);\n            a.forward2(len);\n            b.forward(len);\n        }\n    }\n}\nclass SectionIter {\n    constructor(set) {\n        this.set = set;\n        this.i = 0;\n        this.next();\n    }\n    next() {\n        let { sections } = this.set;\n        if (this.i < sections.length) {\n            this.len = sections[this.i++];\n            this.ins = sections[this.i++];\n        }\n        else {\n            this.len = 0;\n            this.ins = -2;\n        }\n        this.off = 0;\n    }\n    get done() { return this.ins == -2; }\n    get len2() { return this.ins < 0 ? this.len : this.ins; }\n    get text() {\n        let { inserted } = this.set, index = (this.i - 2) >> 1;\n        return index >= inserted.length ? Text.empty : inserted[index];\n    }\n    textBit(len) {\n        let { inserted } = this.set, index = (this.i - 2) >> 1;\n        return index >= inserted.length && !len ? Text.empty\n            : inserted[index].slice(this.off, len == null ? undefined : this.off + len);\n    }\n    forward(len) {\n        if (len == this.len)\n            this.next();\n        else {\n            this.len -= len;\n            this.off += len;\n        }\n    }\n    forward2(len) {\n        if (this.ins == -1)\n            this.forward(len);\n        else if (len == this.ins)\n            this.next();\n        else {\n            this.ins -= len;\n            this.off += len;\n        }\n    }\n}\n\n/**\nA single selection range. When\n[`allowMultipleSelections`](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\nis enabled, a [selection](https://codemirror.net/6/docs/ref/#state.EditorSelection) may hold\nmultiple ranges. By default, selections hold exactly one range.\n*/\nclass SelectionRange {\n    constructor(\n    /**\n    The lower boundary of the range.\n    */\n    from, \n    /**\n    The upper boundary of the range.\n    */\n    to, flags) {\n        this.from = from;\n        this.to = to;\n        this.flags = flags;\n    }\n    /**\n    The anchor of the range\u2014the side that doesn't move when you\n    extend it.\n    */\n    get anchor() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.to : this.from; }\n    /**\n    The head of the range, which is moved when the range is\n    [extended](https://codemirror.net/6/docs/ref/#state.SelectionRange.extend).\n    */\n    get head() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.from : this.to; }\n    /**\n    True when `anchor` and `head` are at the same position.\n    */\n    get empty() { return this.from == this.to; }\n    /**\n    If this is a cursor that is explicitly associated with the\n    character on one of its sides, this returns the side. -1 means\n    the character before its position, 1 the character after, and 0\n    means no association.\n    */\n    get assoc() { return this.flags & 8 /* RangeFlag.AssocBefore */ ? -1 : this.flags & 16 /* RangeFlag.AssocAfter */ ? 1 : 0; }\n    /**\n    The bidirectional text level associated with this cursor, if\n    any.\n    */\n    get bidiLevel() {\n        let level = this.flags & 7 /* RangeFlag.BidiLevelMask */;\n        return level == 7 ? null : level;\n    }\n    /**\n    The goal column (stored vertical offset) associated with a\n    cursor. This is used to preserve the vertical position when\n    [moving](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) across\n    lines of different length.\n    */\n    get goalColumn() {\n        let value = this.flags >> 6 /* RangeFlag.GoalColumnOffset */;\n        return value == 16777215 /* RangeFlag.NoGoalColumn */ ? undefined : value;\n    }\n    /**\n    Map this range through a change, producing a valid range in the\n    updated document.\n    */\n    map(change, assoc = -1) {\n        let from, to;\n        if (this.empty) {\n            from = to = change.mapPos(this.from, assoc);\n        }\n        else {\n            from = change.mapPos(this.from, 1);\n            to = change.mapPos(this.to, -1);\n        }\n        return from == this.from && to == this.to ? this : new SelectionRange(from, to, this.flags);\n    }\n    /**\n    Extend this range to cover at least `from` to `to`.\n    */\n    extend(from, to = from) {\n        if (from <= this.anchor && to >= this.anchor)\n            return EditorSelection.range(from, to);\n        let head = Math.abs(from - this.anchor) > Math.abs(to - this.anchor) ? from : to;\n        return EditorSelection.range(this.anchor, head);\n    }\n    /**\n    Compare this range to another range.\n    */\n    eq(other, includeAssoc = false) {\n        return this.anchor == other.anchor && this.head == other.head &&\n            (!includeAssoc || !this.empty || this.assoc == other.assoc);\n    }\n    /**\n    Return a JSON-serializable object representing the range.\n    */\n    toJSON() { return { anchor: this.anchor, head: this.head }; }\n    /**\n    Convert a JSON representation of a range to a `SelectionRange`\n    instance.\n    */\n    static fromJSON(json) {\n        if (!json || typeof json.anchor != \"number\" || typeof json.head != \"number\")\n            throw new RangeError(\"Invalid JSON representation for SelectionRange\");\n        return EditorSelection.range(json.anchor, json.head);\n    }\n    /**\n    @internal\n    */\n    static create(from, to, flags) {\n        return new SelectionRange(from, to, flags);\n    }\n}\n/**\nAn editor selection holds one or more selection ranges.\n*/\nclass EditorSelection {\n    constructor(\n    /**\n    The ranges in the selection, sorted by position. Ranges cannot\n    overlap (but they may touch, if they aren't empty).\n    */\n    ranges, \n    /**\n    The index of the _main_ range in the selection (which is\n    usually the range that was added last).\n    */\n    mainIndex) {\n        this.ranges = ranges;\n        this.mainIndex = mainIndex;\n    }\n    /**\n    Map a selection through a change. Used to adjust the selection\n    position for changes.\n    */\n    map(change, assoc = -1) {\n        if (change.empty)\n            return this;\n        return EditorSelection.create(this.ranges.map(r => r.map(change, assoc)), this.mainIndex);\n    }\n    /**\n    Compare this selection to another selection. By default, ranges\n    are compared only by position. When `includeAssoc` is true,\n    cursor ranges must also have the same\n    [`assoc`](https://codemirror.net/6/docs/ref/#state.SelectionRange.assoc) value.\n    */\n    eq(other, includeAssoc = false) {\n        if (this.ranges.length != other.ranges.length ||\n            this.mainIndex != other.mainIndex)\n            return false;\n        for (let i = 0; i < this.ranges.length; i++)\n            if (!this.ranges[i].eq(other.ranges[i], includeAssoc))\n                return false;\n        return true;\n    }\n    /**\n    Get the primary selection range. Usually, you should make sure\n    your code applies to _all_ ranges, by using methods like\n    [`changeByRange`](https://codemirror.net/6/docs/ref/#state.EditorState.changeByRange).\n    */\n    get main() { return this.ranges[this.mainIndex]; }\n    /**\n    Make sure the selection only has one range. Returns a selection\n    holding only the main range from this selection.\n    */\n    asSingle() {\n        return this.ranges.length == 1 ? this : new EditorSelection([this.main], 0);\n    }\n    /**\n    Extend this selection with an extra range.\n    */\n    addRange(range, main = true) {\n        return EditorSelection.create([range].concat(this.ranges), main ? 0 : this.mainIndex + 1);\n    }\n    /**\n    Replace a given range with another range, and then normalize the\n    selection to merge and sort ranges if necessary.\n    */\n    replaceRange(range, which = this.mainIndex) {\n        let ranges = this.ranges.slice();\n        ranges[which] = range;\n        return EditorSelection.create(ranges, this.mainIndex);\n    }\n    /**\n    Convert this selection to an object that can be serialized to\n    JSON.\n    */\n    toJSON() {\n        return { ranges: this.ranges.map(r => r.toJSON()), main: this.mainIndex };\n    }\n    /**\n    Create a selection from a JSON representation.\n    */\n    static fromJSON(json) {\n        if (!json || !Array.isArray(json.ranges) || typeof json.main != \"number\" || json.main >= json.ranges.length)\n            throw new RangeError(\"Invalid JSON representation for EditorSelection\");\n        return new EditorSelection(json.ranges.map((r) => SelectionRange.fromJSON(r)), json.main);\n    }\n    /**\n    Create a selection holding a single range.\n    */\n    static single(anchor, head = anchor) {\n        return new EditorSelection([EditorSelection.range(anchor, head)], 0);\n    }\n    /**\n    Sort and merge the given set of ranges, creating a valid\n    selection.\n    */\n    static create(ranges, mainIndex = 0) {\n        if (ranges.length == 0)\n            throw new RangeError(\"A selection needs at least one range\");\n        for (let pos = 0, i = 0; i < ranges.length; i++) {\n            let range = ranges[i];\n            if (range.empty ? range.from <= pos : range.from < pos)\n                return EditorSelection.normalized(ranges.slice(), mainIndex);\n            pos = range.to;\n        }\n        return new EditorSelection(ranges, mainIndex);\n    }\n    /**\n    Create a cursor selection range at the given position. You can\n    safely ignore the optional arguments in most situations.\n    */\n    static cursor(pos, assoc = 0, bidiLevel, goalColumn) {\n        return SelectionRange.create(pos, pos, (assoc == 0 ? 0 : assoc < 0 ? 8 /* RangeFlag.AssocBefore */ : 16 /* RangeFlag.AssocAfter */) |\n            (bidiLevel == null ? 7 : Math.min(6, bidiLevel)) |\n            ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */));\n    }\n    /**\n    Create a selection range.\n    */\n    static range(anchor, head, goalColumn, bidiLevel) {\n        let flags = ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */) |\n            (bidiLevel == null ? 7 : Math.min(6, bidiLevel));\n        return head < anchor ? SelectionRange.create(head, anchor, 32 /* RangeFlag.Inverted */ | 16 /* RangeFlag.AssocAfter */ | flags)\n            : SelectionRange.create(anchor, head, (head > anchor ? 8 /* RangeFlag.AssocBefore */ : 0) | flags);\n    }\n    /**\n    @internal\n    */\n    static normalized(ranges, mainIndex = 0) {\n        let main = ranges[mainIndex];\n        ranges.sort((a, b) => a.from - b.from);\n        mainIndex = ranges.indexOf(main);\n        for (let i = 1; i < ranges.length; i++) {\n            let range = ranges[i], prev = ranges[i - 1];\n            if (range.empty ? range.from <= prev.to : range.from < prev.to) {\n                let from = prev.from, to = Math.max(range.to, prev.to);\n                if (i <= mainIndex)\n                    mainIndex--;\n                ranges.splice(--i, 2, range.anchor > range.head ? EditorSelection.range(to, from) : EditorSelection.range(from, to));\n            }\n        }\n        return new EditorSelection(ranges, mainIndex);\n    }\n}\nfunction checkSelection(selection, docLength) {\n    for (let range of selection.ranges)\n        if (range.to > docLength)\n            throw new RangeError(\"Selection points outside of document\");\n}\n\nlet nextID = 0;\n/**\nA facet is a labeled value that is associated with an editor\nstate. It takes inputs from any number of extensions, and combines\nthose into a single output value.\n\nExamples of uses of facets are the [tab\nsize](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize), [editor\nattributes](https://codemirror.net/6/docs/ref/#view.EditorView^editorAttributes), and [update\nlisteners](https://codemirror.net/6/docs/ref/#view.EditorView^updateListener).\n\nNote that `Facet` instances can be used anywhere where\n[`FacetReader`](https://codemirror.net/6/docs/ref/#state.FacetReader) is expected.\n*/\nclass Facet {\n    constructor(\n    /**\n    @internal\n    */\n    combine, \n    /**\n    @internal\n    */\n    compareInput, \n    /**\n    @internal\n    */\n    compare, isStatic, enables) {\n        this.combine = combine;\n        this.compareInput = compareInput;\n        this.compare = compare;\n        this.isStatic = isStatic;\n        /**\n        @internal\n        */\n        this.id = nextID++;\n        this.default = combine([]);\n        this.extensions = typeof enables == \"function\" ? enables(this) : enables;\n    }\n    /**\n    Returns a facet reader for this facet, which can be used to\n    [read](https://codemirror.net/6/docs/ref/#state.EditorState.facet) it but not to define values for it.\n    */\n    get reader() { return this; }\n    /**\n    Define a new facet.\n    */\n    static define(config = {}) {\n        return new Facet(config.combine || ((a) => a), config.compareInput || ((a, b) => a === b), config.compare || (!config.combine ? sameArray : (a, b) => a === b), !!config.static, config.enables);\n    }\n    /**\n    Returns an extension that adds the given value to this facet.\n    */\n    of(value) {\n        return new FacetProvider([], this, 0 /* Provider.Static */, value);\n    }\n    /**\n    Create an extension that computes a value for the facet from a\n    state. You must take care to declare the parts of the state that\n    this value depends on, since your function is only called again\n    for a new state when one of those parts changed.\n    \n    In cases where your value depends only on a single field, you'll\n    want to use the [`from`](https://codemirror.net/6/docs/ref/#state.Facet.from) method instead.\n    */\n    compute(deps, get) {\n        if (this.isStatic)\n            throw new Error(\"Can't compute a static facet\");\n        return new FacetProvider(deps, this, 1 /* Provider.Single */, get);\n    }\n    /**\n    Create an extension that computes zero or more values for this\n    facet from a state.\n    */\n    computeN(deps, get) {\n        if (this.isStatic)\n            throw new Error(\"Can't compute a static facet\");\n        return new FacetProvider(deps, this, 2 /* Provider.Multi */, get);\n    }\n    from(field, get) {\n        if (!get)\n            get = x => x;\n        return this.compute([field], state => get(state.field(field)));\n    }\n}\nfunction sameArray(a, b) {\n    return a == b || a.length == b.length && a.every((e, i) => e === b[i]);\n}\nclass FacetProvider {\n    constructor(dependencies, facet, type, value) {\n        this.dependencies = dependencies;\n        this.facet = facet;\n        this.type = type;\n        this.value = value;\n        this.id = nextID++;\n    }\n    dynamicSlot(addresses) {\n        var _a;\n        let getter = this.value;\n        let compare = this.facet.compareInput;\n        let id = this.id, idx = addresses[id] >> 1, multi = this.type == 2 /* Provider.Multi */;\n        let depDoc = false, depSel = false, depAddrs = [];\n        for (let dep of this.dependencies) {\n            if (dep == \"doc\")\n                depDoc = true;\n            else if (dep == \"selection\")\n                depSel = true;\n            else if ((((_a = addresses[dep.id]) !== null && _a !== void 0 ? _a : 1) & 1) == 0)\n                depAddrs.push(addresses[dep.id]);\n        }\n        return {\n            create(state) {\n                state.values[idx] = getter(state);\n                return 1 /* SlotStatus.Changed */;\n            },\n            update(state, tr) {\n                if ((depDoc && tr.docChanged) || (depSel && (tr.docChanged || tr.selection)) || ensureAll(state, depAddrs)) {\n                    let newVal = getter(state);\n                    if (multi ? !compareArray(newVal, state.values[idx], compare) : !compare(newVal, state.values[idx])) {\n                        state.values[idx] = newVal;\n                        return 1 /* SlotStatus.Changed */;\n                    }\n                }\n                return 0;\n            },\n            reconfigure: (state, oldState) => {\n                let newVal, oldAddr = oldState.config.address[id];\n                if (oldAddr != null) {\n                    let oldVal = getAddr(oldState, oldAddr);\n                    if (this.dependencies.every(dep => {\n                        return dep instanceof Facet ? oldState.facet(dep) === state.facet(dep) :\n                            dep instanceof StateField ? oldState.field(dep, false) == state.field(dep, false) : true;\n                    }) || (multi ? compareArray(newVal = getter(state), oldVal, compare) : compare(newVal = getter(state), oldVal))) {\n                        state.values[idx] = oldVal;\n                        return 0;\n                    }\n                }\n                else {\n                    newVal = getter(state);\n                }\n                state.values[idx] = newVal;\n                return 1 /* SlotStatus.Changed */;\n            }\n        };\n    }\n}\nfunction compareArray(a, b, compare) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!compare(a[i], b[i]))\n            return false;\n    return true;\n}\nfunction ensureAll(state, addrs) {\n    let changed = false;\n    for (let addr of addrs)\n        if (ensureAddr(state, addr) & 1 /* SlotStatus.Changed */)\n            changed = true;\n    return changed;\n}\nfunction dynamicFacetSlot(addresses, facet, providers) {\n    let providerAddrs = providers.map(p => addresses[p.id]);\n    let providerTypes = providers.map(p => p.type);\n    let dynamic = providerAddrs.filter(p => !(p & 1));\n    let idx = addresses[facet.id] >> 1;\n    function get(state) {\n        let values = [];\n        for (let i = 0; i < providerAddrs.length; i++) {\n            let value = getAddr(state, providerAddrs[i]);\n            if (providerTypes[i] == 2 /* Provider.Multi */)\n                for (let val of value)\n                    values.push(val);\n            else\n                values.push(value);\n        }\n        return facet.combine(values);\n    }\n    return {\n        create(state) {\n            for (let addr of providerAddrs)\n                ensureAddr(state, addr);\n            state.values[idx] = get(state);\n            return 1 /* SlotStatus.Changed */;\n        },\n        update(state, tr) {\n            if (!ensureAll(state, dynamic))\n                return 0;\n            let value = get(state);\n            if (facet.compare(value, state.values[idx]))\n                return 0;\n            state.values[idx] = value;\n            return 1 /* SlotStatus.Changed */;\n        },\n        reconfigure(state, oldState) {\n            let depChanged = ensureAll(state, providerAddrs);\n            let oldProviders = oldState.config.facets[facet.id], oldValue = oldState.facet(facet);\n            if (oldProviders && !depChanged && sameArray(providers, oldProviders)) {\n                state.values[idx] = oldValue;\n                return 0;\n            }\n            let value = get(state);\n            if (facet.compare(value, oldValue)) {\n                state.values[idx] = oldValue;\n                return 0;\n            }\n            state.values[idx] = value;\n            return 1 /* SlotStatus.Changed */;\n        }\n    };\n}\nconst initField = /*@__PURE__*/Facet.define({ static: true });\n/**\nFields can store additional information in an editor state, and\nkeep it in sync with the rest of the state.\n*/\nclass StateField {\n    constructor(\n    /**\n    @internal\n    */\n    id, createF, updateF, compareF, \n    /**\n    @internal\n    */\n    spec) {\n        this.id = id;\n        this.createF = createF;\n        this.updateF = updateF;\n        this.compareF = compareF;\n        this.spec = spec;\n        /**\n        @internal\n        */\n        this.provides = undefined;\n    }\n    /**\n    Define a state field.\n    */\n    static define(config) {\n        let field = new StateField(nextID++, config.create, config.update, config.compare || ((a, b) => a === b), config);\n        if (config.provide)\n            field.provides = config.provide(field);\n        return field;\n    }\n    create(state) {\n        let init = state.facet(initField).find(i => i.field == this);\n        return ((init === null || init === void 0 ? void 0 : init.create) || this.createF)(state);\n    }\n    /**\n    @internal\n    */\n    slot(addresses) {\n        let idx = addresses[this.id] >> 1;\n        return {\n            create: (state) => {\n                state.values[idx] = this.create(state);\n                return 1 /* SlotStatus.Changed */;\n            },\n            update: (state, tr) => {\n                let oldVal = state.values[idx];\n                let value = this.updateF(oldVal, tr);\n                if (this.compareF(oldVal, value))\n                    return 0;\n                state.values[idx] = value;\n                return 1 /* SlotStatus.Changed */;\n            },\n            reconfigure: (state, oldState) => {\n                let init = state.facet(initField), oldInit = oldState.facet(initField), reInit;\n                if ((reInit = init.find(i => i.field == this)) && reInit != oldInit.find(i => i.field == this)) {\n                    state.values[idx] = reInit.create(state);\n                    return 1 /* SlotStatus.Changed */;\n                }\n                if (oldState.config.address[this.id] != null) {\n                    state.values[idx] = oldState.field(this);\n                    return 0;\n                }\n                state.values[idx] = this.create(state);\n                return 1 /* SlotStatus.Changed */;\n            }\n        };\n    }\n    /**\n    Returns an extension that enables this field and overrides the\n    way it is initialized. Can be useful when you need to provide a\n    non-default starting value for the field.\n    */\n    init(create) {\n        return [this, initField.of({ field: this, create })];\n    }\n    /**\n    State field instances can be used as\n    [`Extension`](https://codemirror.net/6/docs/ref/#state.Extension) values to enable the field in a\n    given state.\n    */\n    get extension() { return this; }\n}\nconst Prec_ = { lowest: 4, low: 3, default: 2, high: 1, highest: 0 };\nfunction prec(value) {\n    return (ext) => new PrecExtension(ext, value);\n}\n/**\nBy default extensions are registered in the order they are found\nin the flattened form of nested array that was provided.\nIndividual extension values can be assigned a precedence to\noverride this. Extensions that do not have a precedence set get\nthe precedence of the nearest parent with a precedence, or\n[`default`](https://codemirror.net/6/docs/ref/#state.Prec.default) if there is no such parent. The\nfinal ordering of extensions is determined by first sorting by\nprecedence and then by order within each precedence.\n*/\nconst Prec = {\n    /**\n    The highest precedence level, for extensions that should end up\n    near the start of the precedence ordering.\n    */\n    highest: /*@__PURE__*/prec(Prec_.highest),\n    /**\n    A higher-than-default precedence, for extensions that should\n    come before those with default precedence.\n    */\n    high: /*@__PURE__*/prec(Prec_.high),\n    /**\n    The default precedence, which is also used for extensions\n    without an explicit precedence.\n    */\n    default: /*@__PURE__*/prec(Prec_.default),\n    /**\n    A lower-than-default precedence.\n    */\n    low: /*@__PURE__*/prec(Prec_.low),\n    /**\n    The lowest precedence level. Meant for things that should end up\n    near the end of the extension order.\n    */\n    lowest: /*@__PURE__*/prec(Prec_.lowest)\n};\nclass PrecExtension {\n    constructor(inner, prec) {\n        this.inner = inner;\n        this.prec = prec;\n    }\n}\n/**\nExtension compartments can be used to make a configuration\ndynamic. By [wrapping](https://codemirror.net/6/docs/ref/#state.Compartment.of) part of your\nconfiguration in a compartment, you can later\n[replace](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure) that part through a\ntransaction.\n*/\nclass Compartment {\n    /**\n    Create an instance of this compartment to add to your [state\n    configuration](https://codemirror.net/6/docs/ref/#state.EditorStateConfig.extensions).\n    */\n    of(ext) { return new CompartmentInstance(this, ext); }\n    /**\n    Create an [effect](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) that\n    reconfigures this compartment.\n    */\n    reconfigure(content) {\n        return Compartment.reconfigure.of({ compartment: this, extension: content });\n    }\n    /**\n    Get the current content of the compartment in the state, or\n    `undefined` if it isn't present.\n    */\n    get(state) {\n        return state.config.compartments.get(this);\n    }\n}\nclass CompartmentInstance {\n    constructor(compartment, inner) {\n        this.compartment = compartment;\n        this.inner = inner;\n    }\n}\nclass Configuration {\n    constructor(base, compartments, dynamicSlots, address, staticValues, facets) {\n        this.base = base;\n        this.compartments = compartments;\n        this.dynamicSlots = dynamicSlots;\n        this.address = address;\n        this.staticValues = staticValues;\n        this.facets = facets;\n        this.statusTemplate = [];\n        while (this.statusTemplate.length < dynamicSlots.length)\n            this.statusTemplate.push(0 /* SlotStatus.Unresolved */);\n    }\n    staticFacet(facet) {\n        let addr = this.address[facet.id];\n        return addr == null ? facet.default : this.staticValues[addr >> 1];\n    }\n    static resolve(base, compartments, oldState) {\n        let fields = [];\n        let facets = Object.create(null);\n        let newCompartments = new Map();\n        for (let ext of flatten(base, compartments, newCompartments)) {\n            if (ext instanceof StateField)\n                fields.push(ext);\n            else\n                (facets[ext.facet.id] || (facets[ext.facet.id] = [])).push(ext);\n        }\n        let address = Object.create(null);\n        let staticValues = [];\n        let dynamicSlots = [];\n        for (let field of fields) {\n            address[field.id] = dynamicSlots.length << 1;\n            dynamicSlots.push(a => field.slot(a));\n        }\n        let oldFacets = oldState === null || oldState === void 0 ? void 0 : oldState.config.facets;\n        for (let id in facets) {\n            let providers = facets[id], facet = providers[0].facet;\n            let oldProviders = oldFacets && oldFacets[id] || [];\n            if (providers.every(p => p.type == 0 /* Provider.Static */)) {\n                address[facet.id] = (staticValues.length << 1) | 1;\n                if (sameArray(oldProviders, providers)) {\n                    staticValues.push(oldState.facet(facet));\n                }\n                else {\n                    let value = facet.combine(providers.map(p => p.value));\n                    staticValues.push(oldState && facet.compare(value, oldState.facet(facet)) ? oldState.facet(facet) : value);\n                }\n            }\n            else {\n                for (let p of providers) {\n                    if (p.type == 0 /* Provider.Static */) {\n                        address[p.id] = (staticValues.length << 1) | 1;\n                        staticValues.push(p.value);\n                    }\n                    else {\n                        address[p.id] = dynamicSlots.length << 1;\n                        dynamicSlots.push(a => p.dynamicSlot(a));\n                    }\n                }\n                address[facet.id] = dynamicSlots.length << 1;\n                dynamicSlots.push(a => dynamicFacetSlot(a, facet, providers));\n            }\n        }\n        let dynamic = dynamicSlots.map(f => f(address));\n        return new Configuration(base, newCompartments, dynamic, address, staticValues, facets);\n    }\n}\nfunction flatten(extension, compartments, newCompartments) {\n    let result = [[], [], [], [], []];\n    let seen = new Map();\n    function inner(ext, prec) {\n        let known = seen.get(ext);\n        if (known != null) {\n            if (known <= prec)\n                return;\n            let found = result[known].indexOf(ext);\n            if (found > -1)\n                result[known].splice(found, 1);\n            if (ext instanceof CompartmentInstance)\n                newCompartments.delete(ext.compartment);\n        }\n        seen.set(ext, prec);\n        if (Array.isArray(ext)) {\n            for (let e of ext)\n                inner(e, prec);\n        }\n        else if (ext instanceof CompartmentInstance) {\n            if (newCompartments.has(ext.compartment))\n                throw new RangeError(`Duplicate use of compartment in extensions`);\n            let content = compartments.get(ext.compartment) || ext.inner;\n            newCompartments.set(ext.compartment, content);\n            inner(content, prec);\n        }\n        else if (ext instanceof PrecExtension) {\n            inner(ext.inner, ext.prec);\n        }\n        else if (ext instanceof StateField) {\n            result[prec].push(ext);\n            if (ext.provides)\n                inner(ext.provides, prec);\n        }\n        else if (ext instanceof FacetProvider) {\n            result[prec].push(ext);\n            if (ext.facet.extensions)\n                inner(ext.facet.extensions, Prec_.default);\n        }\n        else {\n            let content = ext.extension;\n            if (!content)\n                throw new Error(`Unrecognized extension value in extension set (${ext}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);\n            inner(content, prec);\n        }\n    }\n    inner(extension, Prec_.default);\n    return result.reduce((a, b) => a.concat(b));\n}\nfunction ensureAddr(state, addr) {\n    if (addr & 1)\n        return 2 /* SlotStatus.Computed */;\n    let idx = addr >> 1;\n    let status = state.status[idx];\n    if (status == 4 /* SlotStatus.Computing */)\n        throw new Error(\"Cyclic dependency between fields and/or facets\");\n    if (status & 2 /* SlotStatus.Computed */)\n        return status;\n    state.status[idx] = 4 /* SlotStatus.Computing */;\n    let changed = state.computeSlot(state, state.config.dynamicSlots[idx]);\n    return state.status[idx] = 2 /* SlotStatus.Computed */ | changed;\n}\nfunction getAddr(state, addr) {\n    return addr & 1 ? state.config.staticValues[addr >> 1] : state.values[addr >> 1];\n}\n\nconst languageData = /*@__PURE__*/Facet.define();\nconst allowMultipleSelections = /*@__PURE__*/Facet.define({\n    combine: values => values.some(v => v),\n    static: true\n});\nconst lineSeparator = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : undefined,\n    static: true\n});\nconst changeFilter = /*@__PURE__*/Facet.define();\nconst transactionFilter = /*@__PURE__*/Facet.define();\nconst transactionExtender = /*@__PURE__*/Facet.define();\nconst readOnly = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : false\n});\n\n/**\nAnnotations are tagged values that are used to add metadata to\ntransactions in an extensible way. They should be used to model\nthings that effect the entire transaction (such as its [time\nstamp](https://codemirror.net/6/docs/ref/#state.Transaction^time) or information about its\n[origin](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent)). For effects that happen\n_alongside_ the other changes made by the transaction, [state\neffects](https://codemirror.net/6/docs/ref/#state.StateEffect) are more appropriate.\n*/\nclass Annotation {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The annotation type.\n    */\n    type, \n    /**\n    The value of this annotation.\n    */\n    value) {\n        this.type = type;\n        this.value = value;\n    }\n    /**\n    Define a new type of annotation.\n    */\n    static define() { return new AnnotationType(); }\n}\n/**\nMarker that identifies a type of [annotation](https://codemirror.net/6/docs/ref/#state.Annotation).\n*/\nclass AnnotationType {\n    /**\n    Create an instance of this annotation.\n    */\n    of(value) { return new Annotation(this, value); }\n}\n/**\nRepresentation of a type of state effect. Defined with\n[`StateEffect.define`](https://codemirror.net/6/docs/ref/#state.StateEffect^define).\n*/\nclass StateEffectType {\n    /**\n    @internal\n    */\n    constructor(\n    // The `any` types in these function types are there to work\n    // around TypeScript issue #37631, where the type guard on\n    // `StateEffect.is` mysteriously stops working when these properly\n    // have type `Value`.\n    /**\n    @internal\n    */\n    map) {\n        this.map = map;\n    }\n    /**\n    Create a [state effect](https://codemirror.net/6/docs/ref/#state.StateEffect) instance of this\n    type.\n    */\n    of(value) { return new StateEffect(this, value); }\n}\n/**\nState effects can be used to represent additional effects\nassociated with a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction.effects). They\nare often useful to model changes to custom [state\nfields](https://codemirror.net/6/docs/ref/#state.StateField), when those changes aren't implicit in\ndocument or selection changes.\n*/\nclass StateEffect {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    type, \n    /**\n    The value of this effect.\n    */\n    value) {\n        this.type = type;\n        this.value = value;\n    }\n    /**\n    Map this effect through a position mapping. Will return\n    `undefined` when that ends up deleting the effect.\n    */\n    map(mapping) {\n        let mapped = this.type.map(this.value, mapping);\n        return mapped === undefined ? undefined : mapped == this.value ? this : new StateEffect(this.type, mapped);\n    }\n    /**\n    Tells you whether this effect object is of a given\n    [type](https://codemirror.net/6/docs/ref/#state.StateEffectType).\n    */\n    is(type) { return this.type == type; }\n    /**\n    Define a new effect type. The type parameter indicates the type\n    of values that his effect holds. It should be a type that\n    doesn't include `undefined`, since that is used in\n    [mapping](https://codemirror.net/6/docs/ref/#state.StateEffect.map) to indicate that an effect is\n    removed.\n    */\n    static define(spec = {}) {\n        return new StateEffectType(spec.map || (v => v));\n    }\n    /**\n    Map an array of effects through a change set.\n    */\n    static mapEffects(effects, mapping) {\n        if (!effects.length)\n            return effects;\n        let result = [];\n        for (let effect of effects) {\n            let mapped = effect.map(mapping);\n            if (mapped)\n                result.push(mapped);\n        }\n        return result;\n    }\n}\n/**\nThis effect can be used to reconfigure the root extensions of\nthe editor. Doing this will discard any extensions\n[appended](https://codemirror.net/6/docs/ref/#state.StateEffect^appendConfig), but does not reset\nthe content of [reconfigured](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure)\ncompartments.\n*/\nStateEffect.reconfigure = /*@__PURE__*/StateEffect.define();\n/**\nAppend extensions to the top-level configuration of the editor.\n*/\nStateEffect.appendConfig = /*@__PURE__*/StateEffect.define();\n/**\nChanges to the editor state are grouped into transactions.\nTypically, a user action creates a single transaction, which may\ncontain any number of document changes, may change the selection,\nor have other effects. Create a transaction by calling\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update), or immediately\ndispatch one by calling\n[`EditorView.dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch).\n*/\nclass Transaction {\n    constructor(\n    /**\n    The state from which the transaction starts.\n    */\n    startState, \n    /**\n    The document changes made by this transaction.\n    */\n    changes, \n    /**\n    The selection set by this transaction, or undefined if it\n    doesn't explicitly set a selection.\n    */\n    selection, \n    /**\n    The effects added to the transaction.\n    */\n    effects, \n    /**\n    @internal\n    */\n    annotations, \n    /**\n    Whether the selection should be scrolled into view after this\n    transaction is dispatched.\n    */\n    scrollIntoView) {\n        this.startState = startState;\n        this.changes = changes;\n        this.selection = selection;\n        this.effects = effects;\n        this.annotations = annotations;\n        this.scrollIntoView = scrollIntoView;\n        /**\n        @internal\n        */\n        this._doc = null;\n        /**\n        @internal\n        */\n        this._state = null;\n        if (selection)\n            checkSelection(selection, changes.newLength);\n        if (!annotations.some((a) => a.type == Transaction.time))\n            this.annotations = annotations.concat(Transaction.time.of(Date.now()));\n    }\n    /**\n    @internal\n    */\n    static create(startState, changes, selection, effects, annotations, scrollIntoView) {\n        return new Transaction(startState, changes, selection, effects, annotations, scrollIntoView);\n    }\n    /**\n    The new document produced by the transaction. Contrary to\n    [`.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state)`.doc`, accessing this won't\n    force the entire new state to be computed right away, so it is\n    recommended that [transaction\n    filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) use this getter\n    when they need to look at the new document.\n    */\n    get newDoc() {\n        return this._doc || (this._doc = this.changes.apply(this.startState.doc));\n    }\n    /**\n    The new selection produced by the transaction. If\n    [`this.selection`](https://codemirror.net/6/docs/ref/#state.Transaction.selection) is undefined,\n    this will [map](https://codemirror.net/6/docs/ref/#state.EditorSelection.map) the start state's\n    current selection through the changes made by the transaction.\n    */\n    get newSelection() {\n        return this.selection || this.startState.selection.map(this.changes);\n    }\n    /**\n    The new state created by the transaction. Computed on demand\n    (but retained for subsequent access), so it is recommended not to\n    access it in [transaction\n    filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) when possible.\n    */\n    get state() {\n        if (!this._state)\n            this.startState.applyTransaction(this);\n        return this._state;\n    }\n    /**\n    Get the value of the given annotation type, if any.\n    */\n    annotation(type) {\n        for (let ann of this.annotations)\n            if (ann.type == type)\n                return ann.value;\n        return undefined;\n    }\n    /**\n    Indicates whether the transaction changed the document.\n    */\n    get docChanged() { return !this.changes.empty; }\n    /**\n    Indicates whether this transaction reconfigures the state\n    (through a [configuration compartment](https://codemirror.net/6/docs/ref/#state.Compartment) or\n    with a top-level configuration\n    [effect](https://codemirror.net/6/docs/ref/#state.StateEffect^reconfigure).\n    */\n    get reconfigured() { return this.startState.config != this.state.config; }\n    /**\n    Returns true if the transaction has a [user\n    event](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent) annotation that is equal to\n    or more specific than `event`. For example, if the transaction\n    has `\"select.pointer\"` as user event, `\"select\"` and\n    `\"select.pointer\"` will match it.\n    */\n    isUserEvent(event) {\n        let e = this.annotation(Transaction.userEvent);\n        return !!(e && (e == event || e.length > event.length && e.slice(0, event.length) == event && e[event.length] == \".\"));\n    }\n}\n/**\nAnnotation used to store transaction timestamps. Automatically\nadded to every transaction, holding `Date.now()`.\n*/\nTransaction.time = /*@__PURE__*/Annotation.define();\n/**\nAnnotation used to associate a transaction with a user interface\nevent. Holds a string identifying the event, using a\ndot-separated format to support attaching more specific\ninformation. The events used by the core libraries are:\n\n - `\"input\"` when content is entered\n   - `\"input.type\"` for typed input\n     - `\"input.type.compose\"` for composition\n   - `\"input.paste\"` for pasted input\n   - `\"input.drop\"` when adding content with drag-and-drop\n   - `\"input.complete\"` when autocompleting\n - `\"delete\"` when the user deletes content\n   - `\"delete.selection\"` when deleting the selection\n   - `\"delete.forward\"` when deleting forward from the selection\n   - `\"delete.backward\"` when deleting backward from the selection\n   - `\"delete.cut\"` when cutting to the clipboard\n - `\"move\"` when content is moved\n   - `\"move.drop\"` when content is moved within the editor through drag-and-drop\n - `\"select\"` when explicitly changing the selection\n   - `\"select.pointer\"` when selecting with a mouse or other pointing device\n - `\"undo\"` and `\"redo\"` for history actions\n\nUse [`isUserEvent`](https://codemirror.net/6/docs/ref/#state.Transaction.isUserEvent) to check\nwhether the annotation matches a given event.\n*/\nTransaction.userEvent = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating whether a transaction should be added to\nthe undo history or not.\n*/\nTransaction.addToHistory = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating (when present and true) that a transaction\nrepresents a change made by some other actor, not the user. This\nis used, for example, to tag other people's changes in\ncollaborative editing.\n*/\nTransaction.remote = /*@__PURE__*/Annotation.define();\nfunction joinRanges(a, b) {\n    let result = [];\n    for (let iA = 0, iB = 0;;) {\n        let from, to;\n        if (iA < a.length && (iB == b.length || b[iB] >= a[iA])) {\n            from = a[iA++];\n            to = a[iA++];\n        }\n        else if (iB < b.length) {\n            from = b[iB++];\n            to = b[iB++];\n        }\n        else\n            return result;\n        if (!result.length || result[result.length - 1] < from)\n            result.push(from, to);\n        else if (result[result.length - 1] < to)\n            result[result.length - 1] = to;\n    }\n}\nfunction mergeTransaction(a, b, sequential) {\n    var _a;\n    let mapForA, mapForB, changes;\n    if (sequential) {\n        mapForA = b.changes;\n        mapForB = ChangeSet.empty(b.changes.length);\n        changes = a.changes.compose(b.changes);\n    }\n    else {\n        mapForA = b.changes.map(a.changes);\n        mapForB = a.changes.mapDesc(b.changes, true);\n        changes = a.changes.compose(mapForA);\n    }\n    return {\n        changes,\n        selection: b.selection ? b.selection.map(mapForB) : (_a = a.selection) === null || _a === void 0 ? void 0 : _a.map(mapForA),\n        effects: StateEffect.mapEffects(a.effects, mapForA).concat(StateEffect.mapEffects(b.effects, mapForB)),\n        annotations: a.annotations.length ? a.annotations.concat(b.annotations) : b.annotations,\n        scrollIntoView: a.scrollIntoView || b.scrollIntoView\n    };\n}\nfunction resolveTransactionInner(state, spec, docSize) {\n    let sel = spec.selection, annotations = asArray(spec.annotations);\n    if (spec.userEvent)\n        annotations = annotations.concat(Transaction.userEvent.of(spec.userEvent));\n    return {\n        changes: spec.changes instanceof ChangeSet ? spec.changes\n            : ChangeSet.of(spec.changes || [], docSize, state.facet(lineSeparator)),\n        selection: sel && (sel instanceof EditorSelection ? sel : EditorSelection.single(sel.anchor, sel.head)),\n        effects: asArray(spec.effects),\n        annotations,\n        scrollIntoView: !!spec.scrollIntoView\n    };\n}\nfunction resolveTransaction(state, specs, filter) {\n    let s = resolveTransactionInner(state, specs.length ? specs[0] : {}, state.doc.length);\n    if (specs.length && specs[0].filter === false)\n        filter = false;\n    for (let i = 1; i < specs.length; i++) {\n        if (specs[i].filter === false)\n            filter = false;\n        let seq = !!specs[i].sequential;\n        s = mergeTransaction(s, resolveTransactionInner(state, specs[i], seq ? s.changes.newLength : state.doc.length), seq);\n    }\n    let tr = Transaction.create(state, s.changes, s.selection, s.effects, s.annotations, s.scrollIntoView);\n    return extendTransaction(filter ? filterTransaction(tr) : tr);\n}\n// Finish a transaction by applying filters if necessary.\nfunction filterTransaction(tr) {\n    let state = tr.startState;\n    // Change filters\n    let result = true;\n    for (let filter of state.facet(changeFilter)) {\n        let value = filter(tr);\n        if (value === false) {\n            result = false;\n            break;\n        }\n        if (Array.isArray(value))\n            result = result === true ? value : joinRanges(result, value);\n    }\n    if (result !== true) {\n        let changes, back;\n        if (result === false) {\n            back = tr.changes.invertedDesc;\n            changes = ChangeSet.empty(state.doc.length);\n        }\n        else {\n            let filtered = tr.changes.filter(result);\n            changes = filtered.changes;\n            back = filtered.filtered.mapDesc(filtered.changes).invertedDesc;\n        }\n        tr = Transaction.create(state, changes, tr.selection && tr.selection.map(back), StateEffect.mapEffects(tr.effects, back), tr.annotations, tr.scrollIntoView);\n    }\n    // Transaction filters\n    let filters = state.facet(transactionFilter);\n    for (let i = filters.length - 1; i >= 0; i--) {\n        let filtered = filters[i](tr);\n        if (filtered instanceof Transaction)\n            tr = filtered;\n        else if (Array.isArray(filtered) && filtered.length == 1 && filtered[0] instanceof Transaction)\n            tr = filtered[0];\n        else\n            tr = resolveTransaction(state, asArray(filtered), false);\n    }\n    return tr;\n}\nfunction extendTransaction(tr) {\n    let state = tr.startState, extenders = state.facet(transactionExtender), spec = tr;\n    for (let i = extenders.length - 1; i >= 0; i--) {\n        let extension = extenders[i](tr);\n        if (extension && Object.keys(extension).length)\n            spec = mergeTransaction(spec, resolveTransactionInner(state, extension, tr.changes.newLength), true);\n    }\n    return spec == tr ? tr : Transaction.create(state, tr.changes, tr.selection, spec.effects, spec.annotations, spec.scrollIntoView);\n}\nconst none = [];\nfunction asArray(value) {\n    return value == null ? none : Array.isArray(value) ? value : [value];\n}\n\n/**\nThe categories produced by a [character\ncategorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer). These are used\ndo things like selecting by word.\n*/\nvar CharCategory = /*@__PURE__*/(function (CharCategory) {\n    /**\n    Word characters.\n    */\n    CharCategory[CharCategory[\"Word\"] = 0] = \"Word\";\n    /**\n    Whitespace.\n    */\n    CharCategory[CharCategory[\"Space\"] = 1] = \"Space\";\n    /**\n    Anything else.\n    */\n    CharCategory[CharCategory[\"Other\"] = 2] = \"Other\";\nreturn CharCategory})(CharCategory || (CharCategory = {}));\nconst nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nlet wordChar;\ntry {\n    wordChar = /*@__PURE__*/new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}_]\", \"u\");\n}\ncatch (_) { }\nfunction hasWordChar(str) {\n    if (wordChar)\n        return wordChar.test(str);\n    for (let i = 0; i < str.length; i++) {\n        let ch = str[i];\n        if (/\\w/.test(ch) || ch > \"\\x80\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)))\n            return true;\n    }\n    return false;\n}\nfunction makeCategorizer(wordChars) {\n    return (char) => {\n        if (!/\\S/.test(char))\n            return CharCategory.Space;\n        if (hasWordChar(char))\n            return CharCategory.Word;\n        for (let i = 0; i < wordChars.length; i++)\n            if (char.indexOf(wordChars[i]) > -1)\n                return CharCategory.Word;\n        return CharCategory.Other;\n    };\n}\n\n/**\nThe editor state class is a persistent (immutable) data structure.\nTo update a state, you [create](https://codemirror.net/6/docs/ref/#state.EditorState.update) a\n[transaction](https://codemirror.net/6/docs/ref/#state.Transaction), which produces a _new_ state\ninstance, without modifying the original object.\n\nAs such, _never_ mutate properties of a state directly. That'll\njust break things.\n*/\nclass EditorState {\n    constructor(\n    /**\n    @internal\n    */\n    config, \n    /**\n    The current document.\n    */\n    doc, \n    /**\n    The current selection.\n    */\n    selection, \n    /**\n    @internal\n    */\n    values, computeSlot, tr) {\n        this.config = config;\n        this.doc = doc;\n        this.selection = selection;\n        this.values = values;\n        this.status = config.statusTemplate.slice();\n        this.computeSlot = computeSlot;\n        // Fill in the computed state immediately, so that further queries\n        // for it made during the update return this state\n        if (tr)\n            tr._state = this;\n        for (let i = 0; i < this.config.dynamicSlots.length; i++)\n            ensureAddr(this, i << 1);\n        this.computeSlot = null;\n    }\n    field(field, require = true) {\n        let addr = this.config.address[field.id];\n        if (addr == null) {\n            if (require)\n                throw new RangeError(\"Field is not present in this state\");\n            return undefined;\n        }\n        ensureAddr(this, addr);\n        return getAddr(this, addr);\n    }\n    /**\n    Create a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction) that updates this\n    state. Any number of [transaction specs](https://codemirror.net/6/docs/ref/#state.TransactionSpec)\n    can be passed. Unless\n    [`sequential`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.sequential) is set, the\n    [changes](https://codemirror.net/6/docs/ref/#state.TransactionSpec.changes) (if any) of each spec\n    are assumed to start in the _current_ document (not the document\n    produced by previous specs), and its\n    [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) and\n    [effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) are assumed to refer\n    to the document created by its _own_ changes. The resulting\n    transaction contains the combined effect of all the different\n    specs. For [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection), later\n    specs take precedence over earlier ones.\n    */\n    update(...specs) {\n        return resolveTransaction(this, specs, true);\n    }\n    /**\n    @internal\n    */\n    applyTransaction(tr) {\n        let conf = this.config, { base, compartments } = conf;\n        for (let effect of tr.effects) {\n            if (effect.is(Compartment.reconfigure)) {\n                if (conf) {\n                    compartments = new Map;\n                    conf.compartments.forEach((val, key) => compartments.set(key, val));\n                    conf = null;\n                }\n                compartments.set(effect.value.compartment, effect.value.extension);\n            }\n            else if (effect.is(StateEffect.reconfigure)) {\n                conf = null;\n                base = effect.value;\n            }\n            else if (effect.is(StateEffect.appendConfig)) {\n                conf = null;\n                base = asArray(base).concat(effect.value);\n            }\n        }\n        let startValues;\n        if (!conf) {\n            conf = Configuration.resolve(base, compartments, this);\n            let intermediateState = new EditorState(conf, this.doc, this.selection, conf.dynamicSlots.map(() => null), (state, slot) => slot.reconfigure(state, this), null);\n            startValues = intermediateState.values;\n        }\n        else {\n            startValues = tr.startState.values.slice();\n        }\n        let selection = tr.startState.facet(allowMultipleSelections) ? tr.newSelection : tr.newSelection.asSingle();\n        new EditorState(conf, tr.newDoc, selection, startValues, (state, slot) => slot.update(state, tr), tr);\n    }\n    /**\n    Create a [transaction spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec) that\n    replaces every selection range with the given content.\n    */\n    replaceSelection(text) {\n        if (typeof text == \"string\")\n            text = this.toText(text);\n        return this.changeByRange(range => ({ changes: { from: range.from, to: range.to, insert: text },\n            range: EditorSelection.cursor(range.from + text.length) }));\n    }\n    /**\n    Create a set of changes and a new selection by running the given\n    function for each range in the active selection. The function\n    can return an optional set of changes (in the coordinate space\n    of the start document), plus an updated range (in the coordinate\n    space of the document produced by the call's own changes). This\n    method will merge all the changes and ranges into a single\n    changeset and selection, and return it as a [transaction\n    spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec), which can be passed to\n    [`update`](https://codemirror.net/6/docs/ref/#state.EditorState.update).\n    */\n    changeByRange(f) {\n        let sel = this.selection;\n        let result1 = f(sel.ranges[0]);\n        let changes = this.changes(result1.changes), ranges = [result1.range];\n        let effects = asArray(result1.effects);\n        for (let i = 1; i < sel.ranges.length; i++) {\n            let result = f(sel.ranges[i]);\n            let newChanges = this.changes(result.changes), newMapped = newChanges.map(changes);\n            for (let j = 0; j < i; j++)\n                ranges[j] = ranges[j].map(newMapped);\n            let mapBy = changes.mapDesc(newChanges, true);\n            ranges.push(result.range.map(mapBy));\n            changes = changes.compose(newMapped);\n            effects = StateEffect.mapEffects(effects, newMapped).concat(StateEffect.mapEffects(asArray(result.effects), mapBy));\n        }\n        return {\n            changes,\n            selection: EditorSelection.create(ranges, sel.mainIndex),\n            effects\n        };\n    }\n    /**\n    Create a [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet) from the given change\n    description, taking the state's document length and line\n    separator into account.\n    */\n    changes(spec = []) {\n        if (spec instanceof ChangeSet)\n            return spec;\n        return ChangeSet.of(spec, this.doc.length, this.facet(EditorState.lineSeparator));\n    }\n    /**\n    Using the state's [line\n    separator](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator), create a\n    [`Text`](https://codemirror.net/6/docs/ref/#state.Text) instance from the given string.\n    */\n    toText(string) {\n        return Text.of(string.split(this.facet(EditorState.lineSeparator) || DefaultSplit));\n    }\n    /**\n    Return the given range of the document as a string.\n    */\n    sliceDoc(from = 0, to = this.doc.length) {\n        return this.doc.sliceString(from, to, this.lineBreak);\n    }\n    /**\n    Get the value of a state [facet](https://codemirror.net/6/docs/ref/#state.Facet).\n    */\n    facet(facet) {\n        let addr = this.config.address[facet.id];\n        if (addr == null)\n            return facet.default;\n        ensureAddr(this, addr);\n        return getAddr(this, addr);\n    }\n    /**\n    Convert this state to a JSON-serializable object. When custom\n    fields should be serialized, you can pass them in as an object\n    mapping property names (in the resulting object, which should\n    not use `doc` or `selection`) to fields.\n    */\n    toJSON(fields) {\n        let result = {\n            doc: this.sliceDoc(),\n            selection: this.selection.toJSON()\n        };\n        if (fields)\n            for (let prop in fields) {\n                let value = fields[prop];\n                if (value instanceof StateField && this.config.address[value.id] != null)\n                    result[prop] = value.spec.toJSON(this.field(fields[prop]), this);\n            }\n        return result;\n    }\n    /**\n    Deserialize a state from its JSON representation. When custom\n    fields should be deserialized, pass the same object you passed\n    to [`toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) when serializing as\n    third argument.\n    */\n    static fromJSON(json, config = {}, fields) {\n        if (!json || typeof json.doc != \"string\")\n            throw new RangeError(\"Invalid JSON representation for EditorState\");\n        let fieldInit = [];\n        if (fields)\n            for (let prop in fields) {\n                if (Object.prototype.hasOwnProperty.call(json, prop)) {\n                    let field = fields[prop], value = json[prop];\n                    fieldInit.push(field.init(state => field.spec.fromJSON(value, state)));\n                }\n            }\n        return EditorState.create({\n            doc: json.doc,\n            selection: EditorSelection.fromJSON(json.selection),\n            extensions: config.extensions ? fieldInit.concat([config.extensions]) : fieldInit\n        });\n    }\n    /**\n    Create a new state. You'll usually only need this when\n    initializing an editor\u2014updated states are created by applying\n    transactions.\n    */\n    static create(config = {}) {\n        let configuration = Configuration.resolve(config.extensions || [], new Map);\n        let doc = config.doc instanceof Text ? config.doc\n            : Text.of((config.doc || \"\").split(configuration.staticFacet(EditorState.lineSeparator) || DefaultSplit));\n        let selection = !config.selection ? EditorSelection.single(0)\n            : config.selection instanceof EditorSelection ? config.selection\n                : EditorSelection.single(config.selection.anchor, config.selection.head);\n        checkSelection(selection, doc.length);\n        if (!configuration.staticFacet(allowMultipleSelections))\n            selection = selection.asSingle();\n        return new EditorState(configuration, doc, selection, configuration.dynamicSlots.map(() => null), (state, slot) => slot.create(state), null);\n    }\n    /**\n    The size (in columns) of a tab in the document, determined by\n    the [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) facet.\n    */\n    get tabSize() { return this.facet(EditorState.tabSize); }\n    /**\n    Get the proper [line-break](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator)\n    string for this state.\n    */\n    get lineBreak() { return this.facet(EditorState.lineSeparator) || \"\\n\"; }\n    /**\n    Returns true when the editor is\n    [configured](https://codemirror.net/6/docs/ref/#state.EditorState^readOnly) to be read-only.\n    */\n    get readOnly() { return this.facet(readOnly); }\n    /**\n    Look up a translation for the given phrase (via the\n    [`phrases`](https://codemirror.net/6/docs/ref/#state.EditorState^phrases) facet), or return the\n    original string if no translation is found.\n    \n    If additional arguments are passed, they will be inserted in\n    place of markers like `$1` (for the first value) and `$2`, etc.\n    A single `$` is equivalent to `$1`, and `$$` will produce a\n    literal dollar sign.\n    */\n    phrase(phrase, ...insert) {\n        for (let map of this.facet(EditorState.phrases))\n            if (Object.prototype.hasOwnProperty.call(map, phrase)) {\n                phrase = map[phrase];\n                break;\n            }\n        if (insert.length)\n            phrase = phrase.replace(/\\$(\\$|\\d*)/g, (m, i) => {\n                if (i == \"$\")\n                    return \"$\";\n                let n = +(i || 1);\n                return !n || n > insert.length ? m : insert[n - 1];\n            });\n        return phrase;\n    }\n    /**\n    Find the values for a given language data field, provided by the\n    the [`languageData`](https://codemirror.net/6/docs/ref/#state.EditorState^languageData) facet.\n    \n    Examples of language data fields are...\n    \n    - [`\"commentTokens\"`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) for specifying\n      comment syntax.\n    - [`\"autocomplete\"`](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion^config.override)\n      for providing language-specific completion sources.\n    - [`\"wordChars\"`](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) for adding\n      characters that should be considered part of words in this\n      language.\n    - [`\"closeBrackets\"`](https://codemirror.net/6/docs/ref/#autocomplete.CloseBracketConfig) controls\n      bracket closing behavior.\n    */\n    languageDataAt(name, pos, side = -1) {\n        let values = [];\n        for (let provider of this.facet(languageData)) {\n            for (let result of provider(this, pos, side)) {\n                if (Object.prototype.hasOwnProperty.call(result, name))\n                    values.push(result[name]);\n            }\n        }\n        return values;\n    }\n    /**\n    Return a function that can categorize strings (expected to\n    represent a single [grapheme cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak))\n    into one of:\n    \n     - Word (contains an alphanumeric character or a character\n       explicitly listed in the local language's `\"wordChars\"`\n       language data, which should be a string)\n     - Space (contains only whitespace)\n     - Other (anything else)\n    */\n    charCategorizer(at) {\n        return makeCategorizer(this.languageDataAt(\"wordChars\", at).join(\"\"));\n    }\n    /**\n    Find the word at the given position, meaning the range\n    containing all [word](https://codemirror.net/6/docs/ref/#state.CharCategory.Word) characters\n    around it. If no word characters are adjacent to the position,\n    this returns null.\n    */\n    wordAt(pos) {\n        let { text, from, length } = this.doc.lineAt(pos);\n        let cat = this.charCategorizer(pos);\n        let start = pos - from, end = pos - from;\n        while (start > 0) {\n            let prev = findClusterBreak(text, start, false);\n            if (cat(text.slice(prev, start)) != CharCategory.Word)\n                break;\n            start = prev;\n        }\n        while (end < length) {\n            let next = findClusterBreak(text, end);\n            if (cat(text.slice(end, next)) != CharCategory.Word)\n                break;\n            end = next;\n        }\n        return start == end ? null : EditorSelection.range(start + from, end + from);\n    }\n}\n/**\nA facet that, when enabled, causes the editor to allow multiple\nranges to be selected. Be careful though, because by default the\neditor relies on the native DOM selection, which cannot handle\nmultiple selections. An extension like\n[`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) can be used to make\nsecondary selections visible to the user.\n*/\nEditorState.allowMultipleSelections = allowMultipleSelections;\n/**\nConfigures the tab size to use in this state. The first\n(highest-precedence) value of the facet is used. If no value is\ngiven, this defaults to 4.\n*/\nEditorState.tabSize = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : 4\n});\n/**\nThe line separator to use. By default, any of `\"\\n\"`, `\"\\r\\n\"`\nand `\"\\r\"` is treated as a separator when splitting lines, and\nlines are joined with `\"\\n\"`.\n\nWhen you configure a value here, only that precise separator\nwill be used, allowing you to round-trip documents through the\neditor without normalizing line separators.\n*/\nEditorState.lineSeparator = lineSeparator;\n/**\nThis facet controls the value of the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) getter, which is\nconsulted by commands and extensions that implement editing\nfunctionality to determine whether they should apply. It\ndefaults to false, but when its highest-precedence value is\n`true`, such functionality disables itself.\n\nNot to be confused with\n[`EditorView.editable`](https://codemirror.net/6/docs/ref/#view.EditorView^editable), which\ncontrols whether the editor's DOM is set to be editable (and\nthus focusable).\n*/\nEditorState.readOnly = readOnly;\n/**\nRegisters translation phrases. The\n[`phrase`](https://codemirror.net/6/docs/ref/#state.EditorState.phrase) method will look through\nall objects registered with this facet to find translations for\nits argument.\n*/\nEditorState.phrases = /*@__PURE__*/Facet.define({\n    compare(a, b) {\n        let kA = Object.keys(a), kB = Object.keys(b);\n        return kA.length == kB.length && kA.every(k => a[k] == b[k]);\n    }\n});\n/**\nA facet used to register [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) providers.\n*/\nEditorState.languageData = languageData;\n/**\nFacet used to register change filters, which are called for each\ntransaction (unless explicitly\n[disabled](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter)), and can suppress\npart of the transaction's changes.\n\nSuch a function can return `true` to indicate that it doesn't\nwant to do anything, `false` to completely stop the changes in\nthe transaction, or a set of ranges in which changes should be\nsuppressed. Such ranges are represented as an array of numbers,\nwith each pair of two numbers indicating the start and end of a\nrange. So for example `[10, 20, 100, 110]` suppresses changes\nbetween 10 and 20, and between 100 and 110.\n*/\nEditorState.changeFilter = changeFilter;\n/**\nFacet used to register a hook that gets a chance to update or\nreplace transaction specs before they are applied. This will\nonly be applied for transactions that don't have\n[`filter`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter) set to `false`. You\ncan either return a single transaction spec (possibly the input\ntransaction), or an array of specs (which will be combined in\nthe same way as the arguments to\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update)).\n\nWhen possible, it is recommended to avoid accessing\n[`Transaction.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state) in a filter,\nsince it will force creation of a state that will then be\ndiscarded again, if the transaction is actually filtered.\n\n(This functionality should be used with care. Indiscriminately\nmodifying transaction is likely to break something or degrade\nthe user experience.)\n*/\nEditorState.transactionFilter = transactionFilter;\n/**\nThis is a more limited form of\n[`transactionFilter`](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter),\nwhich can only add\n[annotations](https://codemirror.net/6/docs/ref/#state.TransactionSpec.annotations) and\n[effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects). _But_, this type\nof filter runs even if the transaction has disabled regular\n[filtering](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter), making it suitable\nfor effects that don't need to touch the changes or selection,\nbut do want to process every transaction.\n\nExtenders run _after_ filters, when both are present.\n*/\nEditorState.transactionExtender = transactionExtender;\nCompartment.reconfigure = /*@__PURE__*/StateEffect.define();\n\n/**\nUtility function for combining behaviors to fill in a config\nobject from an array of provided configs. `defaults` should hold\ndefault values for all optional fields in `Config`.\n\nThe function will, by default, error\nwhen a field gets two values that aren't `===`-equal, but you can\nprovide combine functions per field to do something else.\n*/\nfunction combineConfig(configs, defaults, // Should hold only the optional properties of Config, but I haven't managed to express that\ncombine = {}) {\n    let result = {};\n    for (let config of configs)\n        for (let key of Object.keys(config)) {\n            let value = config[key], current = result[key];\n            if (current === undefined)\n                result[key] = value;\n            else if (current === value || value === undefined) ; // No conflict\n            else if (Object.hasOwnProperty.call(combine, key))\n                result[key] = combine[key](current, value);\n            else\n                throw new Error(\"Config merge conflict for field \" + key);\n        }\n    for (let key in defaults)\n        if (result[key] === undefined)\n            result[key] = defaults[key];\n    return result;\n}\n\n/**\nEach range is associated with a value, which must inherit from\nthis class.\n*/\nclass RangeValue {\n    /**\n    Compare this value with another value. Used when comparing\n    rangesets. The default implementation compares by identity.\n    Unless you are only creating a fixed number of unique instances\n    of your value type, it is a good idea to implement this\n    properly.\n    */\n    eq(other) { return this == other; }\n    /**\n    Create a [range](https://codemirror.net/6/docs/ref/#state.Range) with this value.\n    */\n    range(from, to = from) { return Range.create(from, to, this); }\n}\nRangeValue.prototype.startSide = RangeValue.prototype.endSide = 0;\nRangeValue.prototype.point = false;\nRangeValue.prototype.mapMode = MapMode.TrackDel;\n/**\nA range associates a value with a range of positions.\n*/\nclass Range {\n    constructor(\n    /**\n    The range's start position.\n    */\n    from, \n    /**\n    Its end position.\n    */\n    to, \n    /**\n    The value associated with this range.\n    */\n    value) {\n        this.from = from;\n        this.to = to;\n        this.value = value;\n    }\n    /**\n    @internal\n    */\n    static create(from, to, value) {\n        return new Range(from, to, value);\n    }\n}\nfunction cmpRange(a, b) {\n    return a.from - b.from || a.value.startSide - b.value.startSide;\n}\nclass Chunk {\n    constructor(from, to, value, \n    // Chunks are marked with the largest point that occurs\n    // in them (or -1 for no points), so that scans that are\n    // only interested in points (such as the\n    // heightmap-related logic) can skip range-only chunks.\n    maxPoint) {\n        this.from = from;\n        this.to = to;\n        this.value = value;\n        this.maxPoint = maxPoint;\n    }\n    get length() { return this.to[this.to.length - 1]; }\n    // Find the index of the given position and side. Use the ranges'\n    // `from` pos when `end == false`, `to` when `end == true`.\n    findIndex(pos, side, end, startAt = 0) {\n        let arr = end ? this.to : this.from;\n        for (let lo = startAt, hi = arr.length;;) {\n            if (lo == hi)\n                return lo;\n            let mid = (lo + hi) >> 1;\n            let diff = arr[mid] - pos || (end ? this.value[mid].endSide : this.value[mid].startSide) - side;\n            if (mid == lo)\n                return diff >= 0 ? lo : hi;\n            if (diff >= 0)\n                hi = mid;\n            else\n                lo = mid + 1;\n        }\n    }\n    between(offset, from, to, f) {\n        for (let i = this.findIndex(from, -1000000000 /* C.Far */, true), e = this.findIndex(to, 1000000000 /* C.Far */, false, i); i < e; i++)\n            if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false)\n                return false;\n    }\n    map(offset, changes) {\n        let value = [], from = [], to = [], newPos = -1, maxPoint = -1;\n        for (let i = 0; i < this.value.length; i++) {\n            let val = this.value[i], curFrom = this.from[i] + offset, curTo = this.to[i] + offset, newFrom, newTo;\n            if (curFrom == curTo) {\n                let mapped = changes.mapPos(curFrom, val.startSide, val.mapMode);\n                if (mapped == null)\n                    continue;\n                newFrom = newTo = mapped;\n                if (val.startSide != val.endSide) {\n                    newTo = changes.mapPos(curFrom, val.endSide);\n                    if (newTo < newFrom)\n                        continue;\n                }\n            }\n            else {\n                newFrom = changes.mapPos(curFrom, val.startSide);\n                newTo = changes.mapPos(curTo, val.endSide);\n                if (newFrom > newTo || newFrom == newTo && val.startSide > 0 && val.endSide <= 0)\n                    continue;\n            }\n            if ((newTo - newFrom || val.endSide - val.startSide) < 0)\n                continue;\n            if (newPos < 0)\n                newPos = newFrom;\n            if (val.point)\n                maxPoint = Math.max(maxPoint, newTo - newFrom);\n            value.push(val);\n            from.push(newFrom - newPos);\n            to.push(newTo - newPos);\n        }\n        return { mapped: value.length ? new Chunk(from, to, value, maxPoint) : null, pos: newPos };\n    }\n}\n/**\nA range set stores a collection of [ranges](https://codemirror.net/6/docs/ref/#state.Range) in a\nway that makes them efficient to [map](https://codemirror.net/6/docs/ref/#state.RangeSet.map) and\n[update](https://codemirror.net/6/docs/ref/#state.RangeSet.update). This is an immutable data\nstructure.\n*/\nclass RangeSet {\n    constructor(\n    /**\n    @internal\n    */\n    chunkPos, \n    /**\n    @internal\n    */\n    chunk, \n    /**\n    @internal\n    */\n    nextLayer, \n    /**\n    @internal\n    */\n    maxPoint) {\n        this.chunkPos = chunkPos;\n        this.chunk = chunk;\n        this.nextLayer = nextLayer;\n        this.maxPoint = maxPoint;\n    }\n    /**\n    @internal\n    */\n    static create(chunkPos, chunk, nextLayer, maxPoint) {\n        return new RangeSet(chunkPos, chunk, nextLayer, maxPoint);\n    }\n    /**\n    @internal\n    */\n    get length() {\n        let last = this.chunk.length - 1;\n        return last < 0 ? 0 : Math.max(this.chunkEnd(last), this.nextLayer.length);\n    }\n    /**\n    The number of ranges in the set.\n    */\n    get size() {\n        if (this.isEmpty)\n            return 0;\n        let size = this.nextLayer.size;\n        for (let chunk of this.chunk)\n            size += chunk.value.length;\n        return size;\n    }\n    /**\n    @internal\n    */\n    chunkEnd(index) {\n        return this.chunkPos[index] + this.chunk[index].length;\n    }\n    /**\n    Update the range set, optionally adding new ranges or filtering\n    out existing ones.\n    \n    (Note: The type parameter is just there as a kludge to work\n    around TypeScript variance issues that prevented `RangeSet<X>`\n    from being a subtype of `RangeSet<Y>` when `X` is a subtype of\n    `Y`.)\n    */\n    update(updateSpec) {\n        let { add = [], sort = false, filterFrom = 0, filterTo = this.length } = updateSpec;\n        let filter = updateSpec.filter;\n        if (add.length == 0 && !filter)\n            return this;\n        if (sort)\n            add = add.slice().sort(cmpRange);\n        if (this.isEmpty)\n            return add.length ? RangeSet.of(add) : this;\n        let cur = new LayerCursor(this, null, -1).goto(0), i = 0, spill = [];\n        let builder = new RangeSetBuilder();\n        while (cur.value || i < add.length) {\n            if (i < add.length && (cur.from - add[i].from || cur.startSide - add[i].value.startSide) >= 0) {\n                let range = add[i++];\n                if (!builder.addInner(range.from, range.to, range.value))\n                    spill.push(range);\n            }\n            else if (cur.rangeIndex == 1 && cur.chunkIndex < this.chunk.length &&\n                (i == add.length || this.chunkEnd(cur.chunkIndex) < add[i].from) &&\n                (!filter || filterFrom > this.chunkEnd(cur.chunkIndex) || filterTo < this.chunkPos[cur.chunkIndex]) &&\n                builder.addChunk(this.chunkPos[cur.chunkIndex], this.chunk[cur.chunkIndex])) {\n                cur.nextChunk();\n            }\n            else {\n                if (!filter || filterFrom > cur.to || filterTo < cur.from || filter(cur.from, cur.to, cur.value)) {\n                    if (!builder.addInner(cur.from, cur.to, cur.value))\n                        spill.push(Range.create(cur.from, cur.to, cur.value));\n                }\n                cur.next();\n            }\n        }\n        return builder.finishInner(this.nextLayer.isEmpty && !spill.length ? RangeSet.empty\n            : this.nextLayer.update({ add: spill, filter, filterFrom, filterTo }));\n    }\n    /**\n    Map this range set through a set of changes, return the new set.\n    */\n    map(changes) {\n        if (changes.empty || this.isEmpty)\n            return this;\n        let chunks = [], chunkPos = [], maxPoint = -1;\n        for (let i = 0; i < this.chunk.length; i++) {\n            let start = this.chunkPos[i], chunk = this.chunk[i];\n            let touch = changes.touchesRange(start, start + chunk.length);\n            if (touch === false) {\n                maxPoint = Math.max(maxPoint, chunk.maxPoint);\n                chunks.push(chunk);\n                chunkPos.push(changes.mapPos(start));\n            }\n            else if (touch === true) {\n                let { mapped, pos } = chunk.map(start, changes);\n                if (mapped) {\n                    maxPoint = Math.max(maxPoint, mapped.maxPoint);\n                    chunks.push(mapped);\n                    chunkPos.push(pos);\n                }\n            }\n        }\n        let next = this.nextLayer.map(changes);\n        return chunks.length == 0 ? next : new RangeSet(chunkPos, chunks, next || RangeSet.empty, maxPoint);\n    }\n    /**\n    Iterate over the ranges that touch the region `from` to `to`,\n    calling `f` for each. There is no guarantee that the ranges will\n    be reported in any specific order. When the callback returns\n    `false`, iteration stops.\n    */\n    between(from, to, f) {\n        if (this.isEmpty)\n            return;\n        for (let i = 0; i < this.chunk.length; i++) {\n            let start = this.chunkPos[i], chunk = this.chunk[i];\n            if (to >= start && from <= start + chunk.length &&\n                chunk.between(start, from - start, to - start, f) === false)\n                return;\n        }\n        this.nextLayer.between(from, to, f);\n    }\n    /**\n    Iterate over the ranges in this set, in order, including all\n    ranges that end at or after `from`.\n    */\n    iter(from = 0) {\n        return HeapCursor.from([this]).goto(from);\n    }\n    /**\n    @internal\n    */\n    get isEmpty() { return this.nextLayer == this; }\n    /**\n    Iterate over the ranges in a collection of sets, in order,\n    starting from `from`.\n    */\n    static iter(sets, from = 0) {\n        return HeapCursor.from(sets).goto(from);\n    }\n    /**\n    Iterate over two groups of sets, calling methods on `comparator`\n    to notify it of possible differences.\n    */\n    static compare(oldSets, newSets, \n    /**\n    This indicates how the underlying data changed between these\n    ranges, and is needed to synchronize the iteration.\n    */\n    textDiff, comparator, \n    /**\n    Can be used to ignore all non-point ranges, and points below\n    the given size. When -1, all ranges are compared.\n    */\n    minPointSize = -1) {\n        let a = oldSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n        let b = newSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n        let sharedChunks = findSharedChunks(a, b, textDiff);\n        let sideA = new SpanCursor(a, sharedChunks, minPointSize);\n        let sideB = new SpanCursor(b, sharedChunks, minPointSize);\n        textDiff.iterGaps((fromA, fromB, length) => compare(sideA, fromA, sideB, fromB, length, comparator));\n        if (textDiff.empty && textDiff.length == 0)\n            compare(sideA, 0, sideB, 0, 0, comparator);\n    }\n    /**\n    Compare the contents of two groups of range sets, returning true\n    if they are equivalent in the given range.\n    */\n    static eq(oldSets, newSets, from = 0, to) {\n        if (to == null)\n            to = 1000000000 /* C.Far */ - 1;\n        let a = oldSets.filter(set => !set.isEmpty && newSets.indexOf(set) < 0);\n        let b = newSets.filter(set => !set.isEmpty && oldSets.indexOf(set) < 0);\n        if (a.length != b.length)\n            return false;\n        if (!a.length)\n            return true;\n        let sharedChunks = findSharedChunks(a, b);\n        let sideA = new SpanCursor(a, sharedChunks, 0).goto(from), sideB = new SpanCursor(b, sharedChunks, 0).goto(from);\n        for (;;) {\n            if (sideA.to != sideB.to ||\n                !sameValues(sideA.active, sideB.active) ||\n                sideA.point && (!sideB.point || !sideA.point.eq(sideB.point)))\n                return false;\n            if (sideA.to > to)\n                return true;\n            sideA.next();\n            sideB.next();\n        }\n    }\n    /**\n    Iterate over a group of range sets at the same time, notifying\n    the iterator about the ranges covering every given piece of\n    content. Returns the open count (see\n    [`SpanIterator.span`](https://codemirror.net/6/docs/ref/#state.SpanIterator.span)) at the end\n    of the iteration.\n    */\n    static spans(sets, from, to, iterator, \n    /**\n    When given and greater than -1, only points of at least this\n    size are taken into account.\n    */\n    minPointSize = -1) {\n        let cursor = new SpanCursor(sets, null, minPointSize).goto(from), pos = from;\n        let openRanges = cursor.openStart;\n        for (;;) {\n            let curTo = Math.min(cursor.to, to);\n            if (cursor.point) {\n                let active = cursor.activeForPoint(cursor.to);\n                let openCount = cursor.pointFrom < from ? active.length + 1\n                    : cursor.point.startSide < 0 ? active.length\n                        : Math.min(active.length, openRanges);\n                iterator.point(pos, curTo, cursor.point, active, openCount, cursor.pointRank);\n                openRanges = Math.min(cursor.openEnd(curTo), active.length);\n            }\n            else if (curTo > pos) {\n                iterator.span(pos, curTo, cursor.active, openRanges);\n                openRanges = cursor.openEnd(curTo);\n            }\n            if (cursor.to > to)\n                return openRanges + (cursor.point && cursor.to > to ? 1 : 0);\n            pos = cursor.to;\n            cursor.next();\n        }\n    }\n    /**\n    Create a range set for the given range or array of ranges. By\n    default, this expects the ranges to be _sorted_ (by start\n    position and, if two start at the same position,\n    `value.startSide`). You can pass `true` as second argument to\n    cause the method to sort them.\n    */\n    static of(ranges, sort = false) {\n        let build = new RangeSetBuilder();\n        for (let range of ranges instanceof Range ? [ranges] : sort ? lazySort(ranges) : ranges)\n            build.add(range.from, range.to, range.value);\n        return build.finish();\n    }\n    /**\n    Join an array of range sets into a single set.\n    */\n    static join(sets) {\n        if (!sets.length)\n            return RangeSet.empty;\n        let result = sets[sets.length - 1];\n        for (let i = sets.length - 2; i >= 0; i--) {\n            for (let layer = sets[i]; layer != RangeSet.empty; layer = layer.nextLayer)\n                result = new RangeSet(layer.chunkPos, layer.chunk, result, Math.max(layer.maxPoint, result.maxPoint));\n        }\n        return result;\n    }\n}\n/**\nThe empty set of ranges.\n*/\nRangeSet.empty = /*@__PURE__*/new RangeSet([], [], null, -1);\nfunction lazySort(ranges) {\n    if (ranges.length > 1)\n        for (let prev = ranges[0], i = 1; i < ranges.length; i++) {\n            let cur = ranges[i];\n            if (cmpRange(prev, cur) > 0)\n                return ranges.slice().sort(cmpRange);\n            prev = cur;\n        }\n    return ranges;\n}\nRangeSet.empty.nextLayer = RangeSet.empty;\n/**\nA range set builder is a data structure that helps build up a\n[range set](https://codemirror.net/6/docs/ref/#state.RangeSet) directly, without first allocating\nan array of [`Range`](https://codemirror.net/6/docs/ref/#state.Range) objects.\n*/\nclass RangeSetBuilder {\n    finishChunk(newArrays) {\n        this.chunks.push(new Chunk(this.from, this.to, this.value, this.maxPoint));\n        this.chunkPos.push(this.chunkStart);\n        this.chunkStart = -1;\n        this.setMaxPoint = Math.max(this.setMaxPoint, this.maxPoint);\n        this.maxPoint = -1;\n        if (newArrays) {\n            this.from = [];\n            this.to = [];\n            this.value = [];\n        }\n    }\n    /**\n    Create an empty builder.\n    */\n    constructor() {\n        this.chunks = [];\n        this.chunkPos = [];\n        this.chunkStart = -1;\n        this.last = null;\n        this.lastFrom = -1000000000 /* C.Far */;\n        this.lastTo = -1000000000 /* C.Far */;\n        this.from = [];\n        this.to = [];\n        this.value = [];\n        this.maxPoint = -1;\n        this.setMaxPoint = -1;\n        this.nextLayer = null;\n    }\n    /**\n    Add a range. Ranges should be added in sorted (by `from` and\n    `value.startSide`) order.\n    */\n    add(from, to, value) {\n        if (!this.addInner(from, to, value))\n            (this.nextLayer || (this.nextLayer = new RangeSetBuilder)).add(from, to, value);\n    }\n    /**\n    @internal\n    */\n    addInner(from, to, value) {\n        let diff = from - this.lastTo || value.startSide - this.last.endSide;\n        if (diff <= 0 && (from - this.lastFrom || value.startSide - this.last.startSide) < 0)\n            throw new Error(\"Ranges must be added sorted by `from` position and `startSide`\");\n        if (diff < 0)\n            return false;\n        if (this.from.length == 250 /* C.ChunkSize */)\n            this.finishChunk(true);\n        if (this.chunkStart < 0)\n            this.chunkStart = from;\n        this.from.push(from - this.chunkStart);\n        this.to.push(to - this.chunkStart);\n        this.last = value;\n        this.lastFrom = from;\n        this.lastTo = to;\n        this.value.push(value);\n        if (value.point)\n            this.maxPoint = Math.max(this.maxPoint, to - from);\n        return true;\n    }\n    /**\n    @internal\n    */\n    addChunk(from, chunk) {\n        if ((from - this.lastTo || chunk.value[0].startSide - this.last.endSide) < 0)\n            return false;\n        if (this.from.length)\n            this.finishChunk(true);\n        this.setMaxPoint = Math.max(this.setMaxPoint, chunk.maxPoint);\n        this.chunks.push(chunk);\n        this.chunkPos.push(from);\n        let last = chunk.value.length - 1;\n        this.last = chunk.value[last];\n        this.lastFrom = chunk.from[last] + from;\n        this.lastTo = chunk.to[last] + from;\n        return true;\n    }\n    /**\n    Finish the range set. Returns the new set. The builder can't be\n    used anymore after this has been called.\n    */\n    finish() { return this.finishInner(RangeSet.empty); }\n    /**\n    @internal\n    */\n    finishInner(next) {\n        if (this.from.length)\n            this.finishChunk(false);\n        if (this.chunks.length == 0)\n            return next;\n        let result = RangeSet.create(this.chunkPos, this.chunks, this.nextLayer ? this.nextLayer.finishInner(next) : next, this.setMaxPoint);\n        this.from = null; // Make sure further `add` calls produce errors\n        return result;\n    }\n}\nfunction findSharedChunks(a, b, textDiff) {\n    let inA = new Map();\n    for (let set of a)\n        for (let i = 0; i < set.chunk.length; i++)\n            if (set.chunk[i].maxPoint <= 0)\n                inA.set(set.chunk[i], set.chunkPos[i]);\n    let shared = new Set();\n    for (let set of b)\n        for (let i = 0; i < set.chunk.length; i++) {\n            let known = inA.get(set.chunk[i]);\n            if (known != null && (textDiff ? textDiff.mapPos(known) : known) == set.chunkPos[i] &&\n                !(textDiff === null || textDiff === void 0 ? void 0 : textDiff.touchesRange(known, known + set.chunk[i].length)))\n                shared.add(set.chunk[i]);\n        }\n    return shared;\n}\nclass LayerCursor {\n    constructor(layer, skip, minPoint, rank = 0) {\n        this.layer = layer;\n        this.skip = skip;\n        this.minPoint = minPoint;\n        this.rank = rank;\n    }\n    get startSide() { return this.value ? this.value.startSide : 0; }\n    get endSide() { return this.value ? this.value.endSide : 0; }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        this.chunkIndex = this.rangeIndex = 0;\n        this.gotoInner(pos, side, false);\n        return this;\n    }\n    gotoInner(pos, side, forward) {\n        while (this.chunkIndex < this.layer.chunk.length) {\n            let next = this.layer.chunk[this.chunkIndex];\n            if (!(this.skip && this.skip.has(next) ||\n                this.layer.chunkEnd(this.chunkIndex) < pos ||\n                next.maxPoint < this.minPoint))\n                break;\n            this.chunkIndex++;\n            forward = false;\n        }\n        if (this.chunkIndex < this.layer.chunk.length) {\n            let rangeIndex = this.layer.chunk[this.chunkIndex].findIndex(pos - this.layer.chunkPos[this.chunkIndex], side, true);\n            if (!forward || this.rangeIndex < rangeIndex)\n                this.setRangeIndex(rangeIndex);\n        }\n        this.next();\n    }\n    forward(pos, side) {\n        if ((this.to - pos || this.endSide - side) < 0)\n            this.gotoInner(pos, side, true);\n    }\n    next() {\n        for (;;) {\n            if (this.chunkIndex == this.layer.chunk.length) {\n                this.from = this.to = 1000000000 /* C.Far */;\n                this.value = null;\n                break;\n            }\n            else {\n                let chunkPos = this.layer.chunkPos[this.chunkIndex], chunk = this.layer.chunk[this.chunkIndex];\n                let from = chunkPos + chunk.from[this.rangeIndex];\n                this.from = from;\n                this.to = chunkPos + chunk.to[this.rangeIndex];\n                this.value = chunk.value[this.rangeIndex];\n                this.setRangeIndex(this.rangeIndex + 1);\n                if (this.minPoint < 0 || this.value.point && this.to - this.from >= this.minPoint)\n                    break;\n            }\n        }\n    }\n    setRangeIndex(index) {\n        if (index == this.layer.chunk[this.chunkIndex].value.length) {\n            this.chunkIndex++;\n            if (this.skip) {\n                while (this.chunkIndex < this.layer.chunk.length && this.skip.has(this.layer.chunk[this.chunkIndex]))\n                    this.chunkIndex++;\n            }\n            this.rangeIndex = 0;\n        }\n        else {\n            this.rangeIndex = index;\n        }\n    }\n    nextChunk() {\n        this.chunkIndex++;\n        this.rangeIndex = 0;\n        this.next();\n    }\n    compare(other) {\n        return this.from - other.from || this.startSide - other.startSide || this.rank - other.rank ||\n            this.to - other.to || this.endSide - other.endSide;\n    }\n}\nclass HeapCursor {\n    constructor(heap) {\n        this.heap = heap;\n    }\n    static from(sets, skip = null, minPoint = -1) {\n        let heap = [];\n        for (let i = 0; i < sets.length; i++) {\n            for (let cur = sets[i]; !cur.isEmpty; cur = cur.nextLayer) {\n                if (cur.maxPoint >= minPoint)\n                    heap.push(new LayerCursor(cur, skip, minPoint, i));\n            }\n        }\n        return heap.length == 1 ? heap[0] : new HeapCursor(heap);\n    }\n    get startSide() { return this.value ? this.value.startSide : 0; }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        for (let cur of this.heap)\n            cur.goto(pos, side);\n        for (let i = this.heap.length >> 1; i >= 0; i--)\n            heapBubble(this.heap, i);\n        this.next();\n        return this;\n    }\n    forward(pos, side) {\n        for (let cur of this.heap)\n            cur.forward(pos, side);\n        for (let i = this.heap.length >> 1; i >= 0; i--)\n            heapBubble(this.heap, i);\n        if ((this.to - pos || this.value.endSide - side) < 0)\n            this.next();\n    }\n    next() {\n        if (this.heap.length == 0) {\n            this.from = this.to = 1000000000 /* C.Far */;\n            this.value = null;\n            this.rank = -1;\n        }\n        else {\n            let top = this.heap[0];\n            this.from = top.from;\n            this.to = top.to;\n            this.value = top.value;\n            this.rank = top.rank;\n            if (top.value)\n                top.next();\n            heapBubble(this.heap, 0);\n        }\n    }\n}\nfunction heapBubble(heap, index) {\n    for (let cur = heap[index];;) {\n        let childIndex = (index << 1) + 1;\n        if (childIndex >= heap.length)\n            break;\n        let child = heap[childIndex];\n        if (childIndex + 1 < heap.length && child.compare(heap[childIndex + 1]) >= 0) {\n            child = heap[childIndex + 1];\n            childIndex++;\n        }\n        if (cur.compare(child) < 0)\n            break;\n        heap[childIndex] = cur;\n        heap[index] = child;\n        index = childIndex;\n    }\n}\nclass SpanCursor {\n    constructor(sets, skip, minPoint) {\n        this.minPoint = minPoint;\n        this.active = [];\n        this.activeTo = [];\n        this.activeRank = [];\n        this.minActive = -1;\n        // A currently active point range, if any\n        this.point = null;\n        this.pointFrom = 0;\n        this.pointRank = 0;\n        this.to = -1000000000 /* C.Far */;\n        this.endSide = 0;\n        // The amount of open active ranges at the start of the iterator.\n        // Not including points.\n        this.openStart = -1;\n        this.cursor = HeapCursor.from(sets, skip, minPoint);\n    }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        this.cursor.goto(pos, side);\n        this.active.length = this.activeTo.length = this.activeRank.length = 0;\n        this.minActive = -1;\n        this.to = pos;\n        this.endSide = side;\n        this.openStart = -1;\n        this.next();\n        return this;\n    }\n    forward(pos, side) {\n        while (this.minActive > -1 && (this.activeTo[this.minActive] - pos || this.active[this.minActive].endSide - side) < 0)\n            this.removeActive(this.minActive);\n        this.cursor.forward(pos, side);\n    }\n    removeActive(index) {\n        remove(this.active, index);\n        remove(this.activeTo, index);\n        remove(this.activeRank, index);\n        this.minActive = findMinIndex(this.active, this.activeTo);\n    }\n    addActive(trackOpen) {\n        let i = 0, { value, to, rank } = this.cursor;\n        // Organize active marks by rank first, then by size\n        while (i < this.activeRank.length && (rank - this.activeRank[i] || to - this.activeTo[i]) > 0)\n            i++;\n        insert(this.active, i, value);\n        insert(this.activeTo, i, to);\n        insert(this.activeRank, i, rank);\n        if (trackOpen)\n            insert(trackOpen, i, this.cursor.from);\n        this.minActive = findMinIndex(this.active, this.activeTo);\n    }\n    // After calling this, if `this.point` != null, the next range is a\n    // point. Otherwise, it's a regular range, covered by `this.active`.\n    next() {\n        let from = this.to, wasPoint = this.point;\n        this.point = null;\n        let trackOpen = this.openStart < 0 ? [] : null;\n        for (;;) {\n            let a = this.minActive;\n            if (a > -1 && (this.activeTo[a] - this.cursor.from || this.active[a].endSide - this.cursor.startSide) < 0) {\n                if (this.activeTo[a] > from) {\n                    this.to = this.activeTo[a];\n                    this.endSide = this.active[a].endSide;\n                    break;\n                }\n                this.removeActive(a);\n                if (trackOpen)\n                    remove(trackOpen, a);\n            }\n            else if (!this.cursor.value) {\n                this.to = this.endSide = 1000000000 /* C.Far */;\n                break;\n            }\n            else if (this.cursor.from > from) {\n                this.to = this.cursor.from;\n                this.endSide = this.cursor.startSide;\n                break;\n            }\n            else {\n                let nextVal = this.cursor.value;\n                if (!nextVal.point) { // Opening a range\n                    this.addActive(trackOpen);\n                    this.cursor.next();\n                }\n                else if (wasPoint && this.cursor.to == this.to && this.cursor.from < this.cursor.to) {\n                    // Ignore any non-empty points that end precisely at the end of the prev point\n                    this.cursor.next();\n                }\n                else { // New point\n                    this.point = nextVal;\n                    this.pointFrom = this.cursor.from;\n                    this.pointRank = this.cursor.rank;\n                    this.to = this.cursor.to;\n                    this.endSide = nextVal.endSide;\n                    this.cursor.next();\n                    this.forward(this.to, this.endSide);\n                    break;\n                }\n            }\n        }\n        if (trackOpen) {\n            this.openStart = 0;\n            for (let i = trackOpen.length - 1; i >= 0 && trackOpen[i] < from; i--)\n                this.openStart++;\n        }\n    }\n    activeForPoint(to) {\n        if (!this.active.length)\n            return this.active;\n        let active = [];\n        for (let i = this.active.length - 1; i >= 0; i--) {\n            if (this.activeRank[i] < this.pointRank)\n                break;\n            if (this.activeTo[i] > to || this.activeTo[i] == to && this.active[i].endSide >= this.point.endSide)\n                active.push(this.active[i]);\n        }\n        return active.reverse();\n    }\n    openEnd(to) {\n        let open = 0;\n        for (let i = this.activeTo.length - 1; i >= 0 && this.activeTo[i] > to; i--)\n            open++;\n        return open;\n    }\n}\nfunction compare(a, startA, b, startB, length, comparator) {\n    a.goto(startA);\n    b.goto(startB);\n    let endB = startB + length;\n    let pos = startB, dPos = startB - startA;\n    for (;;) {\n        let dEnd = (a.to + dPos) - b.to, diff = dEnd || a.endSide - b.endSide;\n        let end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);\n        if (a.point || b.point) {\n            if (!(a.point && b.point && (a.point == b.point || a.point.eq(b.point)) &&\n                sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to))))\n                comparator.comparePoint(pos, clipEnd, a.point, b.point);\n        }\n        else {\n            if (clipEnd > pos && !sameValues(a.active, b.active))\n                comparator.compareRange(pos, clipEnd, a.active, b.active);\n        }\n        if (end > endB)\n            break;\n        if ((dEnd || a.openEnd != b.openEnd) && comparator.boundChange)\n            comparator.boundChange(end);\n        pos = end;\n        if (diff <= 0)\n            a.next();\n        if (diff >= 0)\n            b.next();\n    }\n}\nfunction sameValues(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (a[i] != b[i] && !a[i].eq(b[i]))\n            return false;\n    return true;\n}\nfunction remove(array, index) {\n    for (let i = index, e = array.length - 1; i < e; i++)\n        array[i] = array[i + 1];\n    array.pop();\n}\nfunction insert(array, index, value) {\n    for (let i = array.length - 1; i >= index; i--)\n        array[i + 1] = array[i];\n    array[index] = value;\n}\nfunction findMinIndex(value, array) {\n    let found = -1, foundPos = 1000000000 /* C.Far */;\n    for (let i = 0; i < array.length; i++)\n        if ((array[i] - foundPos || value[i].endSide - value[found].endSide) < 0) {\n            found = i;\n            foundPos = array[i];\n        }\n    return found;\n}\n\n/**\nCount the column position at the given offset into the string,\ntaking extending characters and tab size into account.\n*/\nfunction countColumn(string, tabSize, to = string.length) {\n    let n = 0;\n    for (let i = 0; i < to && i < string.length;) {\n        if (string.charCodeAt(i) == 9) {\n            n += tabSize - (n % tabSize);\n            i++;\n        }\n        else {\n            n++;\n            i = findClusterBreak(string, i);\n        }\n    }\n    return n;\n}\n/**\nFind the offset that corresponds to the given column position in a\nstring, taking extending characters and tab size into account. By\ndefault, the string length is returned when it is too short to\nreach the column. Pass `strict` true to make it return -1 in that\nsituation.\n*/\nfunction findColumn(string, col, tabSize, strict) {\n    for (let i = 0, n = 0;;) {\n        if (n >= col)\n            return i;\n        if (i == string.length)\n            break;\n        n += string.charCodeAt(i) == 9 ? tabSize - (n % tabSize) : 1;\n        i = findClusterBreak(string, i);\n    }\n    return strict === true ? -1 : string.length;\n}\n\nexport { Annotation, AnnotationType, ChangeDesc, ChangeSet, CharCategory, Compartment, EditorSelection, EditorState, Facet, Line, MapMode, Prec, Range, RangeSet, RangeSetBuilder, RangeValue, SelectionRange, StateEffect, StateEffectType, StateField, Text, Transaction, codePointAt, codePointSize, combineConfig, countColumn, findClusterBreak, findColumn, fromCodePoint };\n", "const C = \"\\u037c\"\nconst COUNT = typeof Symbol == \"undefined\" ? \"__\" + C : Symbol.for(C)\nconst SET = typeof Symbol == \"undefined\" ? \"__styleSet\" + Math.floor(Math.random() * 1e8) : Symbol(\"styleSet\")\nconst top = typeof globalThis != \"undefined\" ? globalThis : typeof window != \"undefined\" ? window : {}\n\n// :: - Style modules encapsulate a set of CSS rules defined from\n// JavaScript. Their definitions are only available in a given DOM\n// root after it has been _mounted_ there with `StyleModule.mount`.\n//\n// Style modules should be created once and stored somewhere, as\n// opposed to re-creating them every time you need them. The amount of\n// CSS rules generated for a given DOM root is bounded by the amount\n// of style modules that were used. So to avoid leaking rules, don't\n// create these dynamically, but treat them as one-time allocations.\nexport class StyleModule {\n  // :: (Object<Style>, ?{finish: ?(string) \u2192 string})\n  // Create a style module from the given spec.\n  //\n  // When `finish` is given, it is called on regular (non-`@`)\n  // selectors (after `&` expansion) to compute the final selector.\n  constructor(spec, options) {\n    this.rules = []\n    let {finish} = options || {}\n\n    function splitSelector(selector) {\n      return /^@/.test(selector) ? [selector] : selector.split(/,\\s*/)\n    }\n\n    function render(selectors, spec, target, isKeyframes) {\n      let local = [], isAt = /^@(\\w+)\\b/.exec(selectors[0]), keyframes = isAt && isAt[1] == \"keyframes\"\n      if (isAt && spec == null) return target.push(selectors[0] + \";\")\n      for (let prop in spec) {\n        let value = spec[prop]\n        if (/&/.test(prop)) {\n          render(prop.split(/,\\s*/).map(part => selectors.map(sel => part.replace(/&/, sel))).reduce((a, b) => a.concat(b)),\n                 value, target)\n        } else if (value && typeof value == \"object\") {\n          if (!isAt) throw new RangeError(\"The value of a property (\" + prop + \") should be a primitive value.\")\n          render(splitSelector(prop), value, local, keyframes)\n        } else if (value != null) {\n          local.push(prop.replace(/_.*/, \"\").replace(/[A-Z]/g, l => \"-\" + l.toLowerCase()) + \": \" + value + \";\")\n        }\n      }\n      if (local.length || keyframes) {\n        target.push((finish && !isAt && !isKeyframes ? selectors.map(finish) : selectors).join(\", \") +\n                    \" {\" + local.join(\" \") + \"}\")\n      }\n    }\n\n    for (let prop in spec) render(splitSelector(prop), spec[prop], this.rules)\n  }\n\n  // :: () \u2192 string\n  // Returns a string containing the module's CSS rules.\n  getRules() { return this.rules.join(\"\\n\") }\n\n  // :: () \u2192 string\n  // Generate a new unique CSS class name.\n  static newName() {\n    let id = top[COUNT] || 1\n    top[COUNT] = id + 1\n    return C + id.toString(36)\n  }\n\n  // :: (union<Document, ShadowRoot>, union<[StyleModule], StyleModule>, ?{nonce: ?string})\n  //\n  // Mount the given set of modules in the given DOM root, which ensures\n  // that the CSS rules defined by the module are available in that\n  // context.\n  //\n  // Rules are only added to the document once per root.\n  //\n  // Rule order will follow the order of the modules, so that rules from\n  // modules later in the array take precedence of those from earlier\n  // modules. If you call this function multiple times for the same root\n  // in a way that changes the order of already mounted modules, the old\n  // order will be changed.\n  //\n  // If a Content Security Policy nonce is provided, it is added to\n  // the `<style>` tag generated by the library.\n  static mount(root, modules, options) {\n    let set = root[SET], nonce = options && options.nonce\n    if (!set) set = new StyleSet(root, nonce)\n    else if (nonce) set.setNonce(nonce)\n    set.mount(Array.isArray(modules) ? modules : [modules], root)\n  }\n}\n\nlet adoptedSet = new Map //<Document, StyleSet>\n\nclass StyleSet {\n  constructor(root, nonce) {\n    let doc = root.ownerDocument || root, win = doc.defaultView\n    if (!root.head && root.adoptedStyleSheets && win.CSSStyleSheet) {\n      let adopted = adoptedSet.get(doc)\n      if (adopted) return root[SET] = adopted\n      this.sheet = new win.CSSStyleSheet\n      adoptedSet.set(doc, this)\n    } else {\n      this.styleTag = doc.createElement(\"style\")\n      if (nonce) this.styleTag.setAttribute(\"nonce\", nonce)\n    }\n    this.modules = []\n    root[SET] = this\n  }\n\n  mount(modules, root) {\n    let sheet = this.sheet\n    let pos = 0 /* Current rule offset */, j = 0 /* Index into this.modules */\n    for (let i = 0; i < modules.length; i++) {\n      let mod = modules[i], index = this.modules.indexOf(mod)\n      if (index < j && index > -1) { // Ordering conflict\n        this.modules.splice(index, 1)\n        j--\n        index = -1\n      }\n      if (index == -1) {\n        this.modules.splice(j++, 0, mod)\n        if (sheet) for (let k = 0; k < mod.rules.length; k++)\n          sheet.insertRule(mod.rules[k], pos++)\n      } else {\n        while (j < index) pos += this.modules[j++].rules.length\n        pos += mod.rules.length\n        j++\n      }\n    }\n\n    if (sheet) {\n      if (root.adoptedStyleSheets.indexOf(this.sheet) < 0)\n        root.adoptedStyleSheets = [this.sheet, ...root.adoptedStyleSheets]\n    } else {\n      let text = \"\"\n      for (let i = 0; i < this.modules.length; i++)\n        text += this.modules[i].getRules() + \"\\n\"\n      this.styleTag.textContent = text\n      let target = root.head || root\n      if (this.styleTag.parentNode != target)\n        target.insertBefore(this.styleTag, target.firstChild)\n    }\n  }\n\n  setNonce(nonce) {\n    if (this.styleTag && this.styleTag.getAttribute(\"nonce\") != nonce)\n      this.styleTag.setAttribute(\"nonce\", nonce)\n  }\n}\n\n// Style::Object<union<Style,string>>\n//\n// A style is an object that, in the simple case, maps CSS property\n// names to strings holding their values, as in `{color: \"red\",\n// fontWeight: \"bold\"}`. The property names can be given in\n// camel-case\u2014the library will insert a dash before capital letters\n// when converting them to CSS.\n//\n// If you include an underscore in a property name, it and everything\n// after it will be removed from the output, which can be useful when\n// providing a property multiple times, for browser compatibility\n// reasons.\n//\n// A property in a style object can also be a sub-selector, which\n// extends the current context to add a pseudo-selector or a child\n// selector. Such a property should contain a `&` character, which\n// will be replaced by the current selector. For example `{\"&:before\":\n// {content: '\"hi\"'}}`. Sub-selectors and regular properties can\n// freely be mixed in a given object. Any property containing a `&` is\n// assumed to be a sub-selector.\n//\n// Finally, a property can specify an @-block to be wrapped around the\n// styles defined inside the object that's the property's value. For\n// example to create a media query you can do `{\"@media screen and\n// (min-width: 400px)\": {...}}`.\n", "import { Text, RangeSet, MapMode, RangeValue, findClusterBreak, EditorSelection, Facet, StateEffect, ChangeSet, findColumn, CharCategory, EditorState, Annotation, Transaction, Prec, codePointAt, codePointSize, combineConfig, StateField, RangeSetBuilder, countColumn } from '@codemirror/state';\nimport { StyleModule } from 'style-mod';\nimport { keyName, base, shift } from 'w3c-keyname';\n\nfunction getSelection(root) {\n    let target;\n    // Browsers differ on whether shadow roots have a getSelection\n    // method. If it exists, use that, otherwise, call it on the\n    // document.\n    if (root.nodeType == 11) { // Shadow root\n        target = root.getSelection ? root : root.ownerDocument;\n    }\n    else {\n        target = root;\n    }\n    return target.getSelection();\n}\nfunction contains(dom, node) {\n    return node ? dom == node || dom.contains(node.nodeType != 1 ? node.parentNode : node) : false;\n}\nfunction hasSelection(dom, selection) {\n    if (!selection.anchorNode)\n        return false;\n    try {\n        // Firefox will raise 'permission denied' errors when accessing\n        // properties of `sel.anchorNode` when it's in a generated CSS\n        // element.\n        return contains(dom, selection.anchorNode);\n    }\n    catch (_) {\n        return false;\n    }\n}\nfunction clientRectsFor(dom) {\n    if (dom.nodeType == 3)\n        return textRange(dom, 0, dom.nodeValue.length).getClientRects();\n    else if (dom.nodeType == 1)\n        return dom.getClientRects();\n    else\n        return [];\n}\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nfunction isEquivalentPosition(node, off, targetNode, targetOff) {\n    return targetNode ? (scanFor(node, off, targetNode, targetOff, -1) ||\n        scanFor(node, off, targetNode, targetOff, 1)) : false;\n}\nfunction domIndex(node) {\n    for (var index = 0;; index++) {\n        node = node.previousSibling;\n        if (!node)\n            return index;\n    }\n}\nfunction isBlockElement(node) {\n    return node.nodeType == 1 && /^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\\d|SECTION|PRE)$/.test(node.nodeName);\n}\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n    for (;;) {\n        if (node == targetNode && off == targetOff)\n            return true;\n        if (off == (dir < 0 ? 0 : maxOffset(node))) {\n            if (node.nodeName == \"DIV\")\n                return false;\n            let parent = node.parentNode;\n            if (!parent || parent.nodeType != 1)\n                return false;\n            off = domIndex(node) + (dir < 0 ? 0 : 1);\n            node = parent;\n        }\n        else if (node.nodeType == 1) {\n            node = node.childNodes[off + (dir < 0 ? -1 : 0)];\n            if (node.nodeType == 1 && node.contentEditable == \"false\")\n                return false;\n            off = dir < 0 ? maxOffset(node) : 0;\n        }\n        else {\n            return false;\n        }\n    }\n}\nfunction maxOffset(node) {\n    return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction flattenRect(rect, left) {\n    let x = left ? rect.left : rect.right;\n    return { left: x, right: x, top: rect.top, bottom: rect.bottom };\n}\nfunction windowRect(win) {\n    let vp = win.visualViewport;\n    if (vp)\n        return {\n            left: 0, right: vp.width,\n            top: 0, bottom: vp.height\n        };\n    return { left: 0, right: win.innerWidth,\n        top: 0, bottom: win.innerHeight };\n}\nfunction getScale(elt, rect) {\n    let scaleX = rect.width / elt.offsetWidth;\n    let scaleY = rect.height / elt.offsetHeight;\n    if (scaleX > 0.995 && scaleX < 1.005 || !isFinite(scaleX) || Math.abs(rect.width - elt.offsetWidth) < 1)\n        scaleX = 1;\n    if (scaleY > 0.995 && scaleY < 1.005 || !isFinite(scaleY) || Math.abs(rect.height - elt.offsetHeight) < 1)\n        scaleY = 1;\n    return { scaleX, scaleY };\n}\nfunction scrollRectIntoView(dom, rect, side, x, y, xMargin, yMargin, ltr) {\n    let doc = dom.ownerDocument, win = doc.defaultView || window;\n    for (let cur = dom, stop = false; cur && !stop;) {\n        if (cur.nodeType == 1) { // Element\n            let bounding, top = cur == doc.body;\n            let scaleX = 1, scaleY = 1;\n            if (top) {\n                bounding = windowRect(win);\n            }\n            else {\n                if (/^(fixed|sticky)$/.test(getComputedStyle(cur).position))\n                    stop = true;\n                if (cur.scrollHeight <= cur.clientHeight && cur.scrollWidth <= cur.clientWidth) {\n                    cur = cur.assignedSlot || cur.parentNode;\n                    continue;\n                }\n                let rect = cur.getBoundingClientRect();\n                ({ scaleX, scaleY } = getScale(cur, rect));\n                // Make sure scrollbar width isn't included in the rectangle\n                bounding = { left: rect.left, right: rect.left + cur.clientWidth * scaleX,\n                    top: rect.top, bottom: rect.top + cur.clientHeight * scaleY };\n            }\n            let moveX = 0, moveY = 0;\n            if (y == \"nearest\") {\n                if (rect.top < bounding.top) {\n                    moveY = rect.top - (bounding.top + yMargin);\n                    if (side > 0 && rect.bottom > bounding.bottom + moveY)\n                        moveY = rect.bottom - bounding.bottom + yMargin;\n                }\n                else if (rect.bottom > bounding.bottom) {\n                    moveY = rect.bottom - bounding.bottom + yMargin;\n                    if (side < 0 && (rect.top - moveY) < bounding.top)\n                        moveY = rect.top - (bounding.top + yMargin);\n                }\n            }\n            else {\n                let rectHeight = rect.bottom - rect.top, boundingHeight = bounding.bottom - bounding.top;\n                let targetTop = y == \"center\" && rectHeight <= boundingHeight ? rect.top + rectHeight / 2 - boundingHeight / 2 :\n                    y == \"start\" || y == \"center\" && side < 0 ? rect.top - yMargin :\n                        rect.bottom - boundingHeight + yMargin;\n                moveY = targetTop - bounding.top;\n            }\n            if (x == \"nearest\") {\n                if (rect.left < bounding.left) {\n                    moveX = rect.left - (bounding.left + xMargin);\n                    if (side > 0 && rect.right > bounding.right + moveX)\n                        moveX = rect.right - bounding.right + xMargin;\n                }\n                else if (rect.right > bounding.right) {\n                    moveX = rect.right - bounding.right + xMargin;\n                    if (side < 0 && rect.left < bounding.left + moveX)\n                        moveX = rect.left - (bounding.left + xMargin);\n                }\n            }\n            else {\n                let targetLeft = x == \"center\" ? rect.left + (rect.right - rect.left) / 2 - (bounding.right - bounding.left) / 2 :\n                    (x == \"start\") == ltr ? rect.left - xMargin :\n                        rect.right - (bounding.right - bounding.left) + xMargin;\n                moveX = targetLeft - bounding.left;\n            }\n            if (moveX || moveY) {\n                if (top) {\n                    win.scrollBy(moveX, moveY);\n                }\n                else {\n                    let movedX = 0, movedY = 0;\n                    if (moveY) {\n                        let start = cur.scrollTop;\n                        cur.scrollTop += moveY / scaleY;\n                        movedY = (cur.scrollTop - start) * scaleY;\n                    }\n                    if (moveX) {\n                        let start = cur.scrollLeft;\n                        cur.scrollLeft += moveX / scaleX;\n                        movedX = (cur.scrollLeft - start) * scaleX;\n                    }\n                    rect = { left: rect.left - movedX, top: rect.top - movedY,\n                        right: rect.right - movedX, bottom: rect.bottom - movedY };\n                    if (movedX && Math.abs(movedX - moveX) < 1)\n                        x = \"nearest\";\n                    if (movedY && Math.abs(movedY - moveY) < 1)\n                        y = \"nearest\";\n                }\n            }\n            if (top)\n                break;\n            if (rect.top < bounding.top || rect.bottom > bounding.bottom ||\n                rect.left < bounding.left || rect.right > bounding.right)\n                rect = { left: Math.max(rect.left, bounding.left), right: Math.min(rect.right, bounding.right),\n                    top: Math.max(rect.top, bounding.top), bottom: Math.min(rect.bottom, bounding.bottom) };\n            cur = cur.assignedSlot || cur.parentNode;\n        }\n        else if (cur.nodeType == 11) { // A shadow root\n            cur = cur.host;\n        }\n        else {\n            break;\n        }\n    }\n}\nfunction scrollableParents(dom) {\n    let doc = dom.ownerDocument, x, y;\n    for (let cur = dom.parentNode; cur;) {\n        if (cur == doc.body || (x && y)) {\n            break;\n        }\n        else if (cur.nodeType == 1) {\n            if (!y && cur.scrollHeight > cur.clientHeight)\n                y = cur;\n            if (!x && cur.scrollWidth > cur.clientWidth)\n                x = cur;\n            cur = cur.assignedSlot || cur.parentNode;\n        }\n        else if (cur.nodeType == 11) {\n            cur = cur.host;\n        }\n        else {\n            break;\n        }\n    }\n    return { x, y };\n}\nclass DOMSelectionState {\n    constructor() {\n        this.anchorNode = null;\n        this.anchorOffset = 0;\n        this.focusNode = null;\n        this.focusOffset = 0;\n    }\n    eq(domSel) {\n        return this.anchorNode == domSel.anchorNode && this.anchorOffset == domSel.anchorOffset &&\n            this.focusNode == domSel.focusNode && this.focusOffset == domSel.focusOffset;\n    }\n    setRange(range) {\n        let { anchorNode, focusNode } = range;\n        // Clip offsets to node size to avoid crashes when Safari reports bogus offsets (#1152)\n        this.set(anchorNode, Math.min(range.anchorOffset, anchorNode ? maxOffset(anchorNode) : 0), focusNode, Math.min(range.focusOffset, focusNode ? maxOffset(focusNode) : 0));\n    }\n    set(anchorNode, anchorOffset, focusNode, focusOffset) {\n        this.anchorNode = anchorNode;\n        this.anchorOffset = anchorOffset;\n        this.focusNode = focusNode;\n        this.focusOffset = focusOffset;\n    }\n}\nlet preventScrollSupported = null;\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nfunction focusPreventScroll(dom) {\n    if (dom.setActive)\n        return dom.setActive(); // in IE\n    if (preventScrollSupported)\n        return dom.focus(preventScrollSupported);\n    let stack = [];\n    for (let cur = dom; cur; cur = cur.parentNode) {\n        stack.push(cur, cur.scrollTop, cur.scrollLeft);\n        if (cur == cur.ownerDocument)\n            break;\n    }\n    dom.focus(preventScrollSupported == null ? {\n        get preventScroll() {\n            preventScrollSupported = { preventScroll: true };\n            return true;\n        }\n    } : undefined);\n    if (!preventScrollSupported) {\n        preventScrollSupported = false;\n        for (let i = 0; i < stack.length;) {\n            let elt = stack[i++], top = stack[i++], left = stack[i++];\n            if (elt.scrollTop != top)\n                elt.scrollTop = top;\n            if (elt.scrollLeft != left)\n                elt.scrollLeft = left;\n        }\n    }\n}\nlet scratchRange;\nfunction textRange(node, from, to = from) {\n    let range = scratchRange || (scratchRange = document.createRange());\n    range.setEnd(node, to);\n    range.setStart(node, from);\n    return range;\n}\nfunction dispatchKey(elt, name, code, mods) {\n    let options = { key: name, code: name, keyCode: code, which: code, cancelable: true };\n    if (mods)\n        ({ altKey: options.altKey, ctrlKey: options.ctrlKey, shiftKey: options.shiftKey, metaKey: options.metaKey } = mods);\n    let down = new KeyboardEvent(\"keydown\", options);\n    down.synthetic = true;\n    elt.dispatchEvent(down);\n    let up = new KeyboardEvent(\"keyup\", options);\n    up.synthetic = true;\n    elt.dispatchEvent(up);\n    return down.defaultPrevented || up.defaultPrevented;\n}\nfunction getRoot(node) {\n    while (node) {\n        if (node && (node.nodeType == 9 || node.nodeType == 11 && node.host))\n            return node;\n        node = node.assignedSlot || node.parentNode;\n    }\n    return null;\n}\nfunction clearAttributes(node) {\n    while (node.attributes.length)\n        node.removeAttributeNode(node.attributes[0]);\n}\nfunction atElementStart(doc, selection) {\n    let node = selection.focusNode, offset = selection.focusOffset;\n    if (!node || selection.anchorNode != node || selection.anchorOffset != offset)\n        return false;\n    // Safari can report bogus offsets (#1152)\n    offset = Math.min(offset, maxOffset(node));\n    for (;;) {\n        if (offset) {\n            if (node.nodeType != 1)\n                return false;\n            let prev = node.childNodes[offset - 1];\n            if (prev.contentEditable == \"false\")\n                offset--;\n            else {\n                node = prev;\n                offset = maxOffset(node);\n            }\n        }\n        else if (node == doc) {\n            return true;\n        }\n        else {\n            offset = domIndex(node);\n            node = node.parentNode;\n        }\n    }\n}\nfunction isScrolledToBottom(elt) {\n    return elt.scrollTop > Math.max(1, elt.scrollHeight - elt.clientHeight - 4);\n}\nfunction textNodeBefore(startNode, startOffset) {\n    for (let node = startNode, offset = startOffset;;) {\n        if (node.nodeType == 3 && offset > 0) {\n            return { node: node, offset: offset };\n        }\n        else if (node.nodeType == 1 && offset > 0) {\n            if (node.contentEditable == \"false\")\n                return null;\n            node = node.childNodes[offset - 1];\n            offset = maxOffset(node);\n        }\n        else if (node.parentNode && !isBlockElement(node)) {\n            offset = domIndex(node);\n            node = node.parentNode;\n        }\n        else {\n            return null;\n        }\n    }\n}\nfunction textNodeAfter(startNode, startOffset) {\n    for (let node = startNode, offset = startOffset;;) {\n        if (node.nodeType == 3 && offset < node.nodeValue.length) {\n            return { node: node, offset: offset };\n        }\n        else if (node.nodeType == 1 && offset < node.childNodes.length) {\n            if (node.contentEditable == \"false\")\n                return null;\n            node = node.childNodes[offset];\n            offset = 0;\n        }\n        else if (node.parentNode && !isBlockElement(node)) {\n            offset = domIndex(node) + 1;\n            node = node.parentNode;\n        }\n        else {\n            return null;\n        }\n    }\n}\n\nclass DOMPos {\n    constructor(node, offset, precise = true) {\n        this.node = node;\n        this.offset = offset;\n        this.precise = precise;\n    }\n    static before(dom, precise) { return new DOMPos(dom.parentNode, domIndex(dom), precise); }\n    static after(dom, precise) { return new DOMPos(dom.parentNode, domIndex(dom) + 1, precise); }\n}\nconst noChildren = [];\nclass ContentView {\n    constructor() {\n        this.parent = null;\n        this.dom = null;\n        this.flags = 2 /* ViewFlag.NodeDirty */;\n    }\n    get overrideDOMText() { return null; }\n    get posAtStart() {\n        return this.parent ? this.parent.posBefore(this) : 0;\n    }\n    get posAtEnd() {\n        return this.posAtStart + this.length;\n    }\n    posBefore(view) {\n        let pos = this.posAtStart;\n        for (let child of this.children) {\n            if (child == view)\n                return pos;\n            pos += child.length + child.breakAfter;\n        }\n        throw new RangeError(\"Invalid child in posBefore\");\n    }\n    posAfter(view) {\n        return this.posBefore(view) + view.length;\n    }\n    sync(view, track) {\n        if (this.flags & 2 /* ViewFlag.NodeDirty */) {\n            let parent = this.dom;\n            let prev = null, next;\n            for (let child of this.children) {\n                if (child.flags & 7 /* ViewFlag.Dirty */) {\n                    if (!child.dom && (next = prev ? prev.nextSibling : parent.firstChild)) {\n                        let contentView = ContentView.get(next);\n                        if (!contentView || !contentView.parent && contentView.canReuseDOM(child))\n                            child.reuseDOM(next);\n                    }\n                    child.sync(view, track);\n                    child.flags &= ~7 /* ViewFlag.Dirty */;\n                }\n                next = prev ? prev.nextSibling : parent.firstChild;\n                if (track && !track.written && track.node == parent && next != child.dom)\n                    track.written = true;\n                if (child.dom.parentNode == parent) {\n                    while (next && next != child.dom)\n                        next = rm$1(next);\n                }\n                else {\n                    parent.insertBefore(child.dom, next);\n                }\n                prev = child.dom;\n            }\n            next = prev ? prev.nextSibling : parent.firstChild;\n            if (next && track && track.node == parent)\n                track.written = true;\n            while (next)\n                next = rm$1(next);\n        }\n        else if (this.flags & 1 /* ViewFlag.ChildDirty */) {\n            for (let child of this.children)\n                if (child.flags & 7 /* ViewFlag.Dirty */) {\n                    child.sync(view, track);\n                    child.flags &= ~7 /* ViewFlag.Dirty */;\n                }\n        }\n    }\n    reuseDOM(_dom) { }\n    localPosFromDOM(node, offset) {\n        let after;\n        if (node == this.dom) {\n            after = this.dom.childNodes[offset];\n        }\n        else {\n            let bias = maxOffset(node) == 0 ? 0 : offset == 0 ? -1 : 1;\n            for (;;) {\n                let parent = node.parentNode;\n                if (parent == this.dom)\n                    break;\n                if (bias == 0 && parent.firstChild != parent.lastChild) {\n                    if (node == parent.firstChild)\n                        bias = -1;\n                    else\n                        bias = 1;\n                }\n                node = parent;\n            }\n            if (bias < 0)\n                after = node;\n            else\n                after = node.nextSibling;\n        }\n        if (after == this.dom.firstChild)\n            return 0;\n        while (after && !ContentView.get(after))\n            after = after.nextSibling;\n        if (!after)\n            return this.length;\n        for (let i = 0, pos = 0;; i++) {\n            let child = this.children[i];\n            if (child.dom == after)\n                return pos;\n            pos += child.length + child.breakAfter;\n        }\n    }\n    domBoundsAround(from, to, offset = 0) {\n        let fromI = -1, fromStart = -1, toI = -1, toEnd = -1;\n        for (let i = 0, pos = offset, prevEnd = offset; i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (pos < from && end > to)\n                return child.domBoundsAround(from, to, pos);\n            if (end >= from && fromI == -1) {\n                fromI = i;\n                fromStart = pos;\n            }\n            if (pos > to && child.dom.parentNode == this.dom) {\n                toI = i;\n                toEnd = prevEnd;\n                break;\n            }\n            prevEnd = end;\n            pos = end + child.breakAfter;\n        }\n        return { from: fromStart, to: toEnd < 0 ? offset + this.length : toEnd,\n            startDOM: (fromI ? this.children[fromI - 1].dom.nextSibling : null) || this.dom.firstChild,\n            endDOM: toI < this.children.length && toI >= 0 ? this.children[toI].dom : null };\n    }\n    markDirty(andParent = false) {\n        this.flags |= 2 /* ViewFlag.NodeDirty */;\n        this.markParentsDirty(andParent);\n    }\n    markParentsDirty(childList) {\n        for (let parent = this.parent; parent; parent = parent.parent) {\n            if (childList)\n                parent.flags |= 2 /* ViewFlag.NodeDirty */;\n            if (parent.flags & 1 /* ViewFlag.ChildDirty */)\n                return;\n            parent.flags |= 1 /* ViewFlag.ChildDirty */;\n            childList = false;\n        }\n    }\n    setParent(parent) {\n        if (this.parent != parent) {\n            this.parent = parent;\n            if (this.flags & 7 /* ViewFlag.Dirty */)\n                this.markParentsDirty(true);\n        }\n    }\n    setDOM(dom) {\n        if (this.dom == dom)\n            return;\n        if (this.dom)\n            this.dom.cmView = null;\n        this.dom = dom;\n        dom.cmView = this;\n    }\n    get rootView() {\n        for (let v = this;;) {\n            let parent = v.parent;\n            if (!parent)\n                return v;\n            v = parent;\n        }\n    }\n    replaceChildren(from, to, children = noChildren) {\n        this.markDirty();\n        for (let i = from; i < to; i++) {\n            let child = this.children[i];\n            if (child.parent == this && children.indexOf(child) < 0)\n                child.destroy();\n        }\n        if (children.length < 250)\n            this.children.splice(from, to - from, ...children);\n        else\n            this.children = [].concat(this.children.slice(0, from), children, this.children.slice(to));\n        for (let i = 0; i < children.length; i++)\n            children[i].setParent(this);\n    }\n    ignoreMutation(_rec) { return false; }\n    ignoreEvent(_event) { return false; }\n    childCursor(pos = this.length) {\n        return new ChildCursor(this.children, pos, this.children.length);\n    }\n    childPos(pos, bias = 1) {\n        return this.childCursor().findPos(pos, bias);\n    }\n    toString() {\n        let name = this.constructor.name.replace(\"View\", \"\");\n        return name + (this.children.length ? \"(\" + this.children.join() + \")\" :\n            this.length ? \"[\" + (name == \"Text\" ? this.text : this.length) + \"]\" : \"\") +\n            (this.breakAfter ? \"#\" : \"\");\n    }\n    static get(node) { return node.cmView; }\n    get isEditable() { return true; }\n    get isWidget() { return false; }\n    get isHidden() { return false; }\n    merge(from, to, source, hasStart, openStart, openEnd) {\n        return false;\n    }\n    become(other) { return false; }\n    canReuseDOM(other) {\n        return other.constructor == this.constructor && !((this.flags | other.flags) & 8 /* ViewFlag.Composition */);\n    }\n    // When this is a zero-length view with a side, this should return a\n    // number <= 0 to indicate it is before its position, or a\n    // number > 0 when after its position.\n    getSide() { return 0; }\n    destroy() {\n        for (let child of this.children)\n            if (child.parent == this)\n                child.destroy();\n        this.parent = null;\n    }\n}\nContentView.prototype.breakAfter = 0;\n// Remove a DOM node and return its next sibling.\nfunction rm$1(dom) {\n    let next = dom.nextSibling;\n    dom.parentNode.removeChild(dom);\n    return next;\n}\nclass ChildCursor {\n    constructor(children, pos, i) {\n        this.children = children;\n        this.pos = pos;\n        this.i = i;\n        this.off = 0;\n    }\n    findPos(pos, bias = 1) {\n        for (;;) {\n            if (pos > this.pos || pos == this.pos &&\n                (bias > 0 || this.i == 0 || this.children[this.i - 1].breakAfter)) {\n                this.off = pos - this.pos;\n                return this;\n            }\n            let next = this.children[--this.i];\n            this.pos -= next.length + next.breakAfter;\n        }\n    }\n}\nfunction replaceRange(parent, fromI, fromOff, toI, toOff, insert, breakAtStart, openStart, openEnd) {\n    let { children } = parent;\n    let before = children.length ? children[fromI] : null;\n    let last = insert.length ? insert[insert.length - 1] : null;\n    let breakAtEnd = last ? last.breakAfter : breakAtStart;\n    // Change within a single child\n    if (fromI == toI && before && !breakAtStart && !breakAtEnd && insert.length < 2 &&\n        before.merge(fromOff, toOff, insert.length ? last : null, fromOff == 0, openStart, openEnd))\n        return;\n    if (toI < children.length) {\n        let after = children[toI];\n        // Make sure the end of the child after the update is preserved in `after`\n        if (after && (toOff < after.length || after.breakAfter && (last === null || last === void 0 ? void 0 : last.breakAfter))) {\n            // If we're splitting a child, separate part of it to avoid that\n            // being mangled when updating the child before the update.\n            if (fromI == toI) {\n                after = after.split(toOff);\n                toOff = 0;\n            }\n            // If the element after the replacement should be merged with\n            // the last replacing element, update `content`\n            if (!breakAtEnd && last && after.merge(0, toOff, last, true, 0, openEnd)) {\n                insert[insert.length - 1] = after;\n            }\n            else {\n                // Remove the start of the after element, if necessary, and\n                // add it to `content`.\n                if (toOff || after.children.length && !after.children[0].length)\n                    after.merge(0, toOff, null, false, 0, openEnd);\n                insert.push(after);\n            }\n        }\n        else if (after === null || after === void 0 ? void 0 : after.breakAfter) {\n            // The element at `toI` is entirely covered by this range.\n            // Preserve its line break, if any.\n            if (last)\n                last.breakAfter = 1;\n            else\n                breakAtStart = 1;\n        }\n        // Since we've handled the next element from the current elements\n        // now, make sure `toI` points after that.\n        toI++;\n    }\n    if (before) {\n        before.breakAfter = breakAtStart;\n        if (fromOff > 0) {\n            if (!breakAtStart && insert.length && before.merge(fromOff, before.length, insert[0], false, openStart, 0)) {\n                before.breakAfter = insert.shift().breakAfter;\n            }\n            else if (fromOff < before.length || before.children.length && before.children[before.children.length - 1].length == 0) {\n                before.merge(fromOff, before.length, null, false, openStart, 0);\n            }\n            fromI++;\n        }\n    }\n    // Try to merge widgets on the boundaries of the replacement\n    while (fromI < toI && insert.length) {\n        if (children[toI - 1].become(insert[insert.length - 1])) {\n            toI--;\n            insert.pop();\n            openEnd = insert.length ? 0 : openStart;\n        }\n        else if (children[fromI].become(insert[0])) {\n            fromI++;\n            insert.shift();\n            openStart = insert.length ? 0 : openEnd;\n        }\n        else {\n            break;\n        }\n    }\n    if (!insert.length && fromI && toI < children.length && !children[fromI - 1].breakAfter &&\n        children[toI].merge(0, 0, children[fromI - 1], false, openStart, openEnd))\n        fromI--;\n    if (fromI < toI || insert.length)\n        parent.replaceChildren(fromI, toI, insert);\n}\nfunction mergeChildrenInto(parent, from, to, insert, openStart, openEnd) {\n    let cur = parent.childCursor();\n    let { i: toI, off: toOff } = cur.findPos(to, 1);\n    let { i: fromI, off: fromOff } = cur.findPos(from, -1);\n    let dLen = from - to;\n    for (let view of insert)\n        dLen += view.length;\n    parent.length += dLen;\n    replaceRange(parent, fromI, fromOff, toI, toOff, insert, 0, openStart, openEnd);\n}\n\nlet nav = typeof navigator != \"undefined\" ? navigator : { userAgent: \"\", vendor: \"\", platform: \"\" };\nlet doc = typeof document != \"undefined\" ? document : { documentElement: { style: {} } };\nconst ie_edge = /*@__PURE__*//Edge\\/(\\d+)/.exec(nav.userAgent);\nconst ie_upto10 = /*@__PURE__*//MSIE \\d/.test(nav.userAgent);\nconst ie_11up = /*@__PURE__*//Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(nav.userAgent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst gecko = !ie && /*@__PURE__*//gecko\\/(\\d+)/i.test(nav.userAgent);\nconst chrome = !ie && /*@__PURE__*//Chrome\\/(\\d+)/.exec(nav.userAgent);\nconst webkit = \"webkitFontSmoothing\" in doc.documentElement.style;\nconst safari = !ie && /*@__PURE__*//Apple Computer/.test(nav.vendor);\nconst ios = safari && (/*@__PURE__*//Mobile\\/\\w+/.test(nav.userAgent) || nav.maxTouchPoints > 2);\nvar browser = {\n    mac: ios || /*@__PURE__*//Mac/.test(nav.platform),\n    windows: /*@__PURE__*//Win/.test(nav.platform),\n    linux: /*@__PURE__*//Linux|X11/.test(nav.platform),\n    ie,\n    ie_version: ie_upto10 ? doc.documentMode || 6 : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0,\n    gecko,\n    gecko_version: gecko ? +(/*@__PURE__*//Firefox\\/(\\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n    chrome: !!chrome,\n    chrome_version: chrome ? +chrome[1] : 0,\n    ios,\n    android: /*@__PURE__*//Android\\b/.test(nav.userAgent),\n    webkit,\n    safari,\n    webkit_version: webkit ? +(/*@__PURE__*//\\bAppleWebKit\\/(\\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n    tabSize: doc.documentElement.style.tabSize != null ? \"tab-size\" : \"-moz-tab-size\"\n};\n\nconst MaxJoinLen = 256;\nclass TextView extends ContentView {\n    constructor(text) {\n        super();\n        this.text = text;\n    }\n    get length() { return this.text.length; }\n    createDOM(textDOM) {\n        this.setDOM(textDOM || document.createTextNode(this.text));\n    }\n    sync(view, track) {\n        if (!this.dom)\n            this.createDOM();\n        if (this.dom.nodeValue != this.text) {\n            if (track && track.node == this.dom)\n                track.written = true;\n            this.dom.nodeValue = this.text;\n        }\n    }\n    reuseDOM(dom) {\n        if (dom.nodeType == 3)\n            this.createDOM(dom);\n    }\n    merge(from, to, source) {\n        if ((this.flags & 8 /* ViewFlag.Composition */) ||\n            source && (!(source instanceof TextView) ||\n                this.length - (to - from) + source.length > MaxJoinLen ||\n                (source.flags & 8 /* ViewFlag.Composition */)))\n            return false;\n        this.text = this.text.slice(0, from) + (source ? source.text : \"\") + this.text.slice(to);\n        this.markDirty();\n        return true;\n    }\n    split(from) {\n        let result = new TextView(this.text.slice(from));\n        this.text = this.text.slice(0, from);\n        this.markDirty();\n        result.flags |= this.flags & 8 /* ViewFlag.Composition */;\n        return result;\n    }\n    localPosFromDOM(node, offset) {\n        return node == this.dom ? offset : offset ? this.text.length : 0;\n    }\n    domAtPos(pos) { return new DOMPos(this.dom, pos); }\n    domBoundsAround(_from, _to, offset) {\n        return { from: offset, to: offset + this.length, startDOM: this.dom, endDOM: this.dom.nextSibling };\n    }\n    coordsAt(pos, side) {\n        return textCoords(this.dom, pos, side);\n    }\n}\nclass MarkView extends ContentView {\n    constructor(mark, children = [], length = 0) {\n        super();\n        this.mark = mark;\n        this.children = children;\n        this.length = length;\n        for (let ch of children)\n            ch.setParent(this);\n    }\n    setAttrs(dom) {\n        clearAttributes(dom);\n        if (this.mark.class)\n            dom.className = this.mark.class;\n        if (this.mark.attrs)\n            for (let name in this.mark.attrs)\n                dom.setAttribute(name, this.mark.attrs[name]);\n        return dom;\n    }\n    canReuseDOM(other) {\n        return super.canReuseDOM(other) && !((this.flags | other.flags) & 8 /* ViewFlag.Composition */);\n    }\n    reuseDOM(node) {\n        if (node.nodeName == this.mark.tagName.toUpperCase()) {\n            this.setDOM(node);\n            this.flags |= 4 /* ViewFlag.AttrsDirty */ | 2 /* ViewFlag.NodeDirty */;\n        }\n    }\n    sync(view, track) {\n        if (!this.dom)\n            this.setDOM(this.setAttrs(document.createElement(this.mark.tagName)));\n        else if (this.flags & 4 /* ViewFlag.AttrsDirty */)\n            this.setAttrs(this.dom);\n        super.sync(view, track);\n    }\n    merge(from, to, source, _hasStart, openStart, openEnd) {\n        if (source && (!(source instanceof MarkView && source.mark.eq(this.mark)) ||\n            (from && openStart <= 0) || (to < this.length && openEnd <= 0)))\n            return false;\n        mergeChildrenInto(this, from, to, source ? source.children.slice() : [], openStart - 1, openEnd - 1);\n        this.markDirty();\n        return true;\n    }\n    split(from) {\n        let result = [], off = 0, detachFrom = -1, i = 0;\n        for (let elt of this.children) {\n            let end = off + elt.length;\n            if (end > from)\n                result.push(off < from ? elt.split(from - off) : elt);\n            if (detachFrom < 0 && off >= from)\n                detachFrom = i;\n            off = end;\n            i++;\n        }\n        let length = this.length - from;\n        this.length = from;\n        if (detachFrom > -1) {\n            this.children.length = detachFrom;\n            this.markDirty();\n        }\n        return new MarkView(this.mark, result, length);\n    }\n    domAtPos(pos) {\n        return inlineDOMAtPos(this, pos);\n    }\n    coordsAt(pos, side) {\n        return coordsInChildren(this, pos, side);\n    }\n}\nfunction textCoords(text, pos, side) {\n    let length = text.nodeValue.length;\n    if (pos > length)\n        pos = length;\n    let from = pos, to = pos, flatten = 0;\n    if (pos == 0 && side < 0 || pos == length && side >= 0) {\n        if (!(browser.chrome || browser.gecko)) { // These browsers reliably return valid rectangles for empty ranges\n            if (pos) {\n                from--;\n                flatten = 1;\n            } // FIXME this is wrong in RTL text\n            else if (to < length) {\n                to++;\n                flatten = -1;\n            }\n        }\n    }\n    else {\n        if (side < 0)\n            from--;\n        else if (to < length)\n            to++;\n    }\n    let rects = textRange(text, from, to).getClientRects();\n    if (!rects.length)\n        return null;\n    let rect = rects[(flatten ? flatten < 0 : side >= 0) ? 0 : rects.length - 1];\n    if (browser.safari && !flatten && rect.width == 0)\n        rect = Array.prototype.find.call(rects, r => r.width) || rect;\n    return flatten ? flattenRect(rect, flatten < 0) : rect || null;\n}\n// Also used for collapsed ranges that don't have a placeholder widget!\nclass WidgetView extends ContentView {\n    static create(widget, length, side) {\n        return new WidgetView(widget, length, side);\n    }\n    constructor(widget, length, side) {\n        super();\n        this.widget = widget;\n        this.length = length;\n        this.side = side;\n        this.prevWidget = null;\n    }\n    split(from) {\n        let result = WidgetView.create(this.widget, this.length - from, this.side);\n        this.length -= from;\n        return result;\n    }\n    sync(view) {\n        if (!this.dom || !this.widget.updateDOM(this.dom, view)) {\n            if (this.dom && this.prevWidget)\n                this.prevWidget.destroy(this.dom);\n            this.prevWidget = null;\n            this.setDOM(this.widget.toDOM(view));\n            if (!this.widget.editable)\n                this.dom.contentEditable = \"false\";\n        }\n    }\n    getSide() { return this.side; }\n    merge(from, to, source, hasStart, openStart, openEnd) {\n        if (source && (!(source instanceof WidgetView) || !this.widget.compare(source.widget) ||\n            from > 0 && openStart <= 0 || to < this.length && openEnd <= 0))\n            return false;\n        this.length = from + (source ? source.length : 0) + (this.length - to);\n        return true;\n    }\n    become(other) {\n        if (other instanceof WidgetView && other.side == this.side &&\n            this.widget.constructor == other.widget.constructor) {\n            if (!this.widget.compare(other.widget))\n                this.markDirty(true);\n            if (this.dom && !this.prevWidget)\n                this.prevWidget = this.widget;\n            this.widget = other.widget;\n            this.length = other.length;\n            return true;\n        }\n        return false;\n    }\n    ignoreMutation() { return true; }\n    ignoreEvent(event) { return this.widget.ignoreEvent(event); }\n    get overrideDOMText() {\n        if (this.length == 0)\n            return Text.empty;\n        let top = this;\n        while (top.parent)\n            top = top.parent;\n        let { view } = top, text = view && view.state.doc, start = this.posAtStart;\n        return text ? text.slice(start, start + this.length) : Text.empty;\n    }\n    domAtPos(pos) {\n        return (this.length ? pos == 0 : this.side > 0)\n            ? DOMPos.before(this.dom)\n            : DOMPos.after(this.dom, pos == this.length);\n    }\n    domBoundsAround() { return null; }\n    coordsAt(pos, side) {\n        let custom = this.widget.coordsAt(this.dom, pos, side);\n        if (custom)\n            return custom;\n        let rects = this.dom.getClientRects(), rect = null;\n        if (!rects.length)\n            return null;\n        let fromBack = this.side ? this.side < 0 : pos > 0;\n        for (let i = fromBack ? rects.length - 1 : 0;; i += (fromBack ? -1 : 1)) {\n            rect = rects[i];\n            if (pos > 0 ? i == 0 : i == rects.length - 1 || rect.top < rect.bottom)\n                break;\n        }\n        return flattenRect(rect, !fromBack);\n    }\n    get isEditable() { return false; }\n    get isWidget() { return true; }\n    get isHidden() { return this.widget.isHidden; }\n    destroy() {\n        super.destroy();\n        if (this.dom)\n            this.widget.destroy(this.dom);\n    }\n}\n// These are drawn around uneditable widgets to avoid a number of\n// browser bugs that show up when the cursor is directly next to\n// uneditable inline content.\nclass WidgetBufferView extends ContentView {\n    constructor(side) {\n        super();\n        this.side = side;\n    }\n    get length() { return 0; }\n    merge() { return false; }\n    become(other) {\n        return other instanceof WidgetBufferView && other.side == this.side;\n    }\n    split() { return new WidgetBufferView(this.side); }\n    sync() {\n        if (!this.dom) {\n            let dom = document.createElement(\"img\");\n            dom.className = \"cm-widgetBuffer\";\n            dom.setAttribute(\"aria-hidden\", \"true\");\n            this.setDOM(dom);\n        }\n    }\n    getSide() { return this.side; }\n    domAtPos(pos) { return this.side > 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom); }\n    localPosFromDOM() { return 0; }\n    domBoundsAround() { return null; }\n    coordsAt(pos) {\n        return this.dom.getBoundingClientRect();\n    }\n    get overrideDOMText() {\n        return Text.empty;\n    }\n    get isHidden() { return true; }\n}\nTextView.prototype.children = WidgetView.prototype.children = WidgetBufferView.prototype.children = noChildren;\nfunction inlineDOMAtPos(parent, pos) {\n    let dom = parent.dom, { children } = parent, i = 0;\n    for (let off = 0; i < children.length; i++) {\n        let child = children[i], end = off + child.length;\n        if (end == off && child.getSide() <= 0)\n            continue;\n        if (pos > off && pos < end && child.dom.parentNode == dom)\n            return child.domAtPos(pos - off);\n        if (pos <= off)\n            break;\n        off = end;\n    }\n    for (let j = i; j > 0; j--) {\n        let prev = children[j - 1];\n        if (prev.dom.parentNode == dom)\n            return prev.domAtPos(prev.length);\n    }\n    for (let j = i; j < children.length; j++) {\n        let next = children[j];\n        if (next.dom.parentNode == dom)\n            return next.domAtPos(0);\n    }\n    return new DOMPos(dom, 0);\n}\n// Assumes `view`, if a mark view, has precisely 1 child.\nfunction joinInlineInto(parent, view, open) {\n    let last, { children } = parent;\n    if (open > 0 && view instanceof MarkView && children.length &&\n        (last = children[children.length - 1]) instanceof MarkView && last.mark.eq(view.mark)) {\n        joinInlineInto(last, view.children[0], open - 1);\n    }\n    else {\n        children.push(view);\n        view.setParent(parent);\n    }\n    parent.length += view.length;\n}\nfunction coordsInChildren(view, pos, side) {\n    let before = null, beforePos = -1, after = null, afterPos = -1;\n    function scan(view, pos) {\n        for (let i = 0, off = 0; i < view.children.length && off <= pos; i++) {\n            let child = view.children[i], end = off + child.length;\n            if (end >= pos) {\n                if (child.children.length) {\n                    scan(child, pos - off);\n                }\n                else if ((!after || after.isHidden && (side > 0 || onSameLine(after, child))) &&\n                    (end > pos || off == end && child.getSide() > 0)) {\n                    after = child;\n                    afterPos = pos - off;\n                }\n                else if (off < pos || (off == end && child.getSide() < 0) && !child.isHidden) {\n                    before = child;\n                    beforePos = pos - off;\n                }\n            }\n            off = end;\n        }\n    }\n    scan(view, pos);\n    let target = (side < 0 ? before : after) || before || after;\n    if (target)\n        return target.coordsAt(Math.max(0, target == before ? beforePos : afterPos), side);\n    return fallbackRect(view);\n}\nfunction fallbackRect(view) {\n    let last = view.dom.lastChild;\n    if (!last)\n        return view.dom.getBoundingClientRect();\n    let rects = clientRectsFor(last);\n    return rects[rects.length - 1] || null;\n}\nfunction onSameLine(a, b) {\n    let posA = a.coordsAt(0, 1), posB = b.coordsAt(0, 1);\n    return posA && posB && posB.top < posA.bottom;\n}\n\nfunction combineAttrs(source, target) {\n    for (let name in source) {\n        if (name == \"class\" && target.class)\n            target.class += \" \" + source.class;\n        else if (name == \"style\" && target.style)\n            target.style += \";\" + source.style;\n        else\n            target[name] = source[name];\n    }\n    return target;\n}\nconst noAttrs = /*@__PURE__*/Object.create(null);\nfunction attrsEq(a, b, ignore) {\n    if (a == b)\n        return true;\n    if (!a)\n        a = noAttrs;\n    if (!b)\n        b = noAttrs;\n    let keysA = Object.keys(a), keysB = Object.keys(b);\n    if (keysA.length - (ignore && keysA.indexOf(ignore) > -1 ? 1 : 0) !=\n        keysB.length - (ignore && keysB.indexOf(ignore) > -1 ? 1 : 0))\n        return false;\n    for (let key of keysA) {\n        if (key != ignore && (keysB.indexOf(key) == -1 || a[key] !== b[key]))\n            return false;\n    }\n    return true;\n}\nfunction updateAttrs(dom, prev, attrs) {\n    let changed = false;\n    if (prev)\n        for (let name in prev)\n            if (!(attrs && name in attrs)) {\n                changed = true;\n                if (name == \"style\")\n                    dom.style.cssText = \"\";\n                else\n                    dom.removeAttribute(name);\n            }\n    if (attrs)\n        for (let name in attrs)\n            if (!(prev && prev[name] == attrs[name])) {\n                changed = true;\n                if (name == \"style\")\n                    dom.style.cssText = attrs[name];\n                else\n                    dom.setAttribute(name, attrs[name]);\n            }\n    return changed;\n}\nfunction getAttrs(dom) {\n    let attrs = Object.create(null);\n    for (let i = 0; i < dom.attributes.length; i++) {\n        let attr = dom.attributes[i];\n        attrs[attr.name] = attr.value;\n    }\n    return attrs;\n}\n\n/**\nWidgets added to the content are described by subclasses of this\nclass. Using a description object like that makes it possible to\ndelay creating of the DOM structure for a widget until it is\nneeded, and to avoid redrawing widgets even if the decorations\nthat define them are recreated.\n*/\nclass WidgetType {\n    /**\n    Compare this instance to another instance of the same type.\n    (TypeScript can't express this, but only instances of the same\n    specific class will be passed to this method.) This is used to\n    avoid redrawing widgets when they are replaced by a new\n    decoration of the same type. The default implementation just\n    returns `false`, which will cause new instances of the widget to\n    always be redrawn.\n    */\n    eq(widget) { return false; }\n    /**\n    Update a DOM element created by a widget of the same type (but\n    different, non-`eq` content) to reflect this widget. May return\n    true to indicate that it could update, false to indicate it\n    couldn't (in which case the widget will be redrawn). The default\n    implementation just returns false.\n    */\n    updateDOM(dom, view) { return false; }\n    /**\n    @internal\n    */\n    compare(other) {\n        return this == other || this.constructor == other.constructor && this.eq(other);\n    }\n    /**\n    The estimated height this widget will have, to be used when\n    estimating the height of content that hasn't been drawn. May\n    return -1 to indicate you don't know. The default implementation\n    returns -1.\n    */\n    get estimatedHeight() { return -1; }\n    /**\n    For inline widgets that are displayed inline (as opposed to\n    `inline-block`) and introduce line breaks (through `<br>` tags\n    or textual newlines), this must indicate the amount of line\n    breaks they introduce. Defaults to 0.\n    */\n    get lineBreaks() { return 0; }\n    /**\n    Can be used to configure which kinds of events inside the widget\n    should be ignored by the editor. The default is to ignore all\n    events.\n    */\n    ignoreEvent(event) { return true; }\n    /**\n    Override the way screen coordinates for positions at/in the\n    widget are found. `pos` will be the offset into the widget, and\n    `side` the side of the position that is being queried\u2014less than\n    zero for before, greater than zero for after, and zero for\n    directly at that position.\n    */\n    coordsAt(dom, pos, side) { return null; }\n    /**\n    @internal\n    */\n    get isHidden() { return false; }\n    /**\n    @internal\n    */\n    get editable() { return false; }\n    /**\n    This is called when the an instance of the widget is removed\n    from the editor view.\n    */\n    destroy(dom) { }\n}\n/**\nThe different types of blocks that can occur in an editor view.\n*/\nvar BlockType = /*@__PURE__*/(function (BlockType) {\n    /**\n    A line of text.\n    */\n    BlockType[BlockType[\"Text\"] = 0] = \"Text\";\n    /**\n    A block widget associated with the position after it.\n    */\n    BlockType[BlockType[\"WidgetBefore\"] = 1] = \"WidgetBefore\";\n    /**\n    A block widget associated with the position before it.\n    */\n    BlockType[BlockType[\"WidgetAfter\"] = 2] = \"WidgetAfter\";\n    /**\n    A block widget [replacing](https://codemirror.net/6/docs/ref/#view.Decoration^replace) a range of content.\n    */\n    BlockType[BlockType[\"WidgetRange\"] = 3] = \"WidgetRange\";\nreturn BlockType})(BlockType || (BlockType = {}));\n/**\nA decoration provides information on how to draw or style a piece\nof content. You'll usually use it wrapped in a\n[`Range`](https://codemirror.net/6/docs/ref/#state.Range), which adds a start and end position.\n@nonabstract\n*/\nclass Decoration extends RangeValue {\n    constructor(\n    /**\n    @internal\n    */\n    startSide, \n    /**\n    @internal\n    */\n    endSide, \n    /**\n    @internal\n    */\n    widget, \n    /**\n    The config object used to create this decoration. You can\n    include additional properties in there to store metadata about\n    your decoration.\n    */\n    spec) {\n        super();\n        this.startSide = startSide;\n        this.endSide = endSide;\n        this.widget = widget;\n        this.spec = spec;\n    }\n    /**\n    @internal\n    */\n    get heightRelevant() { return false; }\n    /**\n    Create a mark decoration, which influences the styling of the\n    content in its range. Nested mark decorations will cause nested\n    DOM elements to be created. Nesting order is determined by\n    precedence of the [facet](https://codemirror.net/6/docs/ref/#view.EditorView^decorations), with\n    the higher-precedence decorations creating the inner DOM nodes.\n    Such elements are split on line boundaries and on the boundaries\n    of lower-precedence decorations.\n    */\n    static mark(spec) {\n        return new MarkDecoration(spec);\n    }\n    /**\n    Create a widget decoration, which displays a DOM element at the\n    given position.\n    */\n    static widget(spec) {\n        let side = Math.max(-10000, Math.min(10000, spec.side || 0)), block = !!spec.block;\n        side += (block && !spec.inlineOrder)\n            ? (side > 0 ? 300000000 /* Side.BlockAfter */ : -400000000 /* Side.BlockBefore */)\n            : (side > 0 ? 100000000 /* Side.InlineAfter */ : -100000000 /* Side.InlineBefore */);\n        return new PointDecoration(spec, side, side, block, spec.widget || null, false);\n    }\n    /**\n    Create a replace decoration which replaces the given range with\n    a widget, or simply hides it.\n    */\n    static replace(spec) {\n        let block = !!spec.block, startSide, endSide;\n        if (spec.isBlockGap) {\n            startSide = -500000000 /* Side.GapStart */;\n            endSide = 400000000 /* Side.GapEnd */;\n        }\n        else {\n            let { start, end } = getInclusive(spec, block);\n            startSide = (start ? (block ? -300000000 /* Side.BlockIncStart */ : -1 /* Side.InlineIncStart */) : 500000000 /* Side.NonIncStart */) - 1;\n            endSide = (end ? (block ? 200000000 /* Side.BlockIncEnd */ : 1 /* Side.InlineIncEnd */) : -600000000 /* Side.NonIncEnd */) + 1;\n        }\n        return new PointDecoration(spec, startSide, endSide, block, spec.widget || null, true);\n    }\n    /**\n    Create a line decoration, which can add DOM attributes to the\n    line starting at the given position.\n    */\n    static line(spec) {\n        return new LineDecoration(spec);\n    }\n    /**\n    Build a [`DecorationSet`](https://codemirror.net/6/docs/ref/#view.DecorationSet) from the given\n    decorated range or ranges. If the ranges aren't already sorted,\n    pass `true` for `sort` to make the library sort them for you.\n    */\n    static set(of, sort = false) {\n        return RangeSet.of(of, sort);\n    }\n    /**\n    @internal\n    */\n    hasHeight() { return this.widget ? this.widget.estimatedHeight > -1 : false; }\n}\n/**\nThe empty set of decorations.\n*/\nDecoration.none = RangeSet.empty;\nclass MarkDecoration extends Decoration {\n    constructor(spec) {\n        let { start, end } = getInclusive(spec);\n        super(start ? -1 /* Side.InlineIncStart */ : 500000000 /* Side.NonIncStart */, end ? 1 /* Side.InlineIncEnd */ : -600000000 /* Side.NonIncEnd */, null, spec);\n        this.tagName = spec.tagName || \"span\";\n        this.class = spec.class || \"\";\n        this.attrs = spec.attributes || null;\n    }\n    eq(other) {\n        var _a, _b;\n        return this == other ||\n            other instanceof MarkDecoration &&\n                this.tagName == other.tagName &&\n                (this.class || ((_a = this.attrs) === null || _a === void 0 ? void 0 : _a.class)) == (other.class || ((_b = other.attrs) === null || _b === void 0 ? void 0 : _b.class)) &&\n                attrsEq(this.attrs, other.attrs, \"class\");\n    }\n    range(from, to = from) {\n        if (from >= to)\n            throw new RangeError(\"Mark decorations may not be empty\");\n        return super.range(from, to);\n    }\n}\nMarkDecoration.prototype.point = false;\nclass LineDecoration extends Decoration {\n    constructor(spec) {\n        super(-200000000 /* Side.Line */, -200000000 /* Side.Line */, null, spec);\n    }\n    eq(other) {\n        return other instanceof LineDecoration &&\n            this.spec.class == other.spec.class &&\n            attrsEq(this.spec.attributes, other.spec.attributes);\n    }\n    range(from, to = from) {\n        if (to != from)\n            throw new RangeError(\"Line decoration ranges must be zero-length\");\n        return super.range(from, to);\n    }\n}\nLineDecoration.prototype.mapMode = MapMode.TrackBefore;\nLineDecoration.prototype.point = true;\nclass PointDecoration extends Decoration {\n    constructor(spec, startSide, endSide, block, widget, isReplace) {\n        super(startSide, endSide, widget, spec);\n        this.block = block;\n        this.isReplace = isReplace;\n        this.mapMode = !block ? MapMode.TrackDel : startSide <= 0 ? MapMode.TrackBefore : MapMode.TrackAfter;\n    }\n    // Only relevant when this.block == true\n    get type() {\n        return this.startSide != this.endSide ? BlockType.WidgetRange\n            : this.startSide <= 0 ? BlockType.WidgetBefore : BlockType.WidgetAfter;\n    }\n    get heightRelevant() {\n        return this.block || !!this.widget && (this.widget.estimatedHeight >= 5 || this.widget.lineBreaks > 0);\n    }\n    eq(other) {\n        return other instanceof PointDecoration &&\n            widgetsEq(this.widget, other.widget) &&\n            this.block == other.block &&\n            this.startSide == other.startSide && this.endSide == other.endSide;\n    }\n    range(from, to = from) {\n        if (this.isReplace && (from > to || (from == to && this.startSide > 0 && this.endSide <= 0)))\n            throw new RangeError(\"Invalid range for replacement decoration\");\n        if (!this.isReplace && to != from)\n            throw new RangeError(\"Widget decorations can only have zero-length ranges\");\n        return super.range(from, to);\n    }\n}\nPointDecoration.prototype.point = true;\nfunction getInclusive(spec, block = false) {\n    let { inclusiveStart: start, inclusiveEnd: end } = spec;\n    if (start == null)\n        start = spec.inclusive;\n    if (end == null)\n        end = spec.inclusive;\n    return { start: start !== null && start !== void 0 ? start : block, end: end !== null && end !== void 0 ? end : block };\n}\nfunction widgetsEq(a, b) {\n    return a == b || !!(a && b && a.compare(b));\n}\nfunction addRange(from, to, ranges, margin = 0) {\n    let last = ranges.length - 1;\n    if (last >= 0 && ranges[last] + margin >= from)\n        ranges[last] = Math.max(ranges[last], to);\n    else\n        ranges.push(from, to);\n}\n\nclass LineView extends ContentView {\n    constructor() {\n        super(...arguments);\n        this.children = [];\n        this.length = 0;\n        this.prevAttrs = undefined;\n        this.attrs = null;\n        this.breakAfter = 0;\n    }\n    // Consumes source\n    merge(from, to, source, hasStart, openStart, openEnd) {\n        if (source) {\n            if (!(source instanceof LineView))\n                return false;\n            if (!this.dom)\n                source.transferDOM(this); // Reuse source.dom when appropriate\n        }\n        if (hasStart)\n            this.setDeco(source ? source.attrs : null);\n        mergeChildrenInto(this, from, to, source ? source.children.slice() : [], openStart, openEnd);\n        return true;\n    }\n    split(at) {\n        let end = new LineView;\n        end.breakAfter = this.breakAfter;\n        if (this.length == 0)\n            return end;\n        let { i, off } = this.childPos(at);\n        if (off) {\n            end.append(this.children[i].split(off), 0);\n            this.children[i].merge(off, this.children[i].length, null, false, 0, 0);\n            i++;\n        }\n        for (let j = i; j < this.children.length; j++)\n            end.append(this.children[j], 0);\n        while (i > 0 && this.children[i - 1].length == 0)\n            this.children[--i].destroy();\n        this.children.length = i;\n        this.markDirty();\n        this.length = at;\n        return end;\n    }\n    transferDOM(other) {\n        if (!this.dom)\n            return;\n        this.markDirty();\n        other.setDOM(this.dom);\n        other.prevAttrs = this.prevAttrs === undefined ? this.attrs : this.prevAttrs;\n        this.prevAttrs = undefined;\n        this.dom = null;\n    }\n    setDeco(attrs) {\n        if (!attrsEq(this.attrs, attrs)) {\n            if (this.dom) {\n                this.prevAttrs = this.attrs;\n                this.markDirty();\n            }\n            this.attrs = attrs;\n        }\n    }\n    append(child, openStart) {\n        joinInlineInto(this, child, openStart);\n    }\n    // Only called when building a line view in ContentBuilder\n    addLineDeco(deco) {\n        let attrs = deco.spec.attributes, cls = deco.spec.class;\n        if (attrs)\n            this.attrs = combineAttrs(attrs, this.attrs || {});\n        if (cls)\n            this.attrs = combineAttrs({ class: cls }, this.attrs || {});\n    }\n    domAtPos(pos) {\n        return inlineDOMAtPos(this, pos);\n    }\n    reuseDOM(node) {\n        if (node.nodeName == \"DIV\") {\n            this.setDOM(node);\n            this.flags |= 4 /* ViewFlag.AttrsDirty */ | 2 /* ViewFlag.NodeDirty */;\n        }\n    }\n    sync(view, track) {\n        var _a;\n        if (!this.dom) {\n            this.setDOM(document.createElement(\"div\"));\n            this.dom.className = \"cm-line\";\n            this.prevAttrs = this.attrs ? null : undefined;\n        }\n        else if (this.flags & 4 /* ViewFlag.AttrsDirty */) {\n            clearAttributes(this.dom);\n            this.dom.className = \"cm-line\";\n            this.prevAttrs = this.attrs ? null : undefined;\n        }\n        if (this.prevAttrs !== undefined) {\n            updateAttrs(this.dom, this.prevAttrs, this.attrs);\n            this.dom.classList.add(\"cm-line\");\n            this.prevAttrs = undefined;\n        }\n        super.sync(view, track);\n        let last = this.dom.lastChild;\n        while (last && ContentView.get(last) instanceof MarkView)\n            last = last.lastChild;\n        if (!last || !this.length ||\n            last.nodeName != \"BR\" && ((_a = ContentView.get(last)) === null || _a === void 0 ? void 0 : _a.isEditable) == false &&\n                (!browser.ios || !this.children.some(ch => ch instanceof TextView))) {\n            let hack = document.createElement(\"BR\");\n            hack.cmIgnore = true;\n            this.dom.appendChild(hack);\n        }\n    }\n    measureTextSize() {\n        if (this.children.length == 0 || this.length > 20)\n            return null;\n        let totalWidth = 0, textHeight;\n        for (let child of this.children) {\n            if (!(child instanceof TextView) || /[^ -~]/.test(child.text))\n                return null;\n            let rects = clientRectsFor(child.dom);\n            if (rects.length != 1)\n                return null;\n            totalWidth += rects[0].width;\n            textHeight = rects[0].height;\n        }\n        return !totalWidth ? null : {\n            lineHeight: this.dom.getBoundingClientRect().height,\n            charWidth: totalWidth / this.length,\n            textHeight\n        };\n    }\n    coordsAt(pos, side) {\n        let rect = coordsInChildren(this, pos, side);\n        // Correct rectangle height for empty lines when the returned\n        // height is larger than the text height.\n        if (!this.children.length && rect && this.parent) {\n            let { heightOracle } = this.parent.view.viewState, height = rect.bottom - rect.top;\n            if (Math.abs(height - heightOracle.lineHeight) < 2 && heightOracle.textHeight < height) {\n                let dist = (height - heightOracle.textHeight) / 2;\n                return { top: rect.top + dist, bottom: rect.bottom - dist, left: rect.left, right: rect.left };\n            }\n        }\n        return rect;\n    }\n    become(other) {\n        return other instanceof LineView && this.children.length == 0 && other.children.length == 0 &&\n            attrsEq(this.attrs, other.attrs) && this.breakAfter == other.breakAfter;\n    }\n    covers() { return true; }\n    static find(docView, pos) {\n        for (let i = 0, off = 0; i < docView.children.length; i++) {\n            let block = docView.children[i], end = off + block.length;\n            if (end >= pos) {\n                if (block instanceof LineView)\n                    return block;\n                if (end > pos)\n                    break;\n            }\n            off = end + block.breakAfter;\n        }\n        return null;\n    }\n}\nclass BlockWidgetView extends ContentView {\n    constructor(widget, length, deco) {\n        super();\n        this.widget = widget;\n        this.length = length;\n        this.deco = deco;\n        this.breakAfter = 0;\n        this.prevWidget = null;\n    }\n    merge(from, to, source, _takeDeco, openStart, openEnd) {\n        if (source && (!(source instanceof BlockWidgetView) || !this.widget.compare(source.widget) ||\n            from > 0 && openStart <= 0 || to < this.length && openEnd <= 0))\n            return false;\n        this.length = from + (source ? source.length : 0) + (this.length - to);\n        return true;\n    }\n    domAtPos(pos) {\n        return pos == 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom, pos == this.length);\n    }\n    split(at) {\n        let len = this.length - at;\n        this.length = at;\n        let end = new BlockWidgetView(this.widget, len, this.deco);\n        end.breakAfter = this.breakAfter;\n        return end;\n    }\n    get children() { return noChildren; }\n    sync(view) {\n        if (!this.dom || !this.widget.updateDOM(this.dom, view)) {\n            if (this.dom && this.prevWidget)\n                this.prevWidget.destroy(this.dom);\n            this.prevWidget = null;\n            this.setDOM(this.widget.toDOM(view));\n            if (!this.widget.editable)\n                this.dom.contentEditable = \"false\";\n        }\n    }\n    get overrideDOMText() {\n        return this.parent ? this.parent.view.state.doc.slice(this.posAtStart, this.posAtEnd) : Text.empty;\n    }\n    domBoundsAround() { return null; }\n    become(other) {\n        if (other instanceof BlockWidgetView &&\n            other.widget.constructor == this.widget.constructor) {\n            if (!other.widget.compare(this.widget))\n                this.markDirty(true);\n            if (this.dom && !this.prevWidget)\n                this.prevWidget = this.widget;\n            this.widget = other.widget;\n            this.length = other.length;\n            this.deco = other.deco;\n            this.breakAfter = other.breakAfter;\n            return true;\n        }\n        return false;\n    }\n    ignoreMutation() { return true; }\n    ignoreEvent(event) { return this.widget.ignoreEvent(event); }\n    get isEditable() { return false; }\n    get isWidget() { return true; }\n    coordsAt(pos, side) {\n        let custom = this.widget.coordsAt(this.dom, pos, side);\n        if (custom)\n            return custom;\n        if (this.widget instanceof BlockGapWidget)\n            return null;\n        return flattenRect(this.dom.getBoundingClientRect(), this.length ? pos == 0 : side <= 0);\n    }\n    destroy() {\n        super.destroy();\n        if (this.dom)\n            this.widget.destroy(this.dom);\n    }\n    covers(side) {\n        let { startSide, endSide } = this.deco;\n        return startSide == endSide ? false : side < 0 ? startSide < 0 : endSide > 0;\n    }\n}\nclass BlockGapWidget extends WidgetType {\n    constructor(height) {\n        super();\n        this.height = height;\n    }\n    toDOM() {\n        let elt = document.createElement(\"div\");\n        elt.className = \"cm-gap\";\n        this.updateDOM(elt);\n        return elt;\n    }\n    eq(other) { return other.height == this.height; }\n    updateDOM(elt) {\n        elt.style.height = this.height + \"px\";\n        return true;\n    }\n    get editable() { return true; }\n    get estimatedHeight() { return this.height; }\n    ignoreEvent() { return false; }\n}\n\nclass ContentBuilder {\n    constructor(doc, pos, end, disallowBlockEffectsFor) {\n        this.doc = doc;\n        this.pos = pos;\n        this.end = end;\n        this.disallowBlockEffectsFor = disallowBlockEffectsFor;\n        this.content = [];\n        this.curLine = null;\n        this.breakAtStart = 0;\n        this.pendingBuffer = 0 /* Buf.No */;\n        this.bufferMarks = [];\n        // Set to false directly after a widget that covers the position after it\n        this.atCursorPos = true;\n        this.openStart = -1;\n        this.openEnd = -1;\n        this.text = \"\";\n        this.textOff = 0;\n        this.cursor = doc.iter();\n        this.skip = pos;\n    }\n    posCovered() {\n        if (this.content.length == 0)\n            return !this.breakAtStart && this.doc.lineAt(this.pos).from != this.pos;\n        let last = this.content[this.content.length - 1];\n        return !(last.breakAfter || last instanceof BlockWidgetView && last.deco.endSide < 0);\n    }\n    getLine() {\n        if (!this.curLine) {\n            this.content.push(this.curLine = new LineView);\n            this.atCursorPos = true;\n        }\n        return this.curLine;\n    }\n    flushBuffer(active = this.bufferMarks) {\n        if (this.pendingBuffer) {\n            this.curLine.append(wrapMarks(new WidgetBufferView(-1), active), active.length);\n            this.pendingBuffer = 0 /* Buf.No */;\n        }\n    }\n    addBlockWidget(view) {\n        this.flushBuffer();\n        this.curLine = null;\n        this.content.push(view);\n    }\n    finish(openEnd) {\n        if (this.pendingBuffer && openEnd <= this.bufferMarks.length)\n            this.flushBuffer();\n        else\n            this.pendingBuffer = 0 /* Buf.No */;\n        if (!this.posCovered() &&\n            !(openEnd && this.content.length && this.content[this.content.length - 1] instanceof BlockWidgetView))\n            this.getLine();\n    }\n    buildText(length, active, openStart) {\n        while (length > 0) {\n            if (this.textOff == this.text.length) {\n                let { value, lineBreak, done } = this.cursor.next(this.skip);\n                this.skip = 0;\n                if (done)\n                    throw new Error(\"Ran out of text content when drawing inline views\");\n                if (lineBreak) {\n                    if (!this.posCovered())\n                        this.getLine();\n                    if (this.content.length)\n                        this.content[this.content.length - 1].breakAfter = 1;\n                    else\n                        this.breakAtStart = 1;\n                    this.flushBuffer();\n                    this.curLine = null;\n                    this.atCursorPos = true;\n                    length--;\n                    continue;\n                }\n                else {\n                    this.text = value;\n                    this.textOff = 0;\n                }\n            }\n            let take = Math.min(this.text.length - this.textOff, length, 512 /* T.Chunk */);\n            this.flushBuffer(active.slice(active.length - openStart));\n            this.getLine().append(wrapMarks(new TextView(this.text.slice(this.textOff, this.textOff + take)), active), openStart);\n            this.atCursorPos = true;\n            this.textOff += take;\n            length -= take;\n            openStart = 0;\n        }\n    }\n    span(from, to, active, openStart) {\n        this.buildText(to - from, active, openStart);\n        this.pos = to;\n        if (this.openStart < 0)\n            this.openStart = openStart;\n    }\n    point(from, to, deco, active, openStart, index) {\n        if (this.disallowBlockEffectsFor[index] && deco instanceof PointDecoration) {\n            if (deco.block)\n                throw new RangeError(\"Block decorations may not be specified via plugins\");\n            if (to > this.doc.lineAt(this.pos).to)\n                throw new RangeError(\"Decorations that replace line breaks may not be specified via plugins\");\n        }\n        let len = to - from;\n        if (deco instanceof PointDecoration) {\n            if (deco.block) {\n                if (deco.startSide > 0 && !this.posCovered())\n                    this.getLine();\n                this.addBlockWidget(new BlockWidgetView(deco.widget || NullWidget.block, len, deco));\n            }\n            else {\n                let view = WidgetView.create(deco.widget || NullWidget.inline, len, len ? 0 : deco.startSide);\n                let cursorBefore = this.atCursorPos && !view.isEditable && openStart <= active.length &&\n                    (from < to || deco.startSide > 0);\n                let cursorAfter = !view.isEditable && (from < to || openStart > active.length || deco.startSide <= 0);\n                let line = this.getLine();\n                if (this.pendingBuffer == 2 /* Buf.IfCursor */ && !cursorBefore && !view.isEditable)\n                    this.pendingBuffer = 0 /* Buf.No */;\n                this.flushBuffer(active);\n                if (cursorBefore) {\n                    line.append(wrapMarks(new WidgetBufferView(1), active), openStart);\n                    openStart = active.length + Math.max(0, openStart - active.length);\n                }\n                line.append(wrapMarks(view, active), openStart);\n                this.atCursorPos = cursorAfter;\n                this.pendingBuffer = !cursorAfter ? 0 /* Buf.No */ : from < to || openStart > active.length ? 1 /* Buf.Yes */ : 2 /* Buf.IfCursor */;\n                if (this.pendingBuffer)\n                    this.bufferMarks = active.slice();\n            }\n        }\n        else if (this.doc.lineAt(this.pos).from == this.pos) { // Line decoration\n            this.getLine().addLineDeco(deco);\n        }\n        if (len) {\n            // Advance the iterator past the replaced content\n            if (this.textOff + len <= this.text.length) {\n                this.textOff += len;\n            }\n            else {\n                this.skip += len - (this.text.length - this.textOff);\n                this.text = \"\";\n                this.textOff = 0;\n            }\n            this.pos = to;\n        }\n        if (this.openStart < 0)\n            this.openStart = openStart;\n    }\n    static build(text, from, to, decorations, dynamicDecorationMap) {\n        let builder = new ContentBuilder(text, from, to, dynamicDecorationMap);\n        builder.openEnd = RangeSet.spans(decorations, from, to, builder);\n        if (builder.openStart < 0)\n            builder.openStart = builder.openEnd;\n        builder.finish(builder.openEnd);\n        return builder;\n    }\n}\nfunction wrapMarks(view, active) {\n    for (let mark of active)\n        view = new MarkView(mark, [view], view.length);\n    return view;\n}\nclass NullWidget extends WidgetType {\n    constructor(tag) {\n        super();\n        this.tag = tag;\n    }\n    eq(other) { return other.tag == this.tag; }\n    toDOM() { return document.createElement(this.tag); }\n    updateDOM(elt) { return elt.nodeName.toLowerCase() == this.tag; }\n    get isHidden() { return true; }\n}\nNullWidget.inline = /*@__PURE__*/new NullWidget(\"span\");\nNullWidget.block = /*@__PURE__*/new NullWidget(\"div\");\n\n/**\nUsed to indicate [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n*/\nvar Direction = /*@__PURE__*/(function (Direction) {\n    // (These are chosen to match the base levels, in bidi algorithm\n    // terms, of spans in that direction.)\n    /**\n    Left-to-right.\n    */\n    Direction[Direction[\"LTR\"] = 0] = \"LTR\";\n    /**\n    Right-to-left.\n    */\n    Direction[Direction[\"RTL\"] = 1] = \"RTL\";\nreturn Direction})(Direction || (Direction = {}));\nconst LTR = Direction.LTR, RTL = Direction.RTL;\n// Decode a string with each type encoded as log2(type)\nfunction dec(str) {\n    let result = [];\n    for (let i = 0; i < str.length; i++)\n        result.push(1 << +str[i]);\n    return result;\n}\n// Character types for codepoints 0 to 0xf8\nconst LowTypes = /*@__PURE__*/dec(\"88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008\");\n// Character types for codepoints 0x600 to 0x6f9\nconst ArabicTypes = /*@__PURE__*/dec(\"4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333\");\nconst Brackets = /*@__PURE__*/Object.create(null), BracketStack = [];\n// There's a lot more in\n// https://www.unicode.org/Public/UCD/latest/ucd/BidiBrackets.txt,\n// which are left out to keep code size down.\nfor (let p of [\"()\", \"[]\", \"{}\"]) {\n    let l = /*@__PURE__*/p.charCodeAt(0), r = /*@__PURE__*/p.charCodeAt(1);\n    Brackets[l] = r;\n    Brackets[r] = -l;\n}\nfunction charType(ch) {\n    return ch <= 0xf7 ? LowTypes[ch] :\n        0x590 <= ch && ch <= 0x5f4 ? 2 /* T.R */ :\n            0x600 <= ch && ch <= 0x6f9 ? ArabicTypes[ch - 0x600] :\n                0x6ee <= ch && ch <= 0x8ac ? 4 /* T.AL */ :\n                    0x2000 <= ch && ch <= 0x200c ? 256 /* T.NI */ :\n                        0xfb50 <= ch && ch <= 0xfdff ? 4 /* T.AL */ : 1 /* T.L */;\n}\nconst BidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/;\n/**\nRepresents a contiguous range of text that has a single direction\n(as in left-to-right or right-to-left).\n*/\nclass BidiSpan {\n    /**\n    The direction of this span.\n    */\n    get dir() { return this.level % 2 ? RTL : LTR; }\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start of the span (relative to the start of the line).\n    */\n    from, \n    /**\n    The end of the span.\n    */\n    to, \n    /**\n    The [\"bidi\n    level\"](https://unicode.org/reports/tr9/#Basic_Display_Algorithm)\n    of the span (in this context, 0 means\n    left-to-right, 1 means right-to-left, 2 means left-to-right\n    number inside right-to-left text).\n    */\n    level) {\n        this.from = from;\n        this.to = to;\n        this.level = level;\n    }\n    /**\n    @internal\n    */\n    side(end, dir) { return (this.dir == dir) == end ? this.to : this.from; }\n    /**\n    @internal\n    */\n    forward(forward, dir) { return forward == (this.dir == dir); }\n    /**\n    @internal\n    */\n    static find(order, index, level, assoc) {\n        let maybe = -1;\n        for (let i = 0; i < order.length; i++) {\n            let span = order[i];\n            if (span.from <= index && span.to >= index) {\n                if (span.level == level)\n                    return i;\n                // When multiple spans match, if assoc != 0, take the one that\n                // covers that side, otherwise take the one with the minimum\n                // level.\n                if (maybe < 0 || (assoc != 0 ? (assoc < 0 ? span.from < index : span.to > index) : order[maybe].level > span.level))\n                    maybe = i;\n            }\n        }\n        if (maybe < 0)\n            throw new RangeError(\"Index out of range\");\n        return maybe;\n    }\n}\nfunction isolatesEq(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++) {\n        let iA = a[i], iB = b[i];\n        if (iA.from != iB.from || iA.to != iB.to || iA.direction != iB.direction || !isolatesEq(iA.inner, iB.inner))\n            return false;\n    }\n    return true;\n}\n// Reused array of character types\nconst types = [];\n// Fill in the character types (in `types`) from `from` to `to` and\n// apply W normalization rules.\nfunction computeCharTypes(line, rFrom, rTo, isolates, outerType) {\n    for (let iI = 0; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        let prevType = iI ? 256 /* T.NI */ : outerType;\n        // W1. Examine each non-spacing mark (NSM) in the level run, and\n        // change the type of the NSM to the type of the previous\n        // character. If the NSM is at the start of the level run, it will\n        // get the type of sor.\n        // W2. Search backwards from each instance of a European number\n        // until the first strong type (R, L, AL, or sor) is found. If an\n        // AL is found, change the type of the European number to Arabic\n        // number.\n        // W3. Change all ALs to R.\n        // (Left after this: L, R, EN, AN, ET, CS, NI)\n        for (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n            let type = charType(line.charCodeAt(i));\n            if (type == 512 /* T.NSM */)\n                type = prev;\n            else if (type == 8 /* T.EN */ && prevStrong == 4 /* T.AL */)\n                type = 16 /* T.AN */;\n            types[i] = type == 4 /* T.AL */ ? 2 /* T.R */ : type;\n            if (type & 7 /* T.Strong */)\n                prevStrong = type;\n            prev = type;\n        }\n        // W5. A sequence of European terminators adjacent to European\n        // numbers changes to all European numbers.\n        // W6. Otherwise, separators and terminators change to Other\n        // Neutral.\n        // W7. Search backwards from each instance of a European number\n        // until the first strong type (R, L, or sor) is found. If an L is\n        // found, then change the type of the European number to L.\n        // (Left after this: L, R, EN+AN, NI)\n        for (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n            let type = types[i];\n            if (type == 128 /* T.CS */) {\n                if (i < to - 1 && prev == types[i + 1] && (prev & 24 /* T.Num */))\n                    type = types[i] = prev;\n                else\n                    types[i] = 256 /* T.NI */;\n            }\n            else if (type == 64 /* T.ET */) {\n                let end = i + 1;\n                while (end < to && types[end] == 64 /* T.ET */)\n                    end++;\n                let replace = (i && prev == 8 /* T.EN */) || (end < rTo && types[end] == 8 /* T.EN */) ? (prevStrong == 1 /* T.L */ ? 1 /* T.L */ : 8 /* T.EN */) : 256 /* T.NI */;\n                for (let j = i; j < end; j++)\n                    types[j] = replace;\n                i = end - 1;\n            }\n            else if (type == 8 /* T.EN */ && prevStrong == 1 /* T.L */) {\n                types[i] = 1 /* T.L */;\n            }\n            prev = type;\n            if (type & 7 /* T.Strong */)\n                prevStrong = type;\n        }\n    }\n}\n// Process brackets throughout a run sequence.\nfunction processBracketPairs(line, rFrom, rTo, isolates, outerType) {\n    let oppositeType = outerType == 1 /* T.L */ ? 2 /* T.R */ : 1 /* T.L */;\n    for (let iI = 0, sI = 0, context = 0; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        // N0. Process bracket pairs in an isolating run sequence\n        // sequentially in the logical order of the text positions of the\n        // opening paired brackets using the logic given below. Within this\n        // scope, bidirectional types EN and AN are treated as R.\n        for (let i = from, ch, br, type; i < to; i++) {\n            // Keeps [startIndex, type, strongSeen] triples for each open\n            // bracket on BracketStack.\n            if (br = Brackets[ch = line.charCodeAt(i)]) {\n                if (br < 0) { // Closing bracket\n                    for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {\n                        if (BracketStack[sJ + 1] == -br) {\n                            let flags = BracketStack[sJ + 2];\n                            let type = (flags & 2 /* Bracketed.EmbedInside */) ? outerType :\n                                !(flags & 4 /* Bracketed.OppositeInside */) ? 0 :\n                                    (flags & 1 /* Bracketed.OppositeBefore */) ? oppositeType : outerType;\n                            if (type)\n                                types[i] = types[BracketStack[sJ]] = type;\n                            sI = sJ;\n                            break;\n                        }\n                    }\n                }\n                else if (BracketStack.length == 189 /* Bracketed.MaxDepth */) {\n                    break;\n                }\n                else {\n                    BracketStack[sI++] = i;\n                    BracketStack[sI++] = ch;\n                    BracketStack[sI++] = context;\n                }\n            }\n            else if ((type = types[i]) == 2 /* T.R */ || type == 1 /* T.L */) {\n                let embed = type == outerType;\n                context = embed ? 0 : 1 /* Bracketed.OppositeBefore */;\n                for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {\n                    let cur = BracketStack[sJ + 2];\n                    if (cur & 2 /* Bracketed.EmbedInside */)\n                        break;\n                    if (embed) {\n                        BracketStack[sJ + 2] |= 2 /* Bracketed.EmbedInside */;\n                    }\n                    else {\n                        if (cur & 4 /* Bracketed.OppositeInside */)\n                            break;\n                        BracketStack[sJ + 2] |= 4 /* Bracketed.OppositeInside */;\n                    }\n                }\n            }\n        }\n    }\n}\nfunction processNeutrals(rFrom, rTo, isolates, outerType) {\n    for (let iI = 0, prev = outerType; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        // N1. A sequence of neutrals takes the direction of the\n        // surrounding strong text if the text on both sides has the same\n        // direction. European and Arabic numbers act as if they were R in\n        // terms of their influence on neutrals. Start-of-level-run (sor)\n        // and end-of-level-run (eor) are used at level run boundaries.\n        // N2. Any remaining neutrals take the embedding direction.\n        // (Left after this: L, R, EN+AN)\n        for (let i = from; i < to;) {\n            let type = types[i];\n            if (type == 256 /* T.NI */) {\n                let end = i + 1;\n                for (;;) {\n                    if (end == to) {\n                        if (iI == isolates.length)\n                            break;\n                        end = isolates[iI++].to;\n                        to = iI < isolates.length ? isolates[iI].from : rTo;\n                    }\n                    else if (types[end] == 256 /* T.NI */) {\n                        end++;\n                    }\n                    else {\n                        break;\n                    }\n                }\n                let beforeL = prev == 1 /* T.L */;\n                let afterL = (end < rTo ? types[end] : outerType) == 1 /* T.L */;\n                let replace = beforeL == afterL ? (beforeL ? 1 /* T.L */ : 2 /* T.R */) : outerType;\n                for (let j = end, jI = iI, fromJ = jI ? isolates[jI - 1].to : rFrom; j > i;) {\n                    if (j == fromJ) {\n                        j = isolates[--jI].from;\n                        fromJ = jI ? isolates[jI - 1].to : rFrom;\n                    }\n                    types[--j] = replace;\n                }\n                i = end;\n            }\n            else {\n                prev = type;\n                i++;\n            }\n        }\n    }\n}\n// Find the contiguous ranges of character types in a given range, and\n// emit spans for them. Flip the order of the spans as appropriate\n// based on the level, and call through to compute the spans for\n// isolates at the proper point.\nfunction emitSpans(line, from, to, level, baseLevel, isolates, order) {\n    let ourType = level % 2 ? 2 /* T.R */ : 1 /* T.L */;\n    if ((level % 2) == (baseLevel % 2)) { // Same dir as base direction, don't flip\n        for (let iCh = from, iI = 0; iCh < to;) {\n            // Scan a section of characters in direction ourType, unless\n            // there's another type of char right after iCh, in which case\n            // we scan a section of other characters (which, if ourType ==\n            // T.L, may contain both T.R and T.AN chars).\n            let sameDir = true, isNum = false;\n            if (iI == isolates.length || iCh < isolates[iI].from) {\n                let next = types[iCh];\n                if (next != ourType) {\n                    sameDir = false;\n                    isNum = next == 16 /* T.AN */;\n                }\n            }\n            // Holds an array of isolates to pass to a recursive call if we\n            // must recurse (to distinguish T.AN inside an RTL section in\n            // LTR text), null if we can emit directly\n            let recurse = !sameDir && ourType == 1 /* T.L */ ? [] : null;\n            let localLevel = sameDir ? level : level + 1;\n            let iScan = iCh;\n            run: for (;;) {\n                if (iI < isolates.length && iScan == isolates[iI].from) {\n                    if (isNum)\n                        break run;\n                    let iso = isolates[iI];\n                    // Scan ahead to verify that there is another char in this dir after the isolate(s)\n                    if (!sameDir)\n                        for (let upto = iso.to, jI = iI + 1;;) {\n                            if (upto == to)\n                                break run;\n                            if (jI < isolates.length && isolates[jI].from == upto)\n                                upto = isolates[jI++].to;\n                            else if (types[upto] == ourType)\n                                break run;\n                            else\n                                break;\n                        }\n                    iI++;\n                    if (recurse) {\n                        recurse.push(iso);\n                    }\n                    else {\n                        if (iso.from > iCh)\n                            order.push(new BidiSpan(iCh, iso.from, localLevel));\n                        let dirSwap = (iso.direction == LTR) != !(localLevel % 2);\n                        computeSectionOrder(line, dirSwap ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n                        iCh = iso.to;\n                    }\n                    iScan = iso.to;\n                }\n                else if (iScan == to || (sameDir ? types[iScan] != ourType : types[iScan] == ourType)) {\n                    break;\n                }\n                else {\n                    iScan++;\n                }\n            }\n            if (recurse)\n                emitSpans(line, iCh, iScan, level + 1, baseLevel, recurse, order);\n            else if (iCh < iScan)\n                order.push(new BidiSpan(iCh, iScan, localLevel));\n            iCh = iScan;\n        }\n    }\n    else {\n        // Iterate in reverse to flip the span order. Same code again, but\n        // going from the back of the section to the front\n        for (let iCh = to, iI = isolates.length; iCh > from;) {\n            let sameDir = true, isNum = false;\n            if (!iI || iCh > isolates[iI - 1].to) {\n                let next = types[iCh - 1];\n                if (next != ourType) {\n                    sameDir = false;\n                    isNum = next == 16 /* T.AN */;\n                }\n            }\n            let recurse = !sameDir && ourType == 1 /* T.L */ ? [] : null;\n            let localLevel = sameDir ? level : level + 1;\n            let iScan = iCh;\n            run: for (;;) {\n                if (iI && iScan == isolates[iI - 1].to) {\n                    if (isNum)\n                        break run;\n                    let iso = isolates[--iI];\n                    // Scan ahead to verify that there is another char in this dir after the isolate(s)\n                    if (!sameDir)\n                        for (let upto = iso.from, jI = iI;;) {\n                            if (upto == from)\n                                break run;\n                            if (jI && isolates[jI - 1].to == upto)\n                                upto = isolates[--jI].from;\n                            else if (types[upto - 1] == ourType)\n                                break run;\n                            else\n                                break;\n                        }\n                    if (recurse) {\n                        recurse.push(iso);\n                    }\n                    else {\n                        if (iso.to < iCh)\n                            order.push(new BidiSpan(iso.to, iCh, localLevel));\n                        let dirSwap = (iso.direction == LTR) != !(localLevel % 2);\n                        computeSectionOrder(line, dirSwap ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n                        iCh = iso.from;\n                    }\n                    iScan = iso.from;\n                }\n                else if (iScan == from || (sameDir ? types[iScan - 1] != ourType : types[iScan - 1] == ourType)) {\n                    break;\n                }\n                else {\n                    iScan--;\n                }\n            }\n            if (recurse)\n                emitSpans(line, iScan, iCh, level + 1, baseLevel, recurse, order);\n            else if (iScan < iCh)\n                order.push(new BidiSpan(iScan, iCh, localLevel));\n            iCh = iScan;\n        }\n    }\n}\nfunction computeSectionOrder(line, level, baseLevel, isolates, from, to, order) {\n    let outerType = (level % 2 ? 2 /* T.R */ : 1 /* T.L */);\n    computeCharTypes(line, from, to, isolates, outerType);\n    processBracketPairs(line, from, to, isolates, outerType);\n    processNeutrals(from, to, isolates, outerType);\n    emitSpans(line, from, to, level, baseLevel, isolates, order);\n}\nfunction computeOrder(line, direction, isolates) {\n    if (!line)\n        return [new BidiSpan(0, 0, direction == RTL ? 1 : 0)];\n    if (direction == LTR && !isolates.length && !BidiRE.test(line))\n        return trivialOrder(line.length);\n    if (isolates.length)\n        while (line.length > types.length)\n            types[types.length] = 256 /* T.NI */; // Make sure types array has no gaps\n    let order = [], level = direction == LTR ? 0 : 1;\n    computeSectionOrder(line, level, level, isolates, 0, line.length, order);\n    return order;\n}\nfunction trivialOrder(length) {\n    return [new BidiSpan(0, length, 0)];\n}\nlet movedOver = \"\";\n// This implementation moves strictly visually, without concern for a\n// traversal visiting every logical position in the string. It will\n// still do so for simple input, but situations like multiple isolates\n// with the same level next to each other, or text going against the\n// main dir at the end of the line, will make some positions\n// unreachable with this motion. Each visible cursor position will\n// correspond to the lower-level bidi span that touches it.\n//\n// The alternative would be to solve an order globally for a given\n// line, making sure that it includes every position, but that would\n// require associating non-canonical (higher bidi span level)\n// positions with a given visual position, which is likely to confuse\n// people. (And would generally be a lot more complicated.)\nfunction moveVisually(line, order, dir, start, forward) {\n    var _a;\n    let startIndex = start.head - line.from;\n    let spanI = BidiSpan.find(order, startIndex, (_a = start.bidiLevel) !== null && _a !== void 0 ? _a : -1, start.assoc);\n    let span = order[spanI], spanEnd = span.side(forward, dir);\n    // End of span\n    if (startIndex == spanEnd) {\n        let nextI = spanI += forward ? 1 : -1;\n        if (nextI < 0 || nextI >= order.length)\n            return null;\n        span = order[spanI = nextI];\n        startIndex = span.side(!forward, dir);\n        spanEnd = span.side(forward, dir);\n    }\n    let nextIndex = findClusterBreak(line.text, startIndex, span.forward(forward, dir));\n    if (nextIndex < span.from || nextIndex > span.to)\n        nextIndex = spanEnd;\n    movedOver = line.text.slice(Math.min(startIndex, nextIndex), Math.max(startIndex, nextIndex));\n    let nextSpan = spanI == (forward ? order.length - 1 : 0) ? null : order[spanI + (forward ? 1 : -1)];\n    if (nextSpan && nextIndex == spanEnd && nextSpan.level + (forward ? 0 : 1) < span.level)\n        return EditorSelection.cursor(nextSpan.side(!forward, dir) + line.from, nextSpan.forward(forward, dir) ? 1 : -1, nextSpan.level);\n    return EditorSelection.cursor(nextIndex + line.from, span.forward(forward, dir) ? -1 : 1, span.level);\n}\nfunction autoDirection(text, from, to) {\n    for (let i = from; i < to; i++) {\n        let type = charType(text.charCodeAt(i));\n        if (type == 1 /* T.L */)\n            return LTR;\n        if (type == 2 /* T.R */ || type == 4 /* T.AL */)\n            return RTL;\n    }\n    return LTR;\n}\n\nconst clickAddsSelectionRange = /*@__PURE__*/Facet.define();\nconst dragMovesSelection$1 = /*@__PURE__*/Facet.define();\nconst mouseSelectionStyle = /*@__PURE__*/Facet.define();\nconst exceptionSink = /*@__PURE__*/Facet.define();\nconst updateListener = /*@__PURE__*/Facet.define();\nconst inputHandler = /*@__PURE__*/Facet.define();\nconst focusChangeEffect = /*@__PURE__*/Facet.define();\nconst clipboardInputFilter = /*@__PURE__*/Facet.define();\nconst clipboardOutputFilter = /*@__PURE__*/Facet.define();\nconst perLineTextDirection = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\nconst nativeSelectionHidden = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\nconst scrollHandler = /*@__PURE__*/Facet.define();\nclass ScrollTarget {\n    constructor(range, y = \"nearest\", x = \"nearest\", yMargin = 5, xMargin = 5, \n    // This data structure is abused to also store precise scroll\n    // snapshots, instead of a `scrollIntoView` request. When this\n    // flag is `true`, `range` points at a position in the reference\n    // line, `yMargin` holds the difference between the top of that\n    // line and the top of the editor, and `xMargin` holds the\n    // editor's `scrollLeft`.\n    isSnapshot = false) {\n        this.range = range;\n        this.y = y;\n        this.x = x;\n        this.yMargin = yMargin;\n        this.xMargin = xMargin;\n        this.isSnapshot = isSnapshot;\n    }\n    map(changes) {\n        return changes.empty ? this :\n            new ScrollTarget(this.range.map(changes), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n    }\n    clip(state) {\n        return this.range.to <= state.doc.length ? this :\n            new ScrollTarget(EditorSelection.cursor(state.doc.length), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n    }\n}\nconst scrollIntoView = /*@__PURE__*/StateEffect.define({ map: (t, ch) => t.map(ch) });\nconst setEditContextFormatting = /*@__PURE__*/StateEffect.define();\n/**\nLog or report an unhandled exception in client code. Should\nprobably only be used by extension code that allows client code to\nprovide functions, and calls those functions in a context where an\nexception can't be propagated to calling code in a reasonable way\n(for example when in an event handler).\n\nEither calls a handler registered with\n[`EditorView.exceptionSink`](https://codemirror.net/6/docs/ref/#view.EditorView^exceptionSink),\n`window.onerror`, if defined, or `console.error` (in which case\nit'll pass `context`, when given, as first argument).\n*/\nfunction logException(state, exception, context) {\n    let handler = state.facet(exceptionSink);\n    if (handler.length)\n        handler[0](exception);\n    else if (window.onerror)\n        window.onerror(String(exception), context, undefined, undefined, exception);\n    else if (context)\n        console.error(context + \":\", exception);\n    else\n        console.error(exception);\n}\nconst editable = /*@__PURE__*/Facet.define({ combine: values => values.length ? values[0] : true });\nlet nextPluginID = 0;\nconst viewPlugin = /*@__PURE__*/Facet.define();\n/**\nView plugins associate stateful values with a view. They can\ninfluence the way the content is drawn, and are notified of things\nthat happen in the view.\n*/\nclass ViewPlugin {\n    constructor(\n    /**\n    @internal\n    */\n    id, \n    /**\n    @internal\n    */\n    create, \n    /**\n    @internal\n    */\n    domEventHandlers, \n    /**\n    @internal\n    */\n    domEventObservers, buildExtensions) {\n        this.id = id;\n        this.create = create;\n        this.domEventHandlers = domEventHandlers;\n        this.domEventObservers = domEventObservers;\n        this.extension = buildExtensions(this);\n    }\n    /**\n    Define a plugin from a constructor function that creates the\n    plugin's value, given an editor view.\n    */\n    static define(create, spec) {\n        const { eventHandlers, eventObservers, provide, decorations: deco } = spec || {};\n        return new ViewPlugin(nextPluginID++, create, eventHandlers, eventObservers, plugin => {\n            let ext = [viewPlugin.of(plugin)];\n            if (deco)\n                ext.push(decorations.of(view => {\n                    let pluginInst = view.plugin(plugin);\n                    return pluginInst ? deco(pluginInst) : Decoration.none;\n                }));\n            if (provide)\n                ext.push(provide(plugin));\n            return ext;\n        });\n    }\n    /**\n    Create a plugin for a class whose constructor takes a single\n    editor view as argument.\n    */\n    static fromClass(cls, spec) {\n        return ViewPlugin.define(view => new cls(view), spec);\n    }\n}\nclass PluginInstance {\n    constructor(spec) {\n        this.spec = spec;\n        // When starting an update, all plugins have this field set to the\n        // update object, indicating they need to be updated. When finished\n        // updating, it is set to `false`. Retrieving a plugin that needs to\n        // be updated with `view.plugin` forces an eager update.\n        this.mustUpdate = null;\n        // This is null when the plugin is initially created, but\n        // initialized on the first update.\n        this.value = null;\n    }\n    update(view) {\n        if (!this.value) {\n            if (this.spec) {\n                try {\n                    this.value = this.spec.create(view);\n                }\n                catch (e) {\n                    logException(view.state, e, \"CodeMirror plugin crashed\");\n                    this.deactivate();\n                }\n            }\n        }\n        else if (this.mustUpdate) {\n            let update = this.mustUpdate;\n            this.mustUpdate = null;\n            if (this.value.update) {\n                try {\n                    this.value.update(update);\n                }\n                catch (e) {\n                    logException(update.state, e, \"CodeMirror plugin crashed\");\n                    if (this.value.destroy)\n                        try {\n                            this.value.destroy();\n                        }\n                        catch (_) { }\n                    this.deactivate();\n                }\n            }\n        }\n        return this;\n    }\n    destroy(view) {\n        var _a;\n        if ((_a = this.value) === null || _a === void 0 ? void 0 : _a.destroy) {\n            try {\n                this.value.destroy();\n            }\n            catch (e) {\n                logException(view.state, e, \"CodeMirror plugin crashed\");\n            }\n        }\n    }\n    deactivate() {\n        this.spec = this.value = null;\n    }\n}\nconst editorAttributes = /*@__PURE__*/Facet.define();\nconst contentAttributes = /*@__PURE__*/Facet.define();\n// Provide decorations\nconst decorations = /*@__PURE__*/Facet.define();\nconst outerDecorations = /*@__PURE__*/Facet.define();\nconst atomicRanges = /*@__PURE__*/Facet.define();\nconst bidiIsolatedRanges = /*@__PURE__*/Facet.define();\nfunction getIsolatedRanges(view, line) {\n    let isolates = view.state.facet(bidiIsolatedRanges);\n    if (!isolates.length)\n        return isolates;\n    let sets = isolates.map(i => i instanceof Function ? i(view) : i);\n    let result = [];\n    RangeSet.spans(sets, line.from, line.to, {\n        point() { },\n        span(fromDoc, toDoc, active, open) {\n            let from = fromDoc - line.from, to = toDoc - line.from;\n            let level = result;\n            for (let i = active.length - 1; i >= 0; i--, open--) {\n                let direction = active[i].spec.bidiIsolate, update;\n                if (direction == null)\n                    direction = autoDirection(line.text, from, to);\n                if (open > 0 && level.length &&\n                    (update = level[level.length - 1]).to == from && update.direction == direction) {\n                    update.to = to;\n                    level = update.inner;\n                }\n                else {\n                    let add = { from, to, direction, inner: [] };\n                    level.push(add);\n                    level = add.inner;\n                }\n            }\n        }\n    });\n    return result;\n}\nconst scrollMargins = /*@__PURE__*/Facet.define();\nfunction getScrollMargins(view) {\n    let left = 0, right = 0, top = 0, bottom = 0;\n    for (let source of view.state.facet(scrollMargins)) {\n        let m = source(view);\n        if (m) {\n            if (m.left != null)\n                left = Math.max(left, m.left);\n            if (m.right != null)\n                right = Math.max(right, m.right);\n            if (m.top != null)\n                top = Math.max(top, m.top);\n            if (m.bottom != null)\n                bottom = Math.max(bottom, m.bottom);\n        }\n    }\n    return { left, right, top, bottom };\n}\nconst styleModule = /*@__PURE__*/Facet.define();\nclass ChangedRange {\n    constructor(fromA, toA, fromB, toB) {\n        this.fromA = fromA;\n        this.toA = toA;\n        this.fromB = fromB;\n        this.toB = toB;\n    }\n    join(other) {\n        return new ChangedRange(Math.min(this.fromA, other.fromA), Math.max(this.toA, other.toA), Math.min(this.fromB, other.fromB), Math.max(this.toB, other.toB));\n    }\n    addToSet(set) {\n        let i = set.length, me = this;\n        for (; i > 0; i--) {\n            let range = set[i - 1];\n            if (range.fromA > me.toA)\n                continue;\n            if (range.toA < me.fromA)\n                break;\n            me = me.join(range);\n            set.splice(i - 1, 1);\n        }\n        set.splice(i, 0, me);\n        return set;\n    }\n    static extendWithRanges(diff, ranges) {\n        if (ranges.length == 0)\n            return diff;\n        let result = [];\n        for (let dI = 0, rI = 0, posA = 0, posB = 0;; dI++) {\n            let next = dI == diff.length ? null : diff[dI], off = posA - posB;\n            let end = next ? next.fromB : 1e9;\n            while (rI < ranges.length && ranges[rI] < end) {\n                let from = ranges[rI], to = ranges[rI + 1];\n                let fromB = Math.max(posB, from), toB = Math.min(end, to);\n                if (fromB <= toB)\n                    new ChangedRange(fromB + off, toB + off, fromB, toB).addToSet(result);\n                if (to > end)\n                    break;\n                else\n                    rI += 2;\n            }\n            if (!next)\n                return result;\n            new ChangedRange(next.fromA, next.toA, next.fromB, next.toB).addToSet(result);\n            posA = next.toA;\n            posB = next.toB;\n        }\n    }\n}\n/**\nView [plugins](https://codemirror.net/6/docs/ref/#view.ViewPlugin) are given instances of this\nclass, which describe what happened, whenever the view is updated.\n*/\nclass ViewUpdate {\n    constructor(\n    /**\n    The editor view that the update is associated with.\n    */\n    view, \n    /**\n    The new editor state.\n    */\n    state, \n    /**\n    The transactions involved in the update. May be empty.\n    */\n    transactions) {\n        this.view = view;\n        this.state = state;\n        this.transactions = transactions;\n        /**\n        @internal\n        */\n        this.flags = 0;\n        this.startState = view.state;\n        this.changes = ChangeSet.empty(this.startState.doc.length);\n        for (let tr of transactions)\n            this.changes = this.changes.compose(tr.changes);\n        let changedRanges = [];\n        this.changes.iterChangedRanges((fromA, toA, fromB, toB) => changedRanges.push(new ChangedRange(fromA, toA, fromB, toB)));\n        this.changedRanges = changedRanges;\n    }\n    /**\n    @internal\n    */\n    static create(view, state, transactions) {\n        return new ViewUpdate(view, state, transactions);\n    }\n    /**\n    Tells you whether the [viewport](https://codemirror.net/6/docs/ref/#view.EditorView.viewport) or\n    [visible ranges](https://codemirror.net/6/docs/ref/#view.EditorView.visibleRanges) changed in this\n    update.\n    */\n    get viewportChanged() {\n        return (this.flags & 4 /* UpdateFlag.Viewport */) > 0;\n    }\n    /**\n    Returns true when\n    [`viewportChanged`](https://codemirror.net/6/docs/ref/#view.ViewUpdate.viewportChanged) is true\n    and the viewport change is not just the result of mapping it in\n    response to document changes.\n    */\n    get viewportMoved() {\n        return (this.flags & 8 /* UpdateFlag.ViewportMoved */) > 0;\n    }\n    /**\n    Indicates whether the height of a block element in the editor\n    changed in this update.\n    */\n    get heightChanged() {\n        return (this.flags & 2 /* UpdateFlag.Height */) > 0;\n    }\n    /**\n    Returns true when the document was modified or the size of the\n    editor, or elements within the editor, changed.\n    */\n    get geometryChanged() {\n        return this.docChanged || (this.flags & (16 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */)) > 0;\n    }\n    /**\n    True when this update indicates a focus change.\n    */\n    get focusChanged() {\n        return (this.flags & 1 /* UpdateFlag.Focus */) > 0;\n    }\n    /**\n    Whether the document changed in this update.\n    */\n    get docChanged() {\n        return !this.changes.empty;\n    }\n    /**\n    Whether the selection was explicitly set in this update.\n    */\n    get selectionSet() {\n        return this.transactions.some(tr => tr.selection);\n    }\n    /**\n    @internal\n    */\n    get empty() { return this.flags == 0 && this.transactions.length == 0; }\n}\n\nclass DocView extends ContentView {\n    get length() { return this.view.state.doc.length; }\n    constructor(view) {\n        super();\n        this.view = view;\n        this.decorations = [];\n        this.dynamicDecorationMap = [false];\n        this.domChanged = null;\n        this.hasComposition = null;\n        this.markedForComposition = new Set;\n        this.editContextFormatting = Decoration.none;\n        this.lastCompositionAfterCursor = false;\n        // Track a minimum width for the editor. When measuring sizes in\n        // measureVisibleLineHeights, this is updated to point at the width\n        // of a given element and its extent in the document. When a change\n        // happens in that range, these are reset. That way, once we've seen\n        // a line/element of a given length, we keep the editor wide enough\n        // to fit at least that element, until it is changed, at which point\n        // we forget it again.\n        this.minWidth = 0;\n        this.minWidthFrom = 0;\n        this.minWidthTo = 0;\n        // Track whether the DOM selection was set in a lossy way, so that\n        // we don't mess it up when reading it back it\n        this.impreciseAnchor = null;\n        this.impreciseHead = null;\n        this.forceSelection = false;\n        // Used by the resize observer to ignore resizes that we caused\n        // ourselves\n        this.lastUpdate = Date.now();\n        this.setDOM(view.contentDOM);\n        this.children = [new LineView];\n        this.children[0].setParent(this);\n        this.updateDeco();\n        this.updateInner([new ChangedRange(0, 0, 0, view.state.doc.length)], 0, null);\n    }\n    // Update the document view to a given state.\n    update(update) {\n        var _a;\n        let changedRanges = update.changedRanges;\n        if (this.minWidth > 0 && changedRanges.length) {\n            if (!changedRanges.every(({ fromA, toA }) => toA < this.minWidthFrom || fromA > this.minWidthTo)) {\n                this.minWidth = this.minWidthFrom = this.minWidthTo = 0;\n            }\n            else {\n                this.minWidthFrom = update.changes.mapPos(this.minWidthFrom, 1);\n                this.minWidthTo = update.changes.mapPos(this.minWidthTo, 1);\n            }\n        }\n        this.updateEditContextFormatting(update);\n        let readCompositionAt = -1;\n        if (this.view.inputState.composing >= 0 && !this.view.observer.editContext) {\n            if ((_a = this.domChanged) === null || _a === void 0 ? void 0 : _a.newSel)\n                readCompositionAt = this.domChanged.newSel.head;\n            else if (!touchesComposition(update.changes, this.hasComposition) && !update.selectionSet)\n                readCompositionAt = update.state.selection.main.head;\n        }\n        let composition = readCompositionAt > -1 ? findCompositionRange(this.view, update.changes, readCompositionAt) : null;\n        this.domChanged = null;\n        if (this.hasComposition) {\n            this.markedForComposition.clear();\n            let { from, to } = this.hasComposition;\n            changedRanges = new ChangedRange(from, to, update.changes.mapPos(from, -1), update.changes.mapPos(to, 1))\n                .addToSet(changedRanges.slice());\n        }\n        this.hasComposition = composition ? { from: composition.range.fromB, to: composition.range.toB } : null;\n        // When the DOM nodes around the selection are moved to another\n        // parent, Chrome sometimes reports a different selection through\n        // getSelection than the one that it actually shows to the user.\n        // This forces a selection update when lines are joined to work\n        // around that. Issue #54\n        if ((browser.ie || browser.chrome) && !composition && update &&\n            update.state.doc.lines != update.startState.doc.lines)\n            this.forceSelection = true;\n        let prevDeco = this.decorations, deco = this.updateDeco();\n        let decoDiff = findChangedDeco(prevDeco, deco, update.changes);\n        changedRanges = ChangedRange.extendWithRanges(changedRanges, decoDiff);\n        if (!(this.flags & 7 /* ViewFlag.Dirty */) && changedRanges.length == 0) {\n            return false;\n        }\n        else {\n            this.updateInner(changedRanges, update.startState.doc.length, composition);\n            if (update.transactions.length)\n                this.lastUpdate = Date.now();\n            return true;\n        }\n    }\n    // Used by update and the constructor do perform the actual DOM\n    // update\n    updateInner(changes, oldLength, composition) {\n        this.view.viewState.mustMeasureContent = true;\n        this.updateChildren(changes, oldLength, composition);\n        let { observer } = this.view;\n        observer.ignore(() => {\n            // Lock the height during redrawing, since Chrome sometimes\n            // messes with the scroll position during DOM mutation (though\n            // no relayout is triggered and I cannot imagine how it can\n            // recompute the scroll position without a layout)\n            this.dom.style.height = this.view.viewState.contentHeight / this.view.scaleY + \"px\";\n            this.dom.style.flexBasis = this.minWidth ? this.minWidth + \"px\" : \"\";\n            // Chrome will sometimes, when DOM mutations occur directly\n            // around the selection, get confused and report a different\n            // selection from the one it displays (issue #218). This tries\n            // to detect that situation.\n            let track = browser.chrome || browser.ios ? { node: observer.selectionRange.focusNode, written: false } : undefined;\n            this.sync(this.view, track);\n            this.flags &= ~7 /* ViewFlag.Dirty */;\n            if (track && (track.written || observer.selectionRange.focusNode != track.node))\n                this.forceSelection = true;\n            this.dom.style.height = \"\";\n        });\n        this.markedForComposition.forEach(cView => cView.flags &= ~8 /* ViewFlag.Composition */);\n        let gaps = [];\n        if (this.view.viewport.from || this.view.viewport.to < this.view.state.doc.length)\n            for (let child of this.children)\n                if (child instanceof BlockWidgetView && child.widget instanceof BlockGapWidget)\n                    gaps.push(child.dom);\n        observer.updateGaps(gaps);\n    }\n    updateChildren(changes, oldLength, composition) {\n        let ranges = composition ? composition.range.addToSet(changes.slice()) : changes;\n        let cursor = this.childCursor(oldLength);\n        for (let i = ranges.length - 1;; i--) {\n            let next = i >= 0 ? ranges[i] : null;\n            if (!next)\n                break;\n            let { fromA, toA, fromB, toB } = next, content, breakAtStart, openStart, openEnd;\n            if (composition && composition.range.fromB < toB && composition.range.toB > fromB) {\n                let before = ContentBuilder.build(this.view.state.doc, fromB, composition.range.fromB, this.decorations, this.dynamicDecorationMap);\n                let after = ContentBuilder.build(this.view.state.doc, composition.range.toB, toB, this.decorations, this.dynamicDecorationMap);\n                breakAtStart = before.breakAtStart;\n                openStart = before.openStart;\n                openEnd = after.openEnd;\n                let compLine = this.compositionView(composition);\n                if (after.breakAtStart) {\n                    compLine.breakAfter = 1;\n                }\n                else if (after.content.length &&\n                    compLine.merge(compLine.length, compLine.length, after.content[0], false, after.openStart, 0)) {\n                    compLine.breakAfter = after.content[0].breakAfter;\n                    after.content.shift();\n                }\n                if (before.content.length &&\n                    compLine.merge(0, 0, before.content[before.content.length - 1], true, 0, before.openEnd)) {\n                    before.content.pop();\n                }\n                content = before.content.concat(compLine).concat(after.content);\n            }\n            else {\n                ({ content, breakAtStart, openStart, openEnd } =\n                    ContentBuilder.build(this.view.state.doc, fromB, toB, this.decorations, this.dynamicDecorationMap));\n            }\n            let { i: toI, off: toOff } = cursor.findPos(toA, 1);\n            let { i: fromI, off: fromOff } = cursor.findPos(fromA, -1);\n            replaceRange(this, fromI, fromOff, toI, toOff, content, breakAtStart, openStart, openEnd);\n        }\n        if (composition)\n            this.fixCompositionDOM(composition);\n    }\n    updateEditContextFormatting(update) {\n        this.editContextFormatting = this.editContextFormatting.map(update.changes);\n        for (let tr of update.transactions)\n            for (let effect of tr.effects)\n                if (effect.is(setEditContextFormatting)) {\n                    this.editContextFormatting = effect.value;\n                }\n    }\n    compositionView(composition) {\n        let cur = new TextView(composition.text.nodeValue);\n        cur.flags |= 8 /* ViewFlag.Composition */;\n        for (let { deco } of composition.marks)\n            cur = new MarkView(deco, [cur], cur.length);\n        let line = new LineView;\n        line.append(cur, 0);\n        return line;\n    }\n    fixCompositionDOM(composition) {\n        let fix = (dom, cView) => {\n            cView.flags |= 8 /* ViewFlag.Composition */ | (cView.children.some(c => c.flags & 7 /* ViewFlag.Dirty */) ? 1 /* ViewFlag.ChildDirty */ : 0);\n            this.markedForComposition.add(cView);\n            let prev = ContentView.get(dom);\n            if (prev && prev != cView)\n                prev.dom = null;\n            cView.setDOM(dom);\n        };\n        let pos = this.childPos(composition.range.fromB, 1);\n        let cView = this.children[pos.i];\n        fix(composition.line, cView);\n        for (let i = composition.marks.length - 1; i >= -1; i--) {\n            pos = cView.childPos(pos.off, 1);\n            cView = cView.children[pos.i];\n            fix(i >= 0 ? composition.marks[i].node : composition.text, cView);\n        }\n    }\n    // Sync the DOM selection to this.state.selection\n    updateSelection(mustRead = false, fromPointer = false) {\n        if (mustRead || !this.view.observer.selectionRange.focusNode)\n            this.view.observer.readSelectionRange();\n        let activeElt = this.view.root.activeElement, focused = activeElt == this.dom;\n        let selectionNotFocus = !focused && !(this.view.state.facet(editable) || this.dom.tabIndex > -1) &&\n            hasSelection(this.dom, this.view.observer.selectionRange) && !(activeElt && this.dom.contains(activeElt));\n        if (!(focused || fromPointer || selectionNotFocus))\n            return;\n        let force = this.forceSelection;\n        this.forceSelection = false;\n        let main = this.view.state.selection.main;\n        let anchor = this.moveToLine(this.domAtPos(main.anchor));\n        let head = main.empty ? anchor : this.moveToLine(this.domAtPos(main.head));\n        // Always reset on Firefox when next to an uneditable node to\n        // avoid invisible cursor bugs (#111)\n        if (browser.gecko && main.empty && !this.hasComposition && betweenUneditable(anchor)) {\n            let dummy = document.createTextNode(\"\");\n            this.view.observer.ignore(() => anchor.node.insertBefore(dummy, anchor.node.childNodes[anchor.offset] || null));\n            anchor = head = new DOMPos(dummy, 0);\n            force = true;\n        }\n        let domSel = this.view.observer.selectionRange;\n        // If the selection is already here, or in an equivalent position, don't touch it\n        if (force || !domSel.focusNode || (!isEquivalentPosition(anchor.node, anchor.offset, domSel.anchorNode, domSel.anchorOffset) ||\n            !isEquivalentPosition(head.node, head.offset, domSel.focusNode, domSel.focusOffset)) && !this.suppressWidgetCursorChange(domSel, main)) {\n            this.view.observer.ignore(() => {\n                // Chrome Android will hide the virtual keyboard when tapping\n                // inside an uneditable node, and not bring it back when we\n                // move the cursor to its proper position. This tries to\n                // restore the keyboard by cycling focus.\n                if (browser.android && browser.chrome && this.dom.contains(domSel.focusNode) &&\n                    inUneditable(domSel.focusNode, this.dom)) {\n                    this.dom.blur();\n                    this.dom.focus({ preventScroll: true });\n                }\n                let rawSel = getSelection(this.view.root);\n                if (!rawSel) ;\n                else if (main.empty) {\n                    // Work around https://bugzilla.mozilla.org/show_bug.cgi?id=1612076\n                    if (browser.gecko) {\n                        let nextTo = nextToUneditable(anchor.node, anchor.offset);\n                        if (nextTo && nextTo != (1 /* NextTo.Before */ | 2 /* NextTo.After */)) {\n                            let text = (nextTo == 1 /* NextTo.Before */ ? textNodeBefore : textNodeAfter)(anchor.node, anchor.offset);\n                            if (text)\n                                anchor = new DOMPos(text.node, text.offset);\n                        }\n                    }\n                    rawSel.collapse(anchor.node, anchor.offset);\n                    if (main.bidiLevel != null && rawSel.caretBidiLevel !== undefined)\n                        rawSel.caretBidiLevel = main.bidiLevel;\n                }\n                else if (rawSel.extend) {\n                    // Selection.extend can be used to create an 'inverted' selection\n                    // (one where the focus is before the anchor), but not all\n                    // browsers support it yet.\n                    rawSel.collapse(anchor.node, anchor.offset);\n                    // Safari will ignore the call above when the editor is\n                    // hidden, and then raise an error on the call to extend\n                    // (#940).\n                    try {\n                        rawSel.extend(head.node, head.offset);\n                    }\n                    catch (_) { }\n                }\n                else {\n                    // Primitive (IE) way\n                    let range = document.createRange();\n                    if (main.anchor > main.head)\n                        [anchor, head] = [head, anchor];\n                    range.setEnd(head.node, head.offset);\n                    range.setStart(anchor.node, anchor.offset);\n                    rawSel.removeAllRanges();\n                    rawSel.addRange(range);\n                }\n                if (selectionNotFocus && this.view.root.activeElement == this.dom) {\n                    this.dom.blur();\n                    if (activeElt)\n                        activeElt.focus();\n                }\n            });\n            this.view.observer.setSelectionRange(anchor, head);\n        }\n        this.impreciseAnchor = anchor.precise ? null : new DOMPos(domSel.anchorNode, domSel.anchorOffset);\n        this.impreciseHead = head.precise ? null : new DOMPos(domSel.focusNode, domSel.focusOffset);\n    }\n    // If a zero-length widget is inserted next to the cursor during\n    // composition, avoid moving it across it and disrupting the\n    // composition.\n    suppressWidgetCursorChange(sel, cursor) {\n        return this.hasComposition && cursor.empty &&\n            isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset) &&\n            this.posFromDOM(sel.focusNode, sel.focusOffset) == cursor.head;\n    }\n    enforceCursorAssoc() {\n        if (this.hasComposition)\n            return;\n        let { view } = this, cursor = view.state.selection.main;\n        let sel = getSelection(view.root);\n        let { anchorNode, anchorOffset } = view.observer.selectionRange;\n        if (!sel || !cursor.empty || !cursor.assoc || !sel.modify)\n            return;\n        let line = LineView.find(this, cursor.head);\n        if (!line)\n            return;\n        let lineStart = line.posAtStart;\n        if (cursor.head == lineStart || cursor.head == lineStart + line.length)\n            return;\n        let before = this.coordsAt(cursor.head, -1), after = this.coordsAt(cursor.head, 1);\n        if (!before || !after || before.bottom > after.top)\n            return;\n        let dom = this.domAtPos(cursor.head + cursor.assoc);\n        sel.collapse(dom.node, dom.offset);\n        sel.modify(\"move\", cursor.assoc < 0 ? \"forward\" : \"backward\", \"lineboundary\");\n        // This can go wrong in corner cases like single-character lines,\n        // so check and reset if necessary.\n        view.observer.readSelectionRange();\n        let newRange = view.observer.selectionRange;\n        if (view.docView.posFromDOM(newRange.anchorNode, newRange.anchorOffset) != cursor.from)\n            sel.collapse(anchorNode, anchorOffset);\n    }\n    // If a position is in/near a block widget, move it to a nearby text\n    // line, since we don't want the cursor inside a block widget.\n    moveToLine(pos) {\n        // Block widgets will return positions before/after them, which\n        // are thus directly in the document DOM element.\n        let dom = this.dom, newPos;\n        if (pos.node != dom)\n            return pos;\n        for (let i = pos.offset; !newPos && i < dom.childNodes.length; i++) {\n            let view = ContentView.get(dom.childNodes[i]);\n            if (view instanceof LineView)\n                newPos = view.domAtPos(0);\n        }\n        for (let i = pos.offset - 1; !newPos && i >= 0; i--) {\n            let view = ContentView.get(dom.childNodes[i]);\n            if (view instanceof LineView)\n                newPos = view.domAtPos(view.length);\n        }\n        return newPos ? new DOMPos(newPos.node, newPos.offset, true) : pos;\n    }\n    nearest(dom) {\n        for (let cur = dom; cur;) {\n            let domView = ContentView.get(cur);\n            if (domView && domView.rootView == this)\n                return domView;\n            cur = cur.parentNode;\n        }\n        return null;\n    }\n    posFromDOM(node, offset) {\n        let view = this.nearest(node);\n        if (!view)\n            throw new RangeError(\"Trying to find position for a DOM position outside of the document\");\n        return view.localPosFromDOM(node, offset) + view.posAtStart;\n    }\n    domAtPos(pos) {\n        let { i, off } = this.childCursor().findPos(pos, -1);\n        for (; i < this.children.length - 1;) {\n            let child = this.children[i];\n            if (off < child.length || child instanceof LineView)\n                break;\n            i++;\n            off = 0;\n        }\n        return this.children[i].domAtPos(off);\n    }\n    coordsAt(pos, side) {\n        let best = null, bestPos = 0;\n        for (let off = this.length, i = this.children.length - 1; i >= 0; i--) {\n            let child = this.children[i], end = off - child.breakAfter, start = end - child.length;\n            if (end < pos)\n                break;\n            if (start <= pos && (start < pos || child.covers(-1)) && (end > pos || child.covers(1)) &&\n                (!best || child instanceof LineView && !(best instanceof LineView && side >= 0))) {\n                best = child;\n                bestPos = start;\n            }\n            else if (best && start == pos && end == pos && child instanceof BlockWidgetView && Math.abs(side) < 2) {\n                if (child.deco.startSide < 0)\n                    break;\n                else if (i)\n                    best = null;\n            }\n            off = start;\n        }\n        return best ? best.coordsAt(pos - bestPos, side) : null;\n    }\n    coordsForChar(pos) {\n        let { i, off } = this.childPos(pos, 1), child = this.children[i];\n        if (!(child instanceof LineView))\n            return null;\n        while (child.children.length) {\n            let { i, off: childOff } = child.childPos(off, 1);\n            for (;; i++) {\n                if (i == child.children.length)\n                    return null;\n                if ((child = child.children[i]).length)\n                    break;\n            }\n            off = childOff;\n        }\n        if (!(child instanceof TextView))\n            return null;\n        let end = findClusterBreak(child.text, off);\n        if (end == off)\n            return null;\n        let rects = textRange(child.dom, off, end).getClientRects();\n        for (let i = 0; i < rects.length; i++) {\n            let rect = rects[i];\n            if (i == rects.length - 1 || rect.top < rect.bottom && rect.left < rect.right)\n                return rect;\n        }\n        return null;\n    }\n    measureVisibleLineHeights(viewport) {\n        let result = [], { from, to } = viewport;\n        let contentWidth = this.view.contentDOM.clientWidth;\n        let isWider = contentWidth > Math.max(this.view.scrollDOM.clientWidth, this.minWidth) + 1;\n        let widest = -1, ltr = this.view.textDirection == Direction.LTR;\n        for (let pos = 0, i = 0; i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (end > to)\n                break;\n            if (pos >= from) {\n                let childRect = child.dom.getBoundingClientRect();\n                result.push(childRect.height);\n                if (isWider) {\n                    let last = child.dom.lastChild;\n                    let rects = last ? clientRectsFor(last) : [];\n                    if (rects.length) {\n                        let rect = rects[rects.length - 1];\n                        let width = ltr ? rect.right - childRect.left : childRect.right - rect.left;\n                        if (width > widest) {\n                            widest = width;\n                            this.minWidth = contentWidth;\n                            this.minWidthFrom = pos;\n                            this.minWidthTo = end;\n                        }\n                    }\n                }\n            }\n            pos = end + child.breakAfter;\n        }\n        return result;\n    }\n    textDirectionAt(pos) {\n        let { i } = this.childPos(pos, 1);\n        return getComputedStyle(this.children[i].dom).direction == \"rtl\" ? Direction.RTL : Direction.LTR;\n    }\n    measureTextSize() {\n        for (let child of this.children) {\n            if (child instanceof LineView) {\n                let measure = child.measureTextSize();\n                if (measure)\n                    return measure;\n            }\n        }\n        // If no workable line exists, force a layout of a measurable element\n        let dummy = document.createElement(\"div\"), lineHeight, charWidth, textHeight;\n        dummy.className = \"cm-line\";\n        dummy.style.width = \"99999px\";\n        dummy.style.position = \"absolute\";\n        dummy.textContent = \"abc def ghi jkl mno pqr stu\";\n        this.view.observer.ignore(() => {\n            this.dom.appendChild(dummy);\n            let rect = clientRectsFor(dummy.firstChild)[0];\n            lineHeight = dummy.getBoundingClientRect().height;\n            charWidth = rect ? rect.width / 27 : 7;\n            textHeight = rect ? rect.height : lineHeight;\n            dummy.remove();\n        });\n        return { lineHeight, charWidth, textHeight };\n    }\n    childCursor(pos = this.length) {\n        // Move back to start of last element when possible, so that\n        // `ChildCursor.findPos` doesn't have to deal with the edge case\n        // of being after the last element.\n        let i = this.children.length;\n        if (i)\n            pos -= this.children[--i].length;\n        return new ChildCursor(this.children, pos, i);\n    }\n    computeBlockGapDeco() {\n        let deco = [], vs = this.view.viewState;\n        for (let pos = 0, i = 0;; i++) {\n            let next = i == vs.viewports.length ? null : vs.viewports[i];\n            let end = next ? next.from - 1 : this.length;\n            if (end > pos) {\n                let height = (vs.lineBlockAt(end).bottom - vs.lineBlockAt(pos).top) / this.view.scaleY;\n                deco.push(Decoration.replace({\n                    widget: new BlockGapWidget(height),\n                    block: true,\n                    inclusive: true,\n                    isBlockGap: true,\n                }).range(pos, end));\n            }\n            if (!next)\n                break;\n            pos = next.to + 1;\n        }\n        return Decoration.set(deco);\n    }\n    updateDeco() {\n        let i = 1;\n        let allDeco = this.view.state.facet(decorations).map(d => {\n            let dynamic = this.dynamicDecorationMap[i++] = typeof d == \"function\";\n            return dynamic ? d(this.view) : d;\n        });\n        let dynamicOuter = false, outerDeco = this.view.state.facet(outerDecorations).map((d, i) => {\n            let dynamic = typeof d == \"function\";\n            if (dynamic)\n                dynamicOuter = true;\n            return dynamic ? d(this.view) : d;\n        });\n        if (outerDeco.length) {\n            this.dynamicDecorationMap[i++] = dynamicOuter;\n            allDeco.push(RangeSet.join(outerDeco));\n        }\n        this.decorations = [\n            this.editContextFormatting,\n            ...allDeco,\n            this.computeBlockGapDeco(),\n            this.view.viewState.lineGapDeco\n        ];\n        while (i < this.decorations.length)\n            this.dynamicDecorationMap[i++] = false;\n        return this.decorations;\n    }\n    scrollIntoView(target) {\n        if (target.isSnapshot) {\n            let ref = this.view.viewState.lineBlockAt(target.range.head);\n            this.view.scrollDOM.scrollTop = ref.top - target.yMargin;\n            this.view.scrollDOM.scrollLeft = target.xMargin;\n            return;\n        }\n        for (let handler of this.view.state.facet(scrollHandler)) {\n            try {\n                if (handler(this.view, target.range, target))\n                    return true;\n            }\n            catch (e) {\n                logException(this.view.state, e, \"scroll handler\");\n            }\n        }\n        let { range } = target;\n        let rect = this.coordsAt(range.head, range.empty ? range.assoc : range.head > range.anchor ? -1 : 1), other;\n        if (!rect)\n            return;\n        if (!range.empty && (other = this.coordsAt(range.anchor, range.anchor > range.head ? -1 : 1)))\n            rect = { left: Math.min(rect.left, other.left), top: Math.min(rect.top, other.top),\n                right: Math.max(rect.right, other.right), bottom: Math.max(rect.bottom, other.bottom) };\n        let margins = getScrollMargins(this.view);\n        let targetRect = {\n            left: rect.left - margins.left, top: rect.top - margins.top,\n            right: rect.right + margins.right, bottom: rect.bottom + margins.bottom\n        };\n        let { offsetWidth, offsetHeight } = this.view.scrollDOM;\n        scrollRectIntoView(this.view.scrollDOM, targetRect, range.head < range.anchor ? -1 : 1, target.x, target.y, Math.max(Math.min(target.xMargin, offsetWidth), -offsetWidth), Math.max(Math.min(target.yMargin, offsetHeight), -offsetHeight), this.view.textDirection == Direction.LTR);\n    }\n}\nfunction betweenUneditable(pos) {\n    return pos.node.nodeType == 1 && pos.node.firstChild &&\n        (pos.offset == 0 || pos.node.childNodes[pos.offset - 1].contentEditable == \"false\") &&\n        (pos.offset == pos.node.childNodes.length || pos.node.childNodes[pos.offset].contentEditable == \"false\");\n}\nfunction findCompositionNode(view, headPos) {\n    let sel = view.observer.selectionRange;\n    if (!sel.focusNode)\n        return null;\n    let textBefore = textNodeBefore(sel.focusNode, sel.focusOffset);\n    let textAfter = textNodeAfter(sel.focusNode, sel.focusOffset);\n    let textNode = textBefore || textAfter;\n    if (textAfter && textBefore && textAfter.node != textBefore.node) {\n        let descAfter = ContentView.get(textAfter.node);\n        if (!descAfter || descAfter instanceof TextView && descAfter.text != textAfter.node.nodeValue) {\n            textNode = textAfter;\n        }\n        else if (view.docView.lastCompositionAfterCursor) {\n            let descBefore = ContentView.get(textBefore.node);\n            if (!(!descBefore || descBefore instanceof TextView && descBefore.text != textBefore.node.nodeValue))\n                textNode = textAfter;\n        }\n    }\n    view.docView.lastCompositionAfterCursor = textNode != textBefore;\n    if (!textNode)\n        return null;\n    let from = headPos - textNode.offset;\n    return { from, to: from + textNode.node.nodeValue.length, node: textNode.node };\n}\nfunction findCompositionRange(view, changes, headPos) {\n    let found = findCompositionNode(view, headPos);\n    if (!found)\n        return null;\n    let { node: textNode, from, to } = found, text = textNode.nodeValue;\n    // Don't try to preserve multi-line compositions\n    if (/[\\n\\r]/.test(text))\n        return null;\n    if (view.state.doc.sliceString(found.from, found.to) != text)\n        return null;\n    let inv = changes.invertedDesc;\n    let range = new ChangedRange(inv.mapPos(from), inv.mapPos(to), from, to);\n    let marks = [];\n    for (let parent = textNode.parentNode;; parent = parent.parentNode) {\n        let parentView = ContentView.get(parent);\n        if (parentView instanceof MarkView)\n            marks.push({ node: parent, deco: parentView.mark });\n        else if (parentView instanceof LineView || parent.nodeName == \"DIV\" && parent.parentNode == view.contentDOM)\n            return { range, text: textNode, marks, line: parent };\n        else if (parent != view.contentDOM)\n            marks.push({ node: parent, deco: new MarkDecoration({\n                    inclusive: true,\n                    attributes: getAttrs(parent),\n                    tagName: parent.tagName.toLowerCase()\n                }) });\n        else\n            return null;\n    }\n}\nfunction nextToUneditable(node, offset) {\n    if (node.nodeType != 1)\n        return 0;\n    return (offset && node.childNodes[offset - 1].contentEditable == \"false\" ? 1 /* NextTo.Before */ : 0) |\n        (offset < node.childNodes.length && node.childNodes[offset].contentEditable == \"false\" ? 2 /* NextTo.After */ : 0);\n}\nlet DecorationComparator$1 = class DecorationComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange(from, to) { addRange(from, to, this.changes); }\n    comparePoint(from, to) { addRange(from, to, this.changes); }\n    boundChange(pos) { addRange(pos, pos, this.changes); }\n};\nfunction findChangedDeco(a, b, diff) {\n    let comp = new DecorationComparator$1;\n    RangeSet.compare(a, b, diff, comp);\n    return comp.changes;\n}\nfunction inUneditable(node, inside) {\n    for (let cur = node; cur && cur != inside; cur = cur.assignedSlot || cur.parentNode) {\n        if (cur.nodeType == 1 && cur.contentEditable == 'false') {\n            return true;\n        }\n    }\n    return false;\n}\nfunction touchesComposition(changes, composition) {\n    let touched = false;\n    if (composition)\n        changes.iterChangedRanges((from, to) => {\n            if (from < composition.to && to > composition.from)\n                touched = true;\n        });\n    return touched;\n}\n\nfunction groupAt(state, pos, bias = 1) {\n    let categorize = state.charCategorizer(pos);\n    let line = state.doc.lineAt(pos), linePos = pos - line.from;\n    if (line.length == 0)\n        return EditorSelection.cursor(pos);\n    if (linePos == 0)\n        bias = 1;\n    else if (linePos == line.length)\n        bias = -1;\n    let from = linePos, to = linePos;\n    if (bias < 0)\n        from = findClusterBreak(line.text, linePos, false);\n    else\n        to = findClusterBreak(line.text, linePos);\n    let cat = categorize(line.text.slice(from, to));\n    while (from > 0) {\n        let prev = findClusterBreak(line.text, from, false);\n        if (categorize(line.text.slice(prev, from)) != cat)\n            break;\n        from = prev;\n    }\n    while (to < line.length) {\n        let next = findClusterBreak(line.text, to);\n        if (categorize(line.text.slice(to, next)) != cat)\n            break;\n        to = next;\n    }\n    return EditorSelection.range(from + line.from, to + line.from);\n}\n// Search the DOM for the {node, offset} position closest to the given\n// coordinates. Very inefficient and crude, but can usually be avoided\n// by calling caret(Position|Range)FromPoint instead.\nfunction getdx(x, rect) {\n    return rect.left > x ? rect.left - x : Math.max(0, x - rect.right);\n}\nfunction getdy(y, rect) {\n    return rect.top > y ? rect.top - y : Math.max(0, y - rect.bottom);\n}\nfunction yOverlap(a, b) {\n    return a.top < b.bottom - 1 && a.bottom > b.top + 1;\n}\nfunction upTop(rect, top) {\n    return top < rect.top ? { top, left: rect.left, right: rect.right, bottom: rect.bottom } : rect;\n}\nfunction upBot(rect, bottom) {\n    return bottom > rect.bottom ? { top: rect.top, left: rect.left, right: rect.right, bottom } : rect;\n}\nfunction domPosAtCoords(parent, x, y) {\n    let closest, closestRect, closestX, closestY, closestOverlap = false;\n    let above, below, aboveRect, belowRect;\n    for (let child = parent.firstChild; child; child = child.nextSibling) {\n        let rects = clientRectsFor(child);\n        for (let i = 0; i < rects.length; i++) {\n            let rect = rects[i];\n            if (closestRect && yOverlap(closestRect, rect))\n                rect = upTop(upBot(rect, closestRect.bottom), closestRect.top);\n            let dx = getdx(x, rect), dy = getdy(y, rect);\n            if (dx == 0 && dy == 0)\n                return child.nodeType == 3 ? domPosInText(child, x, y) : domPosAtCoords(child, x, y);\n            if (!closest || closestY > dy || closestY == dy && closestX > dx) {\n                closest = child;\n                closestRect = rect;\n                closestX = dx;\n                closestY = dy;\n                let side = dy ? (y < rect.top ? -1 : 1) : dx ? (x < rect.left ? -1 : 1) : 0;\n                closestOverlap = !side || (side > 0 ? i < rects.length - 1 : i > 0);\n            }\n            if (dx == 0) {\n                if (y > rect.bottom && (!aboveRect || aboveRect.bottom < rect.bottom)) {\n                    above = child;\n                    aboveRect = rect;\n                }\n                else if (y < rect.top && (!belowRect || belowRect.top > rect.top)) {\n                    below = child;\n                    belowRect = rect;\n                }\n            }\n            else if (aboveRect && yOverlap(aboveRect, rect)) {\n                aboveRect = upBot(aboveRect, rect.bottom);\n            }\n            else if (belowRect && yOverlap(belowRect, rect)) {\n                belowRect = upTop(belowRect, rect.top);\n            }\n        }\n    }\n    if (aboveRect && aboveRect.bottom >= y) {\n        closest = above;\n        closestRect = aboveRect;\n    }\n    else if (belowRect && belowRect.top <= y) {\n        closest = below;\n        closestRect = belowRect;\n    }\n    if (!closest)\n        return { node: parent, offset: 0 };\n    let clipX = Math.max(closestRect.left, Math.min(closestRect.right, x));\n    if (closest.nodeType == 3)\n        return domPosInText(closest, clipX, y);\n    if (closestOverlap && closest.contentEditable != \"false\")\n        return domPosAtCoords(closest, clipX, y);\n    let offset = Array.prototype.indexOf.call(parent.childNodes, closest) +\n        (x >= (closestRect.left + closestRect.right) / 2 ? 1 : 0);\n    return { node: parent, offset };\n}\nfunction domPosInText(node, x, y) {\n    let len = node.nodeValue.length;\n    let closestOffset = -1, closestDY = 1e9, generalSide = 0;\n    for (let i = 0; i < len; i++) {\n        let rects = textRange(node, i, i + 1).getClientRects();\n        for (let j = 0; j < rects.length; j++) {\n            let rect = rects[j];\n            if (rect.top == rect.bottom)\n                continue;\n            if (!generalSide)\n                generalSide = x - rect.left;\n            let dy = (rect.top > y ? rect.top - y : y - rect.bottom) - 1;\n            if (rect.left - 1 <= x && rect.right + 1 >= x && dy < closestDY) {\n                let right = x >= (rect.left + rect.right) / 2, after = right;\n                if (browser.chrome || browser.gecko) {\n                    // Check for RTL on browsers that support getting client\n                    // rects for empty ranges.\n                    let rectBefore = textRange(node, i).getBoundingClientRect();\n                    if (rectBefore.left == rect.right)\n                        after = !right;\n                }\n                if (dy <= 0)\n                    return { node, offset: i + (after ? 1 : 0) };\n                closestOffset = i + (after ? 1 : 0);\n                closestDY = dy;\n            }\n        }\n    }\n    return { node, offset: closestOffset > -1 ? closestOffset : generalSide > 0 ? node.nodeValue.length : 0 };\n}\nfunction posAtCoords(view, coords, precise, bias = -1) {\n    var _a, _b;\n    let content = view.contentDOM.getBoundingClientRect(), docTop = content.top + view.viewState.paddingTop;\n    let block, { docHeight } = view.viewState;\n    let { x, y } = coords, yOffset = y - docTop;\n    if (yOffset < 0)\n        return 0;\n    if (yOffset > docHeight)\n        return view.state.doc.length;\n    // Scan for a text block near the queried y position\n    for (let halfLine = view.viewState.heightOracle.textHeight / 2, bounced = false;;) {\n        block = view.elementAtHeight(yOffset);\n        if (block.type == BlockType.Text)\n            break;\n        for (;;) {\n            // Move the y position out of this block\n            yOffset = bias > 0 ? block.bottom + halfLine : block.top - halfLine;\n            if (yOffset >= 0 && yOffset <= docHeight)\n                break;\n            // If the document consists entirely of replaced widgets, we\n            // won't find a text block, so return 0\n            if (bounced)\n                return precise ? null : 0;\n            bounced = true;\n            bias = -bias;\n        }\n    }\n    y = docTop + yOffset;\n    let lineStart = block.from;\n    // If this is outside of the rendered viewport, we can't determine a position\n    if (lineStart < view.viewport.from)\n        return view.viewport.from == 0 ? 0 : precise ? null : posAtCoordsImprecise(view, content, block, x, y);\n    if (lineStart > view.viewport.to)\n        return view.viewport.to == view.state.doc.length ? view.state.doc.length :\n            precise ? null : posAtCoordsImprecise(view, content, block, x, y);\n    // Prefer ShadowRootOrDocument.elementFromPoint if present, fall back to document if not\n    let doc = view.dom.ownerDocument;\n    let root = view.root.elementFromPoint ? view.root : doc;\n    let element = root.elementFromPoint(x, y);\n    if (element && !view.contentDOM.contains(element))\n        element = null;\n    // If the element is unexpected, clip x at the sides of the content area and try again\n    if (!element) {\n        x = Math.max(content.left + 1, Math.min(content.right - 1, x));\n        element = root.elementFromPoint(x, y);\n        if (element && !view.contentDOM.contains(element))\n            element = null;\n    }\n    // There's visible editor content under the point, so we can try\n    // using caret(Position|Range)FromPoint as a shortcut\n    let node, offset = -1;\n    if (element && ((_a = view.docView.nearest(element)) === null || _a === void 0 ? void 0 : _a.isEditable) != false) {\n        if (doc.caretPositionFromPoint) {\n            let pos = doc.caretPositionFromPoint(x, y);\n            if (pos)\n                ({ offsetNode: node, offset } = pos);\n        }\n        else if (doc.caretRangeFromPoint) {\n            let range = doc.caretRangeFromPoint(x, y);\n            if (range) {\n                ({ startContainer: node, startOffset: offset } = range);\n                if (!view.contentDOM.contains(node) ||\n                    browser.safari && isSuspiciousSafariCaretResult(node, offset, x) ||\n                    browser.chrome && isSuspiciousChromeCaretResult(node, offset, x))\n                    node = undefined;\n            }\n        }\n        // Chrome will return offsets into <input> elements without child\n        // nodes, which will lead to a null deref below, so clip the\n        // offset to the node size.\n        if (node)\n            offset = Math.min(maxOffset(node), offset);\n    }\n    // No luck, do our own (potentially expensive) search\n    if (!node || !view.docView.dom.contains(node)) {\n        let line = LineView.find(view.docView, lineStart);\n        if (!line)\n            return yOffset > block.top + block.height / 2 ? block.to : block.from;\n        ({ node, offset } = domPosAtCoords(line.dom, x, y));\n    }\n    let nearest = view.docView.nearest(node);\n    if (!nearest)\n        return null;\n    if (nearest.isWidget && ((_b = nearest.dom) === null || _b === void 0 ? void 0 : _b.nodeType) == 1) {\n        let rect = nearest.dom.getBoundingClientRect();\n        return coords.y < rect.top || coords.y <= rect.bottom && coords.x <= (rect.left + rect.right) / 2\n            ? nearest.posAtStart : nearest.posAtEnd;\n    }\n    else {\n        return nearest.localPosFromDOM(node, offset) + nearest.posAtStart;\n    }\n}\nfunction posAtCoordsImprecise(view, contentRect, block, x, y) {\n    let into = Math.round((x - contentRect.left) * view.defaultCharacterWidth);\n    if (view.lineWrapping && block.height > view.defaultLineHeight * 1.5) {\n        let textHeight = view.viewState.heightOracle.textHeight;\n        let line = Math.floor((y - block.top - (view.defaultLineHeight - textHeight) * 0.5) / textHeight);\n        into += line * view.viewState.heightOracle.lineLength;\n    }\n    let content = view.state.sliceDoc(block.from, block.to);\n    return block.from + findColumn(content, into, view.state.tabSize);\n}\n// In case of a high line height, Safari's caretRangeFromPoint treats\n// the space between lines as belonging to the last character of the\n// line before. This is used to detect such a result so that it can be\n// ignored (issue #401).\nfunction isSuspiciousSafariCaretResult(node, offset, x) {\n    let len;\n    if (node.nodeType != 3 || offset != (len = node.nodeValue.length))\n        return false;\n    for (let next = node.nextSibling; next; next = next.nextSibling)\n        if (next.nodeType != 1 || next.nodeName != \"BR\")\n            return false;\n    return textRange(node, len - 1, len).getBoundingClientRect().left > x;\n}\n// Chrome will move positions between lines to the start of the next line\nfunction isSuspiciousChromeCaretResult(node, offset, x) {\n    if (offset != 0)\n        return false;\n    for (let cur = node;;) {\n        let parent = cur.parentNode;\n        if (!parent || parent.nodeType != 1 || parent.firstChild != cur)\n            return false;\n        if (parent.classList.contains(\"cm-line\"))\n            break;\n        cur = parent;\n    }\n    let rect = node.nodeType == 1 ? node.getBoundingClientRect()\n        : textRange(node, 0, Math.max(node.nodeValue.length, 1)).getBoundingClientRect();\n    return x - rect.left > 5;\n}\nfunction blockAt(view, pos) {\n    let line = view.lineBlockAt(pos);\n    if (Array.isArray(line.type))\n        for (let l of line.type) {\n            if (l.to > pos || l.to == pos && (l.to == line.to || l.type == BlockType.Text))\n                return l;\n        }\n    return line;\n}\nfunction moveToLineBoundary(view, start, forward, includeWrap) {\n    let line = blockAt(view, start.head);\n    let coords = !includeWrap || line.type != BlockType.Text || !(view.lineWrapping || line.widgetLineBreaks) ? null\n        : view.coordsAtPos(start.assoc < 0 && start.head > line.from ? start.head - 1 : start.head);\n    if (coords) {\n        let editorRect = view.dom.getBoundingClientRect();\n        let direction = view.textDirectionAt(line.from);\n        let pos = view.posAtCoords({ x: forward == (direction == Direction.LTR) ? editorRect.right - 1 : editorRect.left + 1,\n            y: (coords.top + coords.bottom) / 2 });\n        if (pos != null)\n            return EditorSelection.cursor(pos, forward ? -1 : 1);\n    }\n    return EditorSelection.cursor(forward ? line.to : line.from, forward ? -1 : 1);\n}\nfunction moveByChar(view, start, forward, by) {\n    let line = view.state.doc.lineAt(start.head), spans = view.bidiSpans(line);\n    let direction = view.textDirectionAt(line.from);\n    for (let cur = start, check = null;;) {\n        let next = moveVisually(line, spans, direction, cur, forward), char = movedOver;\n        if (!next) {\n            if (line.number == (forward ? view.state.doc.lines : 1))\n                return cur;\n            char = \"\\n\";\n            line = view.state.doc.line(line.number + (forward ? 1 : -1));\n            spans = view.bidiSpans(line);\n            next = view.visualLineSide(line, !forward);\n        }\n        if (!check) {\n            if (!by)\n                return next;\n            check = by(char);\n        }\n        else if (!check(char)) {\n            return cur;\n        }\n        cur = next;\n    }\n}\nfunction byGroup(view, pos, start) {\n    let categorize = view.state.charCategorizer(pos);\n    let cat = categorize(start);\n    return (next) => {\n        let nextCat = categorize(next);\n        if (cat == CharCategory.Space)\n            cat = nextCat;\n        return cat == nextCat;\n    };\n}\nfunction moveVertically(view, start, forward, distance) {\n    let startPos = start.head, dir = forward ? 1 : -1;\n    if (startPos == (forward ? view.state.doc.length : 0))\n        return EditorSelection.cursor(startPos, start.assoc);\n    let goal = start.goalColumn, startY;\n    let rect = view.contentDOM.getBoundingClientRect();\n    let startCoords = view.coordsAtPos(startPos, start.assoc || -1), docTop = view.documentTop;\n    if (startCoords) {\n        if (goal == null)\n            goal = startCoords.left - rect.left;\n        startY = dir < 0 ? startCoords.top : startCoords.bottom;\n    }\n    else {\n        let line = view.viewState.lineBlockAt(startPos);\n        if (goal == null)\n            goal = Math.min(rect.right - rect.left, view.defaultCharacterWidth * (startPos - line.from));\n        startY = (dir < 0 ? line.top : line.bottom) + docTop;\n    }\n    let resolvedGoal = rect.left + goal;\n    let dist = distance !== null && distance !== void 0 ? distance : (view.viewState.heightOracle.textHeight >> 1);\n    for (let extra = 0;; extra += 10) {\n        let curY = startY + (dist + extra) * dir;\n        let pos = posAtCoords(view, { x: resolvedGoal, y: curY }, false, dir);\n        if (curY < rect.top || curY > rect.bottom || (dir < 0 ? pos < startPos : pos > startPos)) {\n            let charRect = view.docView.coordsForChar(pos);\n            let assoc = !charRect || curY < charRect.top ? -1 : 1;\n            return EditorSelection.cursor(pos, assoc, undefined, goal);\n        }\n    }\n}\nfunction skipAtomicRanges(atoms, pos, bias) {\n    for (;;) {\n        let moved = 0;\n        for (let set of atoms) {\n            set.between(pos - 1, pos + 1, (from, to, value) => {\n                if (pos > from && pos < to) {\n                    let side = moved || bias || (pos - from < to - pos ? -1 : 1);\n                    pos = side < 0 ? from : to;\n                    moved = side;\n                }\n            });\n        }\n        if (!moved)\n            return pos;\n    }\n}\nfunction skipAtoms(view, oldPos, pos) {\n    let newPos = skipAtomicRanges(view.state.facet(atomicRanges).map(f => f(view)), pos.from, oldPos.head > pos.from ? -1 : 1);\n    return newPos == pos.from ? pos : EditorSelection.cursor(newPos, newPos < pos.from ? 1 : -1);\n}\n\nconst LineBreakPlaceholder = \"\\uffff\";\nclass DOMReader {\n    constructor(points, state) {\n        this.points = points;\n        this.text = \"\";\n        this.lineSeparator = state.facet(EditorState.lineSeparator);\n    }\n    append(text) {\n        this.text += text;\n    }\n    lineBreak() {\n        this.text += LineBreakPlaceholder;\n    }\n    readRange(start, end) {\n        if (!start)\n            return this;\n        let parent = start.parentNode;\n        for (let cur = start;;) {\n            this.findPointBefore(parent, cur);\n            let oldLen = this.text.length;\n            this.readNode(cur);\n            let next = cur.nextSibling;\n            if (next == end)\n                break;\n            let view = ContentView.get(cur), nextView = ContentView.get(next);\n            if (view && nextView ? view.breakAfter :\n                (view ? view.breakAfter : isBlockElement(cur)) ||\n                    (isBlockElement(next) && (cur.nodeName != \"BR\" || cur.cmIgnore) && this.text.length > oldLen))\n                this.lineBreak();\n            cur = next;\n        }\n        this.findPointBefore(parent, end);\n        return this;\n    }\n    readTextNode(node) {\n        let text = node.nodeValue;\n        for (let point of this.points)\n            if (point.node == node)\n                point.pos = this.text.length + Math.min(point.offset, text.length);\n        for (let off = 0, re = this.lineSeparator ? null : /\\r\\n?|\\n/g;;) {\n            let nextBreak = -1, breakSize = 1, m;\n            if (this.lineSeparator) {\n                nextBreak = text.indexOf(this.lineSeparator, off);\n                breakSize = this.lineSeparator.length;\n            }\n            else if (m = re.exec(text)) {\n                nextBreak = m.index;\n                breakSize = m[0].length;\n            }\n            this.append(text.slice(off, nextBreak < 0 ? text.length : nextBreak));\n            if (nextBreak < 0)\n                break;\n            this.lineBreak();\n            if (breakSize > 1)\n                for (let point of this.points)\n                    if (point.node == node && point.pos > this.text.length)\n                        point.pos -= breakSize - 1;\n            off = nextBreak + breakSize;\n        }\n    }\n    readNode(node) {\n        if (node.cmIgnore)\n            return;\n        let view = ContentView.get(node);\n        let fromView = view && view.overrideDOMText;\n        if (fromView != null) {\n            this.findPointInside(node, fromView.length);\n            for (let i = fromView.iter(); !i.next().done;) {\n                if (i.lineBreak)\n                    this.lineBreak();\n                else\n                    this.append(i.value);\n            }\n        }\n        else if (node.nodeType == 3) {\n            this.readTextNode(node);\n        }\n        else if (node.nodeName == \"BR\") {\n            if (node.nextSibling)\n                this.lineBreak();\n        }\n        else if (node.nodeType == 1) {\n            this.readRange(node.firstChild, null);\n        }\n    }\n    findPointBefore(node, next) {\n        for (let point of this.points)\n            if (point.node == node && node.childNodes[point.offset] == next)\n                point.pos = this.text.length;\n    }\n    findPointInside(node, length) {\n        for (let point of this.points)\n            if (node.nodeType == 3 ? point.node == node : node.contains(point.node))\n                point.pos = this.text.length + (isAtEnd(node, point.node, point.offset) ? length : 0);\n    }\n}\nfunction isAtEnd(parent, node, offset) {\n    for (;;) {\n        if (!node || offset < maxOffset(node))\n            return false;\n        if (node == parent)\n            return true;\n        offset = domIndex(node) + 1;\n        node = node.parentNode;\n    }\n}\nclass DOMPoint {\n    constructor(node, offset) {\n        this.node = node;\n        this.offset = offset;\n        this.pos = -1;\n    }\n}\n\nclass DOMChange {\n    constructor(view, start, end, typeOver) {\n        this.typeOver = typeOver;\n        this.bounds = null;\n        this.text = \"\";\n        this.domChanged = start > -1;\n        let { impreciseHead: iHead, impreciseAnchor: iAnchor } = view.docView;\n        if (view.state.readOnly && start > -1) {\n            // Ignore changes when the editor is read-only\n            this.newSel = null;\n        }\n        else if (start > -1 && (this.bounds = view.docView.domBoundsAround(start, end, 0))) {\n            let selPoints = iHead || iAnchor ? [] : selectionPoints(view);\n            let reader = new DOMReader(selPoints, view.state);\n            reader.readRange(this.bounds.startDOM, this.bounds.endDOM);\n            this.text = reader.text;\n            this.newSel = selectionFromPoints(selPoints, this.bounds.from);\n        }\n        else {\n            let domSel = view.observer.selectionRange;\n            let head = iHead && iHead.node == domSel.focusNode && iHead.offset == domSel.focusOffset ||\n                !contains(view.contentDOM, domSel.focusNode)\n                ? view.state.selection.main.head\n                : view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset);\n            let anchor = iAnchor && iAnchor.node == domSel.anchorNode && iAnchor.offset == domSel.anchorOffset ||\n                !contains(view.contentDOM, domSel.anchorNode)\n                ? view.state.selection.main.anchor\n                : view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset);\n            // iOS will refuse to select the block gaps when doing\n            // select-all.\n            // Chrome will put the selection *inside* them, confusing\n            // posFromDOM\n            let vp = view.viewport;\n            if ((browser.ios || browser.chrome) && view.state.selection.main.empty && head != anchor &&\n                (vp.from > 0 || vp.to < view.state.doc.length)) {\n                let from = Math.min(head, anchor), to = Math.max(head, anchor);\n                let offFrom = vp.from - from, offTo = vp.to - to;\n                if ((offFrom == 0 || offFrom == 1 || from == 0) && (offTo == 0 || offTo == -1 || to == view.state.doc.length)) {\n                    head = 0;\n                    anchor = view.state.doc.length;\n                }\n            }\n            this.newSel = EditorSelection.single(anchor, head);\n        }\n    }\n}\nfunction applyDOMChange(view, domChange) {\n    let change;\n    let { newSel } = domChange, sel = view.state.selection.main;\n    let lastKey = view.inputState.lastKeyTime > Date.now() - 100 ? view.inputState.lastKeyCode : -1;\n    if (domChange.bounds) {\n        let { from, to } = domChange.bounds;\n        let preferredPos = sel.from, preferredSide = null;\n        // Prefer anchoring to end when Backspace is pressed (or, on\n        // Android, when something was deleted)\n        if (lastKey === 8 || browser.android && domChange.text.length < to - from) {\n            preferredPos = sel.to;\n            preferredSide = \"end\";\n        }\n        let diff = findDiff(view.state.doc.sliceString(from, to, LineBreakPlaceholder), domChange.text, preferredPos - from, preferredSide);\n        if (diff) {\n            // Chrome inserts two newlines when pressing shift-enter at the\n            // end of a line. DomChange drops one of those.\n            if (browser.chrome && lastKey == 13 &&\n                diff.toB == diff.from + 2 && domChange.text.slice(diff.from, diff.toB) == LineBreakPlaceholder + LineBreakPlaceholder)\n                diff.toB--;\n            change = { from: from + diff.from, to: from + diff.toA,\n                insert: Text.of(domChange.text.slice(diff.from, diff.toB).split(LineBreakPlaceholder)) };\n        }\n    }\n    else if (newSel && (!view.hasFocus && view.state.facet(editable) || newSel.main.eq(sel))) {\n        newSel = null;\n    }\n    if (!change && !newSel)\n        return false;\n    if (!change && domChange.typeOver && !sel.empty && newSel && newSel.main.empty) {\n        // Heuristic to notice typing over a selected character\n        change = { from: sel.from, to: sel.to, insert: view.state.doc.slice(sel.from, sel.to) };\n    }\n    else if ((browser.mac || browser.android) && change && change.from == change.to && change.from == sel.head - 1 &&\n        /^\\. ?$/.test(change.insert.toString()) && view.contentDOM.getAttribute(\"autocorrect\") == \"off\") {\n        // Detect insert-period-on-double-space Mac and Android behavior,\n        // and transform it into a regular space insert.\n        if (newSel && change.insert.length == 2)\n            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n        change = { from: change.from, to: change.to, insert: Text.of([change.insert.toString().replace(\".\", \" \")]) };\n    }\n    else if (change && change.from >= sel.from && change.to <= sel.to &&\n        (change.from != sel.from || change.to != sel.to) &&\n        (sel.to - sel.from) - (change.to - change.from) <= 4) {\n        // If the change is inside the selection and covers most of it,\n        // assume it is a selection replace (with identical characters at\n        // the start/end not included in the diff)\n        change = {\n            from: sel.from, to: sel.to,\n            insert: view.state.doc.slice(sel.from, change.from).append(change.insert).append(view.state.doc.slice(change.to, sel.to))\n        };\n    }\n    else if (browser.chrome && change && change.from == change.to && change.from == sel.head &&\n        change.insert.toString() == \"\\n \" && view.lineWrapping) {\n        // In Chrome, if you insert a space at the start of a wrapped\n        // line, it will actually insert a newline and a space, causing a\n        // bogus new line to be created in CodeMirror (#968)\n        if (newSel)\n            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n        change = { from: sel.from, to: sel.to, insert: Text.of([\" \"]) };\n    }\n    if (change) {\n        return applyDOMChangeInner(view, change, newSel, lastKey);\n    }\n    else if (newSel && !newSel.main.eq(sel)) {\n        let scrollIntoView = false, userEvent = \"select\";\n        if (view.inputState.lastSelectionTime > Date.now() - 50) {\n            if (view.inputState.lastSelectionOrigin == \"select\")\n                scrollIntoView = true;\n            userEvent = view.inputState.lastSelectionOrigin;\n        }\n        view.dispatch({ selection: newSel, scrollIntoView, userEvent });\n        return true;\n    }\n    else {\n        return false;\n    }\n}\nfunction applyDOMChangeInner(view, change, newSel, lastKey = -1) {\n    if (browser.ios && view.inputState.flushIOSKey(change))\n        return true;\n    let sel = view.state.selection.main;\n    // Android browsers don't fire reasonable key events for enter,\n    // backspace, or delete. So this detects changes that look like\n    // they're caused by those keys, and reinterprets them as key\n    // events. (Some of these keys are also handled by beforeinput\n    // events and the pendingAndroidKey mechanism, but that's not\n    // reliable in all situations.)\n    if (browser.android &&\n        ((change.to == sel.to &&\n            // GBoard will sometimes remove a space it just inserted\n            // after a completion when you press enter\n            (change.from == sel.from || change.from == sel.from - 1 && view.state.sliceDoc(change.from, sel.from) == \" \") &&\n            change.insert.length == 1 && change.insert.lines == 2 &&\n            dispatchKey(view.contentDOM, \"Enter\", 13)) ||\n            ((change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 ||\n                lastKey == 8 && change.insert.length < change.to - change.from && change.to > sel.head) &&\n                dispatchKey(view.contentDOM, \"Backspace\", 8)) ||\n            (change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 &&\n                dispatchKey(view.contentDOM, \"Delete\", 46))))\n        return true;\n    let text = change.insert.toString();\n    if (view.inputState.composing >= 0)\n        view.inputState.composing++;\n    let defaultTr;\n    let defaultInsert = () => defaultTr || (defaultTr = applyDefaultInsert(view, change, newSel));\n    if (!view.state.facet(inputHandler).some(h => h(view, change.from, change.to, text, defaultInsert)))\n        view.dispatch(defaultInsert());\n    return true;\n}\nfunction applyDefaultInsert(view, change, newSel) {\n    let tr, startState = view.state, sel = startState.selection.main;\n    if (change.from >= sel.from && change.to <= sel.to && change.to - change.from >= (sel.to - sel.from) / 3 &&\n        (!newSel || newSel.main.empty && newSel.main.from == change.from + change.insert.length) &&\n        view.inputState.composing < 0) {\n        let before = sel.from < change.from ? startState.sliceDoc(sel.from, change.from) : \"\";\n        let after = sel.to > change.to ? startState.sliceDoc(change.to, sel.to) : \"\";\n        tr = startState.replaceSelection(view.state.toText(before + change.insert.sliceString(0, undefined, view.state.lineBreak) + after));\n    }\n    else {\n        let changes = startState.changes(change);\n        let mainSel = newSel && newSel.main.to <= changes.newLength ? newSel.main : undefined;\n        // Try to apply a composition change to all cursors\n        if (startState.selection.ranges.length > 1 && view.inputState.composing >= 0 &&\n            change.to <= sel.to && change.to >= sel.to - 10) {\n            let replaced = view.state.sliceDoc(change.from, change.to);\n            let compositionRange, composition = newSel && findCompositionNode(view, newSel.main.head);\n            if (composition) {\n                let dLen = change.insert.length - (change.to - change.from);\n                compositionRange = { from: composition.from, to: composition.to - dLen };\n            }\n            else {\n                compositionRange = view.state.doc.lineAt(sel.head);\n            }\n            let offset = sel.to - change.to, size = sel.to - sel.from;\n            tr = startState.changeByRange(range => {\n                if (range.from == sel.from && range.to == sel.to)\n                    return { changes, range: mainSel || range.map(changes) };\n                let to = range.to - offset, from = to - replaced.length;\n                if (range.to - range.from != size || view.state.sliceDoc(from, to) != replaced ||\n                    // Unfortunately, there's no way to make multiple\n                    // changes in the same node work without aborting\n                    // composition, so cursors in the composition range are\n                    // ignored.\n                    range.to >= compositionRange.from && range.from <= compositionRange.to)\n                    return { range };\n                let rangeChanges = startState.changes({ from, to, insert: change.insert }), selOff = range.to - sel.to;\n                return {\n                    changes: rangeChanges,\n                    range: !mainSel ? range.map(rangeChanges) :\n                        EditorSelection.range(Math.max(0, mainSel.anchor + selOff), Math.max(0, mainSel.head + selOff))\n                };\n            });\n        }\n        else {\n            tr = {\n                changes,\n                selection: mainSel && startState.selection.replaceRange(mainSel)\n            };\n        }\n    }\n    let userEvent = \"input.type\";\n    if (view.composing ||\n        view.inputState.compositionPendingChange && view.inputState.compositionEndedAt > Date.now() - 50) {\n        view.inputState.compositionPendingChange = false;\n        userEvent += \".compose\";\n        if (view.inputState.compositionFirstChange) {\n            userEvent += \".start\";\n            view.inputState.compositionFirstChange = false;\n        }\n    }\n    return startState.update(tr, { userEvent, scrollIntoView: true });\n}\nfunction findDiff(a, b, preferredPos, preferredSide) {\n    let minLen = Math.min(a.length, b.length);\n    let from = 0;\n    while (from < minLen && a.charCodeAt(from) == b.charCodeAt(from))\n        from++;\n    if (from == minLen && a.length == b.length)\n        return null;\n    let toA = a.length, toB = b.length;\n    while (toA > 0 && toB > 0 && a.charCodeAt(toA - 1) == b.charCodeAt(toB - 1)) {\n        toA--;\n        toB--;\n    }\n    if (preferredSide == \"end\") {\n        let adjust = Math.max(0, from - Math.min(toA, toB));\n        preferredPos -= toA + adjust - from;\n    }\n    if (toA < from && a.length < b.length) {\n        let move = preferredPos <= from && preferredPos >= toA ? from - preferredPos : 0;\n        from -= move;\n        toB = from + (toB - toA);\n        toA = from;\n    }\n    else if (toB < from) {\n        let move = preferredPos <= from && preferredPos >= toB ? from - preferredPos : 0;\n        from -= move;\n        toA = from + (toA - toB);\n        toB = from;\n    }\n    return { from, toA, toB };\n}\nfunction selectionPoints(view) {\n    let result = [];\n    if (view.root.activeElement != view.contentDOM)\n        return result;\n    let { anchorNode, anchorOffset, focusNode, focusOffset } = view.observer.selectionRange;\n    if (anchorNode) {\n        result.push(new DOMPoint(anchorNode, anchorOffset));\n        if (focusNode != anchorNode || focusOffset != anchorOffset)\n            result.push(new DOMPoint(focusNode, focusOffset));\n    }\n    return result;\n}\nfunction selectionFromPoints(points, base) {\n    if (points.length == 0)\n        return null;\n    let anchor = points[0].pos, head = points.length == 2 ? points[1].pos : anchor;\n    return anchor > -1 && head > -1 ? EditorSelection.single(anchor + base, head + base) : null;\n}\n\nclass InputState {\n    setSelectionOrigin(origin) {\n        this.lastSelectionOrigin = origin;\n        this.lastSelectionTime = Date.now();\n    }\n    constructor(view) {\n        this.view = view;\n        this.lastKeyCode = 0;\n        this.lastKeyTime = 0;\n        this.lastTouchTime = 0;\n        this.lastFocusTime = 0;\n        this.lastScrollTop = 0;\n        this.lastScrollLeft = 0;\n        // On iOS, some keys need to have their default behavior happen\n        // (after which we retroactively handle them and reset the DOM) to\n        // avoid messing up the virtual keyboard state.\n        this.pendingIOSKey = undefined;\n        /**\n        When enabled (>-1), tab presses are not given to key handlers,\n        leaving the browser's default behavior. If >0, the mode expires\n        at that timestamp, and any other keypress clears it.\n        Esc enables temporary tab focus mode for two seconds when not\n        otherwise handled.\n        */\n        this.tabFocusMode = -1;\n        this.lastSelectionOrigin = null;\n        this.lastSelectionTime = 0;\n        this.lastContextMenu = 0;\n        this.scrollHandlers = [];\n        this.handlers = Object.create(null);\n        // -1 means not in a composition. Otherwise, this counts the number\n        // of changes made during the composition. The count is used to\n        // avoid treating the start state of the composition, before any\n        // changes have been made, as part of the composition.\n        this.composing = -1;\n        // Tracks whether the next change should be marked as starting the\n        // composition (null means no composition, true means next is the\n        // first, false means first has already been marked for this\n        // composition)\n        this.compositionFirstChange = null;\n        // End time of the previous composition\n        this.compositionEndedAt = 0;\n        // Used in a kludge to detect when an Enter keypress should be\n        // considered part of the composition on Safari, which fires events\n        // in the wrong order\n        this.compositionPendingKey = false;\n        // Used to categorize changes as part of a composition, even when\n        // the mutation events fire shortly after the compositionend event\n        this.compositionPendingChange = false;\n        this.mouseSelection = null;\n        // When a drag from the editor is active, this points at the range\n        // being dragged.\n        this.draggedContent = null;\n        this.handleEvent = this.handleEvent.bind(this);\n        this.notifiedFocused = view.hasFocus;\n        // On Safari adding an input event handler somehow prevents an\n        // issue where the composition vanishes when you press enter.\n        if (browser.safari)\n            view.contentDOM.addEventListener(\"input\", () => null);\n        if (browser.gecko)\n            firefoxCopyCutHack(view.contentDOM.ownerDocument);\n    }\n    handleEvent(event) {\n        if (!eventBelongsToEditor(this.view, event) || this.ignoreDuringComposition(event) ||\n            this.ignoreDuringTransientFocus(event))\n            return;\n        if (event.type == \"keydown\" && this.keydown(event))\n            return;\n        if (this.view.updateState != 0 /* UpdateState.Idle */)\n            Promise.resolve().then(() => this.runHandlers(event.type, event));\n        else\n            this.runHandlers(event.type, event);\n    }\n    runHandlers(type, event) {\n        let handlers = this.handlers[type];\n        if (handlers) {\n            for (let observer of handlers.observers)\n                observer(this.view, event);\n            for (let handler of handlers.handlers) {\n                if (event.defaultPrevented)\n                    break;\n                if (handler(this.view, event)) {\n                    event.preventDefault();\n                    break;\n                }\n            }\n        }\n    }\n    ensureHandlers(plugins) {\n        let handlers = computeHandlers(plugins), prev = this.handlers, dom = this.view.contentDOM;\n        for (let type in handlers)\n            if (type != \"scroll\") {\n                let passive = !handlers[type].handlers.length;\n                let exists = prev[type];\n                if (exists && passive != !exists.handlers.length) {\n                    dom.removeEventListener(type, this.handleEvent);\n                    exists = null;\n                }\n                if (!exists)\n                    dom.addEventListener(type, this.handleEvent, { passive });\n            }\n        for (let type in prev)\n            if (type != \"scroll\" && !handlers[type])\n                dom.removeEventListener(type, this.handleEvent);\n        this.handlers = handlers;\n    }\n    keydown(event) {\n        // Must always run, even if a custom handler handled the event\n        this.lastKeyCode = event.keyCode;\n        this.lastKeyTime = Date.now();\n        if (event.keyCode == 9 && this.tabFocusMode > -1 && (!this.tabFocusMode || Date.now() <= this.tabFocusMode))\n            return true;\n        if (this.tabFocusMode > 0 && event.keyCode != 27 && modifierCodes.indexOf(event.keyCode) < 0)\n            this.tabFocusMode = -1;\n        // Chrome for Android usually doesn't fire proper key events, but\n        // occasionally does, usually surrounded by a bunch of complicated\n        // composition changes. When an enter or backspace key event is\n        // seen, hold off on handling DOM events for a bit, and then\n        // dispatch it.\n        if (browser.android && browser.chrome && !event.synthetic &&\n            (event.keyCode == 13 || event.keyCode == 8)) {\n            this.view.observer.delayAndroidKey(event.key, event.keyCode);\n            return true;\n        }\n        // Preventing the default behavior of Enter on iOS makes the\n        // virtual keyboard get stuck in the wrong (lowercase)\n        // state. So we let it go through, and then, in\n        // applyDOMChange, notify key handlers of it and reset to\n        // the state they produce.\n        let pending;\n        if (browser.ios && !event.synthetic && !event.altKey && !event.metaKey &&\n            ((pending = PendingKeys.find(key => key.keyCode == event.keyCode)) && !event.ctrlKey ||\n                EmacsyPendingKeys.indexOf(event.key) > -1 && event.ctrlKey && !event.shiftKey)) {\n            this.pendingIOSKey = pending || event;\n            setTimeout(() => this.flushIOSKey(), 250);\n            return true;\n        }\n        if (event.keyCode != 229)\n            this.view.observer.forceFlush();\n        return false;\n    }\n    flushIOSKey(change) {\n        let key = this.pendingIOSKey;\n        if (!key)\n            return false;\n        // This looks like an autocorrection before Enter\n        if (key.key == \"Enter\" && change && change.from < change.to && /^\\S+$/.test(change.insert.toString()))\n            return false;\n        this.pendingIOSKey = undefined;\n        return dispatchKey(this.view.contentDOM, key.key, key.keyCode, key instanceof KeyboardEvent ? key : undefined);\n    }\n    ignoreDuringComposition(event) {\n        if (!/^key/.test(event.type))\n            return false;\n        if (this.composing > 0)\n            return true;\n        // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.\n        // On some input method editors (IMEs), the Enter key is used to\n        // confirm character selection. On Safari, when Enter is pressed,\n        // compositionend and keydown events are sometimes emitted in the\n        // wrong order. The key event should still be ignored, even when\n        // it happens after the compositionend event.\n        if (browser.safari && !browser.ios && this.compositionPendingKey && Date.now() - this.compositionEndedAt < 100) {\n            this.compositionPendingKey = false;\n            return true;\n        }\n        return false;\n    }\n    ignoreDuringTransientFocus(event) {\n        // Detect transient focus from parent editor selection operations. When ProseMirror performs a selection\n        // using Selection.collapse() + Selection.extend() [1], and Selection.collapse() collapses to a position\n        // where CodeMirror is, Chrome will fire a focus event on this CodeMirror. This focus is transient and\n        // should be ignored; otherwise, our focus logic will undo the parent's selection.\n        //\n        // This is a workaround for a regression in Chrome 135+. It should not be needed once [2] is merged\n        // or [3] is fixed.\n        //\n        // [1] https://github.com/ProseMirror/prosemirror-view/blob/76c7c47f03730b18397b94bd269ece8a9cb7f486/src/viewdesc.ts#L464-L468\n        // [2] https://github.com/codemirror/view/pull/78\n        // [3] https://issues.chromium.org/issues/474377386\n        if (event.type === \"focus\") {\n            let sel = getSelection(this.view.root);\n            if (sel && sel.anchorNode && !this.view.contentDOM.contains(sel.anchorNode)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    startMouseSelection(mouseSelection) {\n        if (this.mouseSelection)\n            this.mouseSelection.destroy();\n        this.mouseSelection = mouseSelection;\n    }\n    update(update) {\n        this.view.observer.update(update);\n        if (this.mouseSelection)\n            this.mouseSelection.update(update);\n        if (this.draggedContent && update.docChanged)\n            this.draggedContent = this.draggedContent.map(update.changes);\n        if (update.transactions.length)\n            this.lastKeyCode = this.lastSelectionTime = 0;\n    }\n    destroy() {\n        if (this.mouseSelection)\n            this.mouseSelection.destroy();\n    }\n}\nfunction bindHandler(plugin, handler) {\n    return (view, event) => {\n        try {\n            return handler.call(plugin, event, view);\n        }\n        catch (e) {\n            logException(view.state, e);\n        }\n    };\n}\nfunction computeHandlers(plugins) {\n    let result = Object.create(null);\n    function record(type) {\n        return result[type] || (result[type] = { observers: [], handlers: [] });\n    }\n    for (let plugin of plugins) {\n        let spec = plugin.spec;\n        if (spec && spec.domEventHandlers)\n            for (let type in spec.domEventHandlers) {\n                let f = spec.domEventHandlers[type];\n                if (f)\n                    record(type).handlers.push(bindHandler(plugin.value, f));\n            }\n        if (spec && spec.domEventObservers)\n            for (let type in spec.domEventObservers) {\n                let f = spec.domEventObservers[type];\n                if (f)\n                    record(type).observers.push(bindHandler(plugin.value, f));\n            }\n    }\n    for (let type in handlers)\n        record(type).handlers.push(handlers[type]);\n    for (let type in observers)\n        record(type).observers.push(observers[type]);\n    return result;\n}\nconst PendingKeys = [\n    { key: \"Backspace\", keyCode: 8, inputType: \"deleteContentBackward\" },\n    { key: \"Enter\", keyCode: 13, inputType: \"insertParagraph\" },\n    { key: \"Enter\", keyCode: 13, inputType: \"insertLineBreak\" },\n    { key: \"Delete\", keyCode: 46, inputType: \"deleteContentForward\" }\n];\nconst EmacsyPendingKeys = \"dthko\";\n// Key codes for modifier keys\nconst modifierCodes = [16, 17, 18, 20, 91, 92, 224, 225];\nconst dragScrollMargin = 6;\nfunction dragScrollSpeed(dist) {\n    return Math.max(0, dist) * 0.7 + 8;\n}\nfunction dist(a, b) {\n    return Math.max(Math.abs(a.clientX - b.clientX), Math.abs(a.clientY - b.clientY));\n}\nclass MouseSelection {\n    constructor(view, startEvent, style, mustSelect) {\n        this.view = view;\n        this.startEvent = startEvent;\n        this.style = style;\n        this.mustSelect = mustSelect;\n        this.scrollSpeed = { x: 0, y: 0 };\n        this.scrolling = -1;\n        this.lastEvent = startEvent;\n        this.scrollParents = scrollableParents(view.contentDOM);\n        this.atoms = view.state.facet(atomicRanges).map(f => f(view));\n        let doc = view.contentDOM.ownerDocument;\n        doc.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n        doc.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n        this.extend = startEvent.shiftKey;\n        this.multiple = view.state.facet(EditorState.allowMultipleSelections) && addsSelectionRange(view, startEvent);\n        this.dragging = isInPrimarySelection(view, startEvent) && getClickType(startEvent) == 1 ? null : false;\n    }\n    start(event) {\n        // When clicking outside of the selection, immediately apply the\n        // effect of starting the selection\n        if (this.dragging === false)\n            this.select(event);\n    }\n    move(event) {\n        if (event.buttons == 0)\n            return this.destroy();\n        if (this.dragging || this.dragging == null && dist(this.startEvent, event) < 10)\n            return;\n        this.select(this.lastEvent = event);\n        let sx = 0, sy = 0;\n        let left = 0, top = 0, right = this.view.win.innerWidth, bottom = this.view.win.innerHeight;\n        if (this.scrollParents.x)\n            ({ left, right } = this.scrollParents.x.getBoundingClientRect());\n        if (this.scrollParents.y)\n            ({ top, bottom } = this.scrollParents.y.getBoundingClientRect());\n        let margins = getScrollMargins(this.view);\n        if (event.clientX - margins.left <= left + dragScrollMargin)\n            sx = -dragScrollSpeed(left - event.clientX);\n        else if (event.clientX + margins.right >= right - dragScrollMargin)\n            sx = dragScrollSpeed(event.clientX - right);\n        if (event.clientY - margins.top <= top + dragScrollMargin)\n            sy = -dragScrollSpeed(top - event.clientY);\n        else if (event.clientY + margins.bottom >= bottom - dragScrollMargin)\n            sy = dragScrollSpeed(event.clientY - bottom);\n        this.setScrollSpeed(sx, sy);\n    }\n    up(event) {\n        if (this.dragging == null)\n            this.select(this.lastEvent);\n        if (!this.dragging)\n            event.preventDefault();\n        this.destroy();\n    }\n    destroy() {\n        this.setScrollSpeed(0, 0);\n        let doc = this.view.contentDOM.ownerDocument;\n        doc.removeEventListener(\"mousemove\", this.move);\n        doc.removeEventListener(\"mouseup\", this.up);\n        this.view.inputState.mouseSelection = this.view.inputState.draggedContent = null;\n    }\n    setScrollSpeed(sx, sy) {\n        this.scrollSpeed = { x: sx, y: sy };\n        if (sx || sy) {\n            if (this.scrolling < 0)\n                this.scrolling = setInterval(() => this.scroll(), 50);\n        }\n        else if (this.scrolling > -1) {\n            clearInterval(this.scrolling);\n            this.scrolling = -1;\n        }\n    }\n    scroll() {\n        let { x, y } = this.scrollSpeed;\n        if (x && this.scrollParents.x) {\n            this.scrollParents.x.scrollLeft += x;\n            x = 0;\n        }\n        if (y && this.scrollParents.y) {\n            this.scrollParents.y.scrollTop += y;\n            y = 0;\n        }\n        if (x || y)\n            this.view.win.scrollBy(x, y);\n        if (this.dragging === false)\n            this.select(this.lastEvent);\n    }\n    skipAtoms(sel) {\n        let ranges = null;\n        for (let i = 0; i < sel.ranges.length; i++) {\n            let range = sel.ranges[i], updated = null;\n            if (range.empty) {\n                let pos = skipAtomicRanges(this.atoms, range.from, 0);\n                if (pos != range.from)\n                    updated = EditorSelection.cursor(pos, -1);\n            }\n            else {\n                let from = skipAtomicRanges(this.atoms, range.from, -1);\n                let to = skipAtomicRanges(this.atoms, range.to, 1);\n                if (from != range.from || to != range.to)\n                    updated = EditorSelection.range(range.from == range.anchor ? from : to, range.from == range.head ? from : to);\n            }\n            if (updated) {\n                if (!ranges)\n                    ranges = sel.ranges.slice();\n                ranges[i] = updated;\n            }\n        }\n        return ranges ? EditorSelection.create(ranges, sel.mainIndex) : sel;\n    }\n    select(event) {\n        let { view } = this, selection = this.skipAtoms(this.style.get(event, this.extend, this.multiple));\n        if (this.mustSelect || !selection.eq(view.state.selection, this.dragging === false))\n            this.view.dispatch({\n                selection,\n                userEvent: \"select.pointer\"\n            });\n        this.mustSelect = false;\n    }\n    update(update) {\n        if (update.transactions.some(tr => tr.isUserEvent(\"input.type\")))\n            this.destroy();\n        else if (this.style.update(update))\n            setTimeout(() => this.select(this.lastEvent), 20);\n    }\n}\nfunction addsSelectionRange(view, event) {\n    let facet = view.state.facet(clickAddsSelectionRange);\n    return facet.length ? facet[0](event) : browser.mac ? event.metaKey : event.ctrlKey;\n}\nfunction dragMovesSelection(view, event) {\n    let facet = view.state.facet(dragMovesSelection$1);\n    return facet.length ? facet[0](event) : browser.mac ? !event.altKey : !event.ctrlKey;\n}\nfunction isInPrimarySelection(view, event) {\n    let { main } = view.state.selection;\n    if (main.empty)\n        return false;\n    // On boundary clicks, check whether the coordinates are inside the\n    // selection's client rectangles\n    let sel = getSelection(view.root);\n    if (!sel || sel.rangeCount == 0)\n        return true;\n    let rects = sel.getRangeAt(0).getClientRects();\n    for (let i = 0; i < rects.length; i++) {\n        let rect = rects[i];\n        if (rect.left <= event.clientX && rect.right >= event.clientX &&\n            rect.top <= event.clientY && rect.bottom >= event.clientY)\n            return true;\n    }\n    return false;\n}\nfunction eventBelongsToEditor(view, event) {\n    if (!event.bubbles)\n        return true;\n    if (event.defaultPrevented)\n        return false;\n    for (let node = event.target, cView; node != view.contentDOM; node = node.parentNode)\n        if (!node || node.nodeType == 11 || ((cView = ContentView.get(node)) && cView.ignoreEvent(event)))\n            return false;\n    return true;\n}\nconst handlers = /*@__PURE__*/Object.create(null);\nconst observers = /*@__PURE__*/Object.create(null);\n// This is very crude, but unfortunately both these browsers _pretend_\n// that they have a clipboard API\u2014all the objects and methods are\n// there, they just don't work, and they are hard to test.\nconst brokenClipboardAPI = (browser.ie && browser.ie_version < 15) ||\n    (browser.ios && browser.webkit_version < 604);\nfunction capturePaste(view) {\n    let parent = view.dom.parentNode;\n    if (!parent)\n        return;\n    let target = parent.appendChild(document.createElement(\"textarea\"));\n    target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    target.focus();\n    setTimeout(() => {\n        view.focus();\n        target.remove();\n        doPaste(view, target.value);\n    }, 50);\n}\nfunction textFilter(state, facet, text) {\n    for (let filter of state.facet(facet))\n        text = filter(text, state);\n    return text;\n}\nfunction doPaste(view, input) {\n    input = textFilter(view.state, clipboardInputFilter, input);\n    let { state } = view, changes, i = 1, text = state.toText(input);\n    let byLine = text.lines == state.selection.ranges.length;\n    let linewise = lastLinewiseCopy != null && state.selection.ranges.every(r => r.empty) && lastLinewiseCopy == text.toString();\n    if (linewise) {\n        let lastLine = -1;\n        changes = state.changeByRange(range => {\n            let line = state.doc.lineAt(range.from);\n            if (line.from == lastLine)\n                return { range };\n            lastLine = line.from;\n            let insert = state.toText((byLine ? text.line(i++).text : input) + state.lineBreak);\n            return { changes: { from: line.from, insert },\n                range: EditorSelection.cursor(range.from + insert.length) };\n        });\n    }\n    else if (byLine) {\n        changes = state.changeByRange(range => {\n            let line = text.line(i++);\n            return { changes: { from: range.from, to: range.to, insert: line.text },\n                range: EditorSelection.cursor(range.from + line.length) };\n        });\n    }\n    else {\n        changes = state.replaceSelection(text);\n    }\n    view.dispatch(changes, {\n        userEvent: \"input.paste\",\n        scrollIntoView: true\n    });\n}\nobservers.scroll = view => {\n    view.inputState.lastScrollTop = view.scrollDOM.scrollTop;\n    view.inputState.lastScrollLeft = view.scrollDOM.scrollLeft;\n};\nhandlers.keydown = (view, event) => {\n    view.inputState.setSelectionOrigin(\"select\");\n    if (event.keyCode == 27 && view.inputState.tabFocusMode != 0)\n        view.inputState.tabFocusMode = Date.now() + 2000;\n    return false;\n};\nobservers.touchstart = (view, e) => {\n    view.inputState.lastTouchTime = Date.now();\n    view.inputState.setSelectionOrigin(\"select.pointer\");\n};\nobservers.touchmove = view => {\n    view.inputState.setSelectionOrigin(\"select.pointer\");\n};\nhandlers.mousedown = (view, event) => {\n    view.observer.flush();\n    if (view.inputState.lastTouchTime > Date.now() - 2000)\n        return false; // Ignore touch interaction\n    let style = null;\n    for (let makeStyle of view.state.facet(mouseSelectionStyle)) {\n        style = makeStyle(view, event);\n        if (style)\n            break;\n    }\n    if (!style && event.button == 0)\n        style = basicMouseSelection(view, event);\n    if (style) {\n        let mustFocus = !view.hasFocus;\n        view.inputState.startMouseSelection(new MouseSelection(view, event, style, mustFocus));\n        if (mustFocus)\n            view.observer.ignore(() => {\n                focusPreventScroll(view.contentDOM);\n                let active = view.root.activeElement;\n                if (active && !active.contains(view.contentDOM))\n                    active.blur();\n            });\n        let mouseSel = view.inputState.mouseSelection;\n        if (mouseSel) {\n            mouseSel.start(event);\n            return mouseSel.dragging === false;\n        }\n    }\n    return false;\n};\nfunction rangeForClick(view, pos, bias, type) {\n    if (type == 1) { // Single click\n        return EditorSelection.cursor(pos, bias);\n    }\n    else if (type == 2) { // Double click\n        return groupAt(view.state, pos, bias);\n    }\n    else { // Triple click\n        let visual = LineView.find(view.docView, pos), line = view.state.doc.lineAt(visual ? visual.posAtEnd : pos);\n        let from = visual ? visual.posAtStart : line.from, to = visual ? visual.posAtEnd : line.to;\n        if (to < view.state.doc.length && to == line.to)\n            to++;\n        return EditorSelection.range(from, to);\n    }\n}\nlet inside = (x, y, rect) => y >= rect.top && y <= rect.bottom && x >= rect.left && x <= rect.right;\n// Try to determine, for the given coordinates, associated with the\n// given position, whether they are related to the element before or\n// the element after the position.\nfunction findPositionSide(view, pos, x, y) {\n    let line = LineView.find(view.docView, pos);\n    if (!line)\n        return 1;\n    let off = pos - line.posAtStart;\n    // Line boundaries point into the line\n    if (off == 0)\n        return 1;\n    if (off == line.length)\n        return -1;\n    // Positions on top of an element point at that element\n    let before = line.coordsAt(off, -1);\n    if (before && inside(x, y, before))\n        return -1;\n    let after = line.coordsAt(off, 1);\n    if (after && inside(x, y, after))\n        return 1;\n    // This is probably a line wrap point. Pick before if the point is\n    // above its bottom.\n    return before && before.bottom >= y ? -1 : 1;\n}\nfunction queryPos(view, event) {\n    let pos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    return { pos, bias: findPositionSide(view, pos, event.clientX, event.clientY) };\n}\nconst BadMouseDetail = browser.ie && browser.ie_version <= 11;\nlet lastMouseDown = null, lastMouseDownCount = 0, lastMouseDownTime = 0;\nfunction getClickType(event) {\n    if (!BadMouseDetail)\n        return event.detail;\n    let last = lastMouseDown, lastTime = lastMouseDownTime;\n    lastMouseDown = event;\n    lastMouseDownTime = Date.now();\n    return lastMouseDownCount = !last || (lastTime > Date.now() - 400 && Math.abs(last.clientX - event.clientX) < 2 &&\n        Math.abs(last.clientY - event.clientY) < 2) ? (lastMouseDownCount + 1) % 3 : 1;\n}\nfunction basicMouseSelection(view, event) {\n    let start = queryPos(view, event), type = getClickType(event);\n    let startSel = view.state.selection;\n    return {\n        update(update) {\n            if (update.docChanged) {\n                start.pos = update.changes.mapPos(start.pos);\n                startSel = startSel.map(update.changes);\n            }\n        },\n        get(event, extend, multiple) {\n            let cur = queryPos(view, event), removed;\n            let range = rangeForClick(view, cur.pos, cur.bias, type);\n            if (start.pos != cur.pos && !extend) {\n                let startRange = rangeForClick(view, start.pos, start.bias, type);\n                let from = Math.min(startRange.from, range.from), to = Math.max(startRange.to, range.to);\n                range = from < range.from ? EditorSelection.range(from, to) : EditorSelection.range(to, from);\n            }\n            if (extend)\n                return startSel.replaceRange(startSel.main.extend(range.from, range.to));\n            else if (multiple && type == 1 && startSel.ranges.length > 1 && (removed = removeRangeAround(startSel, cur.pos)))\n                return removed;\n            else if (multiple)\n                return startSel.addRange(range);\n            else\n                return EditorSelection.create([range]);\n        }\n    };\n}\nfunction removeRangeAround(sel, pos) {\n    for (let i = 0; i < sel.ranges.length; i++) {\n        let { from, to } = sel.ranges[i];\n        if (from <= pos && to >= pos)\n            return EditorSelection.create(sel.ranges.slice(0, i).concat(sel.ranges.slice(i + 1)), sel.mainIndex == i ? 0 : sel.mainIndex - (sel.mainIndex > i ? 1 : 0));\n    }\n    return null;\n}\nhandlers.dragstart = (view, event) => {\n    let { selection: { main: range } } = view.state;\n    if (event.target.draggable) {\n        let cView = view.docView.nearest(event.target);\n        if (cView && cView.isWidget) {\n            let from = cView.posAtStart, to = from + cView.length;\n            if (from >= range.to || to <= range.from)\n                range = EditorSelection.range(from, to);\n        }\n    }\n    let { inputState } = view;\n    if (inputState.mouseSelection)\n        inputState.mouseSelection.dragging = true;\n    inputState.draggedContent = range;\n    if (event.dataTransfer) {\n        event.dataTransfer.setData(\"Text\", textFilter(view.state, clipboardOutputFilter, view.state.sliceDoc(range.from, range.to)));\n        event.dataTransfer.effectAllowed = \"copyMove\";\n    }\n    return false;\n};\nhandlers.dragend = view => {\n    view.inputState.draggedContent = null;\n    return false;\n};\nfunction dropText(view, event, text, direct) {\n    text = textFilter(view.state, clipboardInputFilter, text);\n    if (!text)\n        return;\n    let dropPos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    let { draggedContent } = view.inputState;\n    let del = direct && draggedContent && dragMovesSelection(view, event)\n        ? { from: draggedContent.from, to: draggedContent.to } : null;\n    let ins = { from: dropPos, insert: text };\n    let changes = view.state.changes(del ? [del, ins] : ins);\n    view.focus();\n    view.dispatch({\n        changes,\n        selection: { anchor: changes.mapPos(dropPos, -1), head: changes.mapPos(dropPos, 1) },\n        userEvent: del ? \"move.drop\" : \"input.drop\"\n    });\n    view.inputState.draggedContent = null;\n}\nhandlers.drop = (view, event) => {\n    if (!event.dataTransfer)\n        return false;\n    if (view.state.readOnly)\n        return true;\n    let files = event.dataTransfer.files;\n    if (files && files.length) { // For a file drop, read the file's text.\n        let text = Array(files.length), read = 0;\n        let finishFile = () => {\n            if (++read == files.length)\n                dropText(view, event, text.filter(s => s != null).join(view.state.lineBreak), false);\n        };\n        for (let i = 0; i < files.length; i++) {\n            let reader = new FileReader;\n            reader.onerror = finishFile;\n            reader.onload = () => {\n                if (!/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(reader.result))\n                    text[i] = reader.result;\n                finishFile();\n            };\n            reader.readAsText(files[i]);\n        }\n        return true;\n    }\n    else {\n        let text = event.dataTransfer.getData(\"Text\");\n        if (text) {\n            dropText(view, event, text, true);\n            return true;\n        }\n    }\n    return false;\n};\nhandlers.paste = (view, event) => {\n    if (view.state.readOnly)\n        return true;\n    view.observer.flush();\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    if (data) {\n        doPaste(view, data.getData(\"text/plain\") || data.getData(\"text/uri-list\"));\n        return true;\n    }\n    else {\n        capturePaste(view);\n        return false;\n    }\n};\nfunction captureCopy(view, text) {\n    // The extra wrapper is somehow necessary on IE/Edge to prevent the\n    // content from being mangled when it is put onto the clipboard\n    let parent = view.dom.parentNode;\n    if (!parent)\n        return;\n    let target = parent.appendChild(document.createElement(\"textarea\"));\n    target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    target.value = text;\n    target.focus();\n    target.selectionEnd = text.length;\n    target.selectionStart = 0;\n    setTimeout(() => {\n        target.remove();\n        view.focus();\n    }, 50);\n}\nfunction copiedRange(state) {\n    let content = [], ranges = [], linewise = false;\n    for (let range of state.selection.ranges)\n        if (!range.empty) {\n            content.push(state.sliceDoc(range.from, range.to));\n            ranges.push(range);\n        }\n    if (!content.length) {\n        // Nothing selected, do a line-wise copy\n        let upto = -1;\n        for (let { from } of state.selection.ranges) {\n            let line = state.doc.lineAt(from);\n            if (line.number > upto) {\n                content.push(line.text);\n                ranges.push({ from: line.from, to: Math.min(state.doc.length, line.to + 1) });\n            }\n            upto = line.number;\n        }\n        linewise = true;\n    }\n    return { text: textFilter(state, clipboardOutputFilter, content.join(state.lineBreak)), ranges, linewise };\n}\nlet lastLinewiseCopy = null;\nhandlers.copy = handlers.cut = (view, event) => {\n    // If the DOM selection begins and ends outside this editor, don't intercept.\n    // This happens when a parent editor (like ProseMirror) selects content that\n    // spans multiple elements including this CodeMirror. The copy event may\n    // bubble through CodeMirror (e.g. when CodeMirror is the first or the last\n    // element in the selection), but we should let the parent handle it.\n    // This is a workaround that should not be needed once [1] is merged.\n    // [1] https://github.com/codemirror/view/pull/79\n    let domSel = getSelection(view.root);\n    if (domSel && domSel.anchorNode && domSel.focusNode &&\n        !view.contentDOM.contains(domSel.anchorNode) &&\n        !view.contentDOM.contains(domSel.focusNode)) {\n        return false;\n    }\n    let { text, ranges, linewise } = copiedRange(view.state);\n    if (!text && !linewise)\n        return false;\n    lastLinewiseCopy = linewise ? text : null;\n    if (event.type == \"cut\" && !view.state.readOnly)\n        view.dispatch({\n            changes: ranges,\n            scrollIntoView: true,\n            userEvent: \"delete.cut\"\n        });\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    if (data) {\n        data.clearData();\n        data.setData(\"text/plain\", text);\n        return true;\n    }\n    else {\n        captureCopy(view, text);\n        return false;\n    }\n};\nconst isFocusChange = /*@__PURE__*/Annotation.define();\nfunction focusChangeTransaction(state, focus) {\n    let effects = [];\n    for (let getEffect of state.facet(focusChangeEffect)) {\n        let effect = getEffect(state, focus);\n        if (effect)\n            effects.push(effect);\n    }\n    return effects ? state.update({ effects, annotations: isFocusChange.of(true) }) : null;\n}\nfunction updateForFocusChange(view) {\n    setTimeout(() => {\n        let focus = view.hasFocus;\n        if (focus != view.inputState.notifiedFocused) {\n            let tr = focusChangeTransaction(view.state, focus);\n            if (tr)\n                view.dispatch(tr);\n            else\n                view.update([]);\n        }\n    }, 10);\n}\nobservers.focus = view => {\n    view.inputState.lastFocusTime = Date.now();\n    // When focusing reset the scroll position, move it back to where it was\n    if (!view.scrollDOM.scrollTop && (view.inputState.lastScrollTop || view.inputState.lastScrollLeft)) {\n        view.scrollDOM.scrollTop = view.inputState.lastScrollTop;\n        view.scrollDOM.scrollLeft = view.inputState.lastScrollLeft;\n    }\n    updateForFocusChange(view);\n};\nobservers.blur = view => {\n    view.observer.clearSelectionRange();\n    updateForFocusChange(view);\n};\nobservers.compositionstart = observers.compositionupdate = view => {\n    if (view.observer.editContext)\n        return; // Composition handled by edit context\n    if (view.inputState.compositionFirstChange == null)\n        view.inputState.compositionFirstChange = true;\n    if (view.inputState.composing < 0) {\n        // FIXME possibly set a timeout to clear it again on Android\n        view.inputState.composing = 0;\n    }\n};\nobservers.compositionend = view => {\n    if (view.observer.editContext)\n        return; // Composition handled by edit context\n    view.inputState.composing = -1;\n    view.inputState.compositionEndedAt = Date.now();\n    view.inputState.compositionPendingKey = true;\n    view.inputState.compositionPendingChange = view.observer.pendingRecords().length > 0;\n    view.inputState.compositionFirstChange = null;\n    if (browser.chrome && browser.android) {\n        // Delay flushing for a bit on Android because it'll often fire a\n        // bunch of contradictory changes in a row at end of compositon\n        view.observer.flushSoon();\n    }\n    else if (view.inputState.compositionPendingChange) {\n        // If we found pending records, schedule a flush.\n        Promise.resolve().then(() => view.observer.flush());\n    }\n    else {\n        // Otherwise, make sure that, if no changes come in soon, the\n        // composition view is cleared.\n        setTimeout(() => {\n            if (view.inputState.composing < 0 && view.docView.hasComposition)\n                view.update([]);\n        }, 50);\n    }\n};\nobservers.contextmenu = view => {\n    view.inputState.lastContextMenu = Date.now();\n};\nhandlers.beforeinput = (view, event) => {\n    var _a, _b;\n    // In EditContext mode, we must handle insertReplacementText events\n    // directly, to make spell checking corrections work\n    if (event.inputType == \"insertReplacementText\" && view.observer.editContext) {\n        let text = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData(\"text/plain\"), ranges = event.getTargetRanges();\n        if (text && ranges.length) {\n            let r = ranges[0];\n            let from = view.posAtDOM(r.startContainer, r.startOffset), to = view.posAtDOM(r.endContainer, r.endOffset);\n            applyDOMChangeInner(view, { from, to, insert: view.state.toText(text) }, null);\n            return true;\n        }\n    }\n    // Because Chrome Android doesn't fire useful key events, use\n    // beforeinput to detect backspace (and possibly enter and delete,\n    // but those usually don't even seem to fire beforeinput events at\n    // the moment) and fake a key event for it.\n    //\n    // (preventDefault on beforeinput, though supported in the spec,\n    // seems to do nothing at all on Chrome).\n    let pending;\n    if (browser.chrome && browser.android && (pending = PendingKeys.find(key => key.inputType == event.inputType))) {\n        view.observer.delayAndroidKey(pending.key, pending.keyCode);\n        if (pending.key == \"Backspace\" || pending.key == \"Delete\") {\n            let startViewHeight = ((_b = window.visualViewport) === null || _b === void 0 ? void 0 : _b.height) || 0;\n            setTimeout(() => {\n                var _a;\n                // Backspacing near uneditable nodes on Chrome Android sometimes\n                // closes the virtual keyboard. This tries to crudely detect\n                // that and refocus to get it back.\n                if ((((_a = window.visualViewport) === null || _a === void 0 ? void 0 : _a.height) || 0) > startViewHeight + 10 && view.hasFocus) {\n                    view.contentDOM.blur();\n                    view.focus();\n                }\n            }, 100);\n        }\n    }\n    if (browser.ios && event.inputType == \"deleteContentForward\") {\n        // For some reason, DOM changes (and beforeinput) happen _before_\n        // the key event for ctrl-d on iOS when using an external\n        // keyboard.\n        view.observer.flushSoon();\n    }\n    // Safari will occasionally forget to fire compositionend at the end of a dead-key composition\n    if (browser.safari && event.inputType == \"insertText\" && view.inputState.composing >= 0) {\n        setTimeout(() => observers.compositionend(view, event), 20);\n    }\n    return false;\n};\nconst appliedFirefoxHack = /*@__PURE__*/new Set;\n// In Firefox, when cut/copy handlers are added to the document, that\n// somehow avoids a bug where those events aren't fired when the\n// selection is empty. See https://github.com/codemirror/dev/issues/1082\n// and https://bugzilla.mozilla.org/show_bug.cgi?id=995961\nfunction firefoxCopyCutHack(doc) {\n    if (!appliedFirefoxHack.has(doc)) {\n        appliedFirefoxHack.add(doc);\n        doc.addEventListener(\"copy\", () => { });\n        doc.addEventListener(\"cut\", () => { });\n    }\n}\n\nconst wrappingWhiteSpace = [\"pre-wrap\", \"normal\", \"pre-line\", \"break-spaces\"];\n// Used to track, during updateHeight, if any actual heights changed\nlet heightChangeFlag = false;\nfunction clearHeightChangeFlag() { heightChangeFlag = false; }\nclass HeightOracle {\n    constructor(lineWrapping) {\n        this.lineWrapping = lineWrapping;\n        this.doc = Text.empty;\n        this.heightSamples = {};\n        this.lineHeight = 14; // The height of an entire line (line-height)\n        this.charWidth = 7;\n        this.textHeight = 14; // The height of the actual font (font-size)\n        this.lineLength = 30;\n    }\n    heightForGap(from, to) {\n        let lines = this.doc.lineAt(to).number - this.doc.lineAt(from).number + 1;\n        if (this.lineWrapping)\n            lines += Math.max(0, Math.ceil(((to - from) - (lines * this.lineLength * 0.5)) / this.lineLength));\n        return this.lineHeight * lines;\n    }\n    heightForLine(length) {\n        if (!this.lineWrapping)\n            return this.lineHeight;\n        let lines = 1 + Math.max(0, Math.ceil((length - this.lineLength) / (this.lineLength - 5)));\n        return lines * this.lineHeight;\n    }\n    setDoc(doc) { this.doc = doc; return this; }\n    mustRefreshForWrapping(whiteSpace) {\n        return (wrappingWhiteSpace.indexOf(whiteSpace) > -1) != this.lineWrapping;\n    }\n    mustRefreshForHeights(lineHeights) {\n        let newHeight = false;\n        for (let i = 0; i < lineHeights.length; i++) {\n            let h = lineHeights[i];\n            if (h < 0) {\n                i++;\n            }\n            else if (!this.heightSamples[Math.floor(h * 10)]) { // Round to .1 pixels\n                newHeight = true;\n                this.heightSamples[Math.floor(h * 10)] = true;\n            }\n        }\n        return newHeight;\n    }\n    refresh(whiteSpace, lineHeight, charWidth, textHeight, lineLength, knownHeights) {\n        let lineWrapping = wrappingWhiteSpace.indexOf(whiteSpace) > -1;\n        let changed = Math.round(lineHeight) != Math.round(this.lineHeight) || this.lineWrapping != lineWrapping;\n        this.lineWrapping = lineWrapping;\n        this.lineHeight = lineHeight;\n        this.charWidth = charWidth;\n        this.textHeight = textHeight;\n        this.lineLength = lineLength;\n        if (changed) {\n            this.heightSamples = {};\n            for (let i = 0; i < knownHeights.length; i++) {\n                let h = knownHeights[i];\n                if (h < 0)\n                    i++;\n                else\n                    this.heightSamples[Math.floor(h * 10)] = true;\n            }\n        }\n        return changed;\n    }\n}\n// This object is used by `updateHeight` to make DOM measurements\n// arrive at the right nides. The `heights` array is a sequence of\n// block heights, starting from position `from`.\nclass MeasuredHeights {\n    constructor(from, heights) {\n        this.from = from;\n        this.heights = heights;\n        this.index = 0;\n    }\n    get more() { return this.index < this.heights.length; }\n}\n/**\nRecord used to represent information about a block-level element\nin the editor view.\n*/\nclass BlockInfo {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start of the element in the document.\n    */\n    from, \n    /**\n    The length of the element.\n    */\n    length, \n    /**\n    The top position of the element (relative to the top of the\n    document).\n    */\n    top, \n    /**\n    Its height.\n    */\n    height, \n    /**\n    @internal Weird packed field that holds an array of children\n    for composite blocks, a decoration for block widgets, and a\n    number indicating the amount of widget-create line breaks for\n    text blocks.\n    */\n    _content) {\n        this.from = from;\n        this.length = length;\n        this.top = top;\n        this.height = height;\n        this._content = _content;\n    }\n    /**\n    The type of element this is. When querying lines, this may be\n    an array of all the blocks that make up the line.\n    */\n    get type() {\n        return typeof this._content == \"number\" ? BlockType.Text :\n            Array.isArray(this._content) ? this._content : this._content.type;\n    }\n    /**\n    The end of the element as a document position.\n    */\n    get to() { return this.from + this.length; }\n    /**\n    The bottom position of the element.\n    */\n    get bottom() { return this.top + this.height; }\n    /**\n    If this is a widget block, this will return the widget\n    associated with it.\n    */\n    get widget() {\n        return this._content instanceof PointDecoration ? this._content.widget : null;\n    }\n    /**\n    If this is a textblock, this holds the number of line breaks\n    that appear in widgets inside the block.\n    */\n    get widgetLineBreaks() {\n        return typeof this._content == \"number\" ? this._content : 0;\n    }\n    /**\n    @internal\n    */\n    join(other) {\n        let content = (Array.isArray(this._content) ? this._content : [this])\n            .concat(Array.isArray(other._content) ? other._content : [other]);\n        return new BlockInfo(this.from, this.length + other.length, this.top, this.height + other.height, content);\n    }\n}\nvar QueryType = /*@__PURE__*/(function (QueryType) {\n    QueryType[QueryType[\"ByPos\"] = 0] = \"ByPos\";\n    QueryType[QueryType[\"ByHeight\"] = 1] = \"ByHeight\";\n    QueryType[QueryType[\"ByPosNoHeight\"] = 2] = \"ByPosNoHeight\";\nreturn QueryType})(QueryType || (QueryType = {}));\nconst Epsilon = 1e-3;\nclass HeightMap {\n    constructor(length, // The number of characters covered\n    height, // Height of this part of the document\n    flags = 2 /* Flag.Outdated */) {\n        this.length = length;\n        this.height = height;\n        this.flags = flags;\n    }\n    get outdated() { return (this.flags & 2 /* Flag.Outdated */) > 0; }\n    set outdated(value) { this.flags = (value ? 2 /* Flag.Outdated */ : 0) | (this.flags & ~2 /* Flag.Outdated */); }\n    setHeight(height) {\n        if (this.height != height) {\n            if (Math.abs(this.height - height) > Epsilon)\n                heightChangeFlag = true;\n            this.height = height;\n        }\n    }\n    // Base case is to replace a leaf node, which simply builds a tree\n    // from the new nodes and returns that (HeightMapBranch and\n    // HeightMapGap override this to actually use from/to)\n    replace(_from, _to, nodes) {\n        return HeightMap.of(nodes);\n    }\n    // Again, these are base cases, and are overridden for branch and gap nodes.\n    decomposeLeft(_to, result) { result.push(this); }\n    decomposeRight(_from, result) { result.push(this); }\n    applyChanges(decorations, oldDoc, oracle, changes) {\n        let me = this, doc = oracle.doc;\n        for (let i = changes.length - 1; i >= 0; i--) {\n            let { fromA, toA, fromB, toB } = changes[i];\n            let start = me.lineAt(fromA, QueryType.ByPosNoHeight, oracle.setDoc(oldDoc), 0, 0);\n            let end = start.to >= toA ? start : me.lineAt(toA, QueryType.ByPosNoHeight, oracle, 0, 0);\n            toB += end.to - toA;\n            toA = end.to;\n            while (i > 0 && start.from <= changes[i - 1].toA) {\n                fromA = changes[i - 1].fromA;\n                fromB = changes[i - 1].fromB;\n                i--;\n                if (fromA < start.from)\n                    start = me.lineAt(fromA, QueryType.ByPosNoHeight, oracle, 0, 0);\n            }\n            fromB += start.from - fromA;\n            fromA = start.from;\n            let nodes = NodeBuilder.build(oracle.setDoc(doc), decorations, fromB, toB);\n            me = replace(me, me.replace(fromA, toA, nodes));\n        }\n        return me.updateHeight(oracle, 0);\n    }\n    static empty() { return new HeightMapText(0, 0); }\n    // nodes uses null values to indicate the position of line breaks.\n    // There are never line breaks at the start or end of the array, or\n    // two line breaks next to each other, and the array isn't allowed\n    // to be empty (same restrictions as return value from the builder).\n    static of(nodes) {\n        if (nodes.length == 1)\n            return nodes[0];\n        let i = 0, j = nodes.length, before = 0, after = 0;\n        for (;;) {\n            if (i == j) {\n                if (before > after * 2) {\n                    let split = nodes[i - 1];\n                    if (split.break)\n                        nodes.splice(--i, 1, split.left, null, split.right);\n                    else\n                        nodes.splice(--i, 1, split.left, split.right);\n                    j += 1 + split.break;\n                    before -= split.size;\n                }\n                else if (after > before * 2) {\n                    let split = nodes[j];\n                    if (split.break)\n                        nodes.splice(j, 1, split.left, null, split.right);\n                    else\n                        nodes.splice(j, 1, split.left, split.right);\n                    j += 2 + split.break;\n                    after -= split.size;\n                }\n                else {\n                    break;\n                }\n            }\n            else if (before < after) {\n                let next = nodes[i++];\n                if (next)\n                    before += next.size;\n            }\n            else {\n                let next = nodes[--j];\n                if (next)\n                    after += next.size;\n            }\n        }\n        let brk = 0;\n        if (nodes[i - 1] == null) {\n            brk = 1;\n            i--;\n        }\n        else if (nodes[i] == null) {\n            brk = 1;\n            j++;\n        }\n        return new HeightMapBranch(HeightMap.of(nodes.slice(0, i)), brk, HeightMap.of(nodes.slice(j)));\n    }\n}\nfunction replace(old, val) {\n    if (old == val)\n        return old;\n    if (old.constructor != val.constructor)\n        heightChangeFlag = true;\n    return val;\n}\nHeightMap.prototype.size = 1;\nclass HeightMapBlock extends HeightMap {\n    constructor(length, height, deco) {\n        super(length, height);\n        this.deco = deco;\n    }\n    blockAt(_height, _oracle, top, offset) {\n        return new BlockInfo(offset, this.length, top, this.height, this.deco || 0);\n    }\n    lineAt(_value, _type, oracle, top, offset) {\n        return this.blockAt(0, oracle, top, offset);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        if (from <= offset + this.length && to >= offset)\n            f(this.blockAt(0, oracle, top, offset));\n    }\n    updateHeight(oracle, offset = 0, _force = false, measured) {\n        if (measured && measured.from <= offset && measured.more)\n            this.setHeight(measured.heights[measured.index++]);\n        this.outdated = false;\n        return this;\n    }\n    toString() { return `block(${this.length})`; }\n}\nclass HeightMapText extends HeightMapBlock {\n    constructor(length, height) {\n        super(length, height, null);\n        this.collapsed = 0; // Amount of collapsed content in the line\n        this.widgetHeight = 0; // Maximum inline widget height\n        this.breaks = 0; // Number of widget-introduced line breaks on the line\n    }\n    blockAt(_height, _oracle, top, offset) {\n        return new BlockInfo(offset, this.length, top, this.height, this.breaks);\n    }\n    replace(_from, _to, nodes) {\n        let node = nodes[0];\n        if (nodes.length == 1 && (node instanceof HeightMapText || node instanceof HeightMapGap && (node.flags & 4 /* Flag.SingleLine */)) &&\n            Math.abs(this.length - node.length) < 10) {\n            if (node instanceof HeightMapGap)\n                node = new HeightMapText(node.length, this.height);\n            else\n                node.height = this.height;\n            if (!this.outdated)\n                node.outdated = false;\n            return node;\n        }\n        else {\n            return HeightMap.of(nodes);\n        }\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        if (measured && measured.from <= offset && measured.more)\n            this.setHeight(measured.heights[measured.index++]);\n        else if (force || this.outdated)\n            this.setHeight(Math.max(this.widgetHeight, oracle.heightForLine(this.length - this.collapsed)) +\n                this.breaks * oracle.lineHeight);\n        this.outdated = false;\n        return this;\n    }\n    toString() {\n        return `line(${this.length}${this.collapsed ? -this.collapsed : \"\"}${this.widgetHeight ? \":\" + this.widgetHeight : \"\"})`;\n    }\n}\nclass HeightMapGap extends HeightMap {\n    constructor(length) { super(length, 0); }\n    heightMetrics(oracle, offset) {\n        let firstLine = oracle.doc.lineAt(offset).number, lastLine = oracle.doc.lineAt(offset + this.length).number;\n        let lines = lastLine - firstLine + 1;\n        let perLine, perChar = 0;\n        if (oracle.lineWrapping) {\n            let totalPerLine = Math.min(this.height, oracle.lineHeight * lines);\n            perLine = totalPerLine / lines;\n            if (this.length > lines + 1)\n                perChar = (this.height - totalPerLine) / (this.length - lines - 1);\n        }\n        else {\n            perLine = this.height / lines;\n        }\n        return { firstLine, lastLine, perLine, perChar };\n    }\n    blockAt(height, oracle, top, offset) {\n        let { firstLine, lastLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        if (oracle.lineWrapping) {\n            let guess = offset + (height < oracle.lineHeight ? 0\n                : Math.round(Math.max(0, Math.min(1, (height - top) / this.height)) * this.length));\n            let line = oracle.doc.lineAt(guess), lineHeight = perLine + line.length * perChar;\n            let lineTop = Math.max(top, height - lineHeight / 2);\n            return new BlockInfo(line.from, line.length, lineTop, lineHeight, 0);\n        }\n        else {\n            let line = Math.max(0, Math.min(lastLine - firstLine, Math.floor((height - top) / perLine)));\n            let { from, length } = oracle.doc.line(firstLine + line);\n            return new BlockInfo(from, length, top + perLine * line, perLine, 0);\n        }\n    }\n    lineAt(value, type, oracle, top, offset) {\n        if (type == QueryType.ByHeight)\n            return this.blockAt(value, oracle, top, offset);\n        if (type == QueryType.ByPosNoHeight) {\n            let { from, to } = oracle.doc.lineAt(value);\n            return new BlockInfo(from, to - from, 0, 0, 0);\n        }\n        let { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        let line = oracle.doc.lineAt(value), lineHeight = perLine + line.length * perChar;\n        let linesAbove = line.number - firstLine;\n        let lineTop = top + perLine * linesAbove + perChar * (line.from - offset - linesAbove);\n        return new BlockInfo(line.from, line.length, Math.max(top, Math.min(lineTop, top + this.height - lineHeight)), lineHeight, 0);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        from = Math.max(from, offset);\n        to = Math.min(to, offset + this.length);\n        let { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        for (let pos = from, lineTop = top; pos <= to;) {\n            let line = oracle.doc.lineAt(pos);\n            if (pos == from) {\n                let linesAbove = line.number - firstLine;\n                lineTop += perLine * linesAbove + perChar * (from - offset - linesAbove);\n            }\n            let lineHeight = perLine + perChar * line.length;\n            f(new BlockInfo(line.from, line.length, lineTop, lineHeight, 0));\n            lineTop += lineHeight;\n            pos = line.to + 1;\n        }\n    }\n    replace(from, to, nodes) {\n        let after = this.length - to;\n        if (after > 0) {\n            let last = nodes[nodes.length - 1];\n            if (last instanceof HeightMapGap)\n                nodes[nodes.length - 1] = new HeightMapGap(last.length + after);\n            else\n                nodes.push(null, new HeightMapGap(after - 1));\n        }\n        if (from > 0) {\n            let first = nodes[0];\n            if (first instanceof HeightMapGap)\n                nodes[0] = new HeightMapGap(from + first.length);\n            else\n                nodes.unshift(new HeightMapGap(from - 1), null);\n        }\n        return HeightMap.of(nodes);\n    }\n    decomposeLeft(to, result) {\n        result.push(new HeightMapGap(to - 1), null);\n    }\n    decomposeRight(from, result) {\n        result.push(null, new HeightMapGap(this.length - from - 1));\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        let end = offset + this.length;\n        if (measured && measured.from <= offset + this.length && measured.more) {\n            // Fill in part of this gap with measured lines. We know there\n            // can't be widgets or collapsed ranges in those lines, because\n            // they would already have been added to the heightmap (gaps\n            // only contain plain text).\n            let nodes = [], pos = Math.max(offset, measured.from), singleHeight = -1;\n            if (measured.from > offset)\n                nodes.push(new HeightMapGap(measured.from - offset - 1).updateHeight(oracle, offset));\n            while (pos <= end && measured.more) {\n                let len = oracle.doc.lineAt(pos).length;\n                if (nodes.length)\n                    nodes.push(null);\n                let height = measured.heights[measured.index++];\n                if (singleHeight == -1)\n                    singleHeight = height;\n                else if (Math.abs(height - singleHeight) >= Epsilon)\n                    singleHeight = -2;\n                let line = new HeightMapText(len, height);\n                line.outdated = false;\n                nodes.push(line);\n                pos += len + 1;\n            }\n            if (pos <= end)\n                nodes.push(null, new HeightMapGap(end - pos).updateHeight(oracle, pos));\n            let result = HeightMap.of(nodes);\n            if (singleHeight < 0 || Math.abs(result.height - this.height) >= Epsilon ||\n                Math.abs(singleHeight - this.heightMetrics(oracle, offset).perLine) >= Epsilon)\n                heightChangeFlag = true;\n            return replace(this, result);\n        }\n        else if (force || this.outdated) {\n            this.setHeight(oracle.heightForGap(offset, offset + this.length));\n            this.outdated = false;\n        }\n        return this;\n    }\n    toString() { return `gap(${this.length})`; }\n}\nclass HeightMapBranch extends HeightMap {\n    constructor(left, brk, right) {\n        super(left.length + brk + right.length, left.height + right.height, brk | (left.outdated || right.outdated ? 2 /* Flag.Outdated */ : 0));\n        this.left = left;\n        this.right = right;\n        this.size = left.size + right.size;\n    }\n    get break() { return this.flags & 1 /* Flag.Break */; }\n    blockAt(height, oracle, top, offset) {\n        let mid = top + this.left.height;\n        return height < mid ? this.left.blockAt(height, oracle, top, offset)\n            : this.right.blockAt(height, oracle, mid, offset + this.left.length + this.break);\n    }\n    lineAt(value, type, oracle, top, offset) {\n        let rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n        let left = type == QueryType.ByHeight ? value < rightTop : value < rightOffset;\n        let base = left ? this.left.lineAt(value, type, oracle, top, offset)\n            : this.right.lineAt(value, type, oracle, rightTop, rightOffset);\n        if (this.break || (left ? base.to < rightOffset : base.from > rightOffset))\n            return base;\n        let subQuery = type == QueryType.ByPosNoHeight ? QueryType.ByPosNoHeight : QueryType.ByPos;\n        if (left)\n            return base.join(this.right.lineAt(rightOffset, subQuery, oracle, rightTop, rightOffset));\n        else\n            return this.left.lineAt(rightOffset, subQuery, oracle, top, offset).join(base);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        let rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n        if (this.break) {\n            if (from < rightOffset)\n                this.left.forEachLine(from, to, oracle, top, offset, f);\n            if (to >= rightOffset)\n                this.right.forEachLine(from, to, oracle, rightTop, rightOffset, f);\n        }\n        else {\n            let mid = this.lineAt(rightOffset, QueryType.ByPos, oracle, top, offset);\n            if (from < mid.from)\n                this.left.forEachLine(from, mid.from - 1, oracle, top, offset, f);\n            if (mid.to >= from && mid.from <= to)\n                f(mid);\n            if (to > mid.to)\n                this.right.forEachLine(mid.to + 1, to, oracle, rightTop, rightOffset, f);\n        }\n    }\n    replace(from, to, nodes) {\n        let rightStart = this.left.length + this.break;\n        if (to < rightStart)\n            return this.balanced(this.left.replace(from, to, nodes), this.right);\n        if (from > this.left.length)\n            return this.balanced(this.left, this.right.replace(from - rightStart, to - rightStart, nodes));\n        let result = [];\n        if (from > 0)\n            this.decomposeLeft(from, result);\n        let left = result.length;\n        for (let node of nodes)\n            result.push(node);\n        if (from > 0)\n            mergeGaps(result, left - 1);\n        if (to < this.length) {\n            let right = result.length;\n            this.decomposeRight(to, result);\n            mergeGaps(result, right);\n        }\n        return HeightMap.of(result);\n    }\n    decomposeLeft(to, result) {\n        let left = this.left.length;\n        if (to <= left)\n            return this.left.decomposeLeft(to, result);\n        result.push(this.left);\n        if (this.break) {\n            left++;\n            if (to >= left)\n                result.push(null);\n        }\n        if (to > left)\n            this.right.decomposeLeft(to - left, result);\n    }\n    decomposeRight(from, result) {\n        let left = this.left.length, right = left + this.break;\n        if (from >= right)\n            return this.right.decomposeRight(from - right, result);\n        if (from < left)\n            this.left.decomposeRight(from, result);\n        if (this.break && from < right)\n            result.push(null);\n        result.push(this.right);\n    }\n    balanced(left, right) {\n        if (left.size > 2 * right.size || right.size > 2 * left.size)\n            return HeightMap.of(this.break ? [left, null, right] : [left, right]);\n        this.left = replace(this.left, left);\n        this.right = replace(this.right, right);\n        this.setHeight(left.height + right.height);\n        this.outdated = left.outdated || right.outdated;\n        this.size = left.size + right.size;\n        this.length = left.length + this.break + right.length;\n        return this;\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        let { left, right } = this, rightStart = offset + left.length + this.break, rebalance = null;\n        if (measured && measured.from <= offset + left.length && measured.more)\n            rebalance = left = left.updateHeight(oracle, offset, force, measured);\n        else\n            left.updateHeight(oracle, offset, force);\n        if (measured && measured.from <= rightStart + right.length && measured.more)\n            rebalance = right = right.updateHeight(oracle, rightStart, force, measured);\n        else\n            right.updateHeight(oracle, rightStart, force);\n        if (rebalance)\n            return this.balanced(left, right);\n        this.height = this.left.height + this.right.height;\n        this.outdated = false;\n        return this;\n    }\n    toString() { return this.left + (this.break ? \" \" : \"-\") + this.right; }\n}\nfunction mergeGaps(nodes, around) {\n    let before, after;\n    if (nodes[around] == null &&\n        (before = nodes[around - 1]) instanceof HeightMapGap &&\n        (after = nodes[around + 1]) instanceof HeightMapGap)\n        nodes.splice(around - 1, 3, new HeightMapGap(before.length + 1 + after.length));\n}\nconst relevantWidgetHeight = 5;\nclass NodeBuilder {\n    constructor(pos, oracle) {\n        this.pos = pos;\n        this.oracle = oracle;\n        this.nodes = [];\n        this.lineStart = -1;\n        this.lineEnd = -1;\n        this.covering = null;\n        this.writtenTo = pos;\n    }\n    get isCovered() {\n        return this.covering && this.nodes[this.nodes.length - 1] == this.covering;\n    }\n    span(_from, to) {\n        if (this.lineStart > -1) {\n            let end = Math.min(to, this.lineEnd), last = this.nodes[this.nodes.length - 1];\n            if (last instanceof HeightMapText)\n                last.length += end - this.pos;\n            else if (end > this.pos || !this.isCovered)\n                this.nodes.push(new HeightMapText(end - this.pos, -1));\n            this.writtenTo = end;\n            if (to > end) {\n                this.nodes.push(null);\n                this.writtenTo++;\n                this.lineStart = -1;\n            }\n        }\n        this.pos = to;\n    }\n    point(from, to, deco) {\n        if (from < to || deco.heightRelevant) {\n            let height = deco.widget ? deco.widget.estimatedHeight : 0;\n            let breaks = deco.widget ? deco.widget.lineBreaks : 0;\n            if (height < 0)\n                height = this.oracle.lineHeight;\n            let len = to - from;\n            if (deco.block) {\n                this.addBlock(new HeightMapBlock(len, height, deco));\n            }\n            else if (len || breaks || height >= relevantWidgetHeight) {\n                this.addLineDeco(height, breaks, len);\n            }\n        }\n        else if (to > from) {\n            this.span(from, to);\n        }\n        if (this.lineEnd > -1 && this.lineEnd < this.pos)\n            this.lineEnd = this.oracle.doc.lineAt(this.pos).to;\n    }\n    enterLine() {\n        if (this.lineStart > -1)\n            return;\n        let { from, to } = this.oracle.doc.lineAt(this.pos);\n        this.lineStart = from;\n        this.lineEnd = to;\n        if (this.writtenTo < from) {\n            if (this.writtenTo < from - 1 || this.nodes[this.nodes.length - 1] == null)\n                this.nodes.push(this.blankContent(this.writtenTo, from - 1));\n            this.nodes.push(null);\n        }\n        if (this.pos > from)\n            this.nodes.push(new HeightMapText(this.pos - from, -1));\n        this.writtenTo = this.pos;\n    }\n    blankContent(from, to) {\n        let gap = new HeightMapGap(to - from);\n        if (this.oracle.doc.lineAt(from).to == to)\n            gap.flags |= 4 /* Flag.SingleLine */;\n        return gap;\n    }\n    ensureLine() {\n        this.enterLine();\n        let last = this.nodes.length ? this.nodes[this.nodes.length - 1] : null;\n        if (last instanceof HeightMapText)\n            return last;\n        let line = new HeightMapText(0, -1);\n        this.nodes.push(line);\n        return line;\n    }\n    addBlock(block) {\n        this.enterLine();\n        let deco = block.deco;\n        if (deco && deco.startSide > 0 && !this.isCovered)\n            this.ensureLine();\n        this.nodes.push(block);\n        this.writtenTo = this.pos = this.pos + block.length;\n        if (deco && deco.endSide > 0)\n            this.covering = block;\n    }\n    addLineDeco(height, breaks, length) {\n        let line = this.ensureLine();\n        line.length += length;\n        line.collapsed += length;\n        line.widgetHeight = Math.max(line.widgetHeight, height);\n        line.breaks += breaks;\n        this.writtenTo = this.pos = this.pos + length;\n    }\n    finish(from) {\n        let last = this.nodes.length == 0 ? null : this.nodes[this.nodes.length - 1];\n        if (this.lineStart > -1 && !(last instanceof HeightMapText) && !this.isCovered)\n            this.nodes.push(new HeightMapText(0, -1));\n        else if (this.writtenTo < this.pos || last == null)\n            this.nodes.push(this.blankContent(this.writtenTo, this.pos));\n        let pos = from;\n        for (let node of this.nodes) {\n            if (node instanceof HeightMapText)\n                node.updateHeight(this.oracle, pos);\n            pos += node ? node.length : 1;\n        }\n        return this.nodes;\n    }\n    // Always called with a region that on both sides either stretches\n    // to a line break or the end of the document.\n    // The returned array uses null to indicate line breaks, but never\n    // starts or ends in a line break, or has multiple line breaks next\n    // to each other.\n    static build(oracle, decorations, from, to) {\n        let builder = new NodeBuilder(from, oracle);\n        RangeSet.spans(decorations, from, to, builder, 0);\n        return builder.finish(from);\n    }\n}\nfunction heightRelevantDecoChanges(a, b, diff) {\n    let comp = new DecorationComparator;\n    RangeSet.compare(a, b, diff, comp, 0);\n    return comp.changes;\n}\nclass DecorationComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange() { }\n    comparePoint(from, to, a, b) {\n        if (from < to || a && a.heightRelevant || b && b.heightRelevant)\n            addRange(from, to, this.changes, 5);\n    }\n}\n\nfunction visiblePixelRange(dom, paddingTop) {\n    let rect = dom.getBoundingClientRect();\n    let doc = dom.ownerDocument, win = doc.defaultView || window;\n    let left = Math.max(0, rect.left), right = Math.min(win.innerWidth, rect.right);\n    let top = Math.max(0, rect.top), bottom = Math.min(win.innerHeight, rect.bottom);\n    for (let parent = dom.parentNode; parent && parent != doc.body;) {\n        if (parent.nodeType == 1) {\n            let elt = parent;\n            let style = window.getComputedStyle(elt);\n            if ((elt.scrollHeight > elt.clientHeight || elt.scrollWidth > elt.clientWidth) &&\n                style.overflow != \"visible\") {\n                let parentRect = elt.getBoundingClientRect();\n                left = Math.max(left, parentRect.left);\n                right = Math.min(right, parentRect.right);\n                top = Math.max(top, parentRect.top);\n                bottom = Math.min(parent == dom.parentNode ? win.innerHeight : bottom, parentRect.bottom);\n            }\n            parent = style.position == \"absolute\" || style.position == \"fixed\" ? elt.offsetParent : elt.parentNode;\n        }\n        else if (parent.nodeType == 11) { // Shadow root\n            parent = parent.host;\n        }\n        else {\n            break;\n        }\n    }\n    return { left: left - rect.left, right: Math.max(left, right) - rect.left,\n        top: top - (rect.top + paddingTop), bottom: Math.max(top, bottom) - (rect.top + paddingTop) };\n}\nfunction inWindow(elt) {\n    let rect = elt.getBoundingClientRect(), win = elt.ownerDocument.defaultView || window;\n    return rect.left < win.innerWidth && rect.right > 0 &&\n        rect.top < win.innerHeight && rect.bottom > 0;\n}\nfunction fullPixelRange(dom, paddingTop) {\n    let rect = dom.getBoundingClientRect();\n    return { left: 0, right: rect.right - rect.left,\n        top: paddingTop, bottom: rect.bottom - (rect.top + paddingTop) };\n}\n// Line gaps are placeholder widgets used to hide pieces of overlong\n// lines within the viewport, as a kludge to keep the editor\n// responsive when a ridiculously long line is loaded into it.\nclass LineGap {\n    constructor(from, to, size, displaySize) {\n        this.from = from;\n        this.to = to;\n        this.size = size;\n        this.displaySize = displaySize;\n    }\n    static same(a, b) {\n        if (a.length != b.length)\n            return false;\n        for (let i = 0; i < a.length; i++) {\n            let gA = a[i], gB = b[i];\n            if (gA.from != gB.from || gA.to != gB.to || gA.size != gB.size)\n                return false;\n        }\n        return true;\n    }\n    draw(viewState, wrapping) {\n        return Decoration.replace({\n            widget: new LineGapWidget(this.displaySize * (wrapping ? viewState.scaleY : viewState.scaleX), wrapping)\n        }).range(this.from, this.to);\n    }\n}\nclass LineGapWidget extends WidgetType {\n    constructor(size, vertical) {\n        super();\n        this.size = size;\n        this.vertical = vertical;\n    }\n    eq(other) { return other.size == this.size && other.vertical == this.vertical; }\n    toDOM() {\n        let elt = document.createElement(\"div\");\n        if (this.vertical) {\n            elt.style.height = this.size + \"px\";\n        }\n        else {\n            elt.style.width = this.size + \"px\";\n            elt.style.height = \"2px\";\n            elt.style.display = \"inline-block\";\n        }\n        return elt;\n    }\n    get estimatedHeight() { return this.vertical ? this.size : -1; }\n}\nclass ViewState {\n    constructor(state) {\n        this.state = state;\n        // These are contentDOM-local coordinates\n        this.pixelViewport = { left: 0, right: window.innerWidth, top: 0, bottom: 0 };\n        this.inView = true;\n        this.paddingTop = 0; // Padding above the document, scaled\n        this.paddingBottom = 0; // Padding below the document, scaled\n        this.contentDOMWidth = 0; // contentDOM.getBoundingClientRect().width\n        this.contentDOMHeight = 0; // contentDOM.getBoundingClientRect().height\n        this.editorHeight = 0; // scrollDOM.clientHeight, unscaled\n        this.editorWidth = 0; // scrollDOM.clientWidth, unscaled\n        this.scrollTop = 0; // Last seen scrollDOM.scrollTop, scaled\n        this.scrolledToBottom = false;\n        // The CSS-transformation scale of the editor (transformed size /\n        // concrete size)\n        this.scaleX = 1;\n        this.scaleY = 1;\n        // The vertical position (document-relative) to which to anchor the\n        // scroll position. -1 means anchor to the end of the document.\n        this.scrollAnchorPos = 0;\n        // The height at the anchor position. Set by the DOM update phase.\n        // -1 means no height available.\n        this.scrollAnchorHeight = -1;\n        // See VP.MaxDOMHeight\n        this.scaler = IdScaler;\n        this.scrollTarget = null;\n        // Briefly set to true when printing, to disable viewport limiting\n        this.printing = false;\n        // Flag set when editor content was redrawn, so that the next\n        // measure stage knows it must read DOM layout\n        this.mustMeasureContent = true;\n        this.defaultTextDirection = Direction.LTR;\n        this.visibleRanges = [];\n        // Cursor 'assoc' is only significant when the cursor is on a line\n        // wrap point, where it must stick to the character that it is\n        // associated with. Since browsers don't provide a reasonable\n        // interface to set or query this, when a selection is set that\n        // might cause this to be significant, this flag is set. The next\n        // measure phase will check whether the cursor is on a line-wrapping\n        // boundary and, if so, reset it to make sure it is positioned in\n        // the right place.\n        this.mustEnforceCursorAssoc = false;\n        let guessWrapping = state.facet(contentAttributes).some(v => typeof v != \"function\" && v.class == \"cm-lineWrapping\");\n        this.heightOracle = new HeightOracle(guessWrapping);\n        this.stateDeco = state.facet(decorations).filter(d => typeof d != \"function\");\n        this.heightMap = HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle.setDoc(state.doc), [new ChangedRange(0, 0, 0, state.doc.length)]);\n        for (let i = 0; i < 2; i++) {\n            this.viewport = this.getViewport(0, null);\n            if (!this.updateForViewport())\n                break;\n        }\n        this.updateViewportLines();\n        this.lineGaps = this.ensureLineGaps([]);\n        this.lineGapDeco = Decoration.set(this.lineGaps.map(gap => gap.draw(this, false)));\n        this.computeVisibleRanges();\n    }\n    updateForViewport() {\n        let viewports = [this.viewport], { main } = this.state.selection;\n        for (let i = 0; i <= 1; i++) {\n            let pos = i ? main.head : main.anchor;\n            if (!viewports.some(({ from, to }) => pos >= from && pos <= to)) {\n                let { from, to } = this.lineBlockAt(pos);\n                viewports.push(new Viewport(from, to));\n            }\n        }\n        this.viewports = viewports.sort((a, b) => a.from - b.from);\n        return this.updateScaler();\n    }\n    updateScaler() {\n        let scaler = this.scaler;\n        this.scaler = this.heightMap.height <= 7000000 /* VP.MaxDOMHeight */ ? IdScaler :\n            new BigScaler(this.heightOracle, this.heightMap, this.viewports);\n        return scaler.eq(this.scaler) ? 0 : 2 /* UpdateFlag.Height */;\n    }\n    updateViewportLines() {\n        this.viewportLines = [];\n        this.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.heightOracle.setDoc(this.state.doc), 0, 0, block => {\n            this.viewportLines.push(scaleBlock(block, this.scaler));\n        });\n    }\n    update(update, scrollTarget = null) {\n        this.state = update.state;\n        let prevDeco = this.stateDeco;\n        this.stateDeco = this.state.facet(decorations).filter(d => typeof d != \"function\");\n        let contentChanges = update.changedRanges;\n        let heightChanges = ChangedRange.extendWithRanges(contentChanges, heightRelevantDecoChanges(prevDeco, this.stateDeco, update ? update.changes : ChangeSet.empty(this.state.doc.length)));\n        let prevHeight = this.heightMap.height;\n        let scrollAnchor = this.scrolledToBottom ? null : this.scrollAnchorAt(this.scrollTop);\n        clearHeightChangeFlag();\n        this.heightMap = this.heightMap.applyChanges(this.stateDeco, update.startState.doc, this.heightOracle.setDoc(this.state.doc), heightChanges);\n        if (this.heightMap.height != prevHeight || heightChangeFlag)\n            update.flags |= 2 /* UpdateFlag.Height */;\n        if (scrollAnchor) {\n            this.scrollAnchorPos = update.changes.mapPos(scrollAnchor.from, -1);\n            this.scrollAnchorHeight = scrollAnchor.top;\n        }\n        else {\n            this.scrollAnchorPos = -1;\n            this.scrollAnchorHeight = this.heightMap.height;\n        }\n        let viewport = heightChanges.length ? this.mapViewport(this.viewport, update.changes) : this.viewport;\n        if (scrollTarget && (scrollTarget.range.head < viewport.from || scrollTarget.range.head > viewport.to) ||\n            !this.viewportIsAppropriate(viewport))\n            viewport = this.getViewport(0, scrollTarget);\n        let viewportChange = viewport.from != this.viewport.from || viewport.to != this.viewport.to;\n        this.viewport = viewport;\n        update.flags |= this.updateForViewport();\n        if (viewportChange || !update.changes.empty || (update.flags & 2 /* UpdateFlag.Height */))\n            this.updateViewportLines();\n        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))\n            this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, update.changes)));\n        update.flags |= this.computeVisibleRanges(update.changes);\n        if (scrollTarget)\n            this.scrollTarget = scrollTarget;\n        if (!this.mustEnforceCursorAssoc && update.selectionSet && update.view.lineWrapping &&\n            update.state.selection.main.empty && update.state.selection.main.assoc &&\n            !update.state.facet(nativeSelectionHidden))\n            this.mustEnforceCursorAssoc = true;\n    }\n    measure(view) {\n        let dom = view.contentDOM, style = window.getComputedStyle(dom);\n        let oracle = this.heightOracle;\n        let whiteSpace = style.whiteSpace;\n        this.defaultTextDirection = style.direction == \"rtl\" ? Direction.RTL : Direction.LTR;\n        let refresh = this.heightOracle.mustRefreshForWrapping(whiteSpace);\n        let domRect = dom.getBoundingClientRect();\n        let measureContent = refresh || this.mustMeasureContent || this.contentDOMHeight != domRect.height;\n        this.contentDOMHeight = domRect.height;\n        this.mustMeasureContent = false;\n        let result = 0, bias = 0;\n        if (domRect.width && domRect.height) {\n            let { scaleX, scaleY } = getScale(dom, domRect);\n            if (scaleX > .005 && Math.abs(this.scaleX - scaleX) > .005 ||\n                scaleY > .005 && Math.abs(this.scaleY - scaleY) > .005) {\n                this.scaleX = scaleX;\n                this.scaleY = scaleY;\n                result |= 16 /* UpdateFlag.Geometry */;\n                refresh = measureContent = true;\n            }\n        }\n        // Vertical padding\n        let paddingTop = (parseInt(style.paddingTop) || 0) * this.scaleY;\n        let paddingBottom = (parseInt(style.paddingBottom) || 0) * this.scaleY;\n        if (this.paddingTop != paddingTop || this.paddingBottom != paddingBottom) {\n            this.paddingTop = paddingTop;\n            this.paddingBottom = paddingBottom;\n            result |= 16 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */;\n        }\n        if (this.editorWidth != view.scrollDOM.clientWidth) {\n            if (oracle.lineWrapping)\n                measureContent = true;\n            this.editorWidth = view.scrollDOM.clientWidth;\n            result |= 16 /* UpdateFlag.Geometry */;\n        }\n        let scrollTop = view.scrollDOM.scrollTop * this.scaleY;\n        if (this.scrollTop != scrollTop) {\n            this.scrollAnchorHeight = -1;\n            this.scrollTop = scrollTop;\n        }\n        this.scrolledToBottom = isScrolledToBottom(view.scrollDOM);\n        // Pixel viewport\n        let pixelViewport = (this.printing ? fullPixelRange : visiblePixelRange)(dom, this.paddingTop);\n        let dTop = pixelViewport.top - this.pixelViewport.top, dBottom = pixelViewport.bottom - this.pixelViewport.bottom;\n        this.pixelViewport = pixelViewport;\n        let inView = this.pixelViewport.bottom > this.pixelViewport.top && this.pixelViewport.right > this.pixelViewport.left;\n        if (inView != this.inView) {\n            this.inView = inView;\n            if (inView)\n                measureContent = true;\n        }\n        if (!this.inView && !this.scrollTarget && !inWindow(view.dom))\n            return 0;\n        let contentWidth = domRect.width;\n        if (this.contentDOMWidth != contentWidth || this.editorHeight != view.scrollDOM.clientHeight) {\n            this.contentDOMWidth = domRect.width;\n            this.editorHeight = view.scrollDOM.clientHeight;\n            result |= 16 /* UpdateFlag.Geometry */;\n        }\n        if (measureContent) {\n            let lineHeights = view.docView.measureVisibleLineHeights(this.viewport);\n            if (oracle.mustRefreshForHeights(lineHeights))\n                refresh = true;\n            if (refresh || oracle.lineWrapping && Math.abs(contentWidth - this.contentDOMWidth) > oracle.charWidth) {\n                let { lineHeight, charWidth, textHeight } = view.docView.measureTextSize();\n                refresh = lineHeight > 0 && oracle.refresh(whiteSpace, lineHeight, charWidth, textHeight, contentWidth / charWidth, lineHeights);\n                if (refresh) {\n                    view.docView.minWidth = 0;\n                    result |= 16 /* UpdateFlag.Geometry */;\n                }\n            }\n            if (dTop > 0 && dBottom > 0)\n                bias = Math.max(dTop, dBottom);\n            else if (dTop < 0 && dBottom < 0)\n                bias = Math.min(dTop, dBottom);\n            clearHeightChangeFlag();\n            for (let vp of this.viewports) {\n                let heights = vp.from == this.viewport.from ? lineHeights : view.docView.measureVisibleLineHeights(vp);\n                this.heightMap = (refresh ? HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle, [new ChangedRange(0, 0, 0, view.state.doc.length)]) : this.heightMap).updateHeight(oracle, 0, refresh, new MeasuredHeights(vp.from, heights));\n            }\n            if (heightChangeFlag)\n                result |= 2 /* UpdateFlag.Height */;\n        }\n        let viewportChange = !this.viewportIsAppropriate(this.viewport, bias) ||\n            this.scrollTarget && (this.scrollTarget.range.head < this.viewport.from ||\n                this.scrollTarget.range.head > this.viewport.to);\n        if (viewportChange) {\n            if (result & 2 /* UpdateFlag.Height */)\n                result |= this.updateScaler();\n            this.viewport = this.getViewport(bias, this.scrollTarget);\n            result |= this.updateForViewport();\n        }\n        if ((result & 2 /* UpdateFlag.Height */) || viewportChange)\n            this.updateViewportLines();\n        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))\n            this.updateLineGaps(this.ensureLineGaps(refresh ? [] : this.lineGaps, view));\n        result |= this.computeVisibleRanges();\n        if (this.mustEnforceCursorAssoc) {\n            this.mustEnforceCursorAssoc = false;\n            // This is done in the read stage, because moving the selection\n            // to a line end is going to trigger a layout anyway, so it\n            // can't be a pure write. It should be rare that it does any\n            // writing.\n            view.docView.enforceCursorAssoc();\n        }\n        return result;\n    }\n    get visibleTop() { return this.scaler.fromDOM(this.pixelViewport.top); }\n    get visibleBottom() { return this.scaler.fromDOM(this.pixelViewport.bottom); }\n    getViewport(bias, scrollTarget) {\n        // This will divide VP.Margin between the top and the\n        // bottom, depending on the bias (the change in viewport position\n        // since the last update). It'll hold a number between 0 and 1\n        let marginTop = 0.5 - Math.max(-0.5, Math.min(0.5, bias / 1000 /* VP.Margin */ / 2));\n        let map = this.heightMap, oracle = this.heightOracle;\n        let { visibleTop, visibleBottom } = this;\n        let viewport = new Viewport(map.lineAt(visibleTop - marginTop * 1000 /* VP.Margin */, QueryType.ByHeight, oracle, 0, 0).from, map.lineAt(visibleBottom + (1 - marginTop) * 1000 /* VP.Margin */, QueryType.ByHeight, oracle, 0, 0).to);\n        // If scrollTarget is given, make sure the viewport includes that position\n        if (scrollTarget) {\n            let { head } = scrollTarget.range;\n            if (head < viewport.from || head > viewport.to) {\n                let viewHeight = Math.min(this.editorHeight, this.pixelViewport.bottom - this.pixelViewport.top);\n                let block = map.lineAt(head, QueryType.ByPos, oracle, 0, 0), topPos;\n                if (scrollTarget.y == \"center\")\n                    topPos = (block.top + block.bottom) / 2 - viewHeight / 2;\n                else if (scrollTarget.y == \"start\" || scrollTarget.y == \"nearest\" && head < viewport.from)\n                    topPos = block.top;\n                else\n                    topPos = block.bottom - viewHeight;\n                viewport = new Viewport(map.lineAt(topPos - 1000 /* VP.Margin */ / 2, QueryType.ByHeight, oracle, 0, 0).from, map.lineAt(topPos + viewHeight + 1000 /* VP.Margin */ / 2, QueryType.ByHeight, oracle, 0, 0).to);\n            }\n        }\n        return viewport;\n    }\n    mapViewport(viewport, changes) {\n        let from = changes.mapPos(viewport.from, -1), to = changes.mapPos(viewport.to, 1);\n        return new Viewport(this.heightMap.lineAt(from, QueryType.ByPos, this.heightOracle, 0, 0).from, this.heightMap.lineAt(to, QueryType.ByPos, this.heightOracle, 0, 0).to);\n    }\n    // Checks if a given viewport covers the visible part of the\n    // document and not too much beyond that.\n    viewportIsAppropriate({ from, to }, bias = 0) {\n        if (!this.inView)\n            return true;\n        let { top } = this.heightMap.lineAt(from, QueryType.ByPos, this.heightOracle, 0, 0);\n        let { bottom } = this.heightMap.lineAt(to, QueryType.ByPos, this.heightOracle, 0, 0);\n        let { visibleTop, visibleBottom } = this;\n        return (from == 0 || top <= visibleTop - Math.max(10 /* VP.MinCoverMargin */, Math.min(-bias, 250 /* VP.MaxCoverMargin */))) &&\n            (to == this.state.doc.length ||\n                bottom >= visibleBottom + Math.max(10 /* VP.MinCoverMargin */, Math.min(bias, 250 /* VP.MaxCoverMargin */))) &&\n            (top > visibleTop - 2 * 1000 /* VP.Margin */ && bottom < visibleBottom + 2 * 1000 /* VP.Margin */);\n    }\n    mapLineGaps(gaps, changes) {\n        if (!gaps.length || changes.empty)\n            return gaps;\n        let mapped = [];\n        for (let gap of gaps)\n            if (!changes.touchesRange(gap.from, gap.to))\n                mapped.push(new LineGap(changes.mapPos(gap.from), changes.mapPos(gap.to), gap.size, gap.displaySize));\n        return mapped;\n    }\n    // Computes positions in the viewport where the start or end of a\n    // line should be hidden, trying to reuse existing line gaps when\n    // appropriate to avoid unneccesary redraws.\n    // Uses crude character-counting for the positioning and sizing,\n    // since actual DOM coordinates aren't always available and\n    // predictable. Relies on generous margins (see LG.Margin) to hide\n    // the artifacts this might produce from the user.\n    ensureLineGaps(current, mayMeasure) {\n        let wrapping = this.heightOracle.lineWrapping;\n        let margin = wrapping ? 10000 /* LG.MarginWrap */ : 2000 /* LG.Margin */, halfMargin = margin >> 1, doubleMargin = margin << 1;\n        // The non-wrapping logic won't work at all in predominantly right-to-left text.\n        if (this.defaultTextDirection != Direction.LTR && !wrapping)\n            return [];\n        let gaps = [];\n        let addGap = (from, to, line, structure) => {\n            if (to - from < halfMargin)\n                return;\n            let sel = this.state.selection.main, avoid = [sel.from];\n            if (!sel.empty)\n                avoid.push(sel.to);\n            for (let pos of avoid) {\n                if (pos > from && pos < to) {\n                    addGap(from, pos - 10 /* LG.SelectionMargin */, line, structure);\n                    addGap(pos + 10 /* LG.SelectionMargin */, to, line, structure);\n                    return;\n                }\n            }\n            let gap = find(current, gap => gap.from >= line.from && gap.to <= line.to &&\n                Math.abs(gap.from - from) < halfMargin && Math.abs(gap.to - to) < halfMargin &&\n                !avoid.some(pos => gap.from < pos && gap.to > pos));\n            if (!gap) {\n                // When scrolling down, snap gap ends to line starts to avoid shifts in wrapping\n                if (to < line.to && mayMeasure && wrapping &&\n                    mayMeasure.visibleRanges.some(r => r.from <= to && r.to >= to)) {\n                    let lineStart = mayMeasure.moveToLineBoundary(EditorSelection.cursor(to), false, true).head;\n                    if (lineStart > from)\n                        to = lineStart;\n                }\n                let size = this.gapSize(line, from, to, structure);\n                let displaySize = wrapping || size < 2000000 /* VP.MaxHorizGap */ ? size : 2000000 /* VP.MaxHorizGap */;\n                gap = new LineGap(from, to, size, displaySize);\n            }\n            gaps.push(gap);\n        };\n        let checkLine = (line) => {\n            if (line.length < doubleMargin || line.type != BlockType.Text)\n                return;\n            let structure = lineStructure(line.from, line.to, this.stateDeco);\n            if (structure.total < doubleMargin)\n                return;\n            let target = this.scrollTarget ? this.scrollTarget.range.head : null;\n            let viewFrom, viewTo;\n            if (wrapping) {\n                let marginHeight = (margin / this.heightOracle.lineLength) * this.heightOracle.lineHeight;\n                let top, bot;\n                if (target != null) {\n                    let targetFrac = findFraction(structure, target);\n                    let spaceFrac = ((this.visibleBottom - this.visibleTop) / 2 + marginHeight) / line.height;\n                    top = targetFrac - spaceFrac;\n                    bot = targetFrac + spaceFrac;\n                }\n                else {\n                    top = (this.visibleTop - line.top - marginHeight) / line.height;\n                    bot = (this.visibleBottom - line.top + marginHeight) / line.height;\n                }\n                viewFrom = findPosition(structure, top);\n                viewTo = findPosition(structure, bot);\n            }\n            else {\n                let totalWidth = structure.total * this.heightOracle.charWidth;\n                let marginWidth = margin * this.heightOracle.charWidth;\n                let horizOffset = 0;\n                if (totalWidth > 2000000 /* VP.MaxHorizGap */)\n                    for (let old of current) {\n                        if (old.from >= line.from && old.from < line.to && old.size != old.displaySize &&\n                            old.from * this.heightOracle.charWidth + horizOffset < this.pixelViewport.left)\n                            horizOffset = old.size - old.displaySize;\n                    }\n                let pxLeft = this.pixelViewport.left + horizOffset, pxRight = this.pixelViewport.right + horizOffset;\n                let left, right;\n                if (target != null) {\n                    let targetFrac = findFraction(structure, target);\n                    let spaceFrac = ((pxRight - pxLeft) / 2 + marginWidth) / totalWidth;\n                    left = targetFrac - spaceFrac;\n                    right = targetFrac + spaceFrac;\n                }\n                else {\n                    left = (pxLeft - marginWidth) / totalWidth;\n                    right = (pxRight + marginWidth) / totalWidth;\n                }\n                viewFrom = findPosition(structure, left);\n                viewTo = findPosition(structure, right);\n            }\n            if (viewFrom > line.from)\n                addGap(line.from, viewFrom, line, structure);\n            if (viewTo < line.to)\n                addGap(viewTo, line.to, line, structure);\n        };\n        for (let line of this.viewportLines) {\n            if (Array.isArray(line.type))\n                line.type.forEach(checkLine);\n            else\n                checkLine(line);\n        }\n        return gaps;\n    }\n    gapSize(line, from, to, structure) {\n        let fraction = findFraction(structure, to) - findFraction(structure, from);\n        if (this.heightOracle.lineWrapping) {\n            return line.height * fraction;\n        }\n        else {\n            return structure.total * this.heightOracle.charWidth * fraction;\n        }\n    }\n    updateLineGaps(gaps) {\n        if (!LineGap.same(gaps, this.lineGaps)) {\n            this.lineGaps = gaps;\n            this.lineGapDeco = Decoration.set(gaps.map(gap => gap.draw(this, this.heightOracle.lineWrapping)));\n        }\n    }\n    computeVisibleRanges(changes) {\n        let deco = this.stateDeco;\n        if (this.lineGaps.length)\n            deco = deco.concat(this.lineGapDeco);\n        let ranges = [];\n        RangeSet.spans(deco, this.viewport.from, this.viewport.to, {\n            span(from, to) { ranges.push({ from, to }); },\n            point() { }\n        }, 20);\n        let changed = 0;\n        if (ranges.length != this.visibleRanges.length) {\n            changed = 8 /* UpdateFlag.ViewportMoved */ | 4 /* UpdateFlag.Viewport */;\n        }\n        else {\n            for (let i = 0; i < ranges.length && !(changed & 8 /* UpdateFlag.ViewportMoved */); i++) {\n                let old = this.visibleRanges[i], nw = ranges[i];\n                if (old.from != nw.from || old.to != nw.to) {\n                    changed |= 4 /* UpdateFlag.Viewport */;\n                    if (!(changes && changes.mapPos(old.from, -1) == nw.from && changes.mapPos(old.to, 1) == nw.to))\n                        changed |= 8 /* UpdateFlag.ViewportMoved */;\n                }\n            }\n        }\n        this.visibleRanges = ranges;\n        return changed;\n    }\n    lineBlockAt(pos) {\n        return (pos >= this.viewport.from && pos <= this.viewport.to &&\n            this.viewportLines.find(b => b.from <= pos && b.to >= pos)) ||\n            scaleBlock(this.heightMap.lineAt(pos, QueryType.ByPos, this.heightOracle, 0, 0), this.scaler);\n    }\n    lineBlockAtHeight(height) {\n        return (height >= this.viewportLines[0].top && height <= this.viewportLines[this.viewportLines.length - 1].bottom &&\n            this.viewportLines.find(l => l.top <= height && l.bottom >= height)) ||\n            scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType.ByHeight, this.heightOracle, 0, 0), this.scaler);\n    }\n    scrollAnchorAt(scrollTop) {\n        let block = this.lineBlockAtHeight(scrollTop + 8);\n        return block.from >= this.viewport.from || this.viewportLines[0].top - scrollTop > 200 ? block : this.viewportLines[0];\n    }\n    elementAtHeight(height) {\n        return scaleBlock(this.heightMap.blockAt(this.scaler.fromDOM(height), this.heightOracle, 0, 0), this.scaler);\n    }\n    get docHeight() {\n        return this.scaler.toDOM(this.heightMap.height);\n    }\n    get contentHeight() {\n        return this.docHeight + this.paddingTop + this.paddingBottom;\n    }\n}\nclass Viewport {\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n    }\n}\nfunction lineStructure(from, to, stateDeco) {\n    let ranges = [], pos = from, total = 0;\n    RangeSet.spans(stateDeco, from, to, {\n        span() { },\n        point(from, to) {\n            if (from > pos) {\n                ranges.push({ from: pos, to: from });\n                total += from - pos;\n            }\n            pos = to;\n        }\n    }, 20); // We're only interested in collapsed ranges of a significant size\n    if (pos < to) {\n        ranges.push({ from: pos, to });\n        total += to - pos;\n    }\n    return { total, ranges };\n}\nfunction findPosition({ total, ranges }, ratio) {\n    if (ratio <= 0)\n        return ranges[0].from;\n    if (ratio >= 1)\n        return ranges[ranges.length - 1].to;\n    let dist = Math.floor(total * ratio);\n    for (let i = 0;; i++) {\n        let { from, to } = ranges[i], size = to - from;\n        if (dist <= size)\n            return from + dist;\n        dist -= size;\n    }\n}\nfunction findFraction(structure, pos) {\n    let counted = 0;\n    for (let { from, to } of structure.ranges) {\n        if (pos <= to) {\n            counted += pos - from;\n            break;\n        }\n        counted += to - from;\n    }\n    return counted / structure.total;\n}\nfunction find(array, f) {\n    for (let val of array)\n        if (f(val))\n            return val;\n    return undefined;\n}\n// Don't scale when the document height is within the range of what\n// the DOM can handle.\nconst IdScaler = {\n    toDOM(n) { return n; },\n    fromDOM(n) { return n; },\n    scale: 1,\n    eq(other) { return other == this; }\n};\n// When the height is too big (> VP.MaxDOMHeight), scale down the\n// regions outside the viewports so that the total height is\n// VP.MaxDOMHeight.\nclass BigScaler {\n    constructor(oracle, heightMap, viewports) {\n        let vpHeight = 0, base = 0, domBase = 0;\n        this.viewports = viewports.map(({ from, to }) => {\n            let top = heightMap.lineAt(from, QueryType.ByPos, oracle, 0, 0).top;\n            let bottom = heightMap.lineAt(to, QueryType.ByPos, oracle, 0, 0).bottom;\n            vpHeight += bottom - top;\n            return { from, to, top, bottom, domTop: 0, domBottom: 0 };\n        });\n        this.scale = (7000000 /* VP.MaxDOMHeight */ - vpHeight) / (heightMap.height - vpHeight);\n        for (let obj of this.viewports) {\n            obj.domTop = domBase + (obj.top - base) * this.scale;\n            domBase = obj.domBottom = obj.domTop + (obj.bottom - obj.top);\n            base = obj.bottom;\n        }\n    }\n    toDOM(n) {\n        for (let i = 0, base = 0, domBase = 0;; i++) {\n            let vp = i < this.viewports.length ? this.viewports[i] : null;\n            if (!vp || n < vp.top)\n                return domBase + (n - base) * this.scale;\n            if (n <= vp.bottom)\n                return vp.domTop + (n - vp.top);\n            base = vp.bottom;\n            domBase = vp.domBottom;\n        }\n    }\n    fromDOM(n) {\n        for (let i = 0, base = 0, domBase = 0;; i++) {\n            let vp = i < this.viewports.length ? this.viewports[i] : null;\n            if (!vp || n < vp.domTop)\n                return base + (n - domBase) / this.scale;\n            if (n <= vp.domBottom)\n                return vp.top + (n - vp.domTop);\n            base = vp.bottom;\n            domBase = vp.domBottom;\n        }\n    }\n    eq(other) {\n        if (!(other instanceof BigScaler))\n            return false;\n        return this.scale == other.scale && this.viewports.length == other.viewports.length &&\n            this.viewports.every((vp, i) => vp.from == other.viewports[i].from && vp.to == other.viewports[i].to);\n    }\n}\nfunction scaleBlock(block, scaler) {\n    if (scaler.scale == 1)\n        return block;\n    let bTop = scaler.toDOM(block.top), bBottom = scaler.toDOM(block.bottom);\n    return new BlockInfo(block.from, block.length, bTop, bBottom - bTop, Array.isArray(block._content) ? block._content.map(b => scaleBlock(b, scaler)) : block._content);\n}\n\nconst theme = /*@__PURE__*/Facet.define({ combine: strs => strs.join(\" \") });\nconst darkTheme = /*@__PURE__*/Facet.define({ combine: values => values.indexOf(true) > -1 });\nconst baseThemeID = /*@__PURE__*/StyleModule.newName(), baseLightID = /*@__PURE__*/StyleModule.newName(), baseDarkID = /*@__PURE__*/StyleModule.newName();\nconst lightDarkIDs = { \"&light\": \".\" + baseLightID, \"&dark\": \".\" + baseDarkID };\nfunction buildTheme(main, spec, scopes) {\n    return new StyleModule(spec, {\n        finish(sel) {\n            return /&/.test(sel) ? sel.replace(/&\\w*/, m => {\n                if (m == \"&\")\n                    return main;\n                if (!scopes || !scopes[m])\n                    throw new RangeError(`Unsupported selector: ${m}`);\n                return scopes[m];\n            }) : main + \" \" + sel;\n        }\n    });\n}\nconst baseTheme$1 = /*@__PURE__*/buildTheme(\".\" + baseThemeID, {\n    \"&\": {\n        position: \"relative !important\",\n        boxSizing: \"border-box\",\n        \"&.cm-focused\": {\n            // Provide a simple default outline to make sure a focused\n            // editor is visually distinct. Can't leave the default behavior\n            // because that will apply to the content element, which is\n            // inside the scrollable container and doesn't include the\n            // gutters. We also can't use an 'auto' outline, since those\n            // are, for some reason, drawn behind the element content, which\n            // will cause things like the active line background to cover\n            // the outline (#297).\n            outline: \"1px dotted #212121\"\n        },\n        display: \"flex !important\",\n        flexDirection: \"column\"\n    },\n    \".cm-scroller\": {\n        display: \"flex !important\",\n        alignItems: \"flex-start !important\",\n        fontFamily: \"monospace\",\n        lineHeight: 1.4,\n        height: \"100%\",\n        overflowX: \"auto\",\n        position: \"relative\",\n        zIndex: 0,\n        overflowAnchor: \"none\",\n    },\n    \".cm-content\": {\n        margin: 0,\n        flexGrow: 2,\n        flexShrink: 0,\n        display: \"block\",\n        whiteSpace: \"pre\",\n        wordWrap: \"normal\", // https://github.com/codemirror/dev/issues/456\n        boxSizing: \"border-box\",\n        minHeight: \"100%\",\n        padding: \"4px 0\",\n        outline: \"none\",\n        \"&[contenteditable=true]\": {\n            WebkitUserModify: \"read-write-plaintext-only\",\n        }\n    },\n    \".cm-lineWrapping\": {\n        whiteSpace_fallback: \"pre-wrap\", // For IE\n        whiteSpace: \"break-spaces\",\n        wordBreak: \"break-word\", // For Safari, which doesn't support overflow-wrap: anywhere\n        overflowWrap: \"anywhere\",\n        flexShrink: 1\n    },\n    \"&light .cm-content\": { caretColor: \"black\" },\n    \"&dark .cm-content\": { caretColor: \"white\" },\n    \".cm-line\": {\n        display: \"block\",\n        padding: \"0 2px 0 6px\"\n    },\n    \".cm-layer\": {\n        position: \"absolute\",\n        left: 0,\n        top: 0,\n        contain: \"size style\",\n        \"& > *\": {\n            position: \"absolute\"\n        }\n    },\n    \"&light .cm-selectionBackground\": {\n        background: \"#d9d9d9\"\n    },\n    \"&dark .cm-selectionBackground\": {\n        background: \"#222\"\n    },\n    \"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": {\n        background: \"#d7d4f0\"\n    },\n    \"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": {\n        background: \"#233\"\n    },\n    \".cm-cursorLayer\": {\n        pointerEvents: \"none\"\n    },\n    \"&.cm-focused > .cm-scroller > .cm-cursorLayer\": {\n        animation: \"steps(1) cm-blink 1.2s infinite\"\n    },\n    // Two animations defined so that we can switch between them to\n    // restart the animation without forcing another style\n    // recomputation.\n    \"@keyframes cm-blink\": { \"0%\": {}, \"50%\": { opacity: 0 }, \"100%\": {} },\n    \"@keyframes cm-blink2\": { \"0%\": {}, \"50%\": { opacity: 0 }, \"100%\": {} },\n    \".cm-cursor, .cm-dropCursor\": {\n        borderLeft: \"1.2px solid black\",\n        marginLeft: \"-0.6px\",\n        pointerEvents: \"none\",\n    },\n    \".cm-cursor\": {\n        display: \"none\"\n    },\n    \"&dark .cm-cursor\": {\n        borderLeftColor: \"#ddd\"\n    },\n    \".cm-dropCursor\": {\n        position: \"absolute\"\n    },\n    \"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor\": {\n        display: \"block\"\n    },\n    \".cm-iso\": {\n        unicodeBidi: \"isolate\"\n    },\n    \".cm-announced\": {\n        position: \"fixed\",\n        top: \"-10000px\"\n    },\n    \"@media print\": {\n        \".cm-announced\": { display: \"none\" }\n    },\n    \"&light .cm-activeLine\": { backgroundColor: \"#cceeff44\" },\n    \"&dark .cm-activeLine\": { backgroundColor: \"#99eeff33\" },\n    \"&light .cm-specialChar\": { color: \"red\" },\n    \"&dark .cm-specialChar\": { color: \"#f78\" },\n    \".cm-gutters\": {\n        flexShrink: 0,\n        display: \"flex\",\n        height: \"100%\",\n        boxSizing: \"border-box\",\n        insetInlineStart: 0,\n        zIndex: 200\n    },\n    \"&light .cm-gutters\": {\n        backgroundColor: \"#f5f5f5\",\n        color: \"#6c6c6c\",\n        borderRight: \"1px solid #ddd\"\n    },\n    \"&dark .cm-gutters\": {\n        backgroundColor: \"#333338\",\n        color: \"#ccc\"\n    },\n    \".cm-gutter\": {\n        display: \"flex !important\", // Necessary -- prevents margin collapsing\n        flexDirection: \"column\",\n        flexShrink: 0,\n        boxSizing: \"border-box\",\n        minHeight: \"100%\",\n        overflow: \"hidden\"\n    },\n    \".cm-gutterElement\": {\n        boxSizing: \"border-box\"\n    },\n    \".cm-lineNumbers .cm-gutterElement\": {\n        padding: \"0 3px 0 5px\",\n        minWidth: \"20px\",\n        textAlign: \"right\",\n        whiteSpace: \"nowrap\"\n    },\n    \"&light .cm-activeLineGutter\": {\n        backgroundColor: \"#e2f2ff\"\n    },\n    \"&dark .cm-activeLineGutter\": {\n        backgroundColor: \"#222227\"\n    },\n    \".cm-panels\": {\n        boxSizing: \"border-box\",\n        position: \"sticky\",\n        left: 0,\n        right: 0,\n        zIndex: 300\n    },\n    \"&light .cm-panels\": {\n        backgroundColor: \"#f5f5f5\",\n        color: \"black\"\n    },\n    \"&light .cm-panels-top\": {\n        borderBottom: \"1px solid #ddd\"\n    },\n    \"&light .cm-panels-bottom\": {\n        borderTop: \"1px solid #ddd\"\n    },\n    \"&dark .cm-panels\": {\n        backgroundColor: \"#333338\",\n        color: \"white\"\n    },\n    \".cm-tab\": {\n        display: \"inline-block\",\n        overflow: \"hidden\",\n        verticalAlign: \"bottom\"\n    },\n    \".cm-widgetBuffer\": {\n        verticalAlign: \"text-top\",\n        height: \"1em\",\n        width: 0,\n        display: \"inline\"\n    },\n    \".cm-placeholder\": {\n        color: \"#888\",\n        display: \"inline-block\",\n        verticalAlign: \"top\",\n        userSelect: \"none\"\n    },\n    \".cm-highlightSpace\": {\n        backgroundImage: \"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)\",\n        backgroundPosition: \"center\",\n    },\n    \".cm-highlightTab\": {\n        backgroundImage: `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"20\"><path stroke=\"%23888\" stroke-width=\"1\" fill=\"none\" d=\"M1 10H196L190 5M190 15L196 10M197 4L197 16\"/></svg>')`,\n        backgroundSize: \"auto 100%\",\n        backgroundPosition: \"right 90%\",\n        backgroundRepeat: \"no-repeat\"\n    },\n    \".cm-trailingSpace\": {\n        backgroundColor: \"#ff332255\"\n    },\n    \".cm-button\": {\n        verticalAlign: \"middle\",\n        color: \"inherit\",\n        fontSize: \"70%\",\n        padding: \".2em 1em\",\n        borderRadius: \"1px\"\n    },\n    \"&light .cm-button\": {\n        backgroundImage: \"linear-gradient(#eff1f5, #d9d9df)\",\n        border: \"1px solid #888\",\n        \"&:active\": {\n            backgroundImage: \"linear-gradient(#b4b4b4, #d0d3d6)\"\n        }\n    },\n    \"&dark .cm-button\": {\n        backgroundImage: \"linear-gradient(#393939, #111)\",\n        border: \"1px solid #888\",\n        \"&:active\": {\n            backgroundImage: \"linear-gradient(#111, #333)\"\n        }\n    },\n    \".cm-textfield\": {\n        verticalAlign: \"middle\",\n        color: \"inherit\",\n        fontSize: \"70%\",\n        border: \"1px solid silver\",\n        padding: \".2em .5em\"\n    },\n    \"&light .cm-textfield\": {\n        backgroundColor: \"white\"\n    },\n    \"&dark .cm-textfield\": {\n        border: \"1px solid #555\",\n        backgroundColor: \"inherit\"\n    }\n}, lightDarkIDs);\n\nconst observeOptions = {\n    childList: true,\n    characterData: true,\n    subtree: true,\n    attributes: true,\n    characterDataOldValue: true\n};\n// IE11 has very broken mutation observers, so we also listen to\n// DOMCharacterDataModified there\nconst useCharData = browser.ie && browser.ie_version <= 11;\nclass DOMObserver {\n    constructor(view) {\n        this.view = view;\n        this.active = false;\n        this.editContext = null;\n        // The known selection. Kept in our own object, as opposed to just\n        // directly accessing the selection because:\n        //  - Safari doesn't report the right selection in shadow DOM\n        //  - Reading from the selection forces a DOM layout\n        //  - This way, we can ignore selectionchange events if we have\n        //    already seen the 'new' selection\n        this.selectionRange = new DOMSelectionState;\n        // Set when a selection change is detected, cleared on flush\n        this.selectionChanged = false;\n        this.delayedFlush = -1;\n        this.resizeTimeout = -1;\n        this.queue = [];\n        this.delayedAndroidKey = null;\n        this.flushingAndroidKey = -1;\n        this.lastChange = 0;\n        this.scrollTargets = [];\n        this.intersection = null;\n        this.resizeScroll = null;\n        this.intersecting = false;\n        this.gapIntersection = null;\n        this.gaps = [];\n        this.printQuery = null;\n        // Timeout for scheduling check of the parents that need scroll handlers\n        this.parentCheck = -1;\n        this.dom = view.contentDOM;\n        this.observer = new MutationObserver(mutations => {\n            for (let mut of mutations)\n                this.queue.push(mut);\n            // IE11 will sometimes (on typing over a selection or\n            // backspacing out a single character text node) call the\n            // observer callback before actually updating the DOM.\n            //\n            // Unrelatedly, iOS Safari will, when ending a composition,\n            // sometimes first clear it, deliver the mutations, and then\n            // reinsert the finished text. CodeMirror's handling of the\n            // deletion will prevent the reinsertion from happening,\n            // breaking composition.\n            if ((browser.ie && browser.ie_version <= 11 || browser.ios && view.composing) &&\n                mutations.some(m => m.type == \"childList\" && m.removedNodes.length ||\n                    m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length))\n                this.flushSoon();\n            else\n                this.flush();\n        });\n        if (window.EditContext && view.constructor.EDIT_CONTEXT !== false &&\n            // Chrome <126 doesn't support inverted selections in edit context (#1392)\n            !(browser.chrome && browser.chrome_version < 126)) {\n            this.editContext = new EditContextManager(view);\n            if (view.state.facet(editable))\n                view.contentDOM.editContext = this.editContext.editContext;\n        }\n        if (useCharData)\n            this.onCharData = (event) => {\n                this.queue.push({ target: event.target,\n                    type: \"characterData\",\n                    oldValue: event.prevValue });\n                this.flushSoon();\n            };\n        this.onSelectionChange = this.onSelectionChange.bind(this);\n        this.onResize = this.onResize.bind(this);\n        this.onPrint = this.onPrint.bind(this);\n        this.onScroll = this.onScroll.bind(this);\n        if (window.matchMedia)\n            this.printQuery = window.matchMedia(\"print\");\n        if (typeof ResizeObserver == \"function\") {\n            this.resizeScroll = new ResizeObserver(() => {\n                var _a;\n                if (((_a = this.view.docView) === null || _a === void 0 ? void 0 : _a.lastUpdate) < Date.now() - 75)\n                    this.onResize();\n            });\n            this.resizeScroll.observe(view.scrollDOM);\n        }\n        this.addWindowListeners(this.win = view.win);\n        this.start();\n        if (typeof IntersectionObserver == \"function\") {\n            this.intersection = new IntersectionObserver(entries => {\n                if (this.parentCheck < 0)\n                    this.parentCheck = setTimeout(this.listenForScroll.bind(this), 1000);\n                if (entries.length > 0 && (entries[entries.length - 1].intersectionRatio > 0) != this.intersecting) {\n                    this.intersecting = !this.intersecting;\n                    if (this.intersecting != this.view.inView)\n                        this.onScrollChanged(document.createEvent(\"Event\"));\n                }\n            }, { threshold: [0, .001] });\n            this.intersection.observe(this.dom);\n            this.gapIntersection = new IntersectionObserver(entries => {\n                if (entries.length > 0 && entries[entries.length - 1].intersectionRatio > 0)\n                    this.onScrollChanged(document.createEvent(\"Event\"));\n            }, {});\n        }\n        this.listenForScroll();\n        this.readSelectionRange();\n    }\n    onScrollChanged(e) {\n        this.view.inputState.runHandlers(\"scroll\", e);\n        if (this.intersecting)\n            this.view.measure();\n    }\n    onScroll(e) {\n        if (this.intersecting)\n            this.flush(false);\n        if (this.editContext)\n            this.view.requestMeasure(this.editContext.measureReq);\n        this.onScrollChanged(e);\n    }\n    onResize() {\n        if (this.resizeTimeout < 0)\n            this.resizeTimeout = setTimeout(() => {\n                this.resizeTimeout = -1;\n                this.view.requestMeasure();\n            }, 50);\n    }\n    onPrint(event) {\n        if ((event.type == \"change\" || !event.type) && !event.matches)\n            return;\n        this.view.viewState.printing = true;\n        this.view.measure();\n        setTimeout(() => {\n            this.view.viewState.printing = false;\n            this.view.requestMeasure();\n        }, 500);\n    }\n    updateGaps(gaps) {\n        if (this.gapIntersection && (gaps.length != this.gaps.length || this.gaps.some((g, i) => g != gaps[i]))) {\n            this.gapIntersection.disconnect();\n            for (let gap of gaps)\n                this.gapIntersection.observe(gap);\n            this.gaps = gaps;\n        }\n    }\n    onSelectionChange(event) {\n        let wasChanged = this.selectionChanged;\n        if (!this.readSelectionRange() || this.delayedAndroidKey)\n            return;\n        let { view } = this, sel = this.selectionRange;\n        if (view.state.facet(editable) ? view.root.activeElement != this.dom : !hasSelection(this.dom, sel))\n            return;\n        let context = sel.anchorNode && view.docView.nearest(sel.anchorNode);\n        if (context && context.ignoreEvent(event)) {\n            if (!wasChanged)\n                this.selectionChanged = false;\n            return;\n        }\n        // Deletions on IE11 fire their events in the wrong order, giving\n        // us a selection change event before the DOM changes are\n        // reported.\n        // Chrome Android has a similar issue when backspacing out a\n        // selection (#645).\n        if ((browser.ie && browser.ie_version <= 11 || browser.android && browser.chrome) && !view.state.selection.main.empty &&\n            // (Selection.isCollapsed isn't reliable on IE)\n            sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))\n            this.flushSoon();\n        else\n            this.flush(false);\n    }\n    readSelectionRange() {\n        let { view } = this;\n        // The Selection object is broken in shadow roots in Safari. See\n        // https://github.com/codemirror/dev/issues/414\n        let selection = getSelection(view.root);\n        if (!selection)\n            return false;\n        let range = browser.safari && view.root.nodeType == 11 &&\n            view.root.activeElement == this.dom &&\n            safariSelectionRangeHack(this.view, selection) || selection;\n        if (!range || this.selectionRange.eq(range))\n            return false;\n        let local = hasSelection(this.dom, range);\n        // Detect the situation where the browser has, on focus, moved the\n        // selection to the start of the content element. Reset it to the\n        // position from the editor state.\n        if (local && !this.selectionChanged &&\n            view.inputState.lastFocusTime > Date.now() - 200 &&\n            view.inputState.lastTouchTime < Date.now() - 300 &&\n            atElementStart(this.dom, range)) {\n            this.view.inputState.lastFocusTime = 0;\n            view.docView.updateSelection();\n            return false;\n        }\n        this.selectionRange.setRange(range);\n        if (local)\n            this.selectionChanged = true;\n        return true;\n    }\n    setSelectionRange(anchor, head) {\n        this.selectionRange.set(anchor.node, anchor.offset, head.node, head.offset);\n        this.selectionChanged = false;\n    }\n    clearSelectionRange() {\n        this.selectionRange.set(null, 0, null, 0);\n    }\n    listenForScroll() {\n        this.parentCheck = -1;\n        let i = 0, changed = null;\n        for (let dom = this.dom; dom;) {\n            if (dom.nodeType == 1) {\n                if (!changed && i < this.scrollTargets.length && this.scrollTargets[i] == dom)\n                    i++;\n                else if (!changed)\n                    changed = this.scrollTargets.slice(0, i);\n                if (changed)\n                    changed.push(dom);\n                dom = dom.assignedSlot || dom.parentNode;\n            }\n            else if (dom.nodeType == 11) { // Shadow root\n                dom = dom.host;\n            }\n            else {\n                break;\n            }\n        }\n        if (i < this.scrollTargets.length && !changed)\n            changed = this.scrollTargets.slice(0, i);\n        if (changed) {\n            for (let dom of this.scrollTargets)\n                dom.removeEventListener(\"scroll\", this.onScroll);\n            for (let dom of this.scrollTargets = changed)\n                dom.addEventListener(\"scroll\", this.onScroll);\n        }\n    }\n    ignore(f) {\n        if (!this.active)\n            return f();\n        try {\n            this.stop();\n            return f();\n        }\n        finally {\n            this.start();\n            this.clear();\n        }\n    }\n    start() {\n        if (this.active)\n            return;\n        this.observer.observe(this.dom, observeOptions);\n        if (useCharData)\n            this.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n        this.active = true;\n    }\n    stop() {\n        if (!this.active)\n            return;\n        this.active = false;\n        this.observer.disconnect();\n        if (useCharData)\n            this.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n    }\n    // Throw away any pending changes\n    clear() {\n        this.processRecords();\n        this.queue.length = 0;\n        this.selectionChanged = false;\n    }\n    // Chrome Android, especially in combination with GBoard, not only\n    // doesn't reliably fire regular key events, but also often\n    // surrounds the effect of enter or backspace with a bunch of\n    // composition events that, when interrupted, cause text duplication\n    // or other kinds of corruption. This hack makes the editor back off\n    // from handling DOM changes for a moment when such a key is\n    // detected (via beforeinput or keydown), and then tries to flush\n    // them or, if that has no effect, dispatches the given key.\n    delayAndroidKey(key, keyCode) {\n        var _a;\n        if (!this.delayedAndroidKey) {\n            let flush = () => {\n                let key = this.delayedAndroidKey;\n                if (key) {\n                    this.clearDelayedAndroidKey();\n                    this.view.inputState.lastKeyCode = key.keyCode;\n                    this.view.inputState.lastKeyTime = Date.now();\n                    let flushed = this.flush();\n                    if (!flushed && key.force)\n                        dispatchKey(this.dom, key.key, key.keyCode);\n                }\n            };\n            this.flushingAndroidKey = this.view.win.requestAnimationFrame(flush);\n        }\n        // Since backspace beforeinput is sometimes signalled spuriously,\n        // Enter always takes precedence.\n        if (!this.delayedAndroidKey || key == \"Enter\")\n            this.delayedAndroidKey = {\n                key, keyCode,\n                // Only run the key handler when no changes are detected if\n                // this isn't coming right after another change, in which case\n                // it is probably part of a weird chain of updates, and should\n                // be ignored if it returns the DOM to its previous state.\n                force: this.lastChange < Date.now() - 50 || !!((_a = this.delayedAndroidKey) === null || _a === void 0 ? void 0 : _a.force)\n            };\n    }\n    clearDelayedAndroidKey() {\n        this.win.cancelAnimationFrame(this.flushingAndroidKey);\n        this.delayedAndroidKey = null;\n        this.flushingAndroidKey = -1;\n    }\n    flushSoon() {\n        if (this.delayedFlush < 0)\n            this.delayedFlush = this.view.win.requestAnimationFrame(() => { this.delayedFlush = -1; this.flush(); });\n    }\n    forceFlush() {\n        if (this.delayedFlush >= 0) {\n            this.view.win.cancelAnimationFrame(this.delayedFlush);\n            this.delayedFlush = -1;\n        }\n        this.flush();\n    }\n    pendingRecords() {\n        for (let mut of this.observer.takeRecords())\n            this.queue.push(mut);\n        return this.queue;\n    }\n    processRecords() {\n        let records = this.pendingRecords();\n        if (records.length)\n            this.queue = [];\n        let from = -1, to = -1, typeOver = false;\n        for (let record of records) {\n            let range = this.readMutation(record);\n            if (!range)\n                continue;\n            if (range.typeOver)\n                typeOver = true;\n            if (from == -1) {\n                ({ from, to } = range);\n            }\n            else {\n                from = Math.min(range.from, from);\n                to = Math.max(range.to, to);\n            }\n        }\n        return { from, to, typeOver };\n    }\n    readChange() {\n        let { from, to, typeOver } = this.processRecords();\n        let newSel = this.selectionChanged && hasSelection(this.dom, this.selectionRange);\n        if (from < 0 && !newSel)\n            return null;\n        if (from > -1)\n            this.lastChange = Date.now();\n        this.view.inputState.lastFocusTime = 0;\n        this.selectionChanged = false;\n        let change = new DOMChange(this.view, from, to, typeOver);\n        this.view.docView.domChanged = { newSel: change.newSel ? change.newSel.main : null };\n        return change;\n    }\n    // Apply pending changes, if any\n    flush(readSelection = true) {\n        // Completely hold off flushing when pending keys are set\u2014the code\n        // managing those will make sure processRecords is called and the\n        // view is resynchronized after\n        if (this.delayedFlush >= 0 || this.delayedAndroidKey)\n            return false;\n        if (readSelection)\n            this.readSelectionRange();\n        let domChange = this.readChange();\n        if (!domChange) {\n            this.view.requestMeasure();\n            return false;\n        }\n        let startState = this.view.state;\n        let handled = applyDOMChange(this.view, domChange);\n        // The view wasn't updated but DOM/selection changes were seen. Reset the view.\n        if (this.view.state == startState &&\n            (domChange.domChanged || domChange.newSel && !domChange.newSel.main.eq(this.view.state.selection.main)))\n            this.view.update([]);\n        return handled;\n    }\n    readMutation(rec) {\n        let cView = this.view.docView.nearest(rec.target);\n        if (!cView || cView.ignoreMutation(rec))\n            return null;\n        cView.markDirty(rec.type == \"attributes\");\n        if (rec.type == \"attributes\")\n            cView.flags |= 4 /* ViewFlag.AttrsDirty */;\n        if (rec.type == \"childList\") {\n            let childBefore = findChild(cView, rec.previousSibling || rec.target.previousSibling, -1);\n            let childAfter = findChild(cView, rec.nextSibling || rec.target.nextSibling, 1);\n            return { from: childBefore ? cView.posAfter(childBefore) : cView.posAtStart,\n                to: childAfter ? cView.posBefore(childAfter) : cView.posAtEnd, typeOver: false };\n        }\n        else if (rec.type == \"characterData\") {\n            return { from: cView.posAtStart, to: cView.posAtEnd, typeOver: rec.target.nodeValue == rec.oldValue };\n        }\n        else {\n            return null;\n        }\n    }\n    setWindow(win) {\n        if (win != this.win) {\n            this.removeWindowListeners(this.win);\n            this.win = win;\n            this.addWindowListeners(this.win);\n        }\n    }\n    addWindowListeners(win) {\n        win.addEventListener(\"resize\", this.onResize);\n        if (this.printQuery) {\n            if (this.printQuery.addEventListener)\n                this.printQuery.addEventListener(\"change\", this.onPrint);\n            else\n                this.printQuery.addListener(this.onPrint);\n        }\n        else\n            win.addEventListener(\"beforeprint\", this.onPrint);\n        win.addEventListener(\"scroll\", this.onScroll);\n        win.document.addEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    removeWindowListeners(win) {\n        win.removeEventListener(\"scroll\", this.onScroll);\n        win.removeEventListener(\"resize\", this.onResize);\n        if (this.printQuery) {\n            if (this.printQuery.removeEventListener)\n                this.printQuery.removeEventListener(\"change\", this.onPrint);\n            else\n                this.printQuery.removeListener(this.onPrint);\n        }\n        else\n            win.removeEventListener(\"beforeprint\", this.onPrint);\n        win.document.removeEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    update(update) {\n        if (this.editContext) {\n            this.editContext.update(update);\n            if (update.startState.facet(editable) != update.state.facet(editable))\n                update.view.contentDOM.editContext = update.state.facet(editable) ? this.editContext.editContext : null;\n        }\n    }\n    destroy() {\n        var _a, _b, _c;\n        this.stop();\n        (_a = this.intersection) === null || _a === void 0 ? void 0 : _a.disconnect();\n        (_b = this.gapIntersection) === null || _b === void 0 ? void 0 : _b.disconnect();\n        (_c = this.resizeScroll) === null || _c === void 0 ? void 0 : _c.disconnect();\n        for (let dom of this.scrollTargets)\n            dom.removeEventListener(\"scroll\", this.onScroll);\n        this.removeWindowListeners(this.win);\n        clearTimeout(this.parentCheck);\n        clearTimeout(this.resizeTimeout);\n        this.win.cancelAnimationFrame(this.delayedFlush);\n        this.win.cancelAnimationFrame(this.flushingAndroidKey);\n        if (this.editContext) {\n            this.view.contentDOM.editContext = null;\n            this.editContext.destroy();\n        }\n    }\n}\nfunction findChild(cView, dom, dir) {\n    while (dom) {\n        let curView = ContentView.get(dom);\n        if (curView && curView.parent == cView)\n            return curView;\n        let parent = dom.parentNode;\n        dom = parent != cView.dom ? parent : dir > 0 ? dom.nextSibling : dom.previousSibling;\n    }\n    return null;\n}\nfunction buildSelectionRangeFromRange(view, range) {\n    let anchorNode = range.startContainer, anchorOffset = range.startOffset;\n    let focusNode = range.endContainer, focusOffset = range.endOffset;\n    let curAnchor = view.docView.domAtPos(view.state.selection.main.anchor);\n    // Since such a range doesn't distinguish between anchor and head,\n    // use a heuristic that flips it around if its end matches the\n    // current anchor.\n    if (isEquivalentPosition(curAnchor.node, curAnchor.offset, focusNode, focusOffset))\n        [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset];\n    return { anchorNode, anchorOffset, focusNode, focusOffset };\n}\n// Used to work around a Safari Selection/shadow DOM bug (#414)\nfunction safariSelectionRangeHack(view, selection) {\n    if (selection.getComposedRanges) {\n        let range = selection.getComposedRanges(view.root)[0];\n        if (range)\n            return buildSelectionRangeFromRange(view, range);\n    }\n    let found = null;\n    // Because Safari (at least in 2018-2021) doesn't provide regular\n    // access to the selection inside a shadowroot, we have to perform a\n    // ridiculous hack to get at it\u2014using `execCommand` to trigger a\n    // `beforeInput` event so that we can read the target range from the\n    // event.\n    function read(event) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        found = event.getTargetRanges()[0];\n    }\n    view.contentDOM.addEventListener(\"beforeinput\", read, true);\n    view.dom.ownerDocument.execCommand(\"indent\");\n    view.contentDOM.removeEventListener(\"beforeinput\", read, true);\n    return found ? buildSelectionRangeFromRange(view, found) : null;\n}\nclass EditContextManager {\n    constructor(view) {\n        // The document window for which the text in the context is\n        // maintained. For large documents, this may be smaller than the\n        // editor document. This window always includes the selection head.\n        this.from = 0;\n        this.to = 0;\n        // When applying a transaction, this is used to compare the change\n        // made to the context content to the change in the transaction in\n        // order to make the minimal changes to the context (since touching\n        // that sometimes breaks series of multiple edits made for a single\n        // user action on some Android keyboards)\n        this.pendingContextChange = null;\n        this.handlers = Object.create(null);\n        // Kludge to work around the fact that EditContext does not respond\n        // well to having its content updated during a composition (see #1472)\n        this.composing = null;\n        this.resetRange(view.state);\n        let context = this.editContext = new window.EditContext({\n            text: view.state.doc.sliceString(this.from, this.to),\n            selectionStart: this.toContextPos(Math.max(this.from, Math.min(this.to, view.state.selection.main.anchor))),\n            selectionEnd: this.toContextPos(view.state.selection.main.head)\n        });\n        this.handlers.textupdate = e => {\n            let main = view.state.selection.main, { anchor, head } = main;\n            let from = this.toEditorPos(e.updateRangeStart), to = this.toEditorPos(e.updateRangeEnd);\n            if (view.inputState.composing >= 0 && !this.composing)\n                this.composing = { contextBase: e.updateRangeStart, editorBase: from, drifted: false };\n            let change = { from, to, insert: Text.of(e.text.split(\"\\n\")) };\n            // If the window doesn't include the anchor, assume changes\n            // adjacent to a side go up to the anchor.\n            if (change.from == this.from && anchor < this.from)\n                change.from = anchor;\n            else if (change.to == this.to && anchor > this.to)\n                change.to = anchor;\n            // Edit contexts sometimes fire empty changes\n            if (change.from == change.to && !change.insert.length) {\n                let newSel = EditorSelection.single(this.toEditorPos(e.selectionStart), this.toEditorPos(e.selectionEnd));\n                if (!newSel.main.eq(main))\n                    view.dispatch({ selection: newSel, userEvent: \"select\" });\n                return;\n            }\n            if ((browser.mac || browser.android) && change.from == head - 1 &&\n                /^\\. ?$/.test(e.text) && view.contentDOM.getAttribute(\"autocorrect\") == \"off\")\n                change = { from, to, insert: Text.of([e.text.replace(\".\", \" \")]) };\n            this.pendingContextChange = change;\n            if (!view.state.readOnly) {\n                let newLen = this.to - this.from + (change.to - change.from + change.insert.length);\n                applyDOMChangeInner(view, change, EditorSelection.single(this.toEditorPos(e.selectionStart, newLen), this.toEditorPos(e.selectionEnd, newLen)));\n            }\n            // If the transaction didn't flush our change, revert it so\n            // that the context is in sync with the editor state again.\n            if (this.pendingContextChange) {\n                this.revertPending(view.state);\n                this.setSelection(view.state);\n            }\n        };\n        this.handlers.characterboundsupdate = e => {\n            let rects = [], prev = null;\n            for (let i = this.toEditorPos(e.rangeStart), end = this.toEditorPos(e.rangeEnd); i < end; i++) {\n                let rect = view.coordsForChar(i);\n                prev = (rect && new DOMRect(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top))\n                    || prev || new DOMRect;\n                rects.push(prev);\n            }\n            context.updateCharacterBounds(e.rangeStart, rects);\n        };\n        this.handlers.textformatupdate = e => {\n            let deco = [];\n            for (let format of e.getTextFormats()) {\n                let lineStyle = format.underlineStyle, thickness = format.underlineThickness;\n                if (lineStyle != \"None\" && thickness != \"None\") {\n                    let from = this.toEditorPos(format.rangeStart), to = this.toEditorPos(format.rangeEnd);\n                    if (from < to) {\n                        let style = `text-decoration: underline ${lineStyle == \"Dashed\" ? \"dashed \" : lineStyle == \"Squiggle\" ? \"wavy \" : \"\"}${thickness == \"Thin\" ? 1 : 2}px`;\n                        deco.push(Decoration.mark({ attributes: { style } }).range(from, to));\n                    }\n                }\n            }\n            view.dispatch({ effects: setEditContextFormatting.of(Decoration.set(deco)) });\n        };\n        this.handlers.compositionstart = () => {\n            if (view.inputState.composing < 0) {\n                view.inputState.composing = 0;\n                view.inputState.compositionFirstChange = true;\n            }\n        };\n        this.handlers.compositionend = () => {\n            view.inputState.composing = -1;\n            view.inputState.compositionFirstChange = null;\n            if (this.composing) {\n                let { drifted } = this.composing;\n                this.composing = null;\n                if (drifted)\n                    this.reset(view.state);\n            }\n        };\n        for (let event in this.handlers)\n            context.addEventListener(event, this.handlers[event]);\n        this.measureReq = { read: view => {\n                this.editContext.updateControlBounds(view.contentDOM.getBoundingClientRect());\n                let sel = getSelection(view.root);\n                if (sel && sel.rangeCount)\n                    this.editContext.updateSelectionBounds(sel.getRangeAt(0).getBoundingClientRect());\n            } };\n    }\n    applyEdits(update) {\n        let off = 0, abort = false, pending = this.pendingContextChange;\n        update.changes.iterChanges((fromA, toA, _fromB, _toB, insert) => {\n            if (abort)\n                return;\n            let dLen = insert.length - (toA - fromA);\n            if (pending && toA >= pending.to) {\n                if (pending.from == fromA && pending.to == toA && pending.insert.eq(insert)) {\n                    pending = this.pendingContextChange = null; // Match\n                    off += dLen;\n                    this.to += dLen;\n                    return;\n                }\n                else { // Mismatch, revert\n                    pending = null;\n                    this.revertPending(update.state);\n                }\n            }\n            fromA += off;\n            toA += off;\n            if (toA <= this.from) { // Before the window\n                this.from += dLen;\n                this.to += dLen;\n            }\n            else if (fromA < this.to) { // Overlaps with window\n                if (fromA < this.from || toA > this.to || (this.to - this.from) + insert.length > 30000 /* CxVp.MaxSize */) {\n                    abort = true;\n                    return;\n                }\n                this.editContext.updateText(this.toContextPos(fromA), this.toContextPos(toA), insert.toString());\n                this.to += dLen;\n            }\n            off += dLen;\n        });\n        if (pending && !abort)\n            this.revertPending(update.state);\n        return !abort;\n    }\n    update(update) {\n        let reverted = this.pendingContextChange, startSel = update.startState.selection.main;\n        if (this.composing &&\n            (this.composing.drifted ||\n                (!update.changes.touchesRange(startSel.from, startSel.to) &&\n                    update.transactions.some(tr => !tr.isUserEvent(\"input.type\") && tr.changes.touchesRange(this.from, this.to))))) {\n            this.composing.drifted = true;\n            this.composing.editorBase = update.changes.mapPos(this.composing.editorBase);\n        }\n        else if (!this.applyEdits(update) || !this.rangeIsValid(update.state)) {\n            this.pendingContextChange = null;\n            this.reset(update.state);\n        }\n        else if (update.docChanged || update.selectionSet || reverted) {\n            this.setSelection(update.state);\n        }\n        if (update.geometryChanged || update.docChanged || update.selectionSet)\n            update.view.requestMeasure(this.measureReq);\n    }\n    resetRange(state) {\n        let { head } = state.selection.main;\n        this.from = Math.max(0, head - 10000 /* CxVp.Margin */);\n        this.to = Math.min(state.doc.length, head + 10000 /* CxVp.Margin */);\n    }\n    reset(state) {\n        this.resetRange(state);\n        this.editContext.updateText(0, this.editContext.text.length, state.doc.sliceString(this.from, this.to));\n        this.setSelection(state);\n    }\n    revertPending(state) {\n        let pending = this.pendingContextChange;\n        this.pendingContextChange = null;\n        this.editContext.updateText(this.toContextPos(pending.from), this.toContextPos(pending.from + pending.insert.length), state.doc.sliceString(pending.from, pending.to));\n    }\n    setSelection(state) {\n        let { main } = state.selection;\n        let start = this.toContextPos(Math.max(this.from, Math.min(this.to, main.anchor)));\n        let end = this.toContextPos(main.head);\n        if (this.editContext.selectionStart != start || this.editContext.selectionEnd != end)\n            this.editContext.updateSelection(start, end);\n    }\n    rangeIsValid(state) {\n        let { head } = state.selection.main;\n        return !(this.from > 0 && head - this.from < 500 /* CxVp.MinMargin */ ||\n            this.to < state.doc.length && this.to - head < 500 /* CxVp.MinMargin */ ||\n            this.to - this.from > 10000 /* CxVp.Margin */ * 3);\n    }\n    toEditorPos(contextPos, clipLen = this.to - this.from) {\n        contextPos = Math.min(contextPos, clipLen);\n        let c = this.composing;\n        return c && c.drifted ? c.editorBase + (contextPos - c.contextBase) : contextPos + this.from;\n    }\n    toContextPos(editorPos) {\n        let c = this.composing;\n        return c && c.drifted ? c.contextBase + (editorPos - c.editorBase) : editorPos - this.from;\n    }\n    destroy() {\n        for (let event in this.handlers)\n            this.editContext.removeEventListener(event, this.handlers[event]);\n    }\n}\n\n// The editor's update state machine looks something like this:\n//\n//     Idle \u2192 Updating \u21C6 Idle (unchecked) \u2192 Measuring \u2192 Idle\n//                                         \u2191      \u2193\n//                                         Updating (measure)\n//\n// The difference between 'Idle' and 'Idle (unchecked)' lies in\n// whether a layout check has been scheduled. A regular update through\n// the `update` method updates the DOM in a write-only fashion, and\n// relies on a check (scheduled with `requestAnimationFrame`) to make\n// sure everything is where it should be and the viewport covers the\n// visible code. That check continues to measure and then optionally\n// update until it reaches a coherent state.\n/**\nAn editor view represents the editor's user interface. It holds\nthe editable DOM surface, and possibly other elements such as the\nline number gutter. It handles events and dispatches state\ntransactions for editing actions.\n*/\nclass EditorView {\n    /**\n    The current editor state.\n    */\n    get state() { return this.viewState.state; }\n    /**\n    To be able to display large documents without consuming too much\n    memory or overloading the browser, CodeMirror only draws the\n    code that is visible (plus a margin around it) to the DOM. This\n    property tells you the extent of the current drawn viewport, in\n    document positions.\n    */\n    get viewport() { return this.viewState.viewport; }\n    /**\n    When there are, for example, large collapsed ranges in the\n    viewport, its size can be a lot bigger than the actual visible\n    content. Thus, if you are doing something like styling the\n    content in the viewport, it is preferable to only do so for\n    these ranges, which are the subset of the viewport that is\n    actually drawn.\n    */\n    get visibleRanges() { return this.viewState.visibleRanges; }\n    /**\n    Returns false when the editor is entirely scrolled out of view\n    or otherwise hidden.\n    */\n    get inView() { return this.viewState.inView; }\n    /**\n    Indicates whether the user is currently composing text via\n    [IME](https://en.wikipedia.org/wiki/Input_method), and at least\n    one change has been made in the current composition.\n    */\n    get composing() { return this.inputState.composing > 0; }\n    /**\n    Indicates whether the user is currently in composing state. Note\n    that on some platforms, like Android, this will be the case a\n    lot, since just putting the cursor on a word starts a\n    composition there.\n    */\n    get compositionStarted() { return this.inputState.composing >= 0; }\n    /**\n    The document or shadow root that the view lives in.\n    */\n    get root() { return this._root; }\n    /**\n    @internal\n    */\n    get win() { return this.dom.ownerDocument.defaultView || window; }\n    /**\n    Construct a new view. You'll want to either provide a `parent`\n    option, or put `view.dom` into your document after creating a\n    view, so that the user can see the editor.\n    */\n    constructor(config = {}) {\n        var _a;\n        this.plugins = [];\n        this.pluginMap = new Map;\n        this.editorAttrs = {};\n        this.contentAttrs = {};\n        this.bidiCache = [];\n        this.destroyed = false;\n        /**\n        @internal\n        */\n        this.updateState = 2 /* UpdateState.Updating */;\n        /**\n        @internal\n        */\n        this.measureScheduled = -1;\n        /**\n        @internal\n        */\n        this.measureRequests = [];\n        this.contentDOM = document.createElement(\"div\");\n        this.scrollDOM = document.createElement(\"div\");\n        this.scrollDOM.tabIndex = -1;\n        this.scrollDOM.className = \"cm-scroller\";\n        this.scrollDOM.appendChild(this.contentDOM);\n        this.announceDOM = document.createElement(\"div\");\n        this.announceDOM.className = \"cm-announced\";\n        this.announceDOM.setAttribute(\"aria-live\", \"polite\");\n        this.dom = document.createElement(\"div\");\n        this.dom.appendChild(this.announceDOM);\n        this.dom.appendChild(this.scrollDOM);\n        if (config.parent)\n            config.parent.appendChild(this.dom);\n        let { dispatch } = config;\n        this.dispatchTransactions = config.dispatchTransactions ||\n            (dispatch && ((trs) => trs.forEach(tr => dispatch(tr, this)))) ||\n            ((trs) => this.update(trs));\n        this.dispatch = this.dispatch.bind(this);\n        this._root = (config.root || getRoot(config.parent) || document);\n        this.viewState = new ViewState(config.state || EditorState.create(config));\n        if (config.scrollTo && config.scrollTo.is(scrollIntoView))\n            this.viewState.scrollTarget = config.scrollTo.value.clip(this.viewState.state);\n        this.plugins = this.state.facet(viewPlugin).map(spec => new PluginInstance(spec));\n        for (let plugin of this.plugins)\n            plugin.update(this);\n        this.observer = new DOMObserver(this);\n        this.inputState = new InputState(this);\n        this.inputState.ensureHandlers(this.plugins);\n        this.docView = new DocView(this);\n        this.mountStyles();\n        this.updateAttrs();\n        this.updateState = 0 /* UpdateState.Idle */;\n        this.requestMeasure();\n        if ((_a = document.fonts) === null || _a === void 0 ? void 0 : _a.ready)\n            document.fonts.ready.then(() => this.requestMeasure());\n    }\n    dispatch(...input) {\n        let trs = input.length == 1 && input[0] instanceof Transaction ? input\n            : input.length == 1 && Array.isArray(input[0]) ? input[0]\n                : [this.state.update(...input)];\n        this.dispatchTransactions(trs, this);\n    }\n    /**\n    Update the view for the given array of transactions. This will\n    update the visible document and selection to match the state\n    produced by the transactions, and notify view plugins of the\n    change. You should usually call\n    [`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead, which uses this\n    as a primitive.\n    */\n    update(transactions) {\n        if (this.updateState != 0 /* UpdateState.Idle */)\n            throw new Error(\"Calls to EditorView.update are not allowed while an update is in progress\");\n        let redrawn = false, attrsChanged = false, update;\n        let state = this.state;\n        for (let tr of transactions) {\n            if (tr.startState != state)\n                throw new RangeError(\"Trying to update state with a transaction that doesn't start from the previous state.\");\n            state = tr.state;\n        }\n        if (this.destroyed) {\n            this.viewState.state = state;\n            return;\n        }\n        let focus = this.hasFocus, focusFlag = 0, dispatchFocus = null;\n        if (transactions.some(tr => tr.annotation(isFocusChange))) {\n            this.inputState.notifiedFocused = focus;\n            // If a focus-change transaction is being dispatched, set this update flag.\n            focusFlag = 1 /* UpdateFlag.Focus */;\n        }\n        else if (focus != this.inputState.notifiedFocused) {\n            this.inputState.notifiedFocused = focus;\n            // Schedule a separate focus transaction if necessary, otherwise\n            // add a flag to this update\n            dispatchFocus = focusChangeTransaction(state, focus);\n            if (!dispatchFocus)\n                focusFlag = 1 /* UpdateFlag.Focus */;\n        }\n        // If there was a pending DOM change, eagerly read it and try to\n        // apply it after the given transactions.\n        let pendingKey = this.observer.delayedAndroidKey, domChange = null;\n        if (pendingKey) {\n            this.observer.clearDelayedAndroidKey();\n            domChange = this.observer.readChange();\n            // Only try to apply DOM changes if the transactions didn't\n            // change the doc or selection.\n            if (domChange && !this.state.doc.eq(state.doc) || !this.state.selection.eq(state.selection))\n                domChange = null;\n        }\n        else {\n            this.observer.clear();\n        }\n        // When the phrases change, redraw the editor\n        if (state.facet(EditorState.phrases) != this.state.facet(EditorState.phrases))\n            return this.setState(state);\n        update = ViewUpdate.create(this, state, transactions);\n        update.flags |= focusFlag;\n        let scrollTarget = this.viewState.scrollTarget;\n        try {\n            this.updateState = 2 /* UpdateState.Updating */;\n            for (let tr of transactions) {\n                if (scrollTarget)\n                    scrollTarget = scrollTarget.map(tr.changes);\n                if (tr.scrollIntoView) {\n                    let { main } = tr.state.selection;\n                    scrollTarget = new ScrollTarget(main.empty ? main : EditorSelection.cursor(main.head, main.head > main.anchor ? -1 : 1));\n                }\n                for (let e of tr.effects)\n                    if (e.is(scrollIntoView))\n                        scrollTarget = e.value.clip(this.state);\n            }\n            this.viewState.update(update, scrollTarget);\n            this.bidiCache = CachedOrder.update(this.bidiCache, update.changes);\n            if (!update.empty) {\n                this.updatePlugins(update);\n                this.inputState.update(update);\n            }\n            redrawn = this.docView.update(update);\n            if (this.state.facet(styleModule) != this.styleModules)\n                this.mountStyles();\n            attrsChanged = this.updateAttrs();\n            this.showAnnouncements(transactions);\n            this.docView.updateSelection(redrawn, transactions.some(tr => tr.isUserEvent(\"select.pointer\")));\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n        }\n        if (update.startState.facet(theme) != update.state.facet(theme))\n            this.viewState.mustMeasureContent = true;\n        if (redrawn || attrsChanged || scrollTarget || this.viewState.mustEnforceCursorAssoc || this.viewState.mustMeasureContent)\n            this.requestMeasure();\n        if (redrawn)\n            this.docViewUpdate();\n        if (!update.empty)\n            for (let listener of this.state.facet(updateListener)) {\n                try {\n                    listener(update);\n                }\n                catch (e) {\n                    logException(this.state, e, \"update listener\");\n                }\n            }\n        if (dispatchFocus || domChange)\n            Promise.resolve().then(() => {\n                if (dispatchFocus && this.state == dispatchFocus.startState)\n                    this.dispatch(dispatchFocus);\n                if (domChange) {\n                    if (!applyDOMChange(this, domChange) && pendingKey.force)\n                        dispatchKey(this.contentDOM, pendingKey.key, pendingKey.keyCode);\n                }\n            });\n    }\n    /**\n    Reset the view to the given state. (This will cause the entire\n    document to be redrawn and all view plugins to be reinitialized,\n    so you should probably only use it when the new state isn't\n    derived from the old state. Otherwise, use\n    [`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead.)\n    */\n    setState(newState) {\n        if (this.updateState != 0 /* UpdateState.Idle */)\n            throw new Error(\"Calls to EditorView.setState are not allowed while an update is in progress\");\n        if (this.destroyed) {\n            this.viewState.state = newState;\n            return;\n        }\n        this.updateState = 2 /* UpdateState.Updating */;\n        let hadFocus = this.hasFocus;\n        try {\n            for (let plugin of this.plugins)\n                plugin.destroy(this);\n            this.viewState = new ViewState(newState);\n            this.plugins = newState.facet(viewPlugin).map(spec => new PluginInstance(spec));\n            this.pluginMap.clear();\n            for (let plugin of this.plugins)\n                plugin.update(this);\n            this.docView.destroy();\n            this.docView = new DocView(this);\n            this.inputState.ensureHandlers(this.plugins);\n            this.mountStyles();\n            this.updateAttrs();\n            this.bidiCache = [];\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n        }\n        if (hadFocus)\n            this.focus();\n        this.requestMeasure();\n    }\n    updatePlugins(update) {\n        let prevSpecs = update.startState.facet(viewPlugin), specs = update.state.facet(viewPlugin);\n        if (prevSpecs != specs) {\n            let newPlugins = [];\n            for (let spec of specs) {\n                let found = prevSpecs.indexOf(spec);\n                if (found < 0) {\n                    newPlugins.push(new PluginInstance(spec));\n                }\n                else {\n                    let plugin = this.plugins[found];\n                    plugin.mustUpdate = update;\n                    newPlugins.push(plugin);\n                }\n            }\n            for (let plugin of this.plugins)\n                if (plugin.mustUpdate != update)\n                    plugin.destroy(this);\n            this.plugins = newPlugins;\n            this.pluginMap.clear();\n        }\n        else {\n            for (let p of this.plugins)\n                p.mustUpdate = update;\n        }\n        for (let i = 0; i < this.plugins.length; i++)\n            this.plugins[i].update(this);\n        if (prevSpecs != specs)\n            this.inputState.ensureHandlers(this.plugins);\n    }\n    docViewUpdate() {\n        for (let plugin of this.plugins) {\n            let val = plugin.value;\n            if (val && val.docViewUpdate) {\n                try {\n                    val.docViewUpdate(this);\n                }\n                catch (e) {\n                    logException(this.state, e, \"doc view update listener\");\n                }\n            }\n        }\n    }\n    /**\n    @internal\n    */\n    measure(flush = true) {\n        if (this.destroyed)\n            return;\n        if (this.measureScheduled > -1)\n            this.win.cancelAnimationFrame(this.measureScheduled);\n        if (this.observer.delayedAndroidKey) {\n            this.measureScheduled = -1;\n            this.requestMeasure();\n            return;\n        }\n        this.measureScheduled = 0; // Prevent requestMeasure calls from scheduling another animation frame\n        if (flush)\n            this.observer.forceFlush();\n        let updated = null;\n        let sDOM = this.scrollDOM, scrollTop = sDOM.scrollTop * this.scaleY;\n        let { scrollAnchorPos, scrollAnchorHeight } = this.viewState;\n        if (Math.abs(scrollTop - this.viewState.scrollTop) > 1)\n            scrollAnchorHeight = -1;\n        this.viewState.scrollAnchorHeight = -1;\n        try {\n            for (let i = 0;; i++) {\n                if (scrollAnchorHeight < 0) {\n                    if (isScrolledToBottom(sDOM)) {\n                        scrollAnchorPos = -1;\n                        scrollAnchorHeight = this.viewState.heightMap.height;\n                    }\n                    else {\n                        let block = this.viewState.scrollAnchorAt(scrollTop);\n                        scrollAnchorPos = block.from;\n                        scrollAnchorHeight = block.top;\n                    }\n                }\n                this.updateState = 1 /* UpdateState.Measuring */;\n                let changed = this.viewState.measure(this);\n                if (!changed && !this.measureRequests.length && this.viewState.scrollTarget == null)\n                    break;\n                if (i > 5) {\n                    console.warn(this.measureRequests.length\n                        ? \"Measure loop restarted more than 5 times\"\n                        : \"Viewport failed to stabilize\");\n                    break;\n                }\n                let measuring = [];\n                // Only run measure requests in this cycle when the viewport didn't change\n                if (!(changed & 4 /* UpdateFlag.Viewport */))\n                    [this.measureRequests, measuring] = [measuring, this.measureRequests];\n                let measured = measuring.map(m => {\n                    try {\n                        return m.read(this);\n                    }\n                    catch (e) {\n                        logException(this.state, e);\n                        return BadMeasure;\n                    }\n                });\n                let update = ViewUpdate.create(this, this.state, []), redrawn = false;\n                update.flags |= changed;\n                if (!updated)\n                    updated = update;\n                else\n                    updated.flags |= changed;\n                this.updateState = 2 /* UpdateState.Updating */;\n                if (!update.empty) {\n                    this.updatePlugins(update);\n                    this.inputState.update(update);\n                    this.updateAttrs();\n                    redrawn = this.docView.update(update);\n                    if (redrawn)\n                        this.docViewUpdate();\n                }\n                for (let i = 0; i < measuring.length; i++)\n                    if (measured[i] != BadMeasure) {\n                        try {\n                            let m = measuring[i];\n                            if (m.write)\n                                m.write(measured[i], this);\n                        }\n                        catch (e) {\n                            logException(this.state, e);\n                        }\n                    }\n                if (redrawn)\n                    this.docView.updateSelection(true);\n                if (!update.viewportChanged && this.measureRequests.length == 0) {\n                    if (this.viewState.editorHeight) {\n                        if (this.viewState.scrollTarget) {\n                            this.docView.scrollIntoView(this.viewState.scrollTarget);\n                            this.viewState.scrollTarget = null;\n                            scrollAnchorHeight = -1;\n                            continue;\n                        }\n                        else {\n                            let newAnchorHeight = scrollAnchorPos < 0 ? this.viewState.heightMap.height :\n                                this.viewState.lineBlockAt(scrollAnchorPos).top;\n                            let diff = newAnchorHeight - scrollAnchorHeight;\n                            if (diff > 1 || diff < -1) {\n                                scrollTop = scrollTop + diff;\n                                sDOM.scrollTop = scrollTop / this.scaleY;\n                                scrollAnchorHeight = -1;\n                                continue;\n                            }\n                        }\n                    }\n                    break;\n                }\n            }\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n            this.measureScheduled = -1;\n        }\n        if (updated && !updated.empty)\n            for (let listener of this.state.facet(updateListener))\n                listener(updated);\n    }\n    /**\n    Get the CSS classes for the currently active editor themes.\n    */\n    get themeClasses() {\n        return baseThemeID + \" \" +\n            (this.state.facet(darkTheme) ? baseDarkID : baseLightID) + \" \" +\n            this.state.facet(theme);\n    }\n    updateAttrs() {\n        let editorAttrs = attrsFromFacet(this, editorAttributes, {\n            class: \"cm-editor\" + (this.hasFocus ? \" cm-focused \" : \" \") + this.themeClasses\n        });\n        let contentAttrs = {\n            spellcheck: \"false\",\n            autocorrect: \"off\",\n            autocapitalize: \"off\",\n            writingsuggestions: \"false\",\n            translate: \"no\",\n            contenteditable: !this.state.facet(editable) ? \"false\" : \"true\",\n            class: \"cm-content\",\n            style: `${browser.tabSize}: ${this.state.tabSize}`,\n            role: \"textbox\",\n            \"aria-multiline\": \"true\"\n        };\n        if (this.state.readOnly)\n            contentAttrs[\"aria-readonly\"] = \"true\";\n        attrsFromFacet(this, contentAttributes, contentAttrs);\n        let changed = this.observer.ignore(() => {\n            let changedContent = updateAttrs(this.contentDOM, this.contentAttrs, contentAttrs);\n            let changedEditor = updateAttrs(this.dom, this.editorAttrs, editorAttrs);\n            return changedContent || changedEditor;\n        });\n        this.editorAttrs = editorAttrs;\n        this.contentAttrs = contentAttrs;\n        return changed;\n    }\n    showAnnouncements(trs) {\n        let first = true;\n        for (let tr of trs)\n            for (let effect of tr.effects)\n                if (effect.is(EditorView.announce)) {\n                    if (first)\n                        this.announceDOM.textContent = \"\";\n                    first = false;\n                    let div = this.announceDOM.appendChild(document.createElement(\"div\"));\n                    div.textContent = effect.value;\n                }\n    }\n    mountStyles() {\n        this.styleModules = this.state.facet(styleModule);\n        let nonce = this.state.facet(EditorView.cspNonce);\n        StyleModule.mount(this.root, this.styleModules.concat(baseTheme$1).reverse(), nonce ? { nonce } : undefined);\n    }\n    readMeasured() {\n        if (this.updateState == 2 /* UpdateState.Updating */)\n            throw new Error(\"Reading the editor layout isn't allowed during an update\");\n        if (this.updateState == 0 /* UpdateState.Idle */ && this.measureScheduled > -1)\n            this.measure(false);\n    }\n    /**\n    Schedule a layout measurement, optionally providing callbacks to\n    do custom DOM measuring followed by a DOM write phase. Using\n    this is preferable reading DOM layout directly from, for\n    example, an event handler, because it'll make sure measuring and\n    drawing done by other components is synchronized, avoiding\n    unnecessary DOM layout computations.\n    */\n    requestMeasure(request) {\n        if (this.measureScheduled < 0)\n            this.measureScheduled = this.win.requestAnimationFrame(() => this.measure());\n        if (request) {\n            if (this.measureRequests.indexOf(request) > -1)\n                return;\n            if (request.key != null)\n                for (let i = 0; i < this.measureRequests.length; i++) {\n                    if (this.measureRequests[i].key === request.key) {\n                        this.measureRequests[i] = request;\n                        return;\n                    }\n                }\n            this.measureRequests.push(request);\n        }\n    }\n    /**\n    Get the value of a specific plugin, if present. Note that\n    plugins that crash can be dropped from a view, so even when you\n    know you registered a given plugin, it is recommended to check\n    the return value of this method.\n    */\n    plugin(plugin) {\n        let known = this.pluginMap.get(plugin);\n        if (known === undefined || known && known.spec != plugin)\n            this.pluginMap.set(plugin, known = this.plugins.find(p => p.spec == plugin) || null);\n        return known && known.update(this).value;\n    }\n    /**\n    The top position of the document, in screen coordinates. This\n    may be negative when the editor is scrolled down. Points\n    directly to the top of the first line, not above the padding.\n    */\n    get documentTop() {\n        return this.contentDOM.getBoundingClientRect().top + this.viewState.paddingTop;\n    }\n    /**\n    Reports the padding above and below the document.\n    */\n    get documentPadding() {\n        return { top: this.viewState.paddingTop, bottom: this.viewState.paddingBottom };\n    }\n    /**\n    If the editor is transformed with CSS, this provides the scale\n    along the X axis. Otherwise, it will just be 1. Note that\n    transforms other than translation and scaling are not supported.\n    */\n    get scaleX() { return this.viewState.scaleX; }\n    /**\n    Provide the CSS transformed scale along the Y axis.\n    */\n    get scaleY() { return this.viewState.scaleY; }\n    /**\n    Find the text line or block widget at the given vertical\n    position (which is interpreted as relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop)).\n    */\n    elementAtHeight(height) {\n        this.readMeasured();\n        return this.viewState.elementAtHeight(height);\n    }\n    /**\n    Find the line block (see\n    [`lineBlockAt`](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt) at the given\n    height, again interpreted relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop).\n    */\n    lineBlockAtHeight(height) {\n        this.readMeasured();\n        return this.viewState.lineBlockAtHeight(height);\n    }\n    /**\n    Get the extent and vertical position of all [line\n    blocks](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt) in the viewport. Positions\n    are relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop);\n    */\n    get viewportLineBlocks() {\n        return this.viewState.viewportLines;\n    }\n    /**\n    Find the line block around the given document position. A line\n    block is a range delimited on both sides by either a\n    non-[hidden](https://codemirror.net/6/docs/ref/#view.Decoration^replace) line break, or the\n    start/end of the document. It will usually just hold a line of\n    text, but may be broken into multiple textblocks by block\n    widgets.\n    */\n    lineBlockAt(pos) {\n        return this.viewState.lineBlockAt(pos);\n    }\n    /**\n    The editor's total content height.\n    */\n    get contentHeight() {\n        return this.viewState.contentHeight;\n    }\n    /**\n    Move a cursor position by [grapheme\n    cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak). `forward` determines whether\n    the motion is away from the line start, or towards it. In\n    bidirectional text, the line is traversed in visual order, using\n    the editor's [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n    When the start position was the last one on the line, the\n    returned position will be across the line break. If there is no\n    further line, the original position is returned.\n    \n    By default, this method moves over a single cluster. The\n    optional `by` argument can be used to move across more. It will\n    be called with the first cluster as argument, and should return\n    a predicate that determines, for each subsequent cluster,\n    whether it should also be moved over.\n    */\n    moveByChar(start, forward, by) {\n        return skipAtoms(this, start, moveByChar(this, start, forward, by));\n    }\n    /**\n    Move a cursor position across the next group of either\n    [letters](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) or non-letter\n    non-whitespace characters.\n    */\n    moveByGroup(start, forward) {\n        return skipAtoms(this, start, moveByChar(this, start, forward, initial => byGroup(this, start.head, initial)));\n    }\n    /**\n    Get the cursor position visually at the start or end of a line.\n    Note that this may differ from the _logical_ position at its\n    start or end (which is simply at `line.from`/`line.to`) if text\n    at the start or end goes against the line's base text direction.\n    */\n    visualLineSide(line, end) {\n        let order = this.bidiSpans(line), dir = this.textDirectionAt(line.from);\n        let span = order[end ? order.length - 1 : 0];\n        return EditorSelection.cursor(span.side(end, dir) + line.from, span.forward(!end, dir) ? 1 : -1);\n    }\n    /**\n    Move to the next line boundary in the given direction. If\n    `includeWrap` is true, line wrapping is on, and there is a\n    further wrap point on the current line, the wrap point will be\n    returned. Otherwise this function will return the start or end\n    of the line.\n    */\n    moveToLineBoundary(start, forward, includeWrap = true) {\n        return moveToLineBoundary(this, start, forward, includeWrap);\n    }\n    /**\n    Move a cursor position vertically. When `distance` isn't given,\n    it defaults to moving to the next line (including wrapped\n    lines). Otherwise, `distance` should provide a positive distance\n    in pixels.\n    \n    When `start` has a\n    [`goalColumn`](https://codemirror.net/6/docs/ref/#state.SelectionRange.goalColumn), the vertical\n    motion will use that as a target horizontal position. Otherwise,\n    the cursor's own horizontal position is used. The returned\n    cursor will have its goal column set to whichever column was\n    used.\n    */\n    moveVertically(start, forward, distance) {\n        return skipAtoms(this, start, moveVertically(this, start, forward, distance));\n    }\n    /**\n    Find the DOM parent node and offset (child offset if `node` is\n    an element, character offset when it is a text node) at the\n    given document position.\n    \n    Note that for positions that aren't currently in\n    `visibleRanges`, the resulting DOM position isn't necessarily\n    meaningful (it may just point before or after a placeholder\n    element).\n    */\n    domAtPos(pos) {\n        return this.docView.domAtPos(pos);\n    }\n    /**\n    Find the document position at the given DOM node. Can be useful\n    for associating positions with DOM events. Will raise an error\n    when `node` isn't part of the editor content.\n    */\n    posAtDOM(node, offset = 0) {\n        return this.docView.posFromDOM(node, offset);\n    }\n    posAtCoords(coords, precise = true) {\n        this.readMeasured();\n        return posAtCoords(this, coords, precise);\n    }\n    /**\n    Get the screen coordinates at the given document position.\n    `side` determines whether the coordinates are based on the\n    element before (-1) or after (1) the position (if no element is\n    available on the given side, the method will transparently use\n    another strategy to get reasonable coordinates).\n    */\n    coordsAtPos(pos, side = 1) {\n        this.readMeasured();\n        let rect = this.docView.coordsAt(pos, side);\n        if (!rect || rect.left == rect.right)\n            return rect;\n        let line = this.state.doc.lineAt(pos), order = this.bidiSpans(line);\n        let span = order[BidiSpan.find(order, pos - line.from, -1, side)];\n        return flattenRect(rect, (span.dir == Direction.LTR) == (side > 0));\n    }\n    /**\n    Return the rectangle around a given character. If `pos` does not\n    point in front of a character that is in the viewport and\n    rendered (i.e. not replaced, not a line break), this will return\n    null. For space characters that are a line wrap point, this will\n    return the position before the line break.\n    */\n    coordsForChar(pos) {\n        this.readMeasured();\n        return this.docView.coordsForChar(pos);\n    }\n    /**\n    The default width of a character in the editor. May not\n    accurately reflect the width of all characters (given variable\n    width fonts or styling of invididual ranges).\n    */\n    get defaultCharacterWidth() { return this.viewState.heightOracle.charWidth; }\n    /**\n    The default height of a line in the editor. May not be accurate\n    for all lines.\n    */\n    get defaultLineHeight() { return this.viewState.heightOracle.lineHeight; }\n    /**\n    The text direction\n    ([`direction`](https://developer.mozilla.org/en-US/docs/Web/CSS/direction)\n    CSS property) of the editor's content element.\n    */\n    get textDirection() { return this.viewState.defaultTextDirection; }\n    /**\n    Find the text direction of the block at the given position, as\n    assigned by CSS. If\n    [`perLineTextDirection`](https://codemirror.net/6/docs/ref/#view.EditorView^perLineTextDirection)\n    isn't enabled, or the given position is outside of the viewport,\n    this will always return the same as\n    [`textDirection`](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection). Note that\n    this may trigger a DOM layout.\n    */\n    textDirectionAt(pos) {\n        let perLine = this.state.facet(perLineTextDirection);\n        if (!perLine || pos < this.viewport.from || pos > this.viewport.to)\n            return this.textDirection;\n        this.readMeasured();\n        return this.docView.textDirectionAt(pos);\n    }\n    /**\n    Whether this editor [wraps lines](https://codemirror.net/6/docs/ref/#view.EditorView.lineWrapping)\n    (as determined by the\n    [`white-space`](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space)\n    CSS property of its content element).\n    */\n    get lineWrapping() { return this.viewState.heightOracle.lineWrapping; }\n    /**\n    Returns the bidirectional text structure of the given line\n    (which should be in the current document) as an array of span\n    objects. The order of these spans matches the [text\n    direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection)\u2014if that is\n    left-to-right, the leftmost spans come first, otherwise the\n    rightmost spans come first.\n    */\n    bidiSpans(line) {\n        if (line.length > MaxBidiLine)\n            return trivialOrder(line.length);\n        let dir = this.textDirectionAt(line.from), isolates;\n        for (let entry of this.bidiCache) {\n            if (entry.from == line.from && entry.dir == dir &&\n                (entry.fresh || isolatesEq(entry.isolates, isolates = getIsolatedRanges(this, line))))\n                return entry.order;\n        }\n        if (!isolates)\n            isolates = getIsolatedRanges(this, line);\n        let order = computeOrder(line.text, dir, isolates);\n        this.bidiCache.push(new CachedOrder(line.from, line.to, dir, isolates, true, order));\n        return order;\n    }\n    /**\n    Check whether the editor has focus.\n    */\n    get hasFocus() {\n        var _a;\n        // Safari return false for hasFocus when the context menu is open\n        // or closing, which leads us to ignore selection changes from the\n        // context menu because it looks like the editor isn't focused.\n        // This kludges around that.\n        return (this.dom.ownerDocument.hasFocus() || browser.safari && ((_a = this.inputState) === null || _a === void 0 ? void 0 : _a.lastContextMenu) > Date.now() - 3e4) &&\n            this.root.activeElement == this.contentDOM;\n    }\n    /**\n    Put focus on the editor.\n    */\n    focus() {\n        this.observer.ignore(() => {\n            focusPreventScroll(this.contentDOM);\n            this.docView.updateSelection();\n        });\n    }\n    /**\n    Update the [root](https://codemirror.net/6/docs/ref/##view.EditorViewConfig.root) in which the editor lives. This is only\n    necessary when moving the editor's existing DOM to a new window or shadow root.\n    */\n    setRoot(root) {\n        if (this._root != root) {\n            this._root = root;\n            this.observer.setWindow((root.nodeType == 9 ? root : root.ownerDocument).defaultView || window);\n            this.mountStyles();\n        }\n    }\n    /**\n    Clean up this editor view, removing its element from the\n    document, unregistering event handlers, and notifying\n    plugins. The view instance can no longer be used after\n    calling this.\n    */\n    destroy() {\n        if (this.root.activeElement == this.contentDOM)\n            this.contentDOM.blur();\n        for (let plugin of this.plugins)\n            plugin.destroy(this);\n        this.plugins = [];\n        this.inputState.destroy();\n        this.docView.destroy();\n        this.dom.remove();\n        this.observer.destroy();\n        if (this.measureScheduled > -1)\n            this.win.cancelAnimationFrame(this.measureScheduled);\n        this.destroyed = true;\n    }\n    /**\n    Returns an effect that can be\n    [added](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) to a transaction to\n    cause it to scroll the given position or range into view.\n    */\n    static scrollIntoView(pos, options = {}) {\n        return scrollIntoView.of(new ScrollTarget(typeof pos == \"number\" ? EditorSelection.cursor(pos) : pos, options.y, options.x, options.yMargin, options.xMargin));\n    }\n    /**\n    Return an effect that resets the editor to its current (at the\n    time this method was called) scroll position. Note that this\n    only affects the editor's own scrollable element, not parents.\n    See also\n    [`EditorViewConfig.scrollTo`](https://codemirror.net/6/docs/ref/#view.EditorViewConfig.scrollTo).\n    \n    The effect should be used with a document identical to the one\n    it was created for. Failing to do so is not an error, but may\n    not scroll to the expected position. You can\n    [map](https://codemirror.net/6/docs/ref/#state.StateEffect.map) the effect to account for changes.\n    */\n    scrollSnapshot() {\n        let { scrollTop, scrollLeft } = this.scrollDOM;\n        let ref = this.viewState.scrollAnchorAt(scrollTop);\n        return scrollIntoView.of(new ScrollTarget(EditorSelection.cursor(ref.from), \"start\", \"start\", ref.top - scrollTop, scrollLeft, true));\n    }\n    /**\n    Enable or disable tab-focus mode, which disables key bindings\n    for Tab and Shift-Tab, letting the browser's default\n    focus-changing behavior go through instead. This is useful to\n    prevent trapping keyboard users in your editor.\n    \n    Without argument, this toggles the mode. With a boolean, it\n    enables (true) or disables it (false). Given a number, it\n    temporarily enables the mode until that number of milliseconds\n    have passed or another non-Tab key is pressed.\n    */\n    setTabFocusMode(to) {\n        if (to == null)\n            this.inputState.tabFocusMode = this.inputState.tabFocusMode < 0 ? 0 : -1;\n        else if (typeof to == \"boolean\")\n            this.inputState.tabFocusMode = to ? 0 : -1;\n        else if (this.inputState.tabFocusMode != 0)\n            this.inputState.tabFocusMode = Date.now() + to;\n    }\n    /**\n    Returns an extension that can be used to add DOM event handlers.\n    The value should be an object mapping event names to handler\n    functions. For any given event, such functions are ordered by\n    extension precedence, and the first handler to return true will\n    be assumed to have handled that event, and no other handlers or\n    built-in behavior will be activated for it. These are registered\n    on the [content element](https://codemirror.net/6/docs/ref/#view.EditorView.contentDOM), except\n    for `scroll` handlers, which will be called any time the\n    editor's [scroll element](https://codemirror.net/6/docs/ref/#view.EditorView.scrollDOM) or one of\n    its parent nodes is scrolled.\n    */\n    static domEventHandlers(handlers) {\n        return ViewPlugin.define(() => ({}), { eventHandlers: handlers });\n    }\n    /**\n    Create an extension that registers DOM event observers. Contrary\n    to event [handlers](https://codemirror.net/6/docs/ref/#view.EditorView^domEventHandlers),\n    observers can't be prevented from running by a higher-precedence\n    handler returning true. They also don't prevent other handlers\n    and observers from running when they return true, and should not\n    call `preventDefault`.\n    */\n    static domEventObservers(observers) {\n        return ViewPlugin.define(() => ({}), { eventObservers: observers });\n    }\n    /**\n    Create a theme extension. The first argument can be a\n    [`style-mod`](https://github.com/marijnh/style-mod#documentation)\n    style spec providing the styles for the theme. These will be\n    prefixed with a generated class for the style.\n    \n    Because the selectors will be prefixed with a scope class, rule\n    that directly match the editor's [wrapper\n    element](https://codemirror.net/6/docs/ref/#view.EditorView.dom)\u2014to which the scope class will be\n    added\u2014need to be explicitly differentiated by adding an `&` to\n    the selector for that element\u2014for example\n    `&.cm-focused`.\n    \n    When `dark` is set to true, the theme will be marked as dark,\n    which will cause the `&dark` rules from [base\n    themes](https://codemirror.net/6/docs/ref/#view.EditorView^baseTheme) to be used (as opposed to\n    `&light` when a light theme is active).\n    */\n    static theme(spec, options) {\n        let prefix = StyleModule.newName();\n        let result = [theme.of(prefix), styleModule.of(buildTheme(`.${prefix}`, spec))];\n        if (options && options.dark)\n            result.push(darkTheme.of(true));\n        return result;\n    }\n    /**\n    Create an extension that adds styles to the base theme. Like\n    with [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme), use `&` to indicate the\n    place of the editor wrapper element when directly targeting\n    that. You can also use `&dark` or `&light` instead to only\n    target editors with a dark or light theme.\n    */\n    static baseTheme(spec) {\n        return Prec.lowest(styleModule.of(buildTheme(\".\" + baseThemeID, spec, lightDarkIDs)));\n    }\n    /**\n    Retrieve an editor view instance from the view's DOM\n    representation.\n    */\n    static findFromDOM(dom) {\n        var _a;\n        let content = dom.querySelector(\".cm-content\");\n        let cView = content && ContentView.get(content) || ContentView.get(dom);\n        return ((_a = cView === null || cView === void 0 ? void 0 : cView.rootView) === null || _a === void 0 ? void 0 : _a.view) || null;\n    }\n}\n/**\nFacet to add a [style\nmodule](https://github.com/marijnh/style-mod#documentation) to\nan editor view. The view will ensure that the module is\nmounted in its [document\nroot](https://codemirror.net/6/docs/ref/#view.EditorView.constructor^config.root).\n*/\nEditorView.styleModule = styleModule;\n/**\nAn input handler can override the way changes to the editable\nDOM content are handled. Handlers are passed the document\npositions between which the change was found, and the new\ncontent. When one returns true, no further input handlers are\ncalled and the default behavior is prevented.\n\nThe `insert` argument can be used to get the default transaction\nthat would be applied for this input. This can be useful when\ndispatching the custom behavior as a separate transaction.\n*/\nEditorView.inputHandler = inputHandler;\n/**\nFunctions provided in this facet will be used to transform text\npasted or dropped into the editor.\n*/\nEditorView.clipboardInputFilter = clipboardInputFilter;\n/**\nTransform text copied or dragged from the editor.\n*/\nEditorView.clipboardOutputFilter = clipboardOutputFilter;\n/**\nScroll handlers can override how things are scrolled into view.\nIf they return `true`, no further handling happens for the\nscrolling. If they return false, the default scroll behavior is\napplied. Scroll handlers should never initiate editor updates.\n*/\nEditorView.scrollHandler = scrollHandler;\n/**\nThis facet can be used to provide functions that create effects\nto be dispatched when the editor's focus state changes.\n*/\nEditorView.focusChangeEffect = focusChangeEffect;\n/**\nBy default, the editor assumes all its content has the same\n[text direction](https://codemirror.net/6/docs/ref/#view.Direction). Configure this with a `true`\nvalue to make it read the text direction of every (rendered)\nline separately.\n*/\nEditorView.perLineTextDirection = perLineTextDirection;\n/**\nAllows you to provide a function that should be called when the\nlibrary catches an exception from an extension (mostly from view\nplugins, but may be used by other extensions to route exceptions\nfrom user-code-provided callbacks). This is mostly useful for\ndebugging and logging. See [`logException`](https://codemirror.net/6/docs/ref/#view.logException).\n*/\nEditorView.exceptionSink = exceptionSink;\n/**\nA facet that can be used to register a function to be called\nevery time the view updates.\n*/\nEditorView.updateListener = updateListener;\n/**\nFacet that controls whether the editor content DOM is editable.\nWhen its highest-precedence value is `false`, the element will\nnot have its `contenteditable` attribute set. (Note that this\ndoesn't affect API calls that change the editor content, even\nwhen those are bound to keys or buttons. See the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) facet for that.)\n*/\nEditorView.editable = editable;\n/**\nAllows you to influence the way mouse selection happens. The\nfunctions in this facet will be called for a `mousedown` event\non the editor, and can return an object that overrides the way a\nselection is computed from that mouse click or drag.\n*/\nEditorView.mouseSelectionStyle = mouseSelectionStyle;\n/**\nFacet used to configure whether a given selection drag event\nshould move or copy the selection. The given predicate will be\ncalled with the `mousedown` event, and can return `true` when\nthe drag should move the content.\n*/\nEditorView.dragMovesSelection = dragMovesSelection$1;\n/**\nFacet used to configure whether a given selecting click adds a\nnew range to the existing selection or replaces it entirely. The\ndefault behavior is to check `event.metaKey` on macOS, and\n`event.ctrlKey` elsewhere.\n*/\nEditorView.clickAddsSelectionRange = clickAddsSelectionRange;\n/**\nA facet that determines which [decorations](https://codemirror.net/6/docs/ref/#view.Decoration)\nare shown in the view. Decorations can be provided in two\nways\u2014directly, or via a function that takes an editor view.\n\nOnly decoration sets provided directly are allowed to influence\nthe editor's vertical layout structure. The ones provided as\nfunctions are called _after_ the new viewport has been computed,\nand thus **must not** introduce block widgets or replacing\ndecorations that cover line breaks.\n\nIf you want decorated ranges to behave like atomic units for\ncursor motion and deletion purposes, also provide the range set\ncontaining the decorations to\n[`EditorView.atomicRanges`](https://codemirror.net/6/docs/ref/#view.EditorView^atomicRanges).\n*/\nEditorView.decorations = decorations;\n/**\nFacet that works much like\n[`decorations`](https://codemirror.net/6/docs/ref/#view.EditorView^decorations), but puts its\ninputs at the very bottom of the precedence stack, meaning mark\ndecorations provided here will only be split by other, partially\noverlapping \\`outerDecorations\\` ranges, and wrap around all\nregular decorations. Use this for mark elements that should, as\nmuch as possible, remain in one piece.\n*/\nEditorView.outerDecorations = outerDecorations;\n/**\nUsed to provide ranges that should be treated as atoms as far as\ncursor motion is concerned. This causes methods like\n[`moveByChar`](https://codemirror.net/6/docs/ref/#view.EditorView.moveByChar) and\n[`moveVertically`](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) (and the\ncommands built on top of them) to skip across such regions when\na selection endpoint would enter them. This does _not_ prevent\ndirect programmatic [selection\nupdates](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) from moving into such\nregions.\n*/\nEditorView.atomicRanges = atomicRanges;\n/**\nWhen range decorations add a `unicode-bidi: isolate` style, they\nshould also include a\n[`bidiIsolate`](https://codemirror.net/6/docs/ref/#view.MarkDecorationSpec.bidiIsolate) property\nin their decoration spec, and be exposed through this facet, so\nthat the editor can compute the proper text order. (Other values\nfor `unicode-bidi`, except of course `normal`, are not\nsupported.)\n*/\nEditorView.bidiIsolatedRanges = bidiIsolatedRanges;\n/**\nFacet that allows extensions to provide additional scroll\nmargins (space around the sides of the scrolling element that\nshould be considered invisible). This can be useful when the\nplugin introduces elements that cover part of that element (for\nexample a horizontally fixed gutter).\n*/\nEditorView.scrollMargins = scrollMargins;\n/**\nThis facet records whether a dark theme is active. The extension\nreturned by [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme) automatically\nincludes an instance of this when the `dark` option is set to\ntrue.\n*/\nEditorView.darkTheme = darkTheme;\n/**\nProvides a Content Security Policy nonce to use when creating\nthe style sheets for the editor. Holds the empty string when no\nnonce has been provided.\n*/\nEditorView.cspNonce = /*@__PURE__*/Facet.define({ combine: values => values.length ? values[0] : \"\" });\n/**\nFacet that provides additional DOM attributes for the editor's\neditable DOM element.\n*/\nEditorView.contentAttributes = contentAttributes;\n/**\nFacet that provides DOM attributes for the editor's outer\nelement.\n*/\nEditorView.editorAttributes = editorAttributes;\n/**\nAn extension that enables line wrapping in the editor (by\nsetting CSS `white-space` to `pre-wrap` in the content).\n*/\nEditorView.lineWrapping = /*@__PURE__*/EditorView.contentAttributes.of({ \"class\": \"cm-lineWrapping\" });\n/**\nState effect used to include screen reader announcements in a\ntransaction. These will be added to the DOM in a visually hidden\nelement with `aria-live=\"polite\"` set, and should be used to\ndescribe effects that are visually obvious but may not be\nnoticed by screen reader users (such as moving to the next\nsearch match).\n*/\nEditorView.announce = /*@__PURE__*/StateEffect.define();\n// Maximum line length for which we compute accurate bidi info\nconst MaxBidiLine = 4096;\nconst BadMeasure = {};\nclass CachedOrder {\n    constructor(from, to, dir, isolates, fresh, order) {\n        this.from = from;\n        this.to = to;\n        this.dir = dir;\n        this.isolates = isolates;\n        this.fresh = fresh;\n        this.order = order;\n    }\n    static update(cache, changes) {\n        if (changes.empty && !cache.some(c => c.fresh))\n            return cache;\n        let result = [], lastDir = cache.length ? cache[cache.length - 1].dir : Direction.LTR;\n        for (let i = Math.max(0, cache.length - 10); i < cache.length; i++) {\n            let entry = cache[i];\n            if (entry.dir == lastDir && !changes.touchesRange(entry.from, entry.to))\n                result.push(new CachedOrder(changes.mapPos(entry.from, 1), changes.mapPos(entry.to, -1), entry.dir, entry.isolates, false, entry.order));\n        }\n        return result;\n    }\n}\nfunction attrsFromFacet(view, facet, base) {\n    for (let sources = view.state.facet(facet), i = sources.length - 1; i >= 0; i--) {\n        let source = sources[i], value = typeof source == \"function\" ? source(view) : source;\n        if (value)\n            combineAttrs(value, base);\n    }\n    return base;\n}\n\nconst currentPlatform = browser.mac ? \"mac\" : browser.windows ? \"win\" : browser.linux ? \"linux\" : \"key\";\nfunction normalizeKeyName(name, platform) {\n    const parts = name.split(/-(?!$)/);\n    let result = parts[parts.length - 1];\n    if (result == \"Space\")\n        result = \" \";\n    let alt, ctrl, shift, meta;\n    for (let i = 0; i < parts.length - 1; ++i) {\n        const mod = parts[i];\n        if (/^(cmd|meta|m)$/i.test(mod))\n            meta = true;\n        else if (/^a(lt)?$/i.test(mod))\n            alt = true;\n        else if (/^(c|ctrl|control)$/i.test(mod))\n            ctrl = true;\n        else if (/^s(hift)?$/i.test(mod))\n            shift = true;\n        else if (/^mod$/i.test(mod)) {\n            if (platform == \"mac\")\n                meta = true;\n            else\n                ctrl = true;\n        }\n        else\n            throw new Error(\"Unrecognized modifier name: \" + mod);\n    }\n    if (alt)\n        result = \"Alt-\" + result;\n    if (ctrl)\n        result = \"Ctrl-\" + result;\n    if (meta)\n        result = \"Meta-\" + result;\n    if (shift)\n        result = \"Shift-\" + result;\n    return result;\n}\nfunction modifiers(name, event, shift) {\n    if (event.altKey)\n        name = \"Alt-\" + name;\n    if (event.ctrlKey)\n        name = \"Ctrl-\" + name;\n    if (event.metaKey)\n        name = \"Meta-\" + name;\n    if (shift !== false && event.shiftKey)\n        name = \"Shift-\" + name;\n    return name;\n}\nconst handleKeyEvents = /*@__PURE__*/Prec.default(/*@__PURE__*/EditorView.domEventHandlers({\n    keydown(event, view) {\n        return runHandlers(getKeymap(view.state), event, view, \"editor\");\n    }\n}));\n/**\nFacet used for registering keymaps.\n\nYou can add multiple keymaps to an editor. Their priorities\ndetermine their precedence (the ones specified early or with high\npriority get checked first). When a handler has returned `true`\nfor a given key, no further handlers are called.\n*/\nconst keymap = /*@__PURE__*/Facet.define({ enables: handleKeyEvents });\nconst Keymaps = /*@__PURE__*/new WeakMap();\n// This is hidden behind an indirection, rather than directly computed\n// by the facet, to keep internal types out of the facet's type.\nfunction getKeymap(state) {\n    let bindings = state.facet(keymap);\n    let map = Keymaps.get(bindings);\n    if (!map)\n        Keymaps.set(bindings, map = buildKeymap(bindings.reduce((a, b) => a.concat(b), [])));\n    return map;\n}\n/**\nRun the key handlers registered for a given scope. The event\nobject should be a `\"keydown\"` event. Returns true if any of the\nhandlers handled it.\n*/\nfunction runScopeHandlers(view, event, scope) {\n    return runHandlers(getKeymap(view.state), event, view, scope);\n}\nlet storedPrefix = null;\nconst PrefixTimeout = 4000;\nfunction buildKeymap(bindings, platform = currentPlatform) {\n    let bound = Object.create(null);\n    let isPrefix = Object.create(null);\n    let checkPrefix = (name, is) => {\n        let current = isPrefix[name];\n        if (current == null)\n            isPrefix[name] = is;\n        else if (current != is)\n            throw new Error(\"Key binding \" + name + \" is used both as a regular binding and as a multi-stroke prefix\");\n    };\n    let add = (scope, key, command, preventDefault, stopPropagation) => {\n        var _a, _b;\n        let scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n        let parts = key.split(/ (?!$)/).map(k => normalizeKeyName(k, platform));\n        for (let i = 1; i < parts.length; i++) {\n            let prefix = parts.slice(0, i).join(\" \");\n            checkPrefix(prefix, true);\n            if (!scopeObj[prefix])\n                scopeObj[prefix] = {\n                    preventDefault: true,\n                    stopPropagation: false,\n                    run: [(view) => {\n                            let ourObj = storedPrefix = { view, prefix, scope };\n                            setTimeout(() => { if (storedPrefix == ourObj)\n                                storedPrefix = null; }, PrefixTimeout);\n                            return true;\n                        }]\n                };\n        }\n        let full = parts.join(\" \");\n        checkPrefix(full, false);\n        let binding = scopeObj[full] || (scopeObj[full] = {\n            preventDefault: false,\n            stopPropagation: false,\n            run: ((_b = (_a = scopeObj._any) === null || _a === void 0 ? void 0 : _a.run) === null || _b === void 0 ? void 0 : _b.slice()) || []\n        });\n        if (command)\n            binding.run.push(command);\n        if (preventDefault)\n            binding.preventDefault = true;\n        if (stopPropagation)\n            binding.stopPropagation = true;\n    };\n    for (let b of bindings) {\n        let scopes = b.scope ? b.scope.split(\" \") : [\"editor\"];\n        if (b.any)\n            for (let scope of scopes) {\n                let scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n                if (!scopeObj._any)\n                    scopeObj._any = { preventDefault: false, stopPropagation: false, run: [] };\n                let { any } = b;\n                for (let key in scopeObj)\n                    scopeObj[key].run.push(view => any(view, currentKeyEvent));\n            }\n        let name = b[platform] || b.key;\n        if (!name)\n            continue;\n        for (let scope of scopes) {\n            add(scope, name, b.run, b.preventDefault, b.stopPropagation);\n            if (b.shift)\n                add(scope, \"Shift-\" + name, b.shift, b.preventDefault, b.stopPropagation);\n        }\n    }\n    return bound;\n}\nlet currentKeyEvent = null;\nfunction runHandlers(map, event, view, scope) {\n    currentKeyEvent = event;\n    let name = keyName(event);\n    let charCode = codePointAt(name, 0), isChar = codePointSize(charCode) == name.length && name != \" \";\n    let prefix = \"\", handled = false, prevented = false, stopPropagation = false;\n    if (storedPrefix && storedPrefix.view == view && storedPrefix.scope == scope) {\n        prefix = storedPrefix.prefix + \" \";\n        if (modifierCodes.indexOf(event.keyCode) < 0) {\n            prevented = true;\n            storedPrefix = null;\n        }\n    }\n    let ran = new Set;\n    let runFor = (binding) => {\n        if (binding) {\n            for (let cmd of binding.run)\n                if (!ran.has(cmd)) {\n                    ran.add(cmd);\n                    if (cmd(view)) {\n                        if (binding.stopPropagation)\n                            stopPropagation = true;\n                        return true;\n                    }\n                }\n            if (binding.preventDefault) {\n                if (binding.stopPropagation)\n                    stopPropagation = true;\n                prevented = true;\n            }\n        }\n        return false;\n    };\n    let scopeObj = map[scope], baseName, shiftName;\n    if (scopeObj) {\n        if (runFor(scopeObj[prefix + modifiers(name, event, !isChar)])) {\n            handled = true;\n        }\n        else if (isChar && (event.altKey || event.metaKey || event.ctrlKey) &&\n            // Ctrl-Alt may be used for AltGr on Windows\n            !(browser.windows && event.ctrlKey && event.altKey) &&\n            (baseName = base[event.keyCode]) && baseName != name) {\n            if (runFor(scopeObj[prefix + modifiers(baseName, event, true)])) {\n                handled = true;\n            }\n            else if (event.shiftKey && (shiftName = shift[event.keyCode]) != name && shiftName != baseName &&\n                runFor(scopeObj[prefix + modifiers(shiftName, event, false)])) {\n                handled = true;\n            }\n        }\n        else if (isChar && event.shiftKey &&\n            runFor(scopeObj[prefix + modifiers(name, event, true)])) {\n            handled = true;\n        }\n        if (!handled && runFor(scopeObj._any))\n            handled = true;\n    }\n    if (prevented)\n        handled = true;\n    if (handled && stopPropagation)\n        event.stopPropagation();\n    currentKeyEvent = null;\n    return handled;\n}\n\n/**\nImplementation of [`LayerMarker`](https://codemirror.net/6/docs/ref/#view.LayerMarker) that creates\na rectangle at a given set of coordinates.\n*/\nclass RectangleMarker {\n    /**\n    Create a marker with the given class and dimensions. If `width`\n    is null, the DOM element will get no width style.\n    */\n    constructor(className, \n    /**\n    The left position of the marker (in pixels, document-relative).\n    */\n    left, \n    /**\n    The top position of the marker.\n    */\n    top, \n    /**\n    The width of the marker, or null if it shouldn't get a width assigned.\n    */\n    width, \n    /**\n    The height of the marker.\n    */\n    height) {\n        this.className = className;\n        this.left = left;\n        this.top = top;\n        this.width = width;\n        this.height = height;\n    }\n    draw() {\n        let elt = document.createElement(\"div\");\n        elt.className = this.className;\n        this.adjust(elt);\n        return elt;\n    }\n    update(elt, prev) {\n        if (prev.className != this.className)\n            return false;\n        this.adjust(elt);\n        return true;\n    }\n    adjust(elt) {\n        elt.style.left = this.left + \"px\";\n        elt.style.top = this.top + \"px\";\n        if (this.width != null)\n            elt.style.width = this.width + \"px\";\n        elt.style.height = this.height + \"px\";\n    }\n    eq(p) {\n        return this.left == p.left && this.top == p.top && this.width == p.width && this.height == p.height &&\n            this.className == p.className;\n    }\n    /**\n    Create a set of rectangles for the given selection range,\n    assigning them theclass`className`. Will create a single\n    rectangle for empty ranges, and a set of selection-style\n    rectangles covering the range's content (in a bidi-aware\n    way) for non-empty ones.\n    */\n    static forRange(view, className, range) {\n        if (range.empty) {\n            let pos = view.coordsAtPos(range.head, range.assoc || 1);\n            if (!pos)\n                return [];\n            let base = getBase(view);\n            return [new RectangleMarker(className, pos.left - base.left, pos.top - base.top, null, pos.bottom - pos.top)];\n        }\n        else {\n            return rectanglesForRange(view, className, range);\n        }\n    }\n}\nfunction getBase(view) {\n    let rect = view.scrollDOM.getBoundingClientRect();\n    let left = view.textDirection == Direction.LTR ? rect.left : rect.right - view.scrollDOM.clientWidth * view.scaleX;\n    return { left: left - view.scrollDOM.scrollLeft * view.scaleX, top: rect.top - view.scrollDOM.scrollTop * view.scaleY };\n}\nfunction wrappedLine(view, pos, side, inside) {\n    let coords = view.coordsAtPos(pos, side * 2);\n    if (!coords)\n        return inside;\n    let editorRect = view.dom.getBoundingClientRect();\n    let y = (coords.top + coords.bottom) / 2;\n    let left = view.posAtCoords({ x: editorRect.left + 1, y });\n    let right = view.posAtCoords({ x: editorRect.right - 1, y });\n    if (left == null || right == null)\n        return inside;\n    return { from: Math.max(inside.from, Math.min(left, right)), to: Math.min(inside.to, Math.max(left, right)) };\n}\nfunction rectanglesForRange(view, className, range) {\n    if (range.to <= view.viewport.from || range.from >= view.viewport.to)\n        return [];\n    let from = Math.max(range.from, view.viewport.from), to = Math.min(range.to, view.viewport.to);\n    let ltr = view.textDirection == Direction.LTR;\n    let content = view.contentDOM, contentRect = content.getBoundingClientRect(), base = getBase(view);\n    let lineElt = content.querySelector(\".cm-line\"), lineStyle = lineElt && window.getComputedStyle(lineElt);\n    let leftSide = contentRect.left +\n        (lineStyle ? parseInt(lineStyle.paddingLeft) + Math.min(0, parseInt(lineStyle.textIndent)) : 0);\n    let rightSide = contentRect.right - (lineStyle ? parseInt(lineStyle.paddingRight) : 0);\n    let startBlock = blockAt(view, from), endBlock = blockAt(view, to);\n    let visualStart = startBlock.type == BlockType.Text ? startBlock : null;\n    let visualEnd = endBlock.type == BlockType.Text ? endBlock : null;\n    if (visualStart && (view.lineWrapping || startBlock.widgetLineBreaks))\n        visualStart = wrappedLine(view, from, 1, visualStart);\n    if (visualEnd && (view.lineWrapping || endBlock.widgetLineBreaks))\n        visualEnd = wrappedLine(view, to, -1, visualEnd);\n    if (visualStart && visualEnd && visualStart.from == visualEnd.from && visualStart.to == visualEnd.to) {\n        return pieces(drawForLine(range.from, range.to, visualStart));\n    }\n    else {\n        let top = visualStart ? drawForLine(range.from, null, visualStart) : drawForWidget(startBlock, false);\n        let bottom = visualEnd ? drawForLine(null, range.to, visualEnd) : drawForWidget(endBlock, true);\n        let between = [];\n        if ((visualStart || startBlock).to < (visualEnd || endBlock).from - (visualStart && visualEnd ? 1 : 0) ||\n            startBlock.widgetLineBreaks > 1 && top.bottom + view.defaultLineHeight / 2 < bottom.top)\n            between.push(piece(leftSide, top.bottom, rightSide, bottom.top));\n        else if (top.bottom < bottom.top && view.elementAtHeight((top.bottom + bottom.top) / 2).type == BlockType.Text)\n            top.bottom = bottom.top = (top.bottom + bottom.top) / 2;\n        return pieces(top).concat(between).concat(pieces(bottom));\n    }\n    function piece(left, top, right, bottom) {\n        return new RectangleMarker(className, left - base.left, top - base.top, right - left, bottom - top);\n    }\n    function pieces({ top, bottom, horizontal }) {\n        let pieces = [];\n        for (let i = 0; i < horizontal.length; i += 2)\n            pieces.push(piece(horizontal[i], top, horizontal[i + 1], bottom));\n        return pieces;\n    }\n    // Gets passed from/to in line-local positions\n    function drawForLine(from, to, line) {\n        let top = 1e9, bottom = -1e9, horizontal = [];\n        function addSpan(from, fromOpen, to, toOpen, dir) {\n            // Passing 2/-2 is a kludge to force the view to return\n            // coordinates on the proper side of block widgets, since\n            // normalizing the side there, though appropriate for most\n            // coordsAtPos queries, would break selection drawing.\n            let fromCoords = view.coordsAtPos(from, (from == line.to ? -2 : 2));\n            let toCoords = view.coordsAtPos(to, (to == line.from ? 2 : -2));\n            if (!fromCoords || !toCoords)\n                return;\n            top = Math.min(fromCoords.top, toCoords.top, top);\n            bottom = Math.max(fromCoords.bottom, toCoords.bottom, bottom);\n            if (dir == Direction.LTR)\n                horizontal.push(ltr && fromOpen ? leftSide : fromCoords.left, ltr && toOpen ? rightSide : toCoords.right);\n            else\n                horizontal.push(!ltr && toOpen ? leftSide : toCoords.left, !ltr && fromOpen ? rightSide : fromCoords.right);\n        }\n        let start = from !== null && from !== void 0 ? from : line.from, end = to !== null && to !== void 0 ? to : line.to;\n        // Split the range by visible range and document line\n        for (let r of view.visibleRanges)\n            if (r.to > start && r.from < end) {\n                for (let pos = Math.max(r.from, start), endPos = Math.min(r.to, end);;) {\n                    let docLine = view.state.doc.lineAt(pos);\n                    for (let span of view.bidiSpans(docLine)) {\n                        let spanFrom = span.from + docLine.from, spanTo = span.to + docLine.from;\n                        if (spanFrom >= endPos)\n                            break;\n                        if (spanTo > pos)\n                            addSpan(Math.max(spanFrom, pos), from == null && spanFrom <= start, Math.min(spanTo, endPos), to == null && spanTo >= end, span.dir);\n                    }\n                    pos = docLine.to + 1;\n                    if (pos >= endPos)\n                        break;\n                }\n            }\n        if (horizontal.length == 0)\n            addSpan(start, from == null, end, to == null, view.textDirection);\n        return { top, bottom, horizontal };\n    }\n    function drawForWidget(block, top) {\n        let y = contentRect.top + (top ? block.top : block.bottom);\n        return { top: y, bottom: y, horizontal: [] };\n    }\n}\nfunction sameMarker(a, b) {\n    return a.constructor == b.constructor && a.eq(b);\n}\nclass LayerView {\n    constructor(view, layer) {\n        this.view = view;\n        this.layer = layer;\n        this.drawn = [];\n        this.scaleX = 1;\n        this.scaleY = 1;\n        this.measureReq = { read: this.measure.bind(this), write: this.draw.bind(this) };\n        this.dom = view.scrollDOM.appendChild(document.createElement(\"div\"));\n        this.dom.classList.add(\"cm-layer\");\n        if (layer.above)\n            this.dom.classList.add(\"cm-layer-above\");\n        if (layer.class)\n            this.dom.classList.add(layer.class);\n        this.scale();\n        this.dom.setAttribute(\"aria-hidden\", \"true\");\n        this.setOrder(view.state);\n        view.requestMeasure(this.measureReq);\n        if (layer.mount)\n            layer.mount(this.dom, view);\n    }\n    update(update) {\n        if (update.startState.facet(layerOrder) != update.state.facet(layerOrder))\n            this.setOrder(update.state);\n        if (this.layer.update(update, this.dom) || update.geometryChanged) {\n            this.scale();\n            update.view.requestMeasure(this.measureReq);\n        }\n    }\n    docViewUpdate(view) {\n        if (this.layer.updateOnDocViewUpdate !== false)\n            view.requestMeasure(this.measureReq);\n    }\n    setOrder(state) {\n        let pos = 0, order = state.facet(layerOrder);\n        while (pos < order.length && order[pos] != this.layer)\n            pos++;\n        this.dom.style.zIndex = String((this.layer.above ? 150 : -1) - pos);\n    }\n    measure() {\n        return this.layer.markers(this.view);\n    }\n    scale() {\n        let { scaleX, scaleY } = this.view;\n        if (scaleX != this.scaleX || scaleY != this.scaleY) {\n            this.scaleX = scaleX;\n            this.scaleY = scaleY;\n            this.dom.style.transform = `scale(${1 / scaleX}, ${1 / scaleY})`;\n        }\n    }\n    draw(markers) {\n        if (markers.length != this.drawn.length || markers.some((p, i) => !sameMarker(p, this.drawn[i]))) {\n            let old = this.dom.firstChild, oldI = 0;\n            for (let marker of markers) {\n                if (marker.update && old && marker.constructor && this.drawn[oldI].constructor &&\n                    marker.update(old, this.drawn[oldI])) {\n                    old = old.nextSibling;\n                    oldI++;\n                }\n                else {\n                    this.dom.insertBefore(marker.draw(), old);\n                }\n            }\n            while (old) {\n                let next = old.nextSibling;\n                old.remove();\n                old = next;\n            }\n            this.drawn = markers;\n        }\n    }\n    destroy() {\n        if (this.layer.destroy)\n            this.layer.destroy(this.dom, this.view);\n        this.dom.remove();\n    }\n}\nconst layerOrder = /*@__PURE__*/Facet.define();\n/**\nDefine a layer.\n*/\nfunction layer(config) {\n    return [\n        ViewPlugin.define(v => new LayerView(v, config)),\n        layerOrder.of(config)\n    ];\n}\n\nconst selectionConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            cursorBlinkRate: 1200,\n            drawRangeCursor: true\n        }, {\n            cursorBlinkRate: (a, b) => Math.min(a, b),\n            drawRangeCursor: (a, b) => a || b\n        });\n    }\n});\n/**\nReturns an extension that hides the browser's native selection and\ncursor, replacing the selection with a background behind the text\n(with the `cm-selectionBackground` class), and the\ncursors with elements overlaid over the code (using\n`cm-cursor-primary` and `cm-cursor-secondary`).\n\nThis allows the editor to display secondary selection ranges, and\ntends to produce a type of selection more in line with that users\nexpect in a text editor (the native selection styling will often\nleave gaps between lines and won't fill the horizontal space after\na line when the selection continues past it).\n\nIt does have a performance cost, in that it requires an extra DOM\nlayout cycle for many updates (the selection is drawn based on DOM\nlayout information that's only available after laying out the\ncontent).\n*/\nfunction drawSelection(config = {}) {\n    return [\n        selectionConfig.of(config),\n        cursorLayer,\n        selectionLayer,\n        hideNativeSelection,\n        nativeSelectionHidden.of(true)\n    ];\n}\n/**\nRetrieve the [`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) configuration\nfor this state. (Note that this will return a set of defaults even\nif `drawSelection` isn't enabled.)\n*/\nfunction getDrawSelectionConfig(state) {\n    return state.facet(selectionConfig);\n}\nfunction configChanged(update) {\n    return update.startState.facet(selectionConfig) != update.state.facet(selectionConfig);\n}\nconst cursorLayer = /*@__PURE__*/layer({\n    above: true,\n    markers(view) {\n        let { state } = view, conf = state.facet(selectionConfig);\n        let cursors = [];\n        for (let r of state.selection.ranges) {\n            let prim = r == state.selection.main;\n            if (r.empty || conf.drawRangeCursor) {\n                let className = prim ? \"cm-cursor cm-cursor-primary\" : \"cm-cursor cm-cursor-secondary\";\n                let cursor = r.empty ? r : EditorSelection.cursor(r.head, r.head > r.anchor ? -1 : 1);\n                for (let piece of RectangleMarker.forRange(view, className, cursor))\n                    cursors.push(piece);\n            }\n        }\n        return cursors;\n    },\n    update(update, dom) {\n        if (update.transactions.some(tr => tr.selection))\n            dom.style.animationName = dom.style.animationName == \"cm-blink\" ? \"cm-blink2\" : \"cm-blink\";\n        let confChange = configChanged(update);\n        if (confChange)\n            setBlinkRate(update.state, dom);\n        return update.docChanged || update.selectionSet || confChange;\n    },\n    mount(dom, view) {\n        setBlinkRate(view.state, dom);\n    },\n    class: \"cm-cursorLayer\"\n});\nfunction setBlinkRate(state, dom) {\n    dom.style.animationDuration = state.facet(selectionConfig).cursorBlinkRate + \"ms\";\n}\nconst selectionLayer = /*@__PURE__*/layer({\n    above: false,\n    markers(view) {\n        return view.state.selection.ranges.map(r => r.empty ? [] : RectangleMarker.forRange(view, \"cm-selectionBackground\", r))\n            .reduce((a, b) => a.concat(b));\n    },\n    update(update, dom) {\n        return update.docChanged || update.selectionSet || update.viewportChanged || configChanged(update);\n    },\n    class: \"cm-selectionLayer\"\n});\nconst hideNativeSelection = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.theme({\n    \".cm-line\": {\n        \"& ::selection, &::selection\": { backgroundColor: \"transparent !important\" },\n        caretColor: \"transparent !important\"\n    },\n    \".cm-content\": {\n        caretColor: \"transparent !important\",\n        \"& :focus\": {\n            caretColor: \"initial !important\",\n            \"&::selection, & ::selection\": {\n                backgroundColor: \"Highlight !important\"\n            }\n        }\n    }\n}));\n\nconst setDropCursorPos = /*@__PURE__*/StateEffect.define({\n    map(pos, mapping) { return pos == null ? null : mapping.mapPos(pos); }\n});\nconst dropCursorPos = /*@__PURE__*/StateField.define({\n    create() { return null; },\n    update(pos, tr) {\n        if (pos != null)\n            pos = tr.changes.mapPos(pos);\n        return tr.effects.reduce((pos, e) => e.is(setDropCursorPos) ? e.value : pos, pos);\n    }\n});\nconst drawDropCursor = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.cursor = null;\n        this.measureReq = { read: this.readPos.bind(this), write: this.drawCursor.bind(this) };\n    }\n    update(update) {\n        var _a;\n        let cursorPos = update.state.field(dropCursorPos);\n        if (cursorPos == null) {\n            if (this.cursor != null) {\n                (_a = this.cursor) === null || _a === void 0 ? void 0 : _a.remove();\n                this.cursor = null;\n            }\n        }\n        else {\n            if (!this.cursor) {\n                this.cursor = this.view.scrollDOM.appendChild(document.createElement(\"div\"));\n                this.cursor.className = \"cm-dropCursor\";\n            }\n            if (update.startState.field(dropCursorPos) != cursorPos || update.docChanged || update.geometryChanged)\n                this.view.requestMeasure(this.measureReq);\n        }\n    }\n    readPos() {\n        let { view } = this;\n        let pos = view.state.field(dropCursorPos);\n        let rect = pos != null && view.coordsAtPos(pos);\n        if (!rect)\n            return null;\n        let outer = view.scrollDOM.getBoundingClientRect();\n        return {\n            left: rect.left - outer.left + view.scrollDOM.scrollLeft * view.scaleX,\n            top: rect.top - outer.top + view.scrollDOM.scrollTop * view.scaleY,\n            height: rect.bottom - rect.top\n        };\n    }\n    drawCursor(pos) {\n        if (this.cursor) {\n            let { scaleX, scaleY } = this.view;\n            if (pos) {\n                this.cursor.style.left = pos.left / scaleX + \"px\";\n                this.cursor.style.top = pos.top / scaleY + \"px\";\n                this.cursor.style.height = pos.height / scaleY + \"px\";\n            }\n            else {\n                this.cursor.style.left = \"-100000px\";\n            }\n        }\n    }\n    destroy() {\n        if (this.cursor)\n            this.cursor.remove();\n    }\n    setDropPos(pos) {\n        if (this.view.state.field(dropCursorPos) != pos)\n            this.view.dispatch({ effects: setDropCursorPos.of(pos) });\n    }\n}, {\n    eventObservers: {\n        dragover(event) {\n            this.setDropPos(this.view.posAtCoords({ x: event.clientX, y: event.clientY }));\n        },\n        dragleave(event) {\n            if (event.target == this.view.contentDOM || !this.view.contentDOM.contains(event.relatedTarget))\n                this.setDropPos(null);\n        },\n        dragend() {\n            this.setDropPos(null);\n        },\n        drop() {\n            this.setDropPos(null);\n        }\n    }\n});\n/**\nDraws a cursor at the current drop position when something is\ndragged over the editor.\n*/\nfunction dropCursor() {\n    return [dropCursorPos, drawDropCursor];\n}\n\nfunction iterMatches(doc, re, from, to, f) {\n    re.lastIndex = 0;\n    for (let cursor = doc.iterRange(from, to), pos = from, m; !cursor.next().done; pos += cursor.value.length) {\n        if (!cursor.lineBreak)\n            while (m = re.exec(cursor.value))\n                f(pos + m.index, m);\n    }\n}\nfunction matchRanges(view, maxLength) {\n    let visible = view.visibleRanges;\n    if (visible.length == 1 && visible[0].from == view.viewport.from &&\n        visible[0].to == view.viewport.to)\n        return visible;\n    let result = [];\n    for (let { from, to } of visible) {\n        from = Math.max(view.state.doc.lineAt(from).from, from - maxLength);\n        to = Math.min(view.state.doc.lineAt(to).to, to + maxLength);\n        if (result.length && result[result.length - 1].to >= from)\n            result[result.length - 1].to = to;\n        else\n            result.push({ from, to });\n    }\n    return result;\n}\n/**\nHelper class used to make it easier to maintain decorations on\nvisible code that matches a given regular expression. To be used\nin a [view plugin](https://codemirror.net/6/docs/ref/#view.ViewPlugin). Instances of this object\nrepresent a matching configuration.\n*/\nclass MatchDecorator {\n    /**\n    Create a decorator.\n    */\n    constructor(config) {\n        const { regexp, decoration, decorate, boundary, maxLength = 1000 } = config;\n        if (!regexp.global)\n            throw new RangeError(\"The regular expression given to MatchDecorator should have its 'g' flag set\");\n        this.regexp = regexp;\n        if (decorate) {\n            this.addMatch = (match, view, from, add) => decorate(add, from, from + match[0].length, match, view);\n        }\n        else if (typeof decoration == \"function\") {\n            this.addMatch = (match, view, from, add) => {\n                let deco = decoration(match, view, from);\n                if (deco)\n                    add(from, from + match[0].length, deco);\n            };\n        }\n        else if (decoration) {\n            this.addMatch = (match, _view, from, add) => add(from, from + match[0].length, decoration);\n        }\n        else {\n            throw new RangeError(\"Either 'decorate' or 'decoration' should be provided to MatchDecorator\");\n        }\n        this.boundary = boundary;\n        this.maxLength = maxLength;\n    }\n    /**\n    Compute the full set of decorations for matches in the given\n    view's viewport. You'll want to call this when initializing your\n    plugin.\n    */\n    createDeco(view) {\n        let build = new RangeSetBuilder(), add = build.add.bind(build);\n        for (let { from, to } of matchRanges(view, this.maxLength))\n            iterMatches(view.state.doc, this.regexp, from, to, (from, m) => this.addMatch(m, view, from, add));\n        return build.finish();\n    }\n    /**\n    Update a set of decorations for a view update. `deco` _must_ be\n    the set of decorations produced by _this_ `MatchDecorator` for\n    the view state before the update.\n    */\n    updateDeco(update, deco) {\n        let changeFrom = 1e9, changeTo = -1;\n        if (update.docChanged)\n            update.changes.iterChanges((_f, _t, from, to) => {\n                if (to >= update.view.viewport.from && from <= update.view.viewport.to) {\n                    changeFrom = Math.min(from, changeFrom);\n                    changeTo = Math.max(to, changeTo);\n                }\n            });\n        if (update.viewportMoved || changeTo - changeFrom > 1000)\n            return this.createDeco(update.view);\n        if (changeTo > -1)\n            return this.updateRange(update.view, deco.map(update.changes), changeFrom, changeTo);\n        return deco;\n    }\n    updateRange(view, deco, updateFrom, updateTo) {\n        for (let r of view.visibleRanges) {\n            let from = Math.max(r.from, updateFrom), to = Math.min(r.to, updateTo);\n            if (to > from) {\n                let fromLine = view.state.doc.lineAt(from), toLine = fromLine.to < to ? view.state.doc.lineAt(to) : fromLine;\n                let start = Math.max(r.from, fromLine.from), end = Math.min(r.to, toLine.to);\n                if (this.boundary) {\n                    for (; from > fromLine.from; from--)\n                        if (this.boundary.test(fromLine.text[from - 1 - fromLine.from])) {\n                            start = from;\n                            break;\n                        }\n                    for (; to < toLine.to; to++)\n                        if (this.boundary.test(toLine.text[to - toLine.from])) {\n                            end = to;\n                            break;\n                        }\n                }\n                let ranges = [], m;\n                let add = (from, to, deco) => ranges.push(deco.range(from, to));\n                if (fromLine == toLine) {\n                    this.regexp.lastIndex = start - fromLine.from;\n                    while ((m = this.regexp.exec(fromLine.text)) && m.index < end - fromLine.from)\n                        this.addMatch(m, view, m.index + fromLine.from, add);\n                }\n                else {\n                    iterMatches(view.state.doc, this.regexp, start, end, (from, m) => this.addMatch(m, view, from, add));\n                }\n                deco = deco.update({ filterFrom: start, filterTo: end, filter: (from, to) => from < start || to > end, add: ranges });\n            }\n        }\n        return deco;\n    }\n}\n\nconst UnicodeRegexpSupport = /x/.unicode != null ? \"gu\" : \"g\";\nconst Specials = /*@__PURE__*/new RegExp(\"[\\u0000-\\u0008\\u000a-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\ufeff\\ufff9-\\ufffc]\", UnicodeRegexpSupport);\nconst Names = {\n    0: \"null\",\n    7: \"bell\",\n    8: \"backspace\",\n    10: \"newline\",\n    11: \"vertical tab\",\n    13: \"carriage return\",\n    27: \"escape\",\n    8203: \"zero width space\",\n    8204: \"zero width non-joiner\",\n    8205: \"zero width joiner\",\n    8206: \"left-to-right mark\",\n    8207: \"right-to-left mark\",\n    8232: \"line separator\",\n    8237: \"left-to-right override\",\n    8238: \"right-to-left override\",\n    8294: \"left-to-right isolate\",\n    8295: \"right-to-left isolate\",\n    8297: \"pop directional isolate\",\n    8233: \"paragraph separator\",\n    65279: \"zero width no-break space\",\n    65532: \"object replacement\"\n};\nlet _supportsTabSize = null;\nfunction supportsTabSize() {\n    var _a;\n    if (_supportsTabSize == null && typeof document != \"undefined\" && document.body) {\n        let styles = document.body.style;\n        _supportsTabSize = ((_a = styles.tabSize) !== null && _a !== void 0 ? _a : styles.MozTabSize) != null;\n    }\n    return _supportsTabSize || false;\n}\nconst specialCharConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        let config = combineConfig(configs, {\n            render: null,\n            specialChars: Specials,\n            addSpecialChars: null\n        });\n        if (config.replaceTabs = !supportsTabSize())\n            config.specialChars = new RegExp(\"\\t|\" + config.specialChars.source, UnicodeRegexpSupport);\n        if (config.addSpecialChars)\n            config.specialChars = new RegExp(config.specialChars.source + \"|\" + config.addSpecialChars.source, UnicodeRegexpSupport);\n        return config;\n    }\n});\n/**\nReturns an extension that installs highlighting of special\ncharacters.\n*/\nfunction highlightSpecialChars(\n/**\nConfiguration options.\n*/\nconfig = {}) {\n    return [specialCharConfig.of(config), specialCharPlugin()];\n}\nlet _plugin = null;\nfunction specialCharPlugin() {\n    return _plugin || (_plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.decorations = Decoration.none;\n            this.decorationCache = Object.create(null);\n            this.decorator = this.makeDecorator(view.state.facet(specialCharConfig));\n            this.decorations = this.decorator.createDeco(view);\n        }\n        makeDecorator(conf) {\n            return new MatchDecorator({\n                regexp: conf.specialChars,\n                decoration: (m, view, pos) => {\n                    let { doc } = view.state;\n                    let code = codePointAt(m[0], 0);\n                    if (code == 9) {\n                        let line = doc.lineAt(pos);\n                        let size = view.state.tabSize, col = countColumn(line.text, size, pos - line.from);\n                        return Decoration.replace({\n                            widget: new TabWidget((size - (col % size)) * this.view.defaultCharacterWidth / this.view.scaleX)\n                        });\n                    }\n                    return this.decorationCache[code] ||\n                        (this.decorationCache[code] = Decoration.replace({ widget: new SpecialCharWidget(conf, code) }));\n                },\n                boundary: conf.replaceTabs ? undefined : /[^]/\n            });\n        }\n        update(update) {\n            let conf = update.state.facet(specialCharConfig);\n            if (update.startState.facet(specialCharConfig) != conf) {\n                this.decorator = this.makeDecorator(conf);\n                this.decorations = this.decorator.createDeco(update.view);\n            }\n            else {\n                this.decorations = this.decorator.updateDeco(update, this.decorations);\n            }\n        }\n    }, {\n        decorations: v => v.decorations\n    }));\n}\nconst DefaultPlaceholder = \"\\u2022\";\n// Assigns placeholder characters from the Control Pictures block to\n// ASCII control characters\nfunction placeholder$1(code) {\n    if (code >= 32)\n        return DefaultPlaceholder;\n    if (code == 10)\n        return \"\\u2424\";\n    return String.fromCharCode(9216 + code);\n}\nclass SpecialCharWidget extends WidgetType {\n    constructor(options, code) {\n        super();\n        this.options = options;\n        this.code = code;\n    }\n    eq(other) { return other.code == this.code; }\n    toDOM(view) {\n        let ph = placeholder$1(this.code);\n        let desc = view.state.phrase(\"Control character\") + \" \" + (Names[this.code] || \"0x\" + this.code.toString(16));\n        let custom = this.options.render && this.options.render(this.code, desc, ph);\n        if (custom)\n            return custom;\n        let span = document.createElement(\"span\");\n        span.textContent = ph;\n        span.title = desc;\n        span.setAttribute(\"aria-label\", desc);\n        span.className = \"cm-specialChar\";\n        return span;\n    }\n    ignoreEvent() { return false; }\n}\nclass TabWidget extends WidgetType {\n    constructor(width) {\n        super();\n        this.width = width;\n    }\n    eq(other) { return other.width == this.width; }\n    toDOM() {\n        let span = document.createElement(\"span\");\n        span.textContent = \"\\t\";\n        span.className = \"cm-tab\";\n        span.style.width = this.width + \"px\";\n        return span;\n    }\n    ignoreEvent() { return false; }\n}\n\nconst plugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor() {\n        this.height = 1000;\n        this.attrs = { style: \"padding-bottom: 1000px\" };\n    }\n    update(update) {\n        let { view } = update;\n        let height = view.viewState.editorHeight -\n            view.defaultLineHeight - view.documentPadding.top - 0.5;\n        if (height >= 0 && height != this.height) {\n            this.height = height;\n            this.attrs = { style: `padding-bottom: ${height}px` };\n        }\n    }\n});\n/**\nReturns an extension that makes sure the content has a bottom\nmargin equivalent to the height of the editor, minus one line\nheight, so that every line in the document can be scrolled to the\ntop of the editor.\n\nThis is only meaningful when the editor is scrollable, and should\nnot be enabled in editors that take the size of their content.\n*/\nfunction scrollPastEnd() {\n    return [plugin, contentAttributes.of(view => { var _a; return ((_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.attrs) || null; })];\n}\n\n/**\nMark lines that have a cursor on them with the `\"cm-activeLine\"`\nDOM class.\n*/\nfunction highlightActiveLine() {\n    return activeLineHighlighter;\n}\nconst lineDeco = /*@__PURE__*/Decoration.line({ class: \"cm-activeLine\" });\nconst activeLineHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.decorations = this.getDeco(view);\n    }\n    update(update) {\n        if (update.docChanged || update.selectionSet)\n            this.decorations = this.getDeco(update.view);\n    }\n    getDeco(view) {\n        let lastLineStart = -1, deco = [];\n        for (let r of view.state.selection.ranges) {\n            let line = view.lineBlockAt(r.head);\n            if (line.from > lastLineStart) {\n                deco.push(lineDeco.range(line.from));\n                lastLineStart = line.from;\n            }\n        }\n        return Decoration.set(deco);\n    }\n}, {\n    decorations: v => v.decorations\n});\n\nclass Placeholder extends WidgetType {\n    constructor(content) {\n        super();\n        this.content = content;\n    }\n    toDOM(view) {\n        let wrap = document.createElement(\"span\");\n        wrap.className = \"cm-placeholder\";\n        wrap.style.pointerEvents = \"none\";\n        wrap.appendChild(typeof this.content == \"string\" ? document.createTextNode(this.content) :\n            typeof this.content == \"function\" ? this.content(view) :\n                this.content.cloneNode(true));\n        if (typeof this.content == \"string\")\n            wrap.setAttribute(\"aria-label\", \"placeholder \" + this.content);\n        else\n            wrap.setAttribute(\"aria-hidden\", \"true\");\n        return wrap;\n    }\n    coordsAt(dom) {\n        let rects = dom.firstChild ? clientRectsFor(dom.firstChild) : [];\n        if (!rects.length)\n            return null;\n        let style = window.getComputedStyle(dom.parentNode);\n        let rect = flattenRect(rects[0], style.direction != \"rtl\");\n        let lineHeight = parseInt(style.lineHeight);\n        if (rect.bottom - rect.top > lineHeight * 1.5)\n            return { left: rect.left, right: rect.right, top: rect.top, bottom: rect.top + lineHeight };\n        return rect;\n    }\n    ignoreEvent() { return false; }\n}\n/**\nExtension that enables a placeholder\u2014a piece of example content\nto show when the editor is empty.\n*/\nfunction placeholder(content) {\n    return ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.placeholder = content\n                ? Decoration.set([Decoration.widget({ widget: new Placeholder(content), side: 1 }).range(0)])\n                : Decoration.none;\n        }\n        get decorations() { return this.view.state.doc.length ? Decoration.none : this.placeholder; }\n    }, { decorations: v => v.decorations });\n}\n\n// Don't compute precise column positions for line offsets above this\n// (since it could get expensive). Assume offset==column for them.\nconst MaxOff = 2000;\nfunction rectangleFor(state, a, b) {\n    let startLine = Math.min(a.line, b.line), endLine = Math.max(a.line, b.line);\n    let ranges = [];\n    if (a.off > MaxOff || b.off > MaxOff || a.col < 0 || b.col < 0) {\n        let startOff = Math.min(a.off, b.off), endOff = Math.max(a.off, b.off);\n        for (let i = startLine; i <= endLine; i++) {\n            let line = state.doc.line(i);\n            if (line.length <= endOff)\n                ranges.push(EditorSelection.range(line.from + startOff, line.to + endOff));\n        }\n    }\n    else {\n        let startCol = Math.min(a.col, b.col), endCol = Math.max(a.col, b.col);\n        for (let i = startLine; i <= endLine; i++) {\n            let line = state.doc.line(i);\n            let start = findColumn(line.text, startCol, state.tabSize, true);\n            if (start < 0) {\n                ranges.push(EditorSelection.cursor(line.to));\n            }\n            else {\n                let end = findColumn(line.text, endCol, state.tabSize);\n                ranges.push(EditorSelection.range(line.from + start, line.from + end));\n            }\n        }\n    }\n    return ranges;\n}\nfunction absoluteColumn(view, x) {\n    let ref = view.coordsAtPos(view.viewport.from);\n    return ref ? Math.round(Math.abs((ref.left - x) / view.defaultCharacterWidth)) : -1;\n}\nfunction getPos(view, event) {\n    let offset = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    let line = view.state.doc.lineAt(offset), off = offset - line.from;\n    let col = off > MaxOff ? -1\n        : off == line.length ? absoluteColumn(view, event.clientX)\n            : countColumn(line.text, view.state.tabSize, offset - line.from);\n    return { line: line.number, col, off };\n}\nfunction rectangleSelectionStyle(view, event) {\n    let start = getPos(view, event), startSel = view.state.selection;\n    if (!start)\n        return null;\n    return {\n        update(update) {\n            if (update.docChanged) {\n                let newStart = update.changes.mapPos(update.startState.doc.line(start.line).from);\n                let newLine = update.state.doc.lineAt(newStart);\n                start = { line: newLine.number, col: start.col, off: Math.min(start.off, newLine.length) };\n                startSel = startSel.map(update.changes);\n            }\n        },\n        get(event, _extend, multiple) {\n            let cur = getPos(view, event);\n            if (!cur)\n                return startSel;\n            let ranges = rectangleFor(view.state, start, cur);\n            if (!ranges.length)\n                return startSel;\n            if (multiple)\n                return EditorSelection.create(ranges.concat(startSel.ranges));\n            else\n                return EditorSelection.create(ranges);\n        }\n    };\n}\n/**\nCreate an extension that enables rectangular selections. By\ndefault, it will react to left mouse drag with the Alt key held\ndown. When such a selection occurs, the text within the rectangle\nthat was dragged over will be selected, as one selection\n[range](https://codemirror.net/6/docs/ref/#state.SelectionRange) per line.\n*/\nfunction rectangularSelection(options) {\n    let filter = (options === null || options === void 0 ? void 0 : options.eventFilter) || (e => e.altKey && e.button == 0);\n    return EditorView.mouseSelectionStyle.of((view, event) => filter(event) ? rectangleSelectionStyle(view, event) : null);\n}\nconst keys = {\n    Alt: [18, e => !!e.altKey],\n    Control: [17, e => !!e.ctrlKey],\n    Shift: [16, e => !!e.shiftKey],\n    Meta: [91, e => !!e.metaKey]\n};\nconst showCrosshair = { style: \"cursor: crosshair\" };\n/**\nReturns an extension that turns the pointer cursor into a\ncrosshair when a given modifier key, defaulting to Alt, is held\ndown. Can serve as a visual hint that rectangular selection is\ngoing to happen when paired with\n[`rectangularSelection`](https://codemirror.net/6/docs/ref/#view.rectangularSelection).\n*/\nfunction crosshairCursor(options = {}) {\n    let [code, getter] = keys[options.key || \"Alt\"];\n    let plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.isDown = false;\n        }\n        set(isDown) {\n            if (this.isDown != isDown) {\n                this.isDown = isDown;\n                this.view.update([]);\n            }\n        }\n    }, {\n        eventObservers: {\n            keydown(e) {\n                this.set(e.keyCode == code || getter(e));\n            },\n            keyup(e) {\n                if (e.keyCode == code || !getter(e))\n                    this.set(false);\n            },\n            mousemove(e) {\n                this.set(getter(e));\n            }\n        }\n    });\n    return [\n        plugin,\n        EditorView.contentAttributes.of(view => { var _a; return ((_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.isDown) ? showCrosshair : null; })\n    ];\n}\n\nconst Outside = \"-10000px\";\nclass TooltipViewManager {\n    constructor(view, facet, createTooltipView, removeTooltipView) {\n        this.facet = facet;\n        this.createTooltipView = createTooltipView;\n        this.removeTooltipView = removeTooltipView;\n        this.input = view.state.facet(facet);\n        this.tooltips = this.input.filter(t => t);\n        let prev = null;\n        this.tooltipViews = this.tooltips.map(t => prev = createTooltipView(t, prev));\n    }\n    update(update, above) {\n        var _a;\n        let input = update.state.facet(this.facet);\n        let tooltips = input.filter(x => x);\n        if (input === this.input) {\n            for (let t of this.tooltipViews)\n                if (t.update)\n                    t.update(update);\n            return false;\n        }\n        let tooltipViews = [], newAbove = above ? [] : null;\n        for (let i = 0; i < tooltips.length; i++) {\n            let tip = tooltips[i], known = -1;\n            if (!tip)\n                continue;\n            for (let i = 0; i < this.tooltips.length; i++) {\n                let other = this.tooltips[i];\n                if (other && other.create == tip.create)\n                    known = i;\n            }\n            if (known < 0) {\n                tooltipViews[i] = this.createTooltipView(tip, i ? tooltipViews[i - 1] : null);\n                if (newAbove)\n                    newAbove[i] = !!tip.above;\n            }\n            else {\n                let tooltipView = tooltipViews[i] = this.tooltipViews[known];\n                if (newAbove)\n                    newAbove[i] = above[known];\n                if (tooltipView.update)\n                    tooltipView.update(update);\n            }\n        }\n        for (let t of this.tooltipViews)\n            if (tooltipViews.indexOf(t) < 0) {\n                this.removeTooltipView(t);\n                (_a = t.destroy) === null || _a === void 0 ? void 0 : _a.call(t);\n            }\n        if (above) {\n            newAbove.forEach((val, i) => above[i] = val);\n            above.length = newAbove.length;\n        }\n        this.input = input;\n        this.tooltips = tooltips;\n        this.tooltipViews = tooltipViews;\n        return true;\n    }\n}\n/**\nCreates an extension that configures tooltip behavior.\n*/\nfunction tooltips(config = {}) {\n    return tooltipConfig.of(config);\n}\nfunction windowSpace(view) {\n    let docElt = view.dom.ownerDocument.documentElement;\n    return { top: 0, left: 0, bottom: docElt.clientHeight, right: docElt.clientWidth };\n}\nconst tooltipConfig = /*@__PURE__*/Facet.define({\n    combine: values => {\n        var _a, _b, _c;\n        return ({\n            position: browser.ios ? \"absolute\" : ((_a = values.find(conf => conf.position)) === null || _a === void 0 ? void 0 : _a.position) || \"fixed\",\n            parent: ((_b = values.find(conf => conf.parent)) === null || _b === void 0 ? void 0 : _b.parent) || null,\n            tooltipSpace: ((_c = values.find(conf => conf.tooltipSpace)) === null || _c === void 0 ? void 0 : _c.tooltipSpace) || windowSpace,\n        });\n    }\n});\nconst knownHeight = /*@__PURE__*/new WeakMap();\nconst tooltipPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.above = [];\n        this.inView = true;\n        this.madeAbsolute = false;\n        this.lastTransaction = 0;\n        this.measureTimeout = -1;\n        let config = view.state.facet(tooltipConfig);\n        this.position = config.position;\n        this.parent = config.parent;\n        this.classes = view.themeClasses;\n        this.createContainer();\n        this.measureReq = { read: this.readMeasure.bind(this), write: this.writeMeasure.bind(this), key: this };\n        this.resizeObserver = typeof ResizeObserver == \"function\" ? new ResizeObserver(() => this.measureSoon()) : null;\n        this.manager = new TooltipViewManager(view, showTooltip, (t, p) => this.createTooltip(t, p), t => {\n            if (this.resizeObserver)\n                this.resizeObserver.unobserve(t.dom);\n            t.dom.remove();\n        });\n        this.above = this.manager.tooltips.map(t => !!t.above);\n        this.intersectionObserver = typeof IntersectionObserver == \"function\" ? new IntersectionObserver(entries => {\n            if (Date.now() > this.lastTransaction - 50 &&\n                entries.length > 0 && entries[entries.length - 1].intersectionRatio < 1)\n                this.measureSoon();\n        }, { threshold: [1] }) : null;\n        this.observeIntersection();\n        view.win.addEventListener(\"resize\", this.measureSoon = this.measureSoon.bind(this));\n        this.maybeMeasure();\n    }\n    createContainer() {\n        if (this.parent) {\n            this.container = document.createElement(\"div\");\n            this.container.style.position = \"relative\";\n            this.container.className = this.view.themeClasses;\n            this.parent.appendChild(this.container);\n        }\n        else {\n            this.container = this.view.dom;\n        }\n    }\n    observeIntersection() {\n        if (this.intersectionObserver) {\n            this.intersectionObserver.disconnect();\n            for (let tooltip of this.manager.tooltipViews)\n                this.intersectionObserver.observe(tooltip.dom);\n        }\n    }\n    measureSoon() {\n        if (this.measureTimeout < 0)\n            this.measureTimeout = setTimeout(() => {\n                this.measureTimeout = -1;\n                this.maybeMeasure();\n            }, 50);\n    }\n    update(update) {\n        if (update.transactions.length)\n            this.lastTransaction = Date.now();\n        let updated = this.manager.update(update, this.above);\n        if (updated)\n            this.observeIntersection();\n        let shouldMeasure = updated || update.geometryChanged;\n        let newConfig = update.state.facet(tooltipConfig);\n        if (newConfig.position != this.position && !this.madeAbsolute) {\n            this.position = newConfig.position;\n            for (let t of this.manager.tooltipViews)\n                t.dom.style.position = this.position;\n            shouldMeasure = true;\n        }\n        if (newConfig.parent != this.parent) {\n            if (this.parent)\n                this.container.remove();\n            this.parent = newConfig.parent;\n            this.createContainer();\n            for (let t of this.manager.tooltipViews)\n                this.container.appendChild(t.dom);\n            shouldMeasure = true;\n        }\n        else if (this.parent && this.view.themeClasses != this.classes) {\n            this.classes = this.container.className = this.view.themeClasses;\n        }\n        if (shouldMeasure)\n            this.maybeMeasure();\n    }\n    createTooltip(tooltip, prev) {\n        let tooltipView = tooltip.create(this.view);\n        let before = prev ? prev.dom : null;\n        tooltipView.dom.classList.add(\"cm-tooltip\");\n        if (tooltip.arrow && !tooltipView.dom.querySelector(\".cm-tooltip > .cm-tooltip-arrow\")) {\n            let arrow = document.createElement(\"div\");\n            arrow.className = \"cm-tooltip-arrow\";\n            tooltipView.dom.appendChild(arrow);\n        }\n        tooltipView.dom.style.position = this.position;\n        tooltipView.dom.style.top = Outside;\n        tooltipView.dom.style.left = \"0px\";\n        this.container.insertBefore(tooltipView.dom, before);\n        if (tooltipView.mount)\n            tooltipView.mount(this.view);\n        if (this.resizeObserver)\n            this.resizeObserver.observe(tooltipView.dom);\n        return tooltipView;\n    }\n    destroy() {\n        var _a, _b, _c;\n        this.view.win.removeEventListener(\"resize\", this.measureSoon);\n        for (let tooltipView of this.manager.tooltipViews) {\n            tooltipView.dom.remove();\n            (_a = tooltipView.destroy) === null || _a === void 0 ? void 0 : _a.call(tooltipView);\n        }\n        if (this.parent)\n            this.container.remove();\n        (_b = this.resizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();\n        (_c = this.intersectionObserver) === null || _c === void 0 ? void 0 : _c.disconnect();\n        clearTimeout(this.measureTimeout);\n    }\n    readMeasure() {\n        let scaleX = 1, scaleY = 1, makeAbsolute = false;\n        if (this.position == \"fixed\" && this.manager.tooltipViews.length) {\n            let { dom } = this.manager.tooltipViews[0];\n            if (browser.gecko) {\n                // Firefox sets the element's `offsetParent` to the\n                // transformed element when a transform interferes with fixed\n                // positioning.\n                makeAbsolute = dom.offsetParent != this.container.ownerDocument.body;\n            }\n            else if (dom.style.top == Outside && dom.style.left == \"0px\") {\n                // On other browsers, we have to awkwardly try and use other\n                // information to detect a transform.\n                let rect = dom.getBoundingClientRect();\n                makeAbsolute = Math.abs(rect.top + 10000) > 1 || Math.abs(rect.left) > 1;\n            }\n        }\n        if (makeAbsolute || this.position == \"absolute\") {\n            if (this.parent) {\n                let rect = this.parent.getBoundingClientRect();\n                if (rect.width && rect.height) {\n                    scaleX = rect.width / this.parent.offsetWidth;\n                    scaleY = rect.height / this.parent.offsetHeight;\n                }\n            }\n            else {\n                ({ scaleX, scaleY } = this.view.viewState);\n            }\n        }\n        let visible = this.view.scrollDOM.getBoundingClientRect(), margins = getScrollMargins(this.view);\n        return {\n            visible: {\n                left: visible.left + margins.left, top: visible.top + margins.top,\n                right: visible.right - margins.right, bottom: visible.bottom - margins.bottom\n            },\n            parent: this.parent ? this.container.getBoundingClientRect() : this.view.dom.getBoundingClientRect(),\n            pos: this.manager.tooltips.map((t, i) => {\n                let tv = this.manager.tooltipViews[i];\n                return tv.getCoords ? tv.getCoords(t.pos) : this.view.coordsAtPos(t.pos);\n            }),\n            size: this.manager.tooltipViews.map(({ dom }) => dom.getBoundingClientRect()),\n            space: this.view.state.facet(tooltipConfig).tooltipSpace(this.view),\n            scaleX, scaleY, makeAbsolute\n        };\n    }\n    writeMeasure(measured) {\n        var _a;\n        if (measured.makeAbsolute) {\n            this.madeAbsolute = true;\n            this.position = \"absolute\";\n            for (let t of this.manager.tooltipViews)\n                t.dom.style.position = \"absolute\";\n        }\n        let { visible, space, scaleX, scaleY } = measured;\n        let others = [];\n        for (let i = 0; i < this.manager.tooltips.length; i++) {\n            let tooltip = this.manager.tooltips[i], tView = this.manager.tooltipViews[i], { dom } = tView;\n            let pos = measured.pos[i], size = measured.size[i];\n            // Hide tooltips that are outside of the editor.\n            if (!pos || tooltip.clip !== false && (pos.bottom <= Math.max(visible.top, space.top) ||\n                pos.top >= Math.min(visible.bottom, space.bottom) ||\n                pos.right < Math.max(visible.left, space.left) - .1 ||\n                pos.left > Math.min(visible.right, space.right) + .1)) {\n                dom.style.top = Outside;\n                continue;\n            }\n            let arrow = tooltip.arrow ? tView.dom.querySelector(\".cm-tooltip-arrow\") : null;\n            let arrowHeight = arrow ? 7 /* Arrow.Size */ : 0;\n            let width = size.right - size.left, height = (_a = knownHeight.get(tView)) !== null && _a !== void 0 ? _a : size.bottom - size.top;\n            let offset = tView.offset || noOffset, ltr = this.view.textDirection == Direction.LTR;\n            let left = size.width > space.right - space.left\n                ? (ltr ? space.left : space.right - size.width)\n                : ltr ? Math.max(space.left, Math.min(pos.left - (arrow ? 14 /* Arrow.Offset */ : 0) + offset.x, space.right - width))\n                    : Math.min(Math.max(space.left, pos.left - width + (arrow ? 14 /* Arrow.Offset */ : 0) - offset.x), space.right - width);\n            let above = this.above[i];\n            if (!tooltip.strictSide && (above\n                ? pos.top - height - arrowHeight - offset.y < space.top\n                : pos.bottom + height + arrowHeight + offset.y > space.bottom) &&\n                above == (space.bottom - pos.bottom > pos.top - space.top))\n                above = this.above[i] = !above;\n            let spaceVert = (above ? pos.top - space.top : space.bottom - pos.bottom) - arrowHeight;\n            if (spaceVert < height && tView.resize !== false) {\n                if (spaceVert < this.view.defaultLineHeight) {\n                    dom.style.top = Outside;\n                    continue;\n                }\n                knownHeight.set(tView, height);\n                dom.style.height = (height = spaceVert) / scaleY + \"px\";\n            }\n            else if (dom.style.height) {\n                dom.style.height = \"\";\n            }\n            let top = above ? pos.top - height - arrowHeight - offset.y : pos.bottom + arrowHeight + offset.y;\n            let right = left + width;\n            if (tView.overlap !== true)\n                for (let r of others)\n                    if (r.left < right && r.right > left && r.top < top + height && r.bottom > top)\n                        top = above ? r.top - height - 2 - arrowHeight : r.bottom + arrowHeight + 2;\n            if (this.position == \"absolute\") {\n                dom.style.top = (top - measured.parent.top) / scaleY + \"px\";\n                setLeftStyle(dom, (left - measured.parent.left) / scaleX);\n            }\n            else {\n                dom.style.top = top / scaleY + \"px\";\n                setLeftStyle(dom, left / scaleX);\n            }\n            if (arrow) {\n                let arrowLeft = pos.left + (ltr ? offset.x : -offset.x) - (left + 14 /* Arrow.Offset */ - 7 /* Arrow.Size */);\n                arrow.style.left = arrowLeft / scaleX + \"px\";\n            }\n            if (tView.overlap !== true)\n                others.push({ left, top, right, bottom: top + height });\n            dom.classList.toggle(\"cm-tooltip-above\", above);\n            dom.classList.toggle(\"cm-tooltip-below\", !above);\n            if (tView.positioned)\n                tView.positioned(measured.space);\n        }\n    }\n    maybeMeasure() {\n        if (this.manager.tooltips.length) {\n            if (this.view.inView)\n                this.view.requestMeasure(this.measureReq);\n            if (this.inView != this.view.inView) {\n                this.inView = this.view.inView;\n                if (!this.inView)\n                    for (let tv of this.manager.tooltipViews)\n                        tv.dom.style.top = Outside;\n            }\n        }\n    }\n}, {\n    eventObservers: {\n        scroll() { this.maybeMeasure(); }\n    }\n});\nfunction setLeftStyle(elt, value) {\n    let current = parseInt(elt.style.left, 10);\n    if (isNaN(current) || Math.abs(value - current) > 1)\n        elt.style.left = value + \"px\";\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-tooltip\": {\n        zIndex: 500,\n        boxSizing: \"border-box\"\n    },\n    \"&light .cm-tooltip\": {\n        border: \"1px solid #bbb\",\n        backgroundColor: \"#f5f5f5\"\n    },\n    \"&light .cm-tooltip-section:not(:first-child)\": {\n        borderTop: \"1px solid #bbb\",\n    },\n    \"&dark .cm-tooltip\": {\n        backgroundColor: \"#333338\",\n        color: \"white\"\n    },\n    \".cm-tooltip-arrow\": {\n        height: `${7 /* Arrow.Size */}px`,\n        width: `${7 /* Arrow.Size */ * 2}px`,\n        position: \"absolute\",\n        zIndex: -1,\n        overflow: \"hidden\",\n        \"&:before, &:after\": {\n            content: \"''\",\n            position: \"absolute\",\n            width: 0,\n            height: 0,\n            borderLeft: `${7 /* Arrow.Size */}px solid transparent`,\n            borderRight: `${7 /* Arrow.Size */}px solid transparent`,\n        },\n        \".cm-tooltip-above &\": {\n            bottom: `-${7 /* Arrow.Size */}px`,\n            \"&:before\": {\n                borderTop: `${7 /* Arrow.Size */}px solid #bbb`,\n            },\n            \"&:after\": {\n                borderTop: `${7 /* Arrow.Size */}px solid #f5f5f5`,\n                bottom: \"1px\"\n            }\n        },\n        \".cm-tooltip-below &\": {\n            top: `-${7 /* Arrow.Size */}px`,\n            \"&:before\": {\n                borderBottom: `${7 /* Arrow.Size */}px solid #bbb`,\n            },\n            \"&:after\": {\n                borderBottom: `${7 /* Arrow.Size */}px solid #f5f5f5`,\n                top: \"1px\"\n            }\n        },\n    },\n    \"&dark .cm-tooltip .cm-tooltip-arrow\": {\n        \"&:before\": {\n            borderTopColor: \"#333338\",\n            borderBottomColor: \"#333338\"\n        },\n        \"&:after\": {\n            borderTopColor: \"transparent\",\n            borderBottomColor: \"transparent\"\n        }\n    }\n});\nconst noOffset = { x: 0, y: 0 };\n/**\nFacet to which an extension can add a value to show a tooltip.\n*/\nconst showTooltip = /*@__PURE__*/Facet.define({\n    enables: [tooltipPlugin, baseTheme]\n});\nconst showHoverTooltip = /*@__PURE__*/Facet.define({\n    combine: inputs => inputs.reduce((a, i) => a.concat(i), [])\n});\nclass HoverTooltipHost {\n    // Needs to be static so that host tooltip instances always match\n    static create(view) {\n        return new HoverTooltipHost(view);\n    }\n    constructor(view) {\n        this.view = view;\n        this.mounted = false;\n        this.dom = document.createElement(\"div\");\n        this.dom.classList.add(\"cm-tooltip-hover\");\n        this.manager = new TooltipViewManager(view, showHoverTooltip, (t, p) => this.createHostedView(t, p), t => t.dom.remove());\n    }\n    createHostedView(tooltip, prev) {\n        let hostedView = tooltip.create(this.view);\n        hostedView.dom.classList.add(\"cm-tooltip-section\");\n        this.dom.insertBefore(hostedView.dom, prev ? prev.dom.nextSibling : this.dom.firstChild);\n        if (this.mounted && hostedView.mount)\n            hostedView.mount(this.view);\n        return hostedView;\n    }\n    mount(view) {\n        for (let hostedView of this.manager.tooltipViews) {\n            if (hostedView.mount)\n                hostedView.mount(view);\n        }\n        this.mounted = true;\n    }\n    positioned(space) {\n        for (let hostedView of this.manager.tooltipViews) {\n            if (hostedView.positioned)\n                hostedView.positioned(space);\n        }\n    }\n    update(update) {\n        this.manager.update(update);\n    }\n    destroy() {\n        var _a;\n        for (let t of this.manager.tooltipViews)\n            (_a = t.destroy) === null || _a === void 0 ? void 0 : _a.call(t);\n    }\n    passProp(name) {\n        let value = undefined;\n        for (let view of this.manager.tooltipViews) {\n            let given = view[name];\n            if (given !== undefined) {\n                if (value === undefined)\n                    value = given;\n                else if (value !== given)\n                    return undefined;\n            }\n        }\n        return value;\n    }\n    get offset() { return this.passProp(\"offset\"); }\n    get getCoords() { return this.passProp(\"getCoords\"); }\n    get overlap() { return this.passProp(\"overlap\"); }\n    get resize() { return this.passProp(\"resize\"); }\n}\nconst showHoverTooltipHost = /*@__PURE__*/showTooltip.compute([showHoverTooltip], state => {\n    let tooltips = state.facet(showHoverTooltip);\n    if (tooltips.length === 0)\n        return null;\n    return {\n        pos: Math.min(...tooltips.map(t => t.pos)),\n        end: Math.max(...tooltips.map(t => { var _a; return (_a = t.end) !== null && _a !== void 0 ? _a : t.pos; })),\n        create: HoverTooltipHost.create,\n        above: tooltips[0].above,\n        arrow: tooltips.some(t => t.arrow),\n    };\n});\nclass HoverPlugin {\n    constructor(view, source, field, setHover, hoverTime) {\n        this.view = view;\n        this.source = source;\n        this.field = field;\n        this.setHover = setHover;\n        this.hoverTime = hoverTime;\n        this.hoverTimeout = -1;\n        this.restartTimeout = -1;\n        this.pending = null;\n        this.lastMove = { x: 0, y: 0, target: view.dom, time: 0 };\n        this.checkHover = this.checkHover.bind(this);\n        view.dom.addEventListener(\"mouseleave\", this.mouseleave = this.mouseleave.bind(this));\n        view.dom.addEventListener(\"mousemove\", this.mousemove = this.mousemove.bind(this));\n    }\n    update() {\n        if (this.pending) {\n            this.pending = null;\n            clearTimeout(this.restartTimeout);\n            this.restartTimeout = setTimeout(() => this.startHover(), 20);\n        }\n    }\n    get active() {\n        return this.view.state.field(this.field);\n    }\n    checkHover() {\n        this.hoverTimeout = -1;\n        if (this.active.length)\n            return;\n        let hovered = Date.now() - this.lastMove.time;\n        if (hovered < this.hoverTime)\n            this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime - hovered);\n        else\n            this.startHover();\n    }\n    startHover() {\n        clearTimeout(this.restartTimeout);\n        let { view, lastMove } = this;\n        let desc = view.docView.nearest(lastMove.target);\n        if (!desc)\n            return;\n        let pos, side = 1;\n        if (desc instanceof WidgetView) {\n            pos = desc.posAtStart;\n        }\n        else {\n            pos = view.posAtCoords(lastMove);\n            if (pos == null)\n                return;\n            let posCoords = view.coordsAtPos(pos);\n            if (!posCoords ||\n                lastMove.y < posCoords.top || lastMove.y > posCoords.bottom ||\n                lastMove.x < posCoords.left - view.defaultCharacterWidth ||\n                lastMove.x > posCoords.right + view.defaultCharacterWidth)\n                return;\n            let bidi = view.bidiSpans(view.state.doc.lineAt(pos)).find(s => s.from <= pos && s.to >= pos);\n            let rtl = bidi && bidi.dir == Direction.RTL ? -1 : 1;\n            side = (lastMove.x < posCoords.left ? -rtl : rtl);\n        }\n        let open = this.source(view, pos, side);\n        if (open === null || open === void 0 ? void 0 : open.then) {\n            let pending = this.pending = { pos };\n            open.then(result => {\n                if (this.pending == pending) {\n                    this.pending = null;\n                    if (result && !(Array.isArray(result) && !result.length))\n                        view.dispatch({ effects: this.setHover.of(Array.isArray(result) ? result : [result]) });\n                }\n            }, e => logException(view.state, e, \"hover tooltip\"));\n        }\n        else if (open && !(Array.isArray(open) && !open.length)) {\n            view.dispatch({ effects: this.setHover.of(Array.isArray(open) ? open : [open]) });\n        }\n    }\n    get tooltip() {\n        let plugin = this.view.plugin(tooltipPlugin);\n        let index = plugin ? plugin.manager.tooltips.findIndex(t => t.create == HoverTooltipHost.create) : -1;\n        return index > -1 ? plugin.manager.tooltipViews[index] : null;\n    }\n    mousemove(event) {\n        var _a, _b;\n        this.lastMove = { x: event.clientX, y: event.clientY, target: event.target, time: Date.now() };\n        if (this.hoverTimeout < 0)\n            this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime);\n        let { active, tooltip } = this;\n        if (active.length && tooltip && !isInTooltip(tooltip.dom, event) || this.pending) {\n            let { pos } = active[0] || this.pending, end = (_b = (_a = active[0]) === null || _a === void 0 ? void 0 : _a.end) !== null && _b !== void 0 ? _b : pos;\n            if ((pos == end ? this.view.posAtCoords(this.lastMove) != pos\n                : !isOverRange(this.view, pos, end, event.clientX, event.clientY))) {\n                this.view.dispatch({ effects: this.setHover.of([]) });\n                this.pending = null;\n            }\n        }\n    }\n    mouseleave(event) {\n        clearTimeout(this.hoverTimeout);\n        this.hoverTimeout = -1;\n        let { active } = this;\n        if (active.length) {\n            let { tooltip } = this;\n            let inTooltip = tooltip && tooltip.dom.contains(event.relatedTarget);\n            if (!inTooltip)\n                this.view.dispatch({ effects: this.setHover.of([]) });\n            else\n                this.watchTooltipLeave(tooltip.dom);\n        }\n    }\n    watchTooltipLeave(tooltip) {\n        let watch = (event) => {\n            tooltip.removeEventListener(\"mouseleave\", watch);\n            if (this.active.length && !this.view.dom.contains(event.relatedTarget))\n                this.view.dispatch({ effects: this.setHover.of([]) });\n        };\n        tooltip.addEventListener(\"mouseleave\", watch);\n    }\n    destroy() {\n        clearTimeout(this.hoverTimeout);\n        this.view.dom.removeEventListener(\"mouseleave\", this.mouseleave);\n        this.view.dom.removeEventListener(\"mousemove\", this.mousemove);\n    }\n}\nconst tooltipMargin = 4;\nfunction isInTooltip(tooltip, event) {\n    let { left, right, top, bottom } = tooltip.getBoundingClientRect(), arrow;\n    if (arrow = tooltip.querySelector(\".cm-tooltip-arrow\")) {\n        let arrowRect = arrow.getBoundingClientRect();\n        top = Math.min(arrowRect.top, top);\n        bottom = Math.max(arrowRect.bottom, bottom);\n    }\n    return event.clientX >= left - tooltipMargin && event.clientX <= right + tooltipMargin &&\n        event.clientY >= top - tooltipMargin && event.clientY <= bottom + tooltipMargin;\n}\nfunction isOverRange(view, from, to, x, y, margin) {\n    let rect = view.scrollDOM.getBoundingClientRect();\n    let docBottom = view.documentTop + view.documentPadding.top + view.contentHeight;\n    if (rect.left > x || rect.right < x || rect.top > y || Math.min(rect.bottom, docBottom) < y)\n        return false;\n    let pos = view.posAtCoords({ x, y }, false);\n    return pos >= from && pos <= to;\n}\n/**\nSet up a hover tooltip, which shows up when the pointer hovers\nover ranges of text. The callback is called when the mouse hovers\nover the document text. It should, if there is a tooltip\nassociated with position `pos`, return the tooltip description\n(either directly or in a promise). The `side` argument indicates\non which side of the position the pointer is\u2014it will be -1 if the\npointer is before the position, 1 if after the position.\n\nNote that all hover tooltips are hosted within a single tooltip\ncontainer element. This allows multiple tooltips over the same\nrange to be \"merged\" together without overlapping.\n\nThe return value is a valid [editor extension](https://codemirror.net/6/docs/ref/#state.Extension)\nbut also provides an `active` property holding a state field that\ncan be used to read the currently active tooltips produced by this\nextension.\n*/\nfunction hoverTooltip(source, options = {}) {\n    let setHover = StateEffect.define();\n    let hoverState = StateField.define({\n        create() { return []; },\n        update(value, tr) {\n            if (value.length) {\n                if (options.hideOnChange && (tr.docChanged || tr.selection))\n                    value = [];\n                else if (options.hideOn)\n                    value = value.filter(v => !options.hideOn(tr, v));\n                if (tr.docChanged) {\n                    let mapped = [];\n                    for (let tooltip of value) {\n                        let newPos = tr.changes.mapPos(tooltip.pos, -1, MapMode.TrackDel);\n                        if (newPos != null) {\n                            let copy = Object.assign(Object.create(null), tooltip);\n                            copy.pos = newPos;\n                            if (copy.end != null)\n                                copy.end = tr.changes.mapPos(copy.end);\n                            mapped.push(copy);\n                        }\n                    }\n                    value = mapped;\n                }\n            }\n            for (let effect of tr.effects) {\n                if (effect.is(setHover))\n                    value = effect.value;\n                if (effect.is(closeHoverTooltipEffect))\n                    value = [];\n            }\n            return value;\n        },\n        provide: f => showHoverTooltip.from(f)\n    });\n    return {\n        active: hoverState,\n        extension: [\n            hoverState,\n            ViewPlugin.define(view => new HoverPlugin(view, source, hoverState, setHover, options.hoverTime || 300 /* Hover.Time */)),\n            showHoverTooltipHost\n        ]\n    };\n}\n/**\nGet the active tooltip view for a given tooltip, if available.\n*/\nfunction getTooltip(view, tooltip) {\n    let plugin = view.plugin(tooltipPlugin);\n    if (!plugin)\n        return null;\n    let found = plugin.manager.tooltips.indexOf(tooltip);\n    return found < 0 ? null : plugin.manager.tooltipViews[found];\n}\n/**\nReturns true if any hover tooltips are currently active.\n*/\nfunction hasHoverTooltips(state) {\n    return state.facet(showHoverTooltip).some(x => x);\n}\nconst closeHoverTooltipEffect = /*@__PURE__*/StateEffect.define();\n/**\nTransaction effect that closes all hover tooltips.\n*/\nconst closeHoverTooltips = /*@__PURE__*/closeHoverTooltipEffect.of(null);\n/**\nTell the tooltip extension to recompute the position of the active\ntooltips. This can be useful when something happens (such as a\nre-positioning or CSS change affecting the editor) that could\ninvalidate the existing tooltip positions.\n*/\nfunction repositionTooltips(view) {\n    let plugin = view.plugin(tooltipPlugin);\n    if (plugin)\n        plugin.maybeMeasure();\n}\n\nconst panelConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        let topContainer, bottomContainer;\n        for (let c of configs) {\n            topContainer = topContainer || c.topContainer;\n            bottomContainer = bottomContainer || c.bottomContainer;\n        }\n        return { topContainer, bottomContainer };\n    }\n});\n/**\nConfigures the panel-managing extension.\n*/\nfunction panels(config) {\n    return config ? [panelConfig.of(config)] : [];\n}\n/**\nGet the active panel created by the given constructor, if any.\nThis can be useful when you need access to your panels' DOM\nstructure.\n*/\nfunction getPanel(view, panel) {\n    let plugin = view.plugin(panelPlugin);\n    let index = plugin ? plugin.specs.indexOf(panel) : -1;\n    return index > -1 ? plugin.panels[index] : null;\n}\nconst panelPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.input = view.state.facet(showPanel);\n        this.specs = this.input.filter(s => s);\n        this.panels = this.specs.map(spec => spec(view));\n        let conf = view.state.facet(panelConfig);\n        this.top = new PanelGroup(view, true, conf.topContainer);\n        this.bottom = new PanelGroup(view, false, conf.bottomContainer);\n        this.top.sync(this.panels.filter(p => p.top));\n        this.bottom.sync(this.panels.filter(p => !p.top));\n        for (let p of this.panels) {\n            p.dom.classList.add(\"cm-panel\");\n            if (p.mount)\n                p.mount();\n        }\n    }\n    update(update) {\n        let conf = update.state.facet(panelConfig);\n        if (this.top.container != conf.topContainer) {\n            this.top.sync([]);\n            this.top = new PanelGroup(update.view, true, conf.topContainer);\n        }\n        if (this.bottom.container != conf.bottomContainer) {\n            this.bottom.sync([]);\n            this.bottom = new PanelGroup(update.view, false, conf.bottomContainer);\n        }\n        this.top.syncClasses();\n        this.bottom.syncClasses();\n        let input = update.state.facet(showPanel);\n        if (input != this.input) {\n            let specs = input.filter(x => x);\n            let panels = [], top = [], bottom = [], mount = [];\n            for (let spec of specs) {\n                let known = this.specs.indexOf(spec), panel;\n                if (known < 0) {\n                    panel = spec(update.view);\n                    mount.push(panel);\n                }\n                else {\n                    panel = this.panels[known];\n                    if (panel.update)\n                        panel.update(update);\n                }\n                panels.push(panel);\n                (panel.top ? top : bottom).push(panel);\n            }\n            this.specs = specs;\n            this.panels = panels;\n            this.top.sync(top);\n            this.bottom.sync(bottom);\n            for (let p of mount) {\n                p.dom.classList.add(\"cm-panel\");\n                if (p.mount)\n                    p.mount();\n            }\n        }\n        else {\n            for (let p of this.panels)\n                if (p.update)\n                    p.update(update);\n        }\n    }\n    destroy() {\n        this.top.sync([]);\n        this.bottom.sync([]);\n    }\n}, {\n    provide: plugin => EditorView.scrollMargins.of(view => {\n        let value = view.plugin(plugin);\n        return value && { top: value.top.scrollMargin(), bottom: value.bottom.scrollMargin() };\n    })\n});\nclass PanelGroup {\n    constructor(view, top, container) {\n        this.view = view;\n        this.top = top;\n        this.container = container;\n        this.dom = undefined;\n        this.classes = \"\";\n        this.panels = [];\n        this.syncClasses();\n    }\n    sync(panels) {\n        for (let p of this.panels)\n            if (p.destroy && panels.indexOf(p) < 0)\n                p.destroy();\n        this.panels = panels;\n        this.syncDOM();\n    }\n    syncDOM() {\n        if (this.panels.length == 0) {\n            if (this.dom) {\n                this.dom.remove();\n                this.dom = undefined;\n            }\n            return;\n        }\n        if (!this.dom) {\n            this.dom = document.createElement(\"div\");\n            this.dom.className = this.top ? \"cm-panels cm-panels-top\" : \"cm-panels cm-panels-bottom\";\n            this.dom.style[this.top ? \"top\" : \"bottom\"] = \"0\";\n            let parent = this.container || this.view.dom;\n            parent.insertBefore(this.dom, this.top ? parent.firstChild : null);\n        }\n        let curDOM = this.dom.firstChild;\n        for (let panel of this.panels) {\n            if (panel.dom.parentNode == this.dom) {\n                while (curDOM != panel.dom)\n                    curDOM = rm(curDOM);\n                curDOM = curDOM.nextSibling;\n            }\n            else {\n                this.dom.insertBefore(panel.dom, curDOM);\n            }\n        }\n        while (curDOM)\n            curDOM = rm(curDOM);\n    }\n    scrollMargin() {\n        return !this.dom || this.container ? 0\n            : Math.max(0, this.top ?\n                this.dom.getBoundingClientRect().bottom - Math.max(0, this.view.scrollDOM.getBoundingClientRect().top) :\n                Math.min(innerHeight, this.view.scrollDOM.getBoundingClientRect().bottom) - this.dom.getBoundingClientRect().top);\n    }\n    syncClasses() {\n        if (!this.container || this.classes == this.view.themeClasses)\n            return;\n        for (let cls of this.classes.split(\" \"))\n            if (cls)\n                this.container.classList.remove(cls);\n        for (let cls of (this.classes = this.view.themeClasses).split(\" \"))\n            if (cls)\n                this.container.classList.add(cls);\n    }\n}\nfunction rm(node) {\n    let next = node.nextSibling;\n    node.remove();\n    return next;\n}\n/**\nOpening a panel is done by providing a constructor function for\nthe panel through this facet. (The panel is closed again when its\nconstructor is no longer provided.) Values of `null` are ignored.\n*/\nconst showPanel = /*@__PURE__*/Facet.define({\n    enables: panelPlugin\n});\n\n/**\nA gutter marker represents a bit of information attached to a line\nin a specific gutter. Your own custom markers have to extend this\nclass.\n*/\nclass GutterMarker extends RangeValue {\n    /**\n    @internal\n    */\n    compare(other) {\n        return this == other || this.constructor == other.constructor && this.eq(other);\n    }\n    /**\n    Compare this marker to another marker of the same type.\n    */\n    eq(other) { return false; }\n    /**\n    Called if the marker has a `toDOM` method and its representation\n    was removed from a gutter.\n    */\n    destroy(dom) { }\n}\nGutterMarker.prototype.elementClass = \"\";\nGutterMarker.prototype.toDOM = undefined;\nGutterMarker.prototype.mapMode = MapMode.TrackBefore;\nGutterMarker.prototype.startSide = GutterMarker.prototype.endSide = -1;\nGutterMarker.prototype.point = true;\n/**\nFacet used to add a class to all gutter elements for a given line.\nMarkers given to this facet should _only_ define an\n[`elementclass`](https://codemirror.net/6/docs/ref/#view.GutterMarker.elementClass), not a\n[`toDOM`](https://codemirror.net/6/docs/ref/#view.GutterMarker.toDOM) (or the marker will appear\nin all gutters for the line).\n*/\nconst gutterLineClass = /*@__PURE__*/Facet.define();\n/**\nFacet used to add a class to all gutter elements next to a widget.\nShould not provide widgets with a `toDOM` method.\n*/\nconst gutterWidgetClass = /*@__PURE__*/Facet.define();\nconst defaults = {\n    class: \"\",\n    renderEmptyElements: false,\n    elementStyle: \"\",\n    markers: () => RangeSet.empty,\n    lineMarker: () => null,\n    widgetMarker: () => null,\n    lineMarkerChange: null,\n    initialSpacer: null,\n    updateSpacer: null,\n    domEventHandlers: {}\n};\nconst activeGutters = /*@__PURE__*/Facet.define();\n/**\nDefine an editor gutter. The order in which the gutters appear is\ndetermined by their extension priority.\n*/\nfunction gutter(config) {\n    return [gutters(), activeGutters.of(Object.assign(Object.assign({}, defaults), config))];\n}\nconst unfixGutters = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\n/**\nThe gutter-drawing plugin is automatically enabled when you add a\ngutter, but you can use this function to explicitly configure it.\n\nUnless `fixed` is explicitly set to `false`, the gutters are\nfixed, meaning they don't scroll along with the content\nhorizontally (except on Internet Explorer, which doesn't support\nCSS [`position:\nsticky`](https://developer.mozilla.org/en-US/docs/Web/CSS/position#sticky)).\n*/\nfunction gutters(config) {\n    let result = [\n        gutterView,\n    ];\n    if (config && config.fixed === false)\n        result.push(unfixGutters.of(true));\n    return result;\n}\nconst gutterView = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.prevViewport = view.viewport;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutters\";\n        this.dom.setAttribute(\"aria-hidden\", \"true\");\n        this.dom.style.minHeight = (this.view.contentHeight / this.view.scaleY) + \"px\";\n        this.gutters = view.state.facet(activeGutters).map(conf => new SingleGutterView(view, conf));\n        for (let gutter of this.gutters)\n            this.dom.appendChild(gutter.dom);\n        this.fixed = !view.state.facet(unfixGutters);\n        if (this.fixed) {\n            // FIXME IE11 fallback, which doesn't support position: sticky,\n            // by using position: relative + event handlers that realign the\n            // gutter (or just force fixed=false on IE11?)\n            this.dom.style.position = \"sticky\";\n        }\n        this.syncGutters(false);\n        view.scrollDOM.insertBefore(this.dom, view.contentDOM);\n    }\n    update(update) {\n        if (this.updateGutters(update)) {\n            // Detach during sync when the viewport changed significantly\n            // (such as during scrolling), since for large updates that is\n            // faster.\n            let vpA = this.prevViewport, vpB = update.view.viewport;\n            let vpOverlap = Math.min(vpA.to, vpB.to) - Math.max(vpA.from, vpB.from);\n            this.syncGutters(vpOverlap < (vpB.to - vpB.from) * 0.8);\n        }\n        if (update.geometryChanged) {\n            this.dom.style.minHeight = (this.view.contentHeight / this.view.scaleY) + \"px\";\n        }\n        if (this.view.state.facet(unfixGutters) != !this.fixed) {\n            this.fixed = !this.fixed;\n            this.dom.style.position = this.fixed ? \"sticky\" : \"\";\n        }\n        this.prevViewport = update.view.viewport;\n    }\n    syncGutters(detach) {\n        let after = this.dom.nextSibling;\n        if (detach)\n            this.dom.remove();\n        let lineClasses = RangeSet.iter(this.view.state.facet(gutterLineClass), this.view.viewport.from);\n        let classSet = [];\n        let contexts = this.gutters.map(gutter => new UpdateContext(gutter, this.view.viewport, -this.view.documentPadding.top));\n        for (let line of this.view.viewportLineBlocks) {\n            if (classSet.length)\n                classSet = [];\n            if (Array.isArray(line.type)) {\n                let first = true;\n                for (let b of line.type) {\n                    if (b.type == BlockType.Text && first) {\n                        advanceCursor(lineClasses, classSet, b.from);\n                        for (let cx of contexts)\n                            cx.line(this.view, b, classSet);\n                        first = false;\n                    }\n                    else if (b.widget) {\n                        for (let cx of contexts)\n                            cx.widget(this.view, b);\n                    }\n                }\n            }\n            else if (line.type == BlockType.Text) {\n                advanceCursor(lineClasses, classSet, line.from);\n                for (let cx of contexts)\n                    cx.line(this.view, line, classSet);\n            }\n            else if (line.widget) {\n                for (let cx of contexts)\n                    cx.widget(this.view, line);\n            }\n        }\n        for (let cx of contexts)\n            cx.finish();\n        if (detach)\n            this.view.scrollDOM.insertBefore(this.dom, after);\n    }\n    updateGutters(update) {\n        let prev = update.startState.facet(activeGutters), cur = update.state.facet(activeGutters);\n        let change = update.docChanged || update.heightChanged || update.viewportChanged ||\n            !RangeSet.eq(update.startState.facet(gutterLineClass), update.state.facet(gutterLineClass), update.view.viewport.from, update.view.viewport.to);\n        if (prev == cur) {\n            for (let gutter of this.gutters)\n                if (gutter.update(update))\n                    change = true;\n        }\n        else {\n            change = true;\n            let gutters = [];\n            for (let conf of cur) {\n                let known = prev.indexOf(conf);\n                if (known < 0) {\n                    gutters.push(new SingleGutterView(this.view, conf));\n                }\n                else {\n                    this.gutters[known].update(update);\n                    gutters.push(this.gutters[known]);\n                }\n            }\n            for (let g of this.gutters) {\n                g.dom.remove();\n                if (gutters.indexOf(g) < 0)\n                    g.destroy();\n            }\n            for (let g of gutters)\n                this.dom.appendChild(g.dom);\n            this.gutters = gutters;\n        }\n        return change;\n    }\n    destroy() {\n        for (let view of this.gutters)\n            view.destroy();\n        this.dom.remove();\n    }\n}, {\n    provide: plugin => EditorView.scrollMargins.of(view => {\n        let value = view.plugin(plugin);\n        if (!value || value.gutters.length == 0 || !value.fixed)\n            return null;\n        return view.textDirection == Direction.LTR\n            ? { left: value.dom.offsetWidth * view.scaleX }\n            : { right: value.dom.offsetWidth * view.scaleX };\n    })\n});\nfunction asArray(val) { return (Array.isArray(val) ? val : [val]); }\nfunction advanceCursor(cursor, collect, pos) {\n    while (cursor.value && cursor.from <= pos) {\n        if (cursor.from == pos)\n            collect.push(cursor.value);\n        cursor.next();\n    }\n}\nclass UpdateContext {\n    constructor(gutter, viewport, height) {\n        this.gutter = gutter;\n        this.height = height;\n        this.i = 0;\n        this.cursor = RangeSet.iter(gutter.markers, viewport.from);\n    }\n    addElement(view, block, markers) {\n        let { gutter } = this, above = (block.top - this.height) / view.scaleY, height = block.height / view.scaleY;\n        if (this.i == gutter.elements.length) {\n            let newElt = new GutterElement(view, height, above, markers);\n            gutter.elements.push(newElt);\n            gutter.dom.appendChild(newElt.dom);\n        }\n        else {\n            gutter.elements[this.i].update(view, height, above, markers);\n        }\n        this.height = block.bottom;\n        this.i++;\n    }\n    line(view, line, extraMarkers) {\n        let localMarkers = [];\n        advanceCursor(this.cursor, localMarkers, line.from);\n        if (extraMarkers.length)\n            localMarkers = localMarkers.concat(extraMarkers);\n        let forLine = this.gutter.config.lineMarker(view, line, localMarkers);\n        if (forLine)\n            localMarkers.unshift(forLine);\n        let gutter = this.gutter;\n        if (localMarkers.length == 0 && !gutter.config.renderEmptyElements)\n            return;\n        this.addElement(view, line, localMarkers);\n    }\n    widget(view, block) {\n        let marker = this.gutter.config.widgetMarker(view, block.widget, block), markers = marker ? [marker] : null;\n        for (let cls of view.state.facet(gutterWidgetClass)) {\n            let marker = cls(view, block.widget, block);\n            if (marker)\n                (markers || (markers = [])).push(marker);\n        }\n        if (markers)\n            this.addElement(view, block, markers);\n    }\n    finish() {\n        let gutter = this.gutter;\n        while (gutter.elements.length > this.i) {\n            let last = gutter.elements.pop();\n            gutter.dom.removeChild(last.dom);\n            last.destroy();\n        }\n    }\n}\nclass SingleGutterView {\n    constructor(view, config) {\n        this.view = view;\n        this.config = config;\n        this.elements = [];\n        this.spacer = null;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutter\" + (this.config.class ? \" \" + this.config.class : \"\");\n        for (let prop in config.domEventHandlers) {\n            this.dom.addEventListener(prop, (event) => {\n                let target = event.target, y;\n                if (target != this.dom && this.dom.contains(target)) {\n                    while (target.parentNode != this.dom)\n                        target = target.parentNode;\n                    let rect = target.getBoundingClientRect();\n                    y = (rect.top + rect.bottom) / 2;\n                }\n                else {\n                    y = event.clientY;\n                }\n                let line = view.lineBlockAtHeight(y - view.documentTop);\n                if (config.domEventHandlers[prop](view, line, event))\n                    event.preventDefault();\n            });\n        }\n        this.markers = asArray(config.markers(view));\n        if (config.initialSpacer) {\n            this.spacer = new GutterElement(view, 0, 0, [config.initialSpacer(view)]);\n            this.dom.appendChild(this.spacer.dom);\n            this.spacer.dom.style.cssText += \"visibility: hidden; pointer-events: none\";\n        }\n    }\n    update(update) {\n        let prevMarkers = this.markers;\n        this.markers = asArray(this.config.markers(update.view));\n        if (this.spacer && this.config.updateSpacer) {\n            let updated = this.config.updateSpacer(this.spacer.markers[0], update);\n            if (updated != this.spacer.markers[0])\n                this.spacer.update(update.view, 0, 0, [updated]);\n        }\n        let vp = update.view.viewport;\n        return !RangeSet.eq(this.markers, prevMarkers, vp.from, vp.to) ||\n            (this.config.lineMarkerChange ? this.config.lineMarkerChange(update) : false);\n    }\n    destroy() {\n        for (let elt of this.elements)\n            elt.destroy();\n    }\n}\nclass GutterElement {\n    constructor(view, height, above, markers) {\n        this.height = -1;\n        this.above = 0;\n        this.markers = [];\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutterElement\";\n        this.update(view, height, above, markers);\n    }\n    update(view, height, above, markers) {\n        if (this.height != height) {\n            this.height = height;\n            this.dom.style.height = height + \"px\";\n        }\n        if (this.above != above)\n            this.dom.style.marginTop = (this.above = above) ? above + \"px\" : \"\";\n        if (!sameMarkers(this.markers, markers))\n            this.setMarkers(view, markers);\n    }\n    setMarkers(view, markers) {\n        let cls = \"cm-gutterElement\", domPos = this.dom.firstChild;\n        for (let iNew = 0, iOld = 0;;) {\n            let skipTo = iOld, marker = iNew < markers.length ? markers[iNew++] : null, matched = false;\n            if (marker) {\n                let c = marker.elementClass;\n                if (c)\n                    cls += \" \" + c;\n                for (let i = iOld; i < this.markers.length; i++)\n                    if (this.markers[i].compare(marker)) {\n                        skipTo = i;\n                        matched = true;\n                        break;\n                    }\n            }\n            else {\n                skipTo = this.markers.length;\n            }\n            while (iOld < skipTo) {\n                let next = this.markers[iOld++];\n                if (next.toDOM) {\n                    next.destroy(domPos);\n                    let after = domPos.nextSibling;\n                    domPos.remove();\n                    domPos = after;\n                }\n            }\n            if (!marker)\n                break;\n            if (marker.toDOM) {\n                if (matched)\n                    domPos = domPos.nextSibling;\n                else\n                    this.dom.insertBefore(marker.toDOM(view), domPos);\n            }\n            if (matched)\n                iOld++;\n        }\n        this.dom.className = cls;\n        this.markers = markers;\n    }\n    destroy() {\n        this.setMarkers(null, []); // First argument not used unless creating markers\n    }\n}\nfunction sameMarkers(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!a[i].compare(b[i]))\n            return false;\n    return true;\n}\n/**\nFacet used to provide markers to the line number gutter.\n*/\nconst lineNumberMarkers = /*@__PURE__*/Facet.define();\n/**\nFacet used to create markers in the line number gutter next to widgets.\n*/\nconst lineNumberWidgetMarker = /*@__PURE__*/Facet.define();\nconst lineNumberConfig = /*@__PURE__*/Facet.define({\n    combine(values) {\n        return combineConfig(values, { formatNumber: String, domEventHandlers: {} }, {\n            domEventHandlers(a, b) {\n                let result = Object.assign({}, a);\n                for (let event in b) {\n                    let exists = result[event], add = b[event];\n                    result[event] = exists ? (view, line, event) => exists(view, line, event) || add(view, line, event) : add;\n                }\n                return result;\n            }\n        });\n    }\n});\nclass NumberMarker extends GutterMarker {\n    constructor(number) {\n        super();\n        this.number = number;\n    }\n    eq(other) { return this.number == other.number; }\n    toDOM() { return document.createTextNode(this.number); }\n}\nfunction formatNumber(view, number) {\n    return view.state.facet(lineNumberConfig).formatNumber(number, view.state);\n}\nconst lineNumberGutter = /*@__PURE__*/activeGutters.compute([lineNumberConfig], state => ({\n    class: \"cm-lineNumbers\",\n    renderEmptyElements: false,\n    markers(view) { return view.state.facet(lineNumberMarkers); },\n    lineMarker(view, line, others) {\n        if (others.some(m => m.toDOM))\n            return null;\n        return new NumberMarker(formatNumber(view, view.state.doc.lineAt(line.from).number));\n    },\n    widgetMarker: (view, widget, block) => {\n        for (let m of view.state.facet(lineNumberWidgetMarker)) {\n            let result = m(view, widget, block);\n            if (result)\n                return result;\n        }\n        return null;\n    },\n    lineMarkerChange: update => update.startState.facet(lineNumberConfig) != update.state.facet(lineNumberConfig),\n    initialSpacer(view) {\n        return new NumberMarker(formatNumber(view, maxLineNumber(view.state.doc.lines)));\n    },\n    updateSpacer(spacer, update) {\n        let max = formatNumber(update.view, maxLineNumber(update.view.state.doc.lines));\n        return max == spacer.number ? spacer : new NumberMarker(max);\n    },\n    domEventHandlers: state.facet(lineNumberConfig).domEventHandlers\n}));\n/**\nCreate a line number gutter extension.\n*/\nfunction lineNumbers(config = {}) {\n    return [\n        lineNumberConfig.of(config),\n        gutters(),\n        lineNumberGutter\n    ];\n}\nfunction maxLineNumber(lines) {\n    let last = 9;\n    while (last < lines)\n        last = last * 10 + 9;\n    return last;\n}\nconst activeLineGutterMarker = /*@__PURE__*/new class extends GutterMarker {\n    constructor() {\n        super(...arguments);\n        this.elementClass = \"cm-activeLineGutter\";\n    }\n};\nconst activeLineGutterHighlighter = /*@__PURE__*/gutterLineClass.compute([\"selection\"], state => {\n    let marks = [], last = -1;\n    for (let range of state.selection.ranges) {\n        let linePos = state.doc.lineAt(range.head).from;\n        if (linePos > last) {\n            last = linePos;\n            marks.push(activeLineGutterMarker.range(linePos));\n        }\n    }\n    return RangeSet.of(marks);\n});\n/**\nReturns an extension that adds a `cm-activeLineGutter` class to\nall gutter elements on the [active\nline](https://codemirror.net/6/docs/ref/#view.highlightActiveLine).\n*/\nfunction highlightActiveLineGutter() {\n    return activeLineGutterHighlighter;\n}\n\nfunction matcher(decorator) {\n    return ViewPlugin.define(view => ({\n        decorations: decorator.createDeco(view),\n        update(u) {\n            this.decorations = decorator.updateDeco(u, this.decorations);\n        },\n    }), {\n        decorations: v => v.decorations\n    });\n}\nconst tabDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-highlightTab\" });\nconst spaceDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-highlightSpace\" });\nconst whitespaceHighlighter = /*@__PURE__*/matcher(/*@__PURE__*/new MatchDecorator({\n    regexp: /\\t| /g,\n    decoration: match => match[0] == \"\\t\" ? tabDeco : spaceDeco,\n    boundary: /\\S/,\n}));\n/**\nReturns an extension that highlights whitespace, adding a\n`cm-highlightSpace` class to stretches of spaces, and a\n`cm-highlightTab` class to individual tab characters. By default,\nthe former are shown as faint dots, and the latter as arrows.\n*/\nfunction highlightWhitespace() {\n    return whitespaceHighlighter;\n}\nconst trailingHighlighter = /*@__PURE__*/matcher(/*@__PURE__*/new MatchDecorator({\n    regexp: /\\s+$/g,\n    decoration: /*@__PURE__*/Decoration.mark({ class: \"cm-trailingSpace\" }),\n    boundary: /\\S/,\n}));\n/**\nReturns an extension that adds a `cm-trailingSpace` class to all\ntrailing whitespace.\n*/\nfunction highlightTrailingWhitespace() {\n    return trailingHighlighter;\n}\n\n/**\n@internal\n*/\nconst __test = { HeightMap, HeightOracle, MeasuredHeights, QueryType, ChangedRange, computeOrder,\n    moveVisually, clearHeightChangeFlag, getHeightChangeFlag: () => heightChangeFlag };\n\nexport { BidiSpan, BlockInfo, BlockType, Decoration, Direction, EditorView, GutterMarker, MatchDecorator, RectangleMarker, ViewPlugin, ViewUpdate, WidgetType, __test, closeHoverTooltips, crosshairCursor, drawSelection, dropCursor, getDrawSelectionConfig, getPanel, getTooltip, gutter, gutterLineClass, gutterWidgetClass, gutters, hasHoverTooltips, highlightActiveLine, highlightActiveLineGutter, highlightSpecialChars, highlightTrailingWhitespace, highlightWhitespace, hoverTooltip, keymap, layer, lineNumberMarkers, lineNumberWidgetMarker, lineNumbers, logException, panels, placeholder, rectangularSelection, repositionTooltips, runScopeHandlers, scrollPastEnd, showPanel, showTooltip, tooltips };\n", "/**\nThe default maximum length of a `TreeBuffer` node.\n*/\nconst DefaultBufferLength = 1024;\nlet nextPropID = 0;\nclass Range {\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n    }\n}\n/**\nEach [node type](#common.NodeType) or [individual tree](#common.Tree)\ncan have metadata associated with it in props. Instances of this\nclass represent prop names.\n*/\nclass NodeProp {\n    /**\n    Create a new node prop type.\n    */\n    constructor(config = {}) {\n        this.id = nextPropID++;\n        this.perNode = !!config.perNode;\n        this.deserialize = config.deserialize || (() => {\n            throw new Error(\"This node type doesn't define a deserialize function\");\n        });\n        this.combine = config.combine || null;\n    }\n    /**\n    This is meant to be used with\n    [`NodeSet.extend`](#common.NodeSet.extend) or\n    [`LRParser.configure`](#lr.ParserConfig.props) to compute\n    prop values for each node type in the set. Takes a [match\n    object](#common.NodeType^match) or function that returns undefined\n    if the node type doesn't get this prop, and the prop's value if\n    it does.\n    */\n    add(match) {\n        if (this.perNode)\n            throw new RangeError(\"Can't add per-node props to node types\");\n        if (typeof match != \"function\")\n            match = NodeType.match(match);\n        return (type) => {\n            let result = match(type);\n            return result === undefined ? null : [this, result];\n        };\n    }\n}\n/**\nProp that is used to describe matching delimiters. For opening\ndelimiters, this holds an array of node names (written as a\nspace-separated string when declaring this prop in a grammar)\nfor the node types of closing delimiters that match it.\n*/\nNodeProp.closedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nThe inverse of [`closedBy`](#common.NodeProp^closedBy). This is\nattached to closing delimiters, holding an array of node names\nof types of matching opening delimiters.\n*/\nNodeProp.openedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nUsed to assign node types to groups (for example, all node\ntypes that represent an expression could be tagged with an\n`\"Expression\"` group).\n*/\nNodeProp.group = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nAttached to nodes to indicate these should be\n[displayed](https://codemirror.net/docs/ref/#language.syntaxTree)\nin a bidirectional text isolate, so that direction-neutral\ncharacters on their sides don't incorrectly get associated with\nsurrounding text. You'll generally want to set this for nodes\nthat contain arbitrary text, like strings and comments, and for\nnodes that appear _inside_ arbitrary text, like HTML tags. When\nnot given a value, in a grammar declaration, defaults to\n`\"auto\"`.\n*/\nNodeProp.isolate = new NodeProp({ deserialize: value => {\n        if (value && value != \"rtl\" && value != \"ltr\" && value != \"auto\")\n            throw new RangeError(\"Invalid value for isolate: \" + value);\n        return value || \"auto\";\n    } });\n/**\nThe hash of the [context](#lr.ContextTracker.constructor)\nthat the node was parsed in, if any. Used to limit reuse of\ncontextual nodes.\n*/\nNodeProp.contextHash = new NodeProp({ perNode: true });\n/**\nThe distance beyond the end of the node that the tokenizer\nlooked ahead for any of the tokens inside the node. (The LR\nparser only stores this when it is larger than 25, for\nefficiency reasons.)\n*/\nNodeProp.lookAhead = new NodeProp({ perNode: true });\n/**\nThis per-node prop is used to replace a given node, or part of a\nnode, with another tree. This is useful to include trees from\ndifferent languages in mixed-language parsers.\n*/\nNodeProp.mounted = new NodeProp({ perNode: true });\n/**\nA mounted tree, which can be [stored](#common.NodeProp^mounted) on\na tree node to indicate that parts of its content are\nrepresented by another tree.\n*/\nclass MountedTree {\n    constructor(\n    /**\n    The inner tree.\n    */\n    tree, \n    /**\n    If this is null, this tree replaces the entire node (it will\n    be included in the regular iteration instead of its host\n    node). If not, only the given ranges are considered to be\n    covered by this tree. This is used for trees that are mixed in\n    a way that isn't strictly hierarchical. Such mounted trees are\n    only entered by [`resolveInner`](#common.Tree.resolveInner)\n    and [`enter`](#common.SyntaxNode.enter).\n    */\n    overlay, \n    /**\n    The parser used to create this subtree.\n    */\n    parser, \n    /**\n    [Indicates](#common.IterMode.EnterBracketed) that the nested\n    content is delineated with some kind\n    of bracket token.\n    */\n    bracketed = false) {\n        this.tree = tree;\n        this.overlay = overlay;\n        this.parser = parser;\n        this.bracketed = bracketed;\n    }\n    /**\n    @internal\n    */\n    static get(tree) {\n        return tree && tree.props && tree.props[NodeProp.mounted.id];\n    }\n}\nconst noProps = Object.create(null);\n/**\nEach node in a syntax tree has a node type associated with it.\n*/\nclass NodeType {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The name of the node type. Not necessarily unique, but if the\n    grammar was written properly, different node types with the\n    same name within a node set should play the same semantic\n    role.\n    */\n    name, \n    /**\n    @internal\n    */\n    props, \n    /**\n    The id of this node in its set. Corresponds to the term ids\n    used in the parser.\n    */\n    id, \n    /**\n    @internal\n    */\n    flags = 0) {\n        this.name = name;\n        this.props = props;\n        this.id = id;\n        this.flags = flags;\n    }\n    /**\n    Define a node type.\n    */\n    static define(spec) {\n        let props = spec.props && spec.props.length ? Object.create(null) : noProps;\n        let flags = (spec.top ? 1 /* NodeFlag.Top */ : 0) | (spec.skipped ? 2 /* NodeFlag.Skipped */ : 0) |\n            (spec.error ? 4 /* NodeFlag.Error */ : 0) | (spec.name == null ? 8 /* NodeFlag.Anonymous */ : 0);\n        let type = new NodeType(spec.name || \"\", props, spec.id, flags);\n        if (spec.props)\n            for (let src of spec.props) {\n                if (!Array.isArray(src))\n                    src = src(type);\n                if (src) {\n                    if (src[0].perNode)\n                        throw new RangeError(\"Can't store a per-node prop on a node type\");\n                    props[src[0].id] = src[1];\n                }\n            }\n        return type;\n    }\n    /**\n    Retrieves a node prop for this type. Will return `undefined` if\n    the prop isn't present on this node.\n    */\n    prop(prop) { return this.props[prop.id]; }\n    /**\n    True when this is the top node of a grammar.\n    */\n    get isTop() { return (this.flags & 1 /* NodeFlag.Top */) > 0; }\n    /**\n    True when this node is produced by a skip rule.\n    */\n    get isSkipped() { return (this.flags & 2 /* NodeFlag.Skipped */) > 0; }\n    /**\n    Indicates whether this is an error node.\n    */\n    get isError() { return (this.flags & 4 /* NodeFlag.Error */) > 0; }\n    /**\n    When true, this node type doesn't correspond to a user-declared\n    named node, for example because it is used to cache repetition.\n    */\n    get isAnonymous() { return (this.flags & 8 /* NodeFlag.Anonymous */) > 0; }\n    /**\n    Returns true when this node's name or one of its\n    [groups](#common.NodeProp^group) matches the given string.\n    */\n    is(name) {\n        if (typeof name == 'string') {\n            if (this.name == name)\n                return true;\n            let group = this.prop(NodeProp.group);\n            return group ? group.indexOf(name) > -1 : false;\n        }\n        return this.id == name;\n    }\n    /**\n    Create a function from node types to arbitrary values by\n    specifying an object whose property names are node or\n    [group](#common.NodeProp^group) names. Often useful with\n    [`NodeProp.add`](#common.NodeProp.add). You can put multiple\n    names, separated by spaces, in a single property name to map\n    multiple node names to a single value.\n    */\n    static match(map) {\n        let direct = Object.create(null);\n        for (let prop in map)\n            for (let name of prop.split(\" \"))\n                direct[name] = map[prop];\n        return (node) => {\n            for (let groups = node.prop(NodeProp.group), i = -1; i < (groups ? groups.length : 0); i++) {\n                let found = direct[i < 0 ? node.name : groups[i]];\n                if (found)\n                    return found;\n            }\n        };\n    }\n}\n/**\nAn empty dummy node type to use when no actual type is available.\n*/\nNodeType.none = new NodeType(\"\", Object.create(null), 0, 8 /* NodeFlag.Anonymous */);\n/**\nA node set holds a collection of node types. It is used to\ncompactly represent trees by storing their type ids, rather than a\nfull pointer to the type object, in a numeric array. Each parser\n[has](#lr.LRParser.nodeSet) a node set, and [tree\nbuffers](#common.TreeBuffer) can only store collections of nodes\nfrom the same set. A set can have a maximum of 2**16 (65536) node\ntypes in it, so that the ids fit into 16-bit typed array slots.\n*/\nclass NodeSet {\n    /**\n    Create a set with the given types. The `id` property of each\n    type should correspond to its position within the array.\n    */\n    constructor(\n    /**\n    The node types in this set, by id.\n    */\n    types) {\n        this.types = types;\n        for (let i = 0; i < types.length; i++)\n            if (types[i].id != i)\n                throw new RangeError(\"Node type ids should correspond to array positions when creating a node set\");\n    }\n    /**\n    Create a copy of this set with some node properties added. The\n    arguments to this method can be created with\n    [`NodeProp.add`](#common.NodeProp.add).\n    */\n    extend(...props) {\n        let newTypes = [];\n        for (let type of this.types) {\n            let newProps = null;\n            for (let source of props) {\n                let add = source(type);\n                if (add) {\n                    if (!newProps)\n                        newProps = Object.assign({}, type.props);\n                    let value = add[1], prop = add[0];\n                    if (prop.combine && prop.id in newProps)\n                        value = prop.combine(newProps[prop.id], value);\n                    newProps[prop.id] = value;\n                }\n            }\n            newTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type);\n        }\n        return new NodeSet(newTypes);\n    }\n}\nconst CachedNode = new WeakMap(), CachedInnerNode = new WeakMap();\n/**\nOptions that control iteration. Can be combined with the `|`\noperator to enable multiple ones.\n*/\nvar IterMode;\n(function (IterMode) {\n    /**\n    When enabled, iteration will only visit [`Tree`](#common.Tree)\n    objects, not nodes packed into\n    [`TreeBuffer`](#common.TreeBuffer)s.\n    */\n    IterMode[IterMode[\"ExcludeBuffers\"] = 1] = \"ExcludeBuffers\";\n    /**\n    Enable this to make iteration include anonymous nodes (such as\n    the nodes that wrap repeated grammar constructs into a balanced\n    tree).\n    */\n    IterMode[IterMode[\"IncludeAnonymous\"] = 2] = \"IncludeAnonymous\";\n    /**\n    By default, regular [mounted](#common.NodeProp^mounted) nodes\n    replace their base node in iteration. Enable this to ignore them\n    instead.\n    */\n    IterMode[IterMode[\"IgnoreMounts\"] = 4] = \"IgnoreMounts\";\n    /**\n    This option only applies in\n    [`enter`](#common.SyntaxNode.enter)-style methods. It tells the\n    library to not enter mounted overlays if one covers the given\n    position.\n    */\n    IterMode[IterMode[\"IgnoreOverlays\"] = 8] = \"IgnoreOverlays\";\n    /**\n    When set, positions on the boundary of a mounted overlay tree\n    that has its [`bracketed`](#common.NestedParse.bracketed) flag\n    set will enter that tree regardless of side. Only supported in\n    [`enter`](#common.SyntaxNode.enter), not in cursors.\n    */\n    IterMode[IterMode[\"EnterBracketed\"] = 16] = \"EnterBracketed\";\n})(IterMode || (IterMode = {}));\n/**\nA piece of syntax tree. There are two ways to approach these\ntrees: the way they are actually stored in memory, and the\nconvenient way.\n\nSyntax trees are stored as a tree of `Tree` and `TreeBuffer`\nobjects. By packing detail information into `TreeBuffer` leaf\nnodes, the representation is made a lot more memory-efficient.\n\nHowever, when you want to actually work with tree nodes, this\nrepresentation is very awkward, so most client code will want to\nuse the [`TreeCursor`](#common.TreeCursor) or\n[`SyntaxNode`](#common.SyntaxNode) interface instead, which provides\na view on some part of this data structure, and can be used to\nmove around to adjacent nodes.\n*/\nclass Tree {\n    /**\n    Construct a new tree. See also [`Tree.build`](#common.Tree^build).\n    */\n    constructor(\n    /**\n    The type of the top node.\n    */\n    type, \n    /**\n    This node's child nodes.\n    */\n    children, \n    /**\n    The positions (offsets relative to the start of this tree) of\n    the children.\n    */\n    positions, \n    /**\n    The total length of this tree\n    */\n    length, \n    /**\n    Per-node [node props](#common.NodeProp) to associate with this node.\n    */\n    props) {\n        this.type = type;\n        this.children = children;\n        this.positions = positions;\n        this.length = length;\n        /**\n        @internal\n        */\n        this.props = null;\n        if (props && props.length) {\n            this.props = Object.create(null);\n            for (let [prop, value] of props)\n                this.props[typeof prop == \"number\" ? prop : prop.id] = value;\n        }\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let mounted = MountedTree.get(this);\n        if (mounted && !mounted.overlay)\n            return mounted.tree.toString();\n        let children = \"\";\n        for (let ch of this.children) {\n            let str = ch.toString();\n            if (str) {\n                if (children)\n                    children += \",\";\n                children += str;\n            }\n        }\n        return !this.type.name ? children :\n            (/\\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) +\n                (children.length ? \"(\" + children + \")\" : \"\");\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) positioned at the top of\n    the tree. Mode can be used to [control](#common.IterMode) which\n    nodes the cursor visits.\n    */\n    cursor(mode = 0) {\n        return new TreeCursor(this.topNode, mode);\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) pointing into this tree\n    at the given position and side (see\n    [`moveTo`](#common.TreeCursor.moveTo).\n    */\n    cursorAt(pos, side = 0, mode = 0) {\n        let scope = CachedNode.get(this) || this.topNode;\n        let cursor = new TreeCursor(scope);\n        cursor.moveTo(pos, side);\n        CachedNode.set(this, cursor._tree);\n        return cursor;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) object for the top of the\n    tree.\n    */\n    get topNode() {\n        return new TreeNode(this, 0, 0, null);\n    }\n    /**\n    Get the [syntax node](#common.SyntaxNode) at the given position.\n    If `side` is -1, this will move into nodes that end at the\n    position. If 1, it'll move into nodes that start at the\n    position. With 0, it'll only enter nodes that cover the position\n    from both sides.\n    \n    Note that this will not enter\n    [overlays](#common.MountedTree.overlay), and you often want\n    [`resolveInner`](#common.Tree.resolveInner) instead.\n    */\n    resolve(pos, side = 0) {\n        let node = resolveNode(CachedNode.get(this) || this.topNode, pos, side, false);\n        CachedNode.set(this, node);\n        return node;\n    }\n    /**\n    Like [`resolve`](#common.Tree.resolve), but will enter\n    [overlaid](#common.MountedTree.overlay) nodes, producing a syntax node\n    pointing into the innermost overlaid tree at the given position\n    (with parent links going through all parent structure, including\n    the host trees).\n    */\n    resolveInner(pos, side = 0) {\n        let node = resolveNode(CachedInnerNode.get(this) || this.topNode, pos, side, true);\n        CachedInnerNode.set(this, node);\n        return node;\n    }\n    /**\n    In some situations, it can be useful to iterate through all\n    nodes around a position, including those in overlays that don't\n    directly cover the position. This method gives you an iterator\n    that will produce all nodes, from small to big, around the given\n    position.\n    */\n    resolveStack(pos, side = 0) {\n        return stackIterator(this, pos, side);\n    }\n    /**\n    Iterate over the tree and its children, calling `enter` for any\n    node that touches the `from`/`to` region (if given) before\n    running over such a node's children, and `leave` (if given) when\n    leaving the node. When `enter` returns `false`, that node will\n    not have its children iterated over (or `leave` called).\n    */\n    iterate(spec) {\n        let { enter, leave, from = 0, to = this.length } = spec;\n        let mode = spec.mode || 0, anon = (mode & IterMode.IncludeAnonymous) > 0;\n        for (let c = this.cursor(mode | IterMode.IncludeAnonymous);;) {\n            let entered = false;\n            if (c.from <= to && c.to >= from && (!anon && c.type.isAnonymous || enter(c) !== false)) {\n                if (c.firstChild())\n                    continue;\n                entered = true;\n            }\n            for (;;) {\n                if (entered && leave && (anon || !c.type.isAnonymous))\n                    leave(c);\n                if (c.nextSibling())\n                    break;\n                if (!c.parent())\n                    return;\n                entered = true;\n            }\n        }\n    }\n    /**\n    Get the value of the given [node prop](#common.NodeProp) for this\n    node. Works with both per-node and per-type props.\n    */\n    prop(prop) {\n        return !prop.perNode ? this.type.prop(prop) : this.props ? this.props[prop.id] : undefined;\n    }\n    /**\n    Returns the node's [per-node props](#common.NodeProp.perNode) in a\n    format that can be passed to the [`Tree`](#common.Tree)\n    constructor.\n    */\n    get propValues() {\n        let result = [];\n        if (this.props)\n            for (let id in this.props)\n                result.push([+id, this.props[id]]);\n        return result;\n    }\n    /**\n    Balance the direct children of this tree, producing a copy of\n    which may have children grouped into subtrees with type\n    [`NodeType.none`](#common.NodeType^none).\n    */\n    balance(config = {}) {\n        return this.children.length <= 8 /* Balance.BranchFactor */ ? this :\n            balanceRange(NodeType.none, this.children, this.positions, 0, this.children.length, 0, this.length, (children, positions, length) => new Tree(this.type, children, positions, length, this.propValues), config.makeTree || ((children, positions, length) => new Tree(NodeType.none, children, positions, length)));\n    }\n    /**\n    Build a tree from a postfix-ordered buffer of node information,\n    or a cursor over such a buffer.\n    */\n    static build(data) { return buildTree(data); }\n}\n/**\nThe empty tree\n*/\nTree.empty = new Tree(NodeType.none, [], [], 0);\nclass FlatBufferCursor {\n    constructor(buffer, index) {\n        this.buffer = buffer;\n        this.index = index;\n    }\n    get id() { return this.buffer[this.index - 4]; }\n    get start() { return this.buffer[this.index - 3]; }\n    get end() { return this.buffer[this.index - 2]; }\n    get size() { return this.buffer[this.index - 1]; }\n    get pos() { return this.index; }\n    next() { this.index -= 4; }\n    fork() { return new FlatBufferCursor(this.buffer, this.index); }\n}\n/**\nTree buffers contain (type, start, end, endIndex) quads for each\nnode. In such a buffer, nodes are stored in prefix order (parents\nbefore children, with the endIndex of the parent indicating which\nchildren belong to it).\n*/\nclass TreeBuffer {\n    /**\n    Create a tree buffer.\n    */\n    constructor(\n    /**\n    The buffer's content.\n    */\n    buffer, \n    /**\n    The total length of the group of nodes in the buffer.\n    */\n    length, \n    /**\n    The node set used in this buffer.\n    */\n    set) {\n        this.buffer = buffer;\n        this.length = length;\n        this.set = set;\n    }\n    /**\n    @internal\n    */\n    get type() { return NodeType.none; }\n    /**\n    @internal\n    */\n    toString() {\n        let result = [];\n        for (let index = 0; index < this.buffer.length;) {\n            result.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result.join(\",\");\n    }\n    /**\n    @internal\n    */\n    childString(index) {\n        let id = this.buffer[index], endIndex = this.buffer[index + 3];\n        let type = this.set.types[id], result = type.name;\n        if (/\\W/.test(result) && !type.isError)\n            result = JSON.stringify(result);\n        index += 4;\n        if (endIndex == index)\n            return result;\n        let children = [];\n        while (index < endIndex) {\n            children.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result + \"(\" + children.join(\",\") + \")\";\n    }\n    /**\n    @internal\n    */\n    findChild(startIndex, endIndex, dir, pos, side) {\n        let { buffer } = this, pick = -1;\n        for (let i = startIndex; i != endIndex; i = buffer[i + 3]) {\n            if (checkSide(side, pos, buffer[i + 1], buffer[i + 2])) {\n                pick = i;\n                if (dir > 0)\n                    break;\n            }\n        }\n        return pick;\n    }\n    /**\n    @internal\n    */\n    slice(startI, endI, from) {\n        let b = this.buffer;\n        let copy = new Uint16Array(endI - startI), len = 0;\n        for (let i = startI, j = 0; i < endI;) {\n            copy[j++] = b[i++];\n            copy[j++] = b[i++] - from;\n            let to = copy[j++] = b[i++] - from;\n            copy[j++] = b[i++] - startI;\n            len = Math.max(len, to);\n        }\n        return new TreeBuffer(copy, len, this.set);\n    }\n}\nfunction checkSide(side, pos, from, to) {\n    switch (side) {\n        case -2 /* Side.Before */: return from < pos;\n        case -1 /* Side.AtOrBefore */: return to >= pos && from < pos;\n        case 0 /* Side.Around */: return from < pos && to > pos;\n        case 1 /* Side.AtOrAfter */: return from <= pos && to > pos;\n        case 2 /* Side.After */: return to > pos;\n        case 4 /* Side.DontCare */: return true;\n    }\n}\nfunction resolveNode(node, pos, side, overlays) {\n    var _a;\n    // Move up to a node that actually holds the position, if possible\n    while (node.from == node.to ||\n        (side < 1 ? node.from >= pos : node.from > pos) ||\n        (side > -1 ? node.to <= pos : node.to < pos)) {\n        let parent = !overlays && node instanceof TreeNode && node.index < 0 ? null : node.parent;\n        if (!parent)\n            return node;\n        node = parent;\n    }\n    let mode = overlays ? 0 : IterMode.IgnoreOverlays;\n    // Must go up out of overlays when those do not overlap with pos\n    if (overlays)\n        for (let scan = node, parent = scan.parent; parent; scan = parent, parent = scan.parent) {\n            if (scan instanceof TreeNode && scan.index < 0 && ((_a = parent.enter(pos, side, mode)) === null || _a === void 0 ? void 0 : _a.from) != scan.from)\n                node = parent;\n        }\n    for (;;) {\n        let inner = node.enter(pos, side, mode);\n        if (!inner)\n            return node;\n        node = inner;\n    }\n}\nclass BaseNode {\n    cursor(mode = 0) { return new TreeCursor(this, mode); }\n    getChild(type, before = null, after = null) {\n        let r = getChildren(this, type, before, after);\n        return r.length ? r[0] : null;\n    }\n    getChildren(type, before = null, after = null) {\n        return getChildren(this, type, before, after);\n    }\n    resolve(pos, side = 0) {\n        return resolveNode(this, pos, side, false);\n    }\n    resolveInner(pos, side = 0) {\n        return resolveNode(this, pos, side, true);\n    }\n    matchContext(context) {\n        return matchNodeContext(this.parent, context);\n    }\n    enterUnfinishedNodesBefore(pos) {\n        let scan = this.childBefore(pos), node = this;\n        while (scan) {\n            let last = scan.lastChild;\n            if (!last || last.to != scan.to)\n                break;\n            if (last.type.isError && last.from == last.to) {\n                node = scan;\n                scan = last.prevSibling;\n            }\n            else {\n                scan = last;\n            }\n        }\n        return node;\n    }\n    get node() { return this; }\n    get next() { return this.parent; }\n}\nclass TreeNode extends BaseNode {\n    constructor(_tree, from, \n    // Index in parent node, set to -1 if the node is not a direct child of _parent.node (overlay)\n    index, _parent) {\n        super();\n        this._tree = _tree;\n        this.from = from;\n        this.index = index;\n        this._parent = _parent;\n    }\n    get type() { return this._tree.type; }\n    get name() { return this._tree.type.name; }\n    get to() { return this.from + this._tree.length; }\n    nextChild(i, dir, pos, side, mode = 0) {\n        var _a;\n        for (let parent = this;;) {\n            for (let { children, positions } = parent._tree, e = dir > 0 ? children.length : -1; i != e; i += dir) {\n                let next = children[i], start = positions[i] + parent.from;\n                if (!((mode & IterMode.EnterBracketed) && next instanceof Tree &&\n                    ((_a = MountedTree.get(next)) === null || _a === void 0 ? void 0 : _a.overlay) === null && (start >= pos || start + next.length <= pos)) &&\n                    !checkSide(side, pos, start, start + next.length))\n                    continue;\n                if (next instanceof TreeBuffer) {\n                    if (mode & IterMode.ExcludeBuffers)\n                        continue;\n                    let index = next.findChild(0, next.buffer.length, dir, pos - start, side);\n                    if (index > -1)\n                        return new BufferNode(new BufferContext(parent, next, i, start), null, index);\n                }\n                else if ((mode & IterMode.IncludeAnonymous) || (!next.type.isAnonymous || hasChild(next))) {\n                    let mounted;\n                    if (!(mode & IterMode.IgnoreMounts) && (mounted = MountedTree.get(next)) && !mounted.overlay)\n                        return new TreeNode(mounted.tree, start, i, parent);\n                    let inner = new TreeNode(next, start, i, parent);\n                    return (mode & IterMode.IncludeAnonymous) || !inner.type.isAnonymous ? inner\n                        : inner.nextChild(dir < 0 ? next.children.length - 1 : 0, dir, pos, side, mode);\n                }\n            }\n            if ((mode & IterMode.IncludeAnonymous) || !parent.type.isAnonymous)\n                return null;\n            if (parent.index >= 0)\n                i = parent.index + dir;\n            else\n                i = dir < 0 ? -1 : parent._parent._tree.children.length;\n            parent = parent._parent;\n            if (!parent)\n                return null;\n        }\n    }\n    get firstChild() { return this.nextChild(0, 1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.nextChild(this._tree.children.length - 1, -1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.nextChild(0, 1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.nextChild(this._tree.children.length - 1, -1, pos, -2 /* Side.Before */); }\n    prop(prop) { return this._tree.prop(prop); }\n    enter(pos, side, mode = 0) {\n        let mounted;\n        if (!(mode & IterMode.IgnoreOverlays) && (mounted = MountedTree.get(this._tree)) && mounted.overlay) {\n            let rPos = pos - this.from, enterBracketed = (mode & IterMode.EnterBracketed) && mounted.bracketed;\n            for (let { from, to } of mounted.overlay) {\n                if ((side > 0 || enterBracketed ? from <= rPos : from < rPos) &&\n                    (side < 0 || enterBracketed ? to >= rPos : to > rPos))\n                    return new TreeNode(mounted.tree, mounted.overlay[0].from + this.from, -1, this);\n            }\n        }\n        return this.nextChild(0, 1, pos, side, mode);\n    }\n    nextSignificantParent() {\n        let val = this;\n        while (val.type.isAnonymous && val._parent)\n            val = val._parent;\n        return val;\n    }\n    get parent() {\n        return this._parent ? this._parent.nextSignificantParent() : null;\n    }\n    get nextSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get prevSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get tree() { return this._tree; }\n    toTree() { return this._tree; }\n    /**\n    @internal\n    */\n    toString() { return this._tree.toString(); }\n}\nfunction getChildren(node, type, before, after) {\n    let cur = node.cursor(), result = [];\n    if (!cur.firstChild())\n        return result;\n    if (before != null)\n        for (let found = false; !found;) {\n            found = cur.type.is(before);\n            if (!cur.nextSibling())\n                return result;\n        }\n    for (;;) {\n        if (after != null && cur.type.is(after))\n            return result;\n        if (cur.type.is(type))\n            result.push(cur.node);\n        if (!cur.nextSibling())\n            return after == null ? result : [];\n    }\n}\nfunction matchNodeContext(node, context, i = context.length - 1) {\n    for (let p = node; i >= 0; p = p.parent) {\n        if (!p)\n            return false;\n        if (!p.type.isAnonymous) {\n            if (context[i] && context[i] != p.name)\n                return false;\n            i--;\n        }\n    }\n    return true;\n}\nclass BufferContext {\n    constructor(parent, buffer, index, start) {\n        this.parent = parent;\n        this.buffer = buffer;\n        this.index = index;\n        this.start = start;\n    }\n}\nclass BufferNode extends BaseNode {\n    get name() { return this.type.name; }\n    get from() { return this.context.start + this.context.buffer.buffer[this.index + 1]; }\n    get to() { return this.context.start + this.context.buffer.buffer[this.index + 2]; }\n    constructor(context, _parent, index) {\n        super();\n        this.context = context;\n        this._parent = _parent;\n        this.index = index;\n        this.type = context.buffer.set.types[context.buffer.buffer[index]];\n    }\n    child(dir, pos, side) {\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get firstChild() { return this.child(1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.child(-1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.child(1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.child(-1, pos, -2 /* Side.Before */); }\n    prop(prop) { return this.type.prop(prop); }\n    enter(pos, side, mode = 0) {\n        if (mode & IterMode.ExcludeBuffers)\n            return null;\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], side > 0 ? 1 : -1, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get parent() {\n        return this._parent || this.context.parent.nextSignificantParent();\n    }\n    externalSibling(dir) {\n        return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4 /* Side.DontCare */);\n    }\n    get nextSibling() {\n        let { buffer } = this.context;\n        let after = buffer.buffer[this.index + 3];\n        if (after < (this._parent ? buffer.buffer[this._parent.index + 3] : buffer.buffer.length))\n            return new BufferNode(this.context, this._parent, after);\n        return this.externalSibling(1);\n    }\n    get prevSibling() {\n        let { buffer } = this.context;\n        let parentStart = this._parent ? this._parent.index + 4 : 0;\n        if (this.index == parentStart)\n            return this.externalSibling(-1);\n        return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n    }\n    get tree() { return null; }\n    toTree() {\n        let children = [], positions = [];\n        let { buffer } = this.context;\n        let startI = this.index + 4, endI = buffer.buffer[this.index + 3];\n        if (endI > startI) {\n            let from = buffer.buffer[this.index + 1];\n            children.push(buffer.slice(startI, endI, from));\n            positions.push(0);\n        }\n        return new Tree(this.type, children, positions, this.to - this.from);\n    }\n    /**\n    @internal\n    */\n    toString() { return this.context.buffer.childString(this.index); }\n}\nfunction iterStack(heads) {\n    if (!heads.length)\n        return null;\n    let pick = 0, picked = heads[0];\n    for (let i = 1; i < heads.length; i++) {\n        let node = heads[i];\n        if (node.from > picked.from || node.to < picked.to) {\n            picked = node;\n            pick = i;\n        }\n    }\n    let next = picked instanceof TreeNode && picked.index < 0 ? null : picked.parent;\n    let newHeads = heads.slice();\n    if (next)\n        newHeads[pick] = next;\n    else\n        newHeads.splice(pick, 1);\n    return new StackIterator(newHeads, picked);\n}\nclass StackIterator {\n    constructor(heads, node) {\n        this.heads = heads;\n        this.node = node;\n    }\n    get next() { return iterStack(this.heads); }\n}\nfunction stackIterator(tree, pos, side) {\n    let inner = tree.resolveInner(pos, side), layers = null;\n    for (let scan = inner instanceof TreeNode ? inner : inner.context.parent; scan; scan = scan.parent) {\n        if (scan.index < 0) { // This is an overlay root\n            let parent = scan.parent;\n            (layers || (layers = [inner])).push(parent.resolve(pos, side));\n            scan = parent;\n        }\n        else {\n            let mount = MountedTree.get(scan.tree);\n            // Relevant overlay branching off\n            if (mount && mount.overlay && mount.overlay[0].from <= pos && mount.overlay[mount.overlay.length - 1].to >= pos) {\n                let root = new TreeNode(mount.tree, mount.overlay[0].from + scan.from, -1, scan);\n                (layers || (layers = [inner])).push(resolveNode(root, pos, side, false));\n            }\n        }\n    }\n    return layers ? iterStack(layers) : inner;\n}\n/**\nA tree cursor object focuses on a given node in a syntax tree, and\nallows you to move to adjacent nodes.\n*/\nclass TreeCursor {\n    /**\n    Shorthand for `.type.name`.\n    */\n    get name() { return this.type.name; }\n    /**\n    @internal\n    */\n    constructor(node, mode = 0) {\n        /**\n        @internal\n        */\n        this.buffer = null;\n        this.stack = [];\n        /**\n        @internal\n        */\n        this.index = 0;\n        this.bufferNode = null;\n        this.mode = mode & ~IterMode.EnterBracketed;\n        if (node instanceof TreeNode) {\n            this.yieldNode(node);\n        }\n        else {\n            this._tree = node.context.parent;\n            this.buffer = node.context;\n            for (let n = node._parent; n; n = n._parent)\n                this.stack.unshift(n.index);\n            this.bufferNode = node;\n            this.yieldBuf(node.index);\n        }\n    }\n    yieldNode(node) {\n        if (!node)\n            return false;\n        this._tree = node;\n        this.type = node.type;\n        this.from = node.from;\n        this.to = node.to;\n        return true;\n    }\n    yieldBuf(index, type) {\n        this.index = index;\n        let { start, buffer } = this.buffer;\n        this.type = type || buffer.set.types[buffer.buffer[index]];\n        this.from = start + buffer.buffer[index + 1];\n        this.to = start + buffer.buffer[index + 2];\n        return true;\n    }\n    /**\n    @internal\n    */\n    yield(node) {\n        if (!node)\n            return false;\n        if (node instanceof TreeNode) {\n            this.buffer = null;\n            return this.yieldNode(node);\n        }\n        this.buffer = node.context;\n        return this.yieldBuf(node.index, node.type);\n    }\n    /**\n    @internal\n    */\n    toString() {\n        return this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString();\n    }\n    /**\n    @internal\n    */\n    enterChild(dir, pos, side) {\n        if (!this.buffer)\n            return this.yield(this._tree.nextChild(dir < 0 ? this._tree._tree.children.length - 1 : 0, dir, pos, side, this.mode));\n        let { buffer } = this.buffer;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.buffer.start, side);\n        if (index < 0)\n            return false;\n        this.stack.push(this.index);\n        return this.yieldBuf(index);\n    }\n    /**\n    Move the cursor to this node's first child. When this returns\n    false, the node has no child, and the cursor has not been moved.\n    */\n    firstChild() { return this.enterChild(1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to this node's last child.\n    */\n    lastChild() { return this.enterChild(-1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to the first child that ends after `pos`.\n    */\n    childAfter(pos) { return this.enterChild(1, pos, 2 /* Side.After */); }\n    /**\n    Move to the last child that starts before `pos`.\n    */\n    childBefore(pos) { return this.enterChild(-1, pos, -2 /* Side.Before */); }\n    /**\n    Move the cursor to the child around `pos`. If side is -1 the\n    child may end at that position, when 1 it may start there. This\n    will also enter [overlaid](#common.MountedTree.overlay)\n    [mounted](#common.NodeProp^mounted) trees unless `overlays` is\n    set to false.\n    */\n    enter(pos, side, mode = this.mode) {\n        if (!this.buffer)\n            return this.yield(this._tree.enter(pos, side, mode));\n        return mode & IterMode.ExcludeBuffers ? false : this.enterChild(1, pos, side);\n    }\n    /**\n    Move to the node's parent node, if this isn't the top node.\n    */\n    parent() {\n        if (!this.buffer)\n            return this.yieldNode((this.mode & IterMode.IncludeAnonymous) ? this._tree._parent : this._tree.parent);\n        if (this.stack.length)\n            return this.yieldBuf(this.stack.pop());\n        let parent = (this.mode & IterMode.IncludeAnonymous) ? this.buffer.parent : this.buffer.parent.nextSignificantParent();\n        this.buffer = null;\n        return this.yieldNode(parent);\n    }\n    /**\n    @internal\n    */\n    sibling(dir) {\n        if (!this.buffer)\n            return !this._tree._parent ? false\n                : this.yield(this._tree.index < 0 ? null\n                    : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode));\n        let { buffer } = this.buffer, d = this.stack.length - 1;\n        if (dir < 0) {\n            let parentStart = d < 0 ? 0 : this.stack[d] + 4;\n            if (this.index != parentStart)\n                return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n        }\n        else {\n            let after = buffer.buffer[this.index + 3];\n            if (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3]))\n                return this.yieldBuf(after);\n        }\n        return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)) : false;\n    }\n    /**\n    Move to this node's next sibling, if any.\n    */\n    nextSibling() { return this.sibling(1); }\n    /**\n    Move to this node's previous sibling, if any.\n    */\n    prevSibling() { return this.sibling(-1); }\n    atLastNode(dir) {\n        let index, parent, { buffer } = this;\n        if (buffer) {\n            if (dir > 0) {\n                if (this.index < buffer.buffer.buffer.length)\n                    return false;\n            }\n            else {\n                for (let i = 0; i < this.index; i++)\n                    if (buffer.buffer.buffer[i + 3] < this.index)\n                        return false;\n            }\n            ({ index, parent } = buffer);\n        }\n        else {\n            ({ index, _parent: parent } = this._tree);\n        }\n        for (; parent; { index, _parent: parent } = parent) {\n            if (index > -1)\n                for (let i = index + dir, e = dir < 0 ? -1 : parent._tree.children.length; i != e; i += dir) {\n                    let child = parent._tree.children[i];\n                    if ((this.mode & IterMode.IncludeAnonymous) ||\n                        child instanceof TreeBuffer ||\n                        !child.type.isAnonymous ||\n                        hasChild(child))\n                        return false;\n                }\n        }\n        return true;\n    }\n    move(dir, enter) {\n        if (enter && this.enterChild(dir, 0, 4 /* Side.DontCare */))\n            return true;\n        for (;;) {\n            if (this.sibling(dir))\n                return true;\n            if (this.atLastNode(dir) || !this.parent())\n                return false;\n        }\n    }\n    /**\n    Move to the next node in a\n    [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR)\n    traversal, going from a node to its first child or, if the\n    current node is empty or `enter` is false, its next sibling or\n    the next sibling of the first parent node that has one.\n    */\n    next(enter = true) { return this.move(1, enter); }\n    /**\n    Move to the next node in a last-to-first pre-order traversal. A\n    node is followed by its last child or, if it has none, its\n    previous sibling or the previous sibling of the first parent\n    node that has one.\n    */\n    prev(enter = true) { return this.move(-1, enter); }\n    /**\n    Move the cursor to the innermost node that covers `pos`. If\n    `side` is -1, it will enter nodes that end at `pos`. If it is 1,\n    it will enter nodes that start at `pos`.\n    */\n    moveTo(pos, side = 0) {\n        // Move up to a node that actually holds the position, if possible\n        while (this.from == this.to ||\n            (side < 1 ? this.from >= pos : this.from > pos) ||\n            (side > -1 ? this.to <= pos : this.to < pos))\n            if (!this.parent())\n                break;\n        // Then scan down into child nodes as far as possible\n        while (this.enterChild(1, pos, side)) { }\n        return this;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) at the cursor's current\n    position.\n    */\n    get node() {\n        if (!this.buffer)\n            return this._tree;\n        let cache = this.bufferNode, result = null, depth = 0;\n        if (cache && cache.context == this.buffer) {\n            scan: for (let index = this.index, d = this.stack.length; d >= 0;) {\n                for (let c = cache; c; c = c._parent)\n                    if (c.index == index) {\n                        if (index == this.index)\n                            return c;\n                        result = c;\n                        depth = d + 1;\n                        break scan;\n                    }\n                index = this.stack[--d];\n            }\n        }\n        for (let i = depth; i < this.stack.length; i++)\n            result = new BufferNode(this.buffer, result, this.stack[i]);\n        return this.bufferNode = new BufferNode(this.buffer, result, this.index);\n    }\n    /**\n    Get the [tree](#common.Tree) that represents the current node, if\n    any. Will return null when the node is in a [tree\n    buffer](#common.TreeBuffer).\n    */\n    get tree() {\n        return this.buffer ? null : this._tree._tree;\n    }\n    /**\n    Iterate over the current node and all its descendants, calling\n    `enter` when entering a node and `leave`, if given, when leaving\n    one. When `enter` returns `false`, any children of that node are\n    skipped, and `leave` isn't called for it.\n    */\n    iterate(enter, leave) {\n        for (let depth = 0;;) {\n            let mustLeave = false;\n            if (this.type.isAnonymous || enter(this) !== false) {\n                if (this.firstChild()) {\n                    depth++;\n                    continue;\n                }\n                if (!this.type.isAnonymous)\n                    mustLeave = true;\n            }\n            for (;;) {\n                if (mustLeave && leave)\n                    leave(this);\n                mustLeave = this.type.isAnonymous;\n                if (!depth)\n                    return;\n                if (this.nextSibling())\n                    break;\n                this.parent();\n                depth--;\n                mustLeave = true;\n            }\n        }\n    }\n    /**\n    Test whether the current node matches a given context\u2014a sequence\n    of direct parent node names. Empty strings in the context array\n    are treated as wildcards.\n    */\n    matchContext(context) {\n        if (!this.buffer)\n            return matchNodeContext(this.node.parent, context);\n        let { buffer } = this.buffer, { types } = buffer.set;\n        for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {\n            if (d < 0)\n                return matchNodeContext(this._tree, context, i);\n            let type = types[buffer.buffer[this.stack[d]]];\n            if (!type.isAnonymous) {\n                if (context[i] && context[i] != type.name)\n                    return false;\n                i--;\n            }\n        }\n        return true;\n    }\n}\nfunction hasChild(tree) {\n    return tree.children.some(ch => ch instanceof TreeBuffer || !ch.type.isAnonymous || hasChild(ch));\n}\nfunction buildTree(data) {\n    var _a;\n    let { buffer, nodeSet, maxBufferLength = DefaultBufferLength, reused = [], minRepeatType = nodeSet.types.length } = data;\n    let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;\n    let types = nodeSet.types;\n    let contextHash = 0, lookAhead = 0;\n    function takeNode(parentStart, minPos, children, positions, inRepeat, depth) {\n        let { id, start, end, size } = cursor;\n        let lookAheadAtStart = lookAhead, contextAtStart = contextHash;\n        if (size < 0) {\n            cursor.next();\n            if (size == -1 /* SpecialRecord.Reuse */) {\n                let node = reused[id];\n                children.push(node);\n                positions.push(start - parentStart);\n                return;\n            }\n            else if (size == -3 /* SpecialRecord.ContextChange */) { // Context change\n                contextHash = id;\n                return;\n            }\n            else if (size == -4 /* SpecialRecord.LookAhead */) {\n                lookAhead = id;\n                return;\n            }\n            else {\n                throw new RangeError(`Unrecognized record size: ${size}`);\n            }\n        }\n        let type = types[id], node, buffer;\n        let startPos = start - parentStart;\n        if (end - start <= maxBufferLength && (buffer = findBufferSize(cursor.pos - minPos, inRepeat))) {\n            // Small enough for a buffer, and no reused nodes inside\n            let data = new Uint16Array(buffer.size - buffer.skip);\n            let endPos = cursor.pos - buffer.size, index = data.length;\n            while (cursor.pos > endPos)\n                index = copyToBuffer(buffer.start, data, index);\n            node = new TreeBuffer(data, end - buffer.start, nodeSet);\n            startPos = buffer.start - parentStart;\n        }\n        else { // Make it a node\n            let endPos = cursor.pos - size;\n            cursor.next();\n            let localChildren = [], localPositions = [];\n            let localInRepeat = id >= minRepeatType ? id : -1;\n            let lastGroup = 0, lastEnd = end;\n            while (cursor.pos > endPos) {\n                if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {\n                    if (cursor.end <= lastEnd - maxBufferLength) {\n                        makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n                        lastGroup = localChildren.length;\n                        lastEnd = cursor.end;\n                    }\n                    cursor.next();\n                }\n                else if (depth > 2500 /* CutOff.Depth */) {\n                    takeFlatNode(start, endPos, localChildren, localPositions);\n                }\n                else {\n                    takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1);\n                }\n            }\n            if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length)\n                makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n            localChildren.reverse();\n            localPositions.reverse();\n            if (localInRepeat > -1 && lastGroup > 0) {\n                let make = makeBalanced(type, contextAtStart);\n                node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);\n            }\n            else {\n                node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end, contextAtStart);\n            }\n        }\n        children.push(node);\n        positions.push(startPos);\n    }\n    function takeFlatNode(parentStart, minPos, children, positions) {\n        let nodes = []; // Temporary, inverted array of leaf nodes found, with absolute positions\n        let nodeCount = 0, stopAt = -1;\n        while (cursor.pos > minPos) {\n            let { id, start, end, size } = cursor;\n            if (size > 4) { // Not a leaf\n                cursor.next();\n            }\n            else if (stopAt > -1 && start < stopAt) {\n                break;\n            }\n            else {\n                if (stopAt < 0)\n                    stopAt = end - maxBufferLength;\n                nodes.push(id, start, end);\n                nodeCount++;\n                cursor.next();\n            }\n        }\n        if (nodeCount) {\n            let buffer = new Uint16Array(nodeCount * 4);\n            let start = nodes[nodes.length - 2];\n            for (let i = nodes.length - 3, j = 0; i >= 0; i -= 3) {\n                buffer[j++] = nodes[i];\n                buffer[j++] = nodes[i + 1] - start;\n                buffer[j++] = nodes[i + 2] - start;\n                buffer[j++] = j;\n            }\n            children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet));\n            positions.push(start - parentStart);\n        }\n    }\n    function makeBalanced(type, contextHash) {\n        return (children, positions, length) => {\n            let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;\n            if (lastI >= 0 && (last = children[lastI]) instanceof Tree) {\n                if (!lastI && last.type == type && last.length == length)\n                    return last;\n                if (lookAheadProp = last.prop(NodeProp.lookAhead))\n                    lookAhead = positions[lastI] + last.length + lookAheadProp;\n            }\n            return makeTree(type, children, positions, length, lookAhead, contextHash);\n        };\n    }\n    function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead, contextHash) {\n        let localChildren = [], localPositions = [];\n        while (children.length > i) {\n            localChildren.push(children.pop());\n            localPositions.push(positions.pop() + base - from);\n        }\n        children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to, contextHash));\n        positions.push(from - base);\n    }\n    function makeTree(type, children, positions, length, lookAhead, contextHash, props) {\n        if (contextHash) {\n            let pair = [NodeProp.contextHash, contextHash];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        if (lookAhead > 25) {\n            let pair = [NodeProp.lookAhead, lookAhead];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        return new Tree(type, children, positions, length, props);\n    }\n    function findBufferSize(maxSize, inRepeat) {\n        // Scan through the buffer to find previous siblings that fit\n        // together in a TreeBuffer, and don't contain any reused nodes\n        // (which can't be stored in a buffer).\n        // If `inRepeat` is > -1, ignore node boundaries of that type for\n        // nesting, but make sure the end falls either at the start\n        // (`maxSize`) or before such a node.\n        let fork = cursor.fork();\n        let size = 0, start = 0, skip = 0, minStart = fork.end - maxBufferLength;\n        let result = { size: 0, start: 0, skip: 0 };\n        scan: for (let minPos = fork.pos - maxSize; fork.pos > minPos;) {\n            let nodeSize = fork.size;\n            // Pretend nested repeat nodes of the same type don't exist\n            if (fork.id == inRepeat && nodeSize >= 0) {\n                // Except that we store the current state as a valid return\n                // value.\n                result.size = size;\n                result.start = start;\n                result.skip = skip;\n                skip += 4;\n                size += 4;\n                fork.next();\n                continue;\n            }\n            let startPos = fork.pos - nodeSize;\n            if (nodeSize < 0 || startPos < minPos || fork.start < minStart)\n                break;\n            let localSkipped = fork.id >= minRepeatType ? 4 : 0;\n            let nodeStart = fork.start;\n            fork.next();\n            while (fork.pos > startPos) {\n                if (fork.size < 0) {\n                    if (fork.size == -3 /* SpecialRecord.ContextChange */ || fork.size == -4 /* SpecialRecord.LookAhead */)\n                        localSkipped += 4;\n                    else\n                        break scan;\n                }\n                else if (fork.id >= minRepeatType) {\n                    localSkipped += 4;\n                }\n                fork.next();\n            }\n            start = nodeStart;\n            size += nodeSize;\n            skip += localSkipped;\n        }\n        if (inRepeat < 0 || size == maxSize) {\n            result.size = size;\n            result.start = start;\n            result.skip = skip;\n        }\n        return result.size > 4 ? result : undefined;\n    }\n    function copyToBuffer(bufferStart, buffer, index) {\n        let { id, start, end, size } = cursor;\n        cursor.next();\n        if (size >= 0 && id < minRepeatType) {\n            let startIndex = index;\n            if (size > 4) {\n                let endPos = cursor.pos - (size - 4);\n                while (cursor.pos > endPos)\n                    index = copyToBuffer(bufferStart, buffer, index);\n            }\n            buffer[--index] = startIndex;\n            buffer[--index] = end - bufferStart;\n            buffer[--index] = start - bufferStart;\n            buffer[--index] = id;\n        }\n        else if (size == -3 /* SpecialRecord.ContextChange */) {\n            contextHash = id;\n        }\n        else if (size == -4 /* SpecialRecord.LookAhead */) {\n            lookAhead = id;\n        }\n        return index;\n    }\n    let children = [], positions = [];\n    while (cursor.pos > 0)\n        takeNode(data.start || 0, data.bufferStart || 0, children, positions, -1, 0);\n    let length = (_a = data.length) !== null && _a !== void 0 ? _a : (children.length ? positions[0] + children[0].length : 0);\n    return new Tree(types[data.topID], children.reverse(), positions.reverse(), length);\n}\nconst nodeSizeCache = new WeakMap;\nfunction nodeSize(balanceType, node) {\n    if (!balanceType.isAnonymous || node instanceof TreeBuffer || node.type != balanceType)\n        return 1;\n    let size = nodeSizeCache.get(node);\n    if (size == null) {\n        size = 1;\n        for (let child of node.children) {\n            if (child.type != balanceType || !(child instanceof Tree)) {\n                size = 1;\n                break;\n            }\n            size += nodeSize(balanceType, child);\n        }\n        nodeSizeCache.set(node, size);\n    }\n    return size;\n}\nfunction balanceRange(\n// The type the balanced tree's inner nodes.\nbalanceType, \n// The direct children and their positions\nchildren, positions, \n// The index range in children/positions to use\nfrom, to, \n// The start position of the nodes, relative to their parent.\nstart, \n// Length of the outer node\nlength, \n// Function to build the top node of the balanced tree\nmkTop, \n// Function to build internal nodes for the balanced tree\nmkTree) {\n    let total = 0;\n    for (let i = from; i < to; i++)\n        total += nodeSize(balanceType, children[i]);\n    let maxChild = Math.ceil((total * 1.5) / 8 /* Balance.BranchFactor */);\n    let localChildren = [], localPositions = [];\n    function divide(children, positions, from, to, offset) {\n        for (let i = from; i < to;) {\n            let groupFrom = i, groupStart = positions[i], groupSize = nodeSize(balanceType, children[i]);\n            i++;\n            for (; i < to; i++) {\n                let nextSize = nodeSize(balanceType, children[i]);\n                if (groupSize + nextSize >= maxChild)\n                    break;\n                groupSize += nextSize;\n            }\n            if (i == groupFrom + 1) {\n                if (groupSize > maxChild) {\n                    let only = children[groupFrom]; // Only trees can have a size > 1\n                    divide(only.children, only.positions, 0, only.children.length, positions[groupFrom] + offset);\n                    continue;\n                }\n                localChildren.push(children[groupFrom]);\n            }\n            else {\n                let length = positions[i - 1] + children[i - 1].length - groupStart;\n                localChildren.push(balanceRange(balanceType, children, positions, groupFrom, i, groupStart, length, null, mkTree));\n            }\n            localPositions.push(groupStart + offset - start);\n        }\n    }\n    divide(children, positions, from, to, 0);\n    return (mkTop || mkTree)(localChildren, localPositions, length);\n}\n/**\nProvides a way to associate values with pieces of trees. As long\nas that part of the tree is reused, the associated values can be\nretrieved from an updated tree.\n*/\nclass NodeWeakMap {\n    constructor() {\n        this.map = new WeakMap();\n    }\n    setBuffer(buffer, index, value) {\n        let inner = this.map.get(buffer);\n        if (!inner)\n            this.map.set(buffer, inner = new Map);\n        inner.set(index, value);\n    }\n    getBuffer(buffer, index) {\n        let inner = this.map.get(buffer);\n        return inner && inner.get(index);\n    }\n    /**\n    Set the value for this syntax node.\n    */\n    set(node, value) {\n        if (node instanceof BufferNode)\n            this.setBuffer(node.context.buffer, node.index, value);\n        else if (node instanceof TreeNode)\n            this.map.set(node.tree, value);\n    }\n    /**\n    Retrieve value for this syntax node, if it exists in the map.\n    */\n    get(node) {\n        return node instanceof BufferNode ? this.getBuffer(node.context.buffer, node.index)\n            : node instanceof TreeNode ? this.map.get(node.tree) : undefined;\n    }\n    /**\n    Set the value for the node that a cursor currently points to.\n    */\n    cursorSet(cursor, value) {\n        if (cursor.buffer)\n            this.setBuffer(cursor.buffer.buffer, cursor.index, value);\n        else\n            this.map.set(cursor.tree, value);\n    }\n    /**\n    Retrieve the value for the node that a cursor currently points\n    to.\n    */\n    cursorGet(cursor) {\n        return cursor.buffer ? this.getBuffer(cursor.buffer.buffer, cursor.index) : this.map.get(cursor.tree);\n    }\n}\n\n/**\nTree fragments are used during [incremental\nparsing](#common.Parser.startParse) to track parts of old trees\nthat can be reused in a new parse. An array of fragments is used\nto track regions of an old tree whose nodes might be reused in new\nparses. Use the static\n[`applyChanges`](#common.TreeFragment^applyChanges) method to\nupdate fragments for document changes.\n*/\nclass TreeFragment {\n    /**\n    Construct a tree fragment. You'll usually want to use\n    [`addTree`](#common.TreeFragment^addTree) and\n    [`applyChanges`](#common.TreeFragment^applyChanges) instead of\n    calling this directly.\n    */\n    constructor(\n    /**\n    The start of the unchanged range pointed to by this fragment.\n    This refers to an offset in the _updated_ document (as opposed\n    to the original tree).\n    */\n    from, \n    /**\n    The end of the unchanged range.\n    */\n    to, \n    /**\n    The tree that this fragment is based on.\n    */\n    tree, \n    /**\n    The offset between the fragment's tree and the document that\n    this fragment can be used against. Add this when going from\n    document to tree positions, subtract it to go from tree to\n    document positions.\n    */\n    offset, openStart = false, openEnd = false) {\n        this.from = from;\n        this.to = to;\n        this.tree = tree;\n        this.offset = offset;\n        this.open = (openStart ? 1 /* Open.Start */ : 0) | (openEnd ? 2 /* Open.End */ : 0);\n    }\n    /**\n    Whether the start of the fragment represents the start of a\n    parse, or the end of a change. (In the second case, it may not\n    be safe to reuse some nodes at the start, depending on the\n    parsing algorithm.)\n    */\n    get openStart() { return (this.open & 1 /* Open.Start */) > 0; }\n    /**\n    Whether the end of the fragment represents the end of a\n    full-document parse, or the start of a change.\n    */\n    get openEnd() { return (this.open & 2 /* Open.End */) > 0; }\n    /**\n    Create a set of fragments from a freshly parsed tree, or update\n    an existing set of fragments by replacing the ones that overlap\n    with a tree with content from the new tree. When `partial` is\n    true, the parse is treated as incomplete, and the resulting\n    fragment has [`openEnd`](#common.TreeFragment.openEnd) set to\n    true.\n    */\n    static addTree(tree, fragments = [], partial = false) {\n        let result = [new TreeFragment(0, tree.length, tree, 0, false, partial)];\n        for (let f of fragments)\n            if (f.to > tree.length)\n                result.push(f);\n        return result;\n    }\n    /**\n    Apply a set of edits to an array of fragments, removing or\n    splitting fragments as necessary to remove edited ranges, and\n    adjusting offsets for fragments that moved.\n    */\n    static applyChanges(fragments, changes, minGap = 128) {\n        if (!changes.length)\n            return fragments;\n        let result = [];\n        let fI = 1, nextF = fragments.length ? fragments[0] : null;\n        for (let cI = 0, pos = 0, off = 0;; cI++) {\n            let nextC = cI < changes.length ? changes[cI] : null;\n            let nextPos = nextC ? nextC.fromA : 1e9;\n            if (nextPos - pos >= minGap)\n                while (nextF && nextF.from < nextPos) {\n                    let cut = nextF;\n                    if (pos >= cut.from || nextPos <= cut.to || off) {\n                        let fFrom = Math.max(cut.from, pos) - off, fTo = Math.min(cut.to, nextPos) - off;\n                        cut = fFrom >= fTo ? null : new TreeFragment(fFrom, fTo, cut.tree, cut.offset + off, cI > 0, !!nextC);\n                    }\n                    if (cut)\n                        result.push(cut);\n                    if (nextF.to > nextPos)\n                        break;\n                    nextF = fI < fragments.length ? fragments[fI++] : null;\n                }\n            if (!nextC)\n                break;\n            pos = nextC.toA;\n            off = nextC.toA - nextC.toB;\n        }\n        return result;\n    }\n}\n/**\nA superclass that parsers should extend.\n*/\nclass Parser {\n    /**\n    Start a parse, returning a [partial parse](#common.PartialParse)\n    object. [`fragments`](#common.TreeFragment) can be passed in to\n    make the parse incremental.\n    \n    By default, the entire input is parsed. You can pass `ranges`,\n    which should be a sorted array of non-empty, non-overlapping\n    ranges, to parse only those ranges. The tree returned in that\n    case will start at `ranges[0].from`.\n    */\n    startParse(input, fragments, ranges) {\n        if (typeof input == \"string\")\n            input = new StringInput(input);\n        ranges = !ranges ? [new Range(0, input.length)] : ranges.length ? ranges.map(r => new Range(r.from, r.to)) : [new Range(0, 0)];\n        return this.createParse(input, fragments || [], ranges);\n    }\n    /**\n    Run a full parse, returning the resulting tree.\n    */\n    parse(input, fragments, ranges) {\n        let parse = this.startParse(input, fragments, ranges);\n        for (;;) {\n            let done = parse.advance();\n            if (done)\n                return done;\n        }\n    }\n}\nclass StringInput {\n    constructor(string) {\n        this.string = string;\n    }\n    get length() { return this.string.length; }\n    chunk(from) { return this.string.slice(from); }\n    get lineChunks() { return false; }\n    read(from, to) { return this.string.slice(from, to); }\n}\n\n/**\nCreate a parse wrapper that, after the inner parse completes,\nscans its tree for mixed language regions with the `nest`\nfunction, runs the resulting [inner parses](#common.NestedParse),\nand then [mounts](#common.NodeProp^mounted) their results onto the\ntree.\n*/\nfunction parseMixed(nest) {\n    return (parse, input, fragments, ranges) => new MixedParse(parse, nest, input, fragments, ranges);\n}\nclass InnerParse {\n    constructor(parser, parse, overlay, bracketed, target, from) {\n        this.parser = parser;\n        this.parse = parse;\n        this.overlay = overlay;\n        this.bracketed = bracketed;\n        this.target = target;\n        this.from = from;\n    }\n}\nfunction checkRanges(ranges) {\n    if (!ranges.length || ranges.some(r => r.from >= r.to))\n        throw new RangeError(\"Invalid inner parse ranges given: \" + JSON.stringify(ranges));\n}\nclass ActiveOverlay {\n    constructor(parser, predicate, mounts, index, start, bracketed, target, prev) {\n        this.parser = parser;\n        this.predicate = predicate;\n        this.mounts = mounts;\n        this.index = index;\n        this.start = start;\n        this.bracketed = bracketed;\n        this.target = target;\n        this.prev = prev;\n        this.depth = 0;\n        this.ranges = [];\n    }\n}\nconst stoppedInner = new NodeProp({ perNode: true });\nclass MixedParse {\n    constructor(base, nest, input, fragments, ranges) {\n        this.nest = nest;\n        this.input = input;\n        this.fragments = fragments;\n        this.ranges = ranges;\n        this.inner = [];\n        this.innerDone = 0;\n        this.baseTree = null;\n        this.stoppedAt = null;\n        this.baseParse = base;\n    }\n    advance() {\n        if (this.baseParse) {\n            let done = this.baseParse.advance();\n            if (!done)\n                return null;\n            this.baseParse = null;\n            this.baseTree = done;\n            this.startInner();\n            if (this.stoppedAt != null)\n                for (let inner of this.inner)\n                    inner.parse.stopAt(this.stoppedAt);\n        }\n        if (this.innerDone == this.inner.length) {\n            let result = this.baseTree;\n            if (this.stoppedAt != null)\n                result = new Tree(result.type, result.children, result.positions, result.length, result.propValues.concat([[stoppedInner, this.stoppedAt]]));\n            return result;\n        }\n        let inner = this.inner[this.innerDone], done = inner.parse.advance();\n        if (done) {\n            this.innerDone++;\n            // This is a somewhat dodgy but super helpful hack where we\n            // patch up nodes created by the inner parse (and thus\n            // presumably not aliased anywhere else) to hold the information\n            // about the inner parse.\n            let props = Object.assign(Object.create(null), inner.target.props);\n            props[NodeProp.mounted.id] = new MountedTree(done, inner.overlay, inner.parser, inner.bracketed);\n            inner.target.props = props;\n        }\n        return null;\n    }\n    get parsedPos() {\n        if (this.baseParse)\n            return 0;\n        let pos = this.input.length;\n        for (let i = this.innerDone; i < this.inner.length; i++) {\n            if (this.inner[i].from < pos)\n                pos = Math.min(pos, this.inner[i].parse.parsedPos);\n        }\n        return pos;\n    }\n    stopAt(pos) {\n        this.stoppedAt = pos;\n        if (this.baseParse)\n            this.baseParse.stopAt(pos);\n        else\n            for (let i = this.innerDone; i < this.inner.length; i++)\n                this.inner[i].parse.stopAt(pos);\n    }\n    startInner() {\n        let fragmentCursor = new FragmentCursor(this.fragments);\n        let overlay = null;\n        let covered = null;\n        let cursor = new TreeCursor(new TreeNode(this.baseTree, this.ranges[0].from, 0, null), IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n        scan: for (let nest, isCovered;;) {\n            let enter = true, range;\n            if (this.stoppedAt != null && cursor.from >= this.stoppedAt) {\n                enter = false;\n            }\n            else if (fragmentCursor.hasNode(cursor)) {\n                if (overlay) {\n                    let match = overlay.mounts.find(m => m.frag.from <= cursor.from && m.frag.to >= cursor.to && m.mount.overlay);\n                    if (match)\n                        for (let r of match.mount.overlay) {\n                            let from = r.from + match.pos, to = r.to + match.pos;\n                            if (from >= cursor.from && to <= cursor.to && !overlay.ranges.some(r => r.from < to && r.to > from))\n                                overlay.ranges.push({ from, to });\n                        }\n                }\n                enter = false;\n            }\n            else if (covered && (isCovered = checkCover(covered.ranges, cursor.from, cursor.to))) {\n                enter = isCovered != 2 /* Cover.Full */;\n            }\n            else if (!cursor.type.isAnonymous && (nest = this.nest(cursor, this.input)) &&\n                (cursor.from < cursor.to || !nest.overlay)) {\n                if (!cursor.tree) {\n                    materialize(cursor);\n                    // materialize create one more level of nesting\n                    // we need to add depth to active overlay for going backwards\n                    if (overlay)\n                        overlay.depth++;\n                    if (covered)\n                        covered.depth++;\n                }\n                let oldMounts = fragmentCursor.findMounts(cursor.from, nest.parser);\n                if (typeof nest.overlay == \"function\") {\n                    overlay = new ActiveOverlay(nest.parser, nest.overlay, oldMounts, this.inner.length, cursor.from, !!nest.bracketed, cursor.tree, overlay);\n                }\n                else {\n                    let ranges = punchRanges(this.ranges, nest.overlay ||\n                        (cursor.from < cursor.to ? [new Range(cursor.from, cursor.to)] : []));\n                    if (ranges.length)\n                        checkRanges(ranges);\n                    if (ranges.length || !nest.overlay)\n                        this.inner.push(new InnerParse(nest.parser, ranges.length ? nest.parser.startParse(this.input, enterFragments(oldMounts, ranges), ranges)\n                            : nest.parser.startParse(\"\"), nest.overlay ? nest.overlay.map(r => new Range(r.from - cursor.from, r.to - cursor.from)) : null, !!nest.bracketed, cursor.tree, ranges.length ? ranges[0].from : cursor.from));\n                    if (!nest.overlay)\n                        enter = false;\n                    else if (ranges.length)\n                        covered = { ranges, depth: 0, prev: covered };\n                }\n            }\n            else if (overlay && (range = overlay.predicate(cursor))) {\n                if (range === true)\n                    range = new Range(cursor.from, cursor.to);\n                if (range.from < range.to) {\n                    let last = overlay.ranges.length - 1;\n                    if (last >= 0 && overlay.ranges[last].to == range.from)\n                        overlay.ranges[last] = { from: overlay.ranges[last].from, to: range.to };\n                    else\n                        overlay.ranges.push(range);\n                }\n            }\n            if (enter && cursor.firstChild()) {\n                if (overlay)\n                    overlay.depth++;\n                if (covered)\n                    covered.depth++;\n            }\n            else {\n                for (;;) {\n                    if (cursor.nextSibling())\n                        break;\n                    if (!cursor.parent())\n                        break scan;\n                    if (overlay && !--overlay.depth) {\n                        let ranges = punchRanges(this.ranges, overlay.ranges);\n                        if (ranges.length) {\n                            checkRanges(ranges);\n                            this.inner.splice(overlay.index, 0, new InnerParse(overlay.parser, overlay.parser.startParse(this.input, enterFragments(overlay.mounts, ranges), ranges), overlay.ranges.map(r => new Range(r.from - overlay.start, r.to - overlay.start)), overlay.bracketed, overlay.target, ranges[0].from));\n                        }\n                        overlay = overlay.prev;\n                    }\n                    if (covered && !--covered.depth)\n                        covered = covered.prev;\n                }\n            }\n        }\n    }\n}\nfunction checkCover(covered, from, to) {\n    for (let range of covered) {\n        if (range.from >= to)\n            break;\n        if (range.to > from)\n            return range.from <= from && range.to >= to ? 2 /* Cover.Full */ : 1 /* Cover.Partial */;\n    }\n    return 0 /* Cover.None */;\n}\n// Take a piece of buffer and convert it into a stand-alone\n// TreeBuffer.\nfunction sliceBuf(buf, startI, endI, nodes, positions, off) {\n    if (startI < endI) {\n        let from = buf.buffer[startI + 1];\n        nodes.push(buf.slice(startI, endI, from));\n        positions.push(from - off);\n    }\n}\n// This function takes a node that's in a buffer, and converts it, and\n// its parent buffer nodes, into a Tree. This is again acting on the\n// assumption that the trees and buffers have been constructed by the\n// parse that was ran via the mix parser, and thus aren't shared with\n// any other code, making violations of the immutability safe.\nfunction materialize(cursor) {\n    let { node } = cursor, stack = [];\n    let buffer = node.context.buffer;\n    // Scan up to the nearest tree\n    do {\n        stack.push(cursor.index);\n        cursor.parent();\n    } while (!cursor.tree);\n    // Find the index of the buffer in that tree\n    let base = cursor.tree, i = base.children.indexOf(buffer);\n    let buf = base.children[i], b = buf.buffer, newStack = [i];\n    // Split a level in the buffer, putting the nodes before and after\n    // the child that contains `node` into new buffers.\n    function split(startI, endI, type, innerOffset, length, stackPos) {\n        let targetI = stack[stackPos];\n        let children = [], positions = [];\n        sliceBuf(buf, startI, targetI, children, positions, innerOffset);\n        let from = b[targetI + 1], to = b[targetI + 2];\n        newStack.push(children.length);\n        let child = stackPos\n            ? split(targetI + 4, b[targetI + 3], buf.set.types[b[targetI]], from, to - from, stackPos - 1)\n            : node.toTree();\n        children.push(child);\n        positions.push(from - innerOffset);\n        sliceBuf(buf, b[targetI + 3], endI, children, positions, innerOffset);\n        return new Tree(type, children, positions, length);\n    }\n    base.children[i] = split(0, b.length, NodeType.none, 0, buf.length, stack.length - 1);\n    // Move the cursor back to the target node\n    for (let index of newStack) {\n        let tree = cursor.tree.children[index], pos = cursor.tree.positions[index];\n        cursor.yield(new TreeNode(tree, pos + cursor.from, index, cursor._tree));\n    }\n}\nclass StructureCursor {\n    constructor(root, offset) {\n        this.offset = offset;\n        this.done = false;\n        this.cursor = root.cursor(IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n    }\n    // Move to the first node (in pre-order) that starts at or after `pos`.\n    moveTo(pos) {\n        let { cursor } = this, p = pos - this.offset;\n        while (!this.done && cursor.from < p) {\n            if (cursor.to >= pos && cursor.enter(p, 1, IterMode.IgnoreOverlays | IterMode.ExcludeBuffers)) ;\n            else if (!cursor.next(false))\n                this.done = true;\n        }\n    }\n    hasNode(cursor) {\n        this.moveTo(cursor.from);\n        if (!this.done && this.cursor.from + this.offset == cursor.from && this.cursor.tree) {\n            for (let tree = this.cursor.tree;;) {\n                if (tree == cursor.tree)\n                    return true;\n                if (tree.children.length && tree.positions[0] == 0 && tree.children[0] instanceof Tree)\n                    tree = tree.children[0];\n                else\n                    break;\n            }\n        }\n        return false;\n    }\n}\nclass FragmentCursor {\n    constructor(fragments) {\n        var _a;\n        this.fragments = fragments;\n        this.curTo = 0;\n        this.fragI = 0;\n        if (fragments.length) {\n            let first = this.curFrag = fragments[0];\n            this.curTo = (_a = first.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : first.to;\n            this.inner = new StructureCursor(first.tree, -first.offset);\n        }\n        else {\n            this.curFrag = this.inner = null;\n        }\n    }\n    hasNode(node) {\n        while (this.curFrag && node.from >= this.curTo)\n            this.nextFrag();\n        return this.curFrag && this.curFrag.from <= node.from && this.curTo >= node.to && this.inner.hasNode(node);\n    }\n    nextFrag() {\n        var _a;\n        this.fragI++;\n        if (this.fragI == this.fragments.length) {\n            this.curFrag = this.inner = null;\n        }\n        else {\n            let frag = this.curFrag = this.fragments[this.fragI];\n            this.curTo = (_a = frag.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : frag.to;\n            this.inner = new StructureCursor(frag.tree, -frag.offset);\n        }\n    }\n    findMounts(pos, parser) {\n        var _a;\n        let result = [];\n        if (this.inner) {\n            this.inner.cursor.moveTo(pos, 1);\n            for (let pos = this.inner.cursor.node; pos; pos = pos.parent) {\n                let mount = (_a = pos.tree) === null || _a === void 0 ? void 0 : _a.prop(NodeProp.mounted);\n                if (mount && mount.parser == parser) {\n                    for (let i = this.fragI; i < this.fragments.length; i++) {\n                        let frag = this.fragments[i];\n                        if (frag.from >= pos.to)\n                            break;\n                        if (frag.tree == this.curFrag.tree)\n                            result.push({\n                                frag,\n                                pos: pos.from - frag.offset,\n                                mount\n                            });\n                    }\n                }\n            }\n        }\n        return result;\n    }\n}\nfunction punchRanges(outer, ranges) {\n    let copy = null, current = ranges;\n    for (let i = 1, j = 0; i < outer.length; i++) {\n        let gapFrom = outer[i - 1].to, gapTo = outer[i].from;\n        for (; j < current.length; j++) {\n            let r = current[j];\n            if (r.from >= gapTo)\n                break;\n            if (r.to <= gapFrom)\n                continue;\n            if (!copy)\n                current = copy = ranges.slice();\n            if (r.from < gapFrom) {\n                copy[j] = new Range(r.from, gapFrom);\n                if (r.to > gapTo)\n                    copy.splice(j + 1, 0, new Range(gapTo, r.to));\n            }\n            else if (r.to > gapTo) {\n                copy[j--] = new Range(gapTo, r.to);\n            }\n            else {\n                copy.splice(j--, 1);\n            }\n        }\n    }\n    return current;\n}\nfunction findCoverChanges(a, b, from, to) {\n    let iA = 0, iB = 0, inA = false, inB = false, pos = -1e9;\n    let result = [];\n    for (;;) {\n        let nextA = iA == a.length ? 1e9 : inA ? a[iA].to : a[iA].from;\n        let nextB = iB == b.length ? 1e9 : inB ? b[iB].to : b[iB].from;\n        if (inA != inB) {\n            let start = Math.max(pos, from), end = Math.min(nextA, nextB, to);\n            if (start < end)\n                result.push(new Range(start, end));\n        }\n        pos = Math.min(nextA, nextB);\n        if (pos == 1e9)\n            break;\n        if (nextA == pos) {\n            if (!inA)\n                inA = true;\n            else {\n                inA = false;\n                iA++;\n            }\n        }\n        if (nextB == pos) {\n            if (!inB)\n                inB = true;\n            else {\n                inB = false;\n                iB++;\n            }\n        }\n    }\n    return result;\n}\n// Given a number of fragments for the outer tree, and a set of ranges\n// to parse, find fragments for inner trees mounted around those\n// ranges, if any.\nfunction enterFragments(mounts, ranges) {\n    let result = [];\n    for (let { pos, mount, frag } of mounts) {\n        let startPos = pos + (mount.overlay ? mount.overlay[0].from : 0), endPos = startPos + mount.tree.length;\n        let from = Math.max(frag.from, startPos), to = Math.min(frag.to, endPos);\n        if (mount.overlay) {\n            let overlay = mount.overlay.map(r => new Range(r.from + pos, r.to + pos));\n            let changes = findCoverChanges(ranges, overlay, from, to);\n            for (let i = 0, pos = from;; i++) {\n                let last = i == changes.length, end = last ? to : changes[i].from;\n                if (end > pos)\n                    result.push(new TreeFragment(pos, end, mount.tree, -startPos, frag.from >= pos || frag.openStart, frag.to <= end || frag.openEnd));\n                if (last)\n                    break;\n                pos = changes[i].to;\n            }\n        }\n        else {\n            result.push(new TreeFragment(from, to, mount.tree, -startPos, frag.from >= startPos || frag.openStart, frag.to <= endPos || frag.openEnd));\n        }\n    }\n    return result;\n}\n\nexport { DefaultBufferLength, IterMode, MountedTree, NodeProp, NodeSet, NodeType, NodeWeakMap, Parser, Tree, TreeBuffer, TreeCursor, TreeFragment, parseMixed };\n", "import { NodeProp } from '@lezer/common';\n\nlet nextTagID = 0;\n/**\nHighlighting tags are markers that denote a highlighting category.\nThey are [associated](#highlight.styleTags) with parts of a syntax\ntree by a language mode, and then mapped to an actual CSS style by\na [highlighter](#highlight.Highlighter).\n\nBecause syntax tree node types and highlight styles have to be\nable to talk the same language, CodeMirror uses a mostly _closed_\n[vocabulary](#highlight.tags) of syntax tags (as opposed to\ntraditional open string-based systems, which make it hard for\nhighlighting themes to cover all the tokens produced by the\nvarious languages).\n\nIt _is_ possible to [define](#highlight.Tag^define) your own\nhighlighting tags for system-internal use (where you control both\nthe language package and the highlighter), but such tags will not\nbe picked up by regular highlighters (though you can derive them\nfrom standard tags to allow highlighters to fall back to those).\n*/\nclass Tag {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The set of this tag and all its parent tags, starting with\n    this one itself and sorted in order of decreasing specificity.\n    */\n    set, \n    /**\n    The base unmodified tag that this one is based on, if it's\n    modified @internal\n    */\n    base, \n    /**\n    The modifiers applied to this.base @internal\n    */\n    modified) {\n        this.set = set;\n        this.base = base;\n        this.modified = modified;\n        /**\n        @internal\n        */\n        this.id = nextTagID++;\n    }\n    /**\n    Define a new tag. If `parent` is given, the tag is treated as a\n    sub-tag of that parent, and\n    [highlighters](#highlight.tagHighlighter) that don't mention\n    this tag will try to fall back to the parent tag (or grandparent\n    tag, etc).\n    */\n    static define(parent) {\n        if (parent === null || parent === void 0 ? void 0 : parent.base)\n            throw new Error(\"Can not derive from a modified tag\");\n        let tag = new Tag([], null, []);\n        tag.set.push(tag);\n        if (parent)\n            for (let t of parent.set)\n                tag.set.push(t);\n        return tag;\n    }\n    /**\n    Define a tag _modifier_, which is a function that, given a tag,\n    will return a tag that is a subtag of the original. Applying the\n    same modifier to a twice tag will return the same value (`m1(t1)\n    == m1(t1)`) and applying multiple modifiers will, regardless or\n    order, produce the same tag (`m1(m2(t1)) == m2(m1(t1))`).\n    \n    When multiple modifiers are applied to a given base tag, each\n    smaller set of modifiers is registered as a parent, so that for\n    example `m1(m2(m3(t1)))` is a subtype of `m1(m2(t1))`,\n    `m1(m3(t1)`, and so on.\n    */\n    static defineModifier() {\n        let mod = new Modifier;\n        return (tag) => {\n            if (tag.modified.indexOf(mod) > -1)\n                return tag;\n            return Modifier.get(tag.base || tag, tag.modified.concat(mod).sort((a, b) => a.id - b.id));\n        };\n    }\n}\nlet nextModifierID = 0;\nclass Modifier {\n    constructor() {\n        this.instances = [];\n        this.id = nextModifierID++;\n    }\n    static get(base, mods) {\n        if (!mods.length)\n            return base;\n        let exists = mods[0].instances.find(t => t.base == base && sameArray(mods, t.modified));\n        if (exists)\n            return exists;\n        let set = [], tag = new Tag(set, base, mods);\n        for (let m of mods)\n            m.instances.push(tag);\n        let configs = powerSet(mods);\n        for (let parent of base.set)\n            if (!parent.modified.length)\n                for (let config of configs)\n                    set.push(Modifier.get(parent, config));\n        return tag;\n    }\n}\nfunction sameArray(a, b) {\n    return a.length == b.length && a.every((x, i) => x == b[i]);\n}\nfunction powerSet(array) {\n    let sets = [[]];\n    for (let i = 0; i < array.length; i++) {\n        for (let j = 0, e = sets.length; j < e; j++) {\n            sets.push(sets[j].concat(array[i]));\n        }\n    }\n    return sets.sort((a, b) => b.length - a.length);\n}\n/**\nThis function is used to add a set of tags to a language syntax\nvia [`NodeSet.extend`](#common.NodeSet.extend) or\n[`LRParser.configure`](#lr.LRParser.configure).\n\nThe argument object maps node selectors to [highlighting\ntags](#highlight.Tag) or arrays of tags.\n\nNode selectors may hold one or more (space-separated) node paths.\nSuch a path can be a [node name](#common.NodeType.name), or\nmultiple node names (or `*` wildcards) separated by slash\ncharacters, as in `\"Block/Declaration/VariableName\"`. Such a path\nmatches the final node but only if its direct parent nodes are the\nother nodes mentioned. A `*` in such a path matches any parent,\nbut only a single level\u2014wildcards that match multiple parents\naren't supported, both for efficiency reasons and because Lezer\ntrees make it rather hard to reason about what they would match.)\n\nA path can be ended with `/...` to indicate that the tag assigned\nto the node should also apply to all child nodes, even if they\nmatch their own style (by default, only the innermost style is\nused).\n\nWhen a path ends in `!`, as in `Attribute!`, no further matching\nhappens for the node's child nodes, and the entire node gets the\ngiven style.\n\nIn this notation, node names that contain `/`, `!`, `*`, or `...`\nmust be quoted as JSON strings.\n\nFor example:\n\n```javascript\nparser.withProps(\n  styleTags({\n    // Style Number and BigNumber nodes\n    \"Number BigNumber\": tags.number,\n    // Style Escape nodes whose parent is String\n    \"String/Escape\": tags.escape,\n    // Style anything inside Attributes nodes\n    \"Attributes!\": tags.meta,\n    // Add a style to all content inside Italic nodes\n    \"Italic/...\": tags.emphasis,\n    // Style InvalidString nodes as both `string` and `invalid`\n    \"InvalidString\": [tags.string, tags.invalid],\n    // Style the node named \"/\" as punctuation\n    '\"/\"': tags.punctuation\n  })\n)\n```\n*/\nfunction styleTags(spec) {\n    let byName = Object.create(null);\n    for (let prop in spec) {\n        let tags = spec[prop];\n        if (!Array.isArray(tags))\n            tags = [tags];\n        for (let part of prop.split(\" \"))\n            if (part) {\n                let pieces = [], mode = 2 /* Normal */, rest = part;\n                for (let pos = 0;;) {\n                    if (rest == \"...\" && pos > 0 && pos + 3 == part.length) {\n                        mode = 1 /* Inherit */;\n                        break;\n                    }\n                    let m = /^\"(?:[^\"\\\\]|\\\\.)*?\"|[^\\/!]+/.exec(rest);\n                    if (!m)\n                        throw new RangeError(\"Invalid path: \" + part);\n                    pieces.push(m[0] == \"*\" ? \"\" : m[0][0] == '\"' ? JSON.parse(m[0]) : m[0]);\n                    pos += m[0].length;\n                    if (pos == part.length)\n                        break;\n                    let next = part[pos++];\n                    if (pos == part.length && next == \"!\") {\n                        mode = 0 /* Opaque */;\n                        break;\n                    }\n                    if (next != \"/\")\n                        throw new RangeError(\"Invalid path: \" + part);\n                    rest = part.slice(pos);\n                }\n                let last = pieces.length - 1, inner = pieces[last];\n                if (!inner)\n                    throw new RangeError(\"Invalid path: \" + part);\n                let rule = new Rule(tags, mode, last > 0 ? pieces.slice(0, last) : null);\n                byName[inner] = rule.sort(byName[inner]);\n            }\n    }\n    return ruleNodeProp.add(byName);\n}\nconst ruleNodeProp = new NodeProp();\nclass Rule {\n    constructor(tags, mode, context, next) {\n        this.tags = tags;\n        this.mode = mode;\n        this.context = context;\n        this.next = next;\n    }\n    get opaque() { return this.mode == 0 /* Opaque */; }\n    get inherit() { return this.mode == 1 /* Inherit */; }\n    sort(other) {\n        if (!other || other.depth < this.depth) {\n            this.next = other;\n            return this;\n        }\n        other.next = this.sort(other.next);\n        return other;\n    }\n    get depth() { return this.context ? this.context.length : 0; }\n}\nRule.empty = new Rule([], 2 /* Normal */, null);\n/**\nDefine a [highlighter](#highlight.Highlighter) from an array of\ntag/class pairs. Classes associated with more specific tags will\ntake precedence.\n*/\nfunction tagHighlighter(tags, options) {\n    let map = Object.create(null);\n    for (let style of tags) {\n        if (!Array.isArray(style.tag))\n            map[style.tag.id] = style.class;\n        else\n            for (let tag of style.tag)\n                map[tag.id] = style.class;\n    }\n    let { scope, all = null } = options || {};\n    return {\n        style: (tags) => {\n            let cls = all;\n            for (let tag of tags) {\n                for (let sub of tag.set) {\n                    let tagClass = map[sub.id];\n                    if (tagClass) {\n                        cls = cls ? cls + \" \" + tagClass : tagClass;\n                        break;\n                    }\n                }\n            }\n            return cls;\n        },\n        scope\n    };\n}\nfunction highlightTags(highlighters, tags) {\n    let result = null;\n    for (let highlighter of highlighters) {\n        let value = highlighter.style(tags);\n        if (value)\n            result = result ? result + \" \" + value : value;\n    }\n    return result;\n}\n/**\nHighlight the given [tree](#common.Tree) with the given\n[highlighter](#highlight.Highlighter).\n*/\nfunction highlightTree(tree, highlighter, \n/**\nAssign styling to a region of the text. Will be called, in order\nof position, for any ranges where more than zero classes apply.\n`classes` is a space separated string of CSS classes.\n*/\nputStyle, \n/**\nThe start of the range to highlight.\n*/\nfrom = 0, \n/**\nThe end of the range.\n*/\nto = tree.length) {\n    let builder = new HighlightBuilder(from, Array.isArray(highlighter) ? highlighter : [highlighter], putStyle);\n    builder.highlightRange(tree.cursor(), from, to, \"\", builder.highlighters);\n    builder.flush(to);\n}\nclass HighlightBuilder {\n    constructor(at, highlighters, span) {\n        this.at = at;\n        this.highlighters = highlighters;\n        this.span = span;\n        this.class = \"\";\n    }\n    startSpan(at, cls) {\n        if (cls != this.class) {\n            this.flush(at);\n            if (at > this.at)\n                this.at = at;\n            this.class = cls;\n        }\n    }\n    flush(to) {\n        if (to > this.at && this.class)\n            this.span(this.at, to, this.class);\n    }\n    highlightRange(cursor, from, to, inheritedClass, highlighters) {\n        let { type, from: start, to: end } = cursor;\n        if (start >= to || end <= from)\n            return;\n        if (type.isTop)\n            highlighters = this.highlighters.filter(h => !h.scope || h.scope(type));\n        let cls = inheritedClass;\n        let rule = getStyleTags(cursor) || Rule.empty;\n        let tagCls = highlightTags(highlighters, rule.tags);\n        if (tagCls) {\n            if (cls)\n                cls += \" \";\n            cls += tagCls;\n            if (rule.mode == 1 /* Inherit */)\n                inheritedClass += (inheritedClass ? \" \" : \"\") + tagCls;\n        }\n        this.startSpan(Math.max(from, start), cls);\n        if (rule.opaque)\n            return;\n        let mounted = cursor.tree && cursor.tree.prop(NodeProp.mounted);\n        if (mounted && mounted.overlay) {\n            let inner = cursor.node.enter(mounted.overlay[0].from + start, 1);\n            let innerHighlighters = this.highlighters.filter(h => !h.scope || h.scope(mounted.tree.type));\n            let hasChild = cursor.firstChild();\n            for (let i = 0, pos = start;; i++) {\n                let next = i < mounted.overlay.length ? mounted.overlay[i] : null;\n                let nextPos = next ? next.from + start : end;\n                let rangeFrom = Math.max(from, pos), rangeTo = Math.min(to, nextPos);\n                if (rangeFrom < rangeTo && hasChild) {\n                    while (cursor.from < rangeTo) {\n                        this.highlightRange(cursor, rangeFrom, rangeTo, inheritedClass, highlighters);\n                        this.startSpan(Math.min(rangeTo, cursor.to), cls);\n                        if (cursor.to >= nextPos || !cursor.nextSibling())\n                            break;\n                    }\n                }\n                if (!next || nextPos > to)\n                    break;\n                pos = next.to + start;\n                if (pos > from) {\n                    this.highlightRange(inner.cursor(), Math.max(from, next.from + start), Math.min(to, pos), \"\", innerHighlighters);\n                    this.startSpan(Math.min(to, pos), cls);\n                }\n            }\n            if (hasChild)\n                cursor.parent();\n        }\n        else if (cursor.firstChild()) {\n            if (mounted)\n                inheritedClass = \"\";\n            do {\n                if (cursor.to <= from)\n                    continue;\n                if (cursor.from >= to)\n                    break;\n                this.highlightRange(cursor, from, to, inheritedClass, highlighters);\n                this.startSpan(Math.min(to, cursor.to), cls);\n            } while (cursor.nextSibling());\n            cursor.parent();\n        }\n    }\n}\n/**\nMatch a syntax node's [highlight rules](#highlight.styleTags). If\nthere's a match, return its set of tags, and whether it is\nopaque (uses a `!`) or applies to all child nodes (`/...`).\n*/\nfunction getStyleTags(node) {\n    let rule = node.type.prop(ruleNodeProp);\n    while (rule && rule.context && !node.matchContext(rule.context))\n        rule = rule.next;\n    return rule || null;\n}\nconst t = Tag.define;\nconst comment = t(), name = t(), typeName = t(name), propertyName = t(name), literal = t(), string = t(literal), number = t(literal), content = t(), heading = t(content), keyword = t(), operator = t(), punctuation = t(), bracket = t(punctuation), meta = t();\n/**\nThe default set of highlighting [tags](#highlight.Tag).\n\nThis collection is heavily biased towards programming languages,\nand necessarily incomplete. A full ontology of syntactic\nconstructs would fill a stack of books, and be impractical to\nwrite themes for. So try to make do with this set. If all else\nfails, [open an\nissue](https://github.com/codemirror/codemirror.next) to propose a\nnew tag, or [define](#highlight.Tag^define) a local custom tag for\nyour use case.\n\nNote that it is not obligatory to always attach the most specific\ntag possible to an element\u2014if your grammar can't easily\ndistinguish a certain type of element (such as a local variable),\nit is okay to style it as its more general variant (a variable).\n\nFor tags that extend some parent tag, the documentation links to\nthe parent.\n*/\nconst tags = {\n    /**\n    A comment.\n    */\n    comment,\n    /**\n    A line [comment](#highlight.tags.comment).\n    */\n    lineComment: t(comment),\n    /**\n    A block [comment](#highlight.tags.comment).\n    */\n    blockComment: t(comment),\n    /**\n    A documentation [comment](#highlight.tags.comment).\n    */\n    docComment: t(comment),\n    /**\n    Any kind of identifier.\n    */\n    name,\n    /**\n    The [name](#highlight.tags.name) of a variable.\n    */\n    variableName: t(name),\n    /**\n    A type [name](#highlight.tags.name).\n    */\n    typeName: typeName,\n    /**\n    A tag name (subtag of [`typeName`](#highlight.tags.typeName)).\n    */\n    tagName: t(typeName),\n    /**\n    A property or field [name](#highlight.tags.name).\n    */\n    propertyName: propertyName,\n    /**\n    An attribute name (subtag of [`propertyName`](#highlight.tags.propertyName)).\n    */\n    attributeName: t(propertyName),\n    /**\n    The [name](#highlight.tags.name) of a class.\n    */\n    className: t(name),\n    /**\n    A label [name](#highlight.tags.name).\n    */\n    labelName: t(name),\n    /**\n    A namespace [name](#highlight.tags.name).\n    */\n    namespace: t(name),\n    /**\n    The [name](#highlight.tags.name) of a macro.\n    */\n    macroName: t(name),\n    /**\n    A literal value.\n    */\n    literal,\n    /**\n    A string [literal](#highlight.tags.literal).\n    */\n    string,\n    /**\n    A documentation [string](#highlight.tags.string).\n    */\n    docString: t(string),\n    /**\n    A character literal (subtag of [string](#highlight.tags.string)).\n    */\n    character: t(string),\n    /**\n    An attribute value (subtag of [string](#highlight.tags.string)).\n    */\n    attributeValue: t(string),\n    /**\n    A number [literal](#highlight.tags.literal).\n    */\n    number,\n    /**\n    An integer [number](#highlight.tags.number) literal.\n    */\n    integer: t(number),\n    /**\n    A floating-point [number](#highlight.tags.number) literal.\n    */\n    float: t(number),\n    /**\n    A boolean [literal](#highlight.tags.literal).\n    */\n    bool: t(literal),\n    /**\n    Regular expression [literal](#highlight.tags.literal).\n    */\n    regexp: t(literal),\n    /**\n    An escape [literal](#highlight.tags.literal), for example a\n    backslash escape in a string.\n    */\n    escape: t(literal),\n    /**\n    A color [literal](#highlight.tags.literal).\n    */\n    color: t(literal),\n    /**\n    A URL [literal](#highlight.tags.literal).\n    */\n    url: t(literal),\n    /**\n    A language keyword.\n    */\n    keyword,\n    /**\n    The [keyword](#highlight.tags.keyword) for the self or this\n    object.\n    */\n    self: t(keyword),\n    /**\n    The [keyword](#highlight.tags.keyword) for null.\n    */\n    null: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) denoting some atomic value.\n    */\n    atom: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that represents a unit.\n    */\n    unit: t(keyword),\n    /**\n    A modifier [keyword](#highlight.tags.keyword).\n    */\n    modifier: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that acts as an operator.\n    */\n    operatorKeyword: t(keyword),\n    /**\n    A control-flow related [keyword](#highlight.tags.keyword).\n    */\n    controlKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that defines something.\n    */\n    definitionKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) related to defining or\n    interfacing with modules.\n    */\n    moduleKeyword: t(keyword),\n    /**\n    An operator.\n    */\n    operator,\n    /**\n    An [operator](#highlight.tags.operator) that dereferences something.\n    */\n    derefOperator: t(operator),\n    /**\n    Arithmetic-related [operator](#highlight.tags.operator).\n    */\n    arithmeticOperator: t(operator),\n    /**\n    Logical [operator](#highlight.tags.operator).\n    */\n    logicOperator: t(operator),\n    /**\n    Bit [operator](#highlight.tags.operator).\n    */\n    bitwiseOperator: t(operator),\n    /**\n    Comparison [operator](#highlight.tags.operator).\n    */\n    compareOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that updates its operand.\n    */\n    updateOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that defines something.\n    */\n    definitionOperator: t(operator),\n    /**\n    Type-related [operator](#highlight.tags.operator).\n    */\n    typeOperator: t(operator),\n    /**\n    Control-flow [operator](#highlight.tags.operator).\n    */\n    controlOperator: t(operator),\n    /**\n    Program or markup punctuation.\n    */\n    punctuation,\n    /**\n    [Punctuation](#highlight.tags.punctuation) that separates\n    things.\n    */\n    separator: t(punctuation),\n    /**\n    Bracket-style [punctuation](#highlight.tags.punctuation).\n    */\n    bracket,\n    /**\n    Angle [brackets](#highlight.tags.bracket) (usually `<` and `>`\n    tokens).\n    */\n    angleBracket: t(bracket),\n    /**\n    Square [brackets](#highlight.tags.bracket) (usually `[` and `]`\n    tokens).\n    */\n    squareBracket: t(bracket),\n    /**\n    Parentheses (usually `(` and `)` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    paren: t(bracket),\n    /**\n    Braces (usually `{` and `}` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    brace: t(bracket),\n    /**\n    Content, for example plain text in XML or markup documents.\n    */\n    content,\n    /**\n    [Content](#highlight.tags.content) that represents a heading.\n    */\n    heading,\n    /**\n    A level 1 [heading](#highlight.tags.heading).\n    */\n    heading1: t(heading),\n    /**\n    A level 2 [heading](#highlight.tags.heading).\n    */\n    heading2: t(heading),\n    /**\n    A level 3 [heading](#highlight.tags.heading).\n    */\n    heading3: t(heading),\n    /**\n    A level 4 [heading](#highlight.tags.heading).\n    */\n    heading4: t(heading),\n    /**\n    A level 5 [heading](#highlight.tags.heading).\n    */\n    heading5: t(heading),\n    /**\n    A level 6 [heading](#highlight.tags.heading).\n    */\n    heading6: t(heading),\n    /**\n    A prose separator (such as a horizontal rule).\n    */\n    contentSeparator: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a list.\n    */\n    list: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a quote.\n    */\n    quote: t(content),\n    /**\n    [Content](#highlight.tags.content) that is emphasized.\n    */\n    emphasis: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled strong.\n    */\n    strong: t(content),\n    /**\n    [Content](#highlight.tags.content) that is part of a link.\n    */\n    link: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled as code or\n    monospace.\n    */\n    monospace: t(content),\n    /**\n    [Content](#highlight.tags.content) that has a strike-through\n    style.\n    */\n    strikethrough: t(content),\n    /**\n    Inserted text in a change-tracking format.\n    */\n    inserted: t(),\n    /**\n    Deleted text.\n    */\n    deleted: t(),\n    /**\n    Changed text.\n    */\n    changed: t(),\n    /**\n    An invalid or unsyntactic element.\n    */\n    invalid: t(),\n    /**\n    Metadata or meta-instruction.\n    */\n    meta,\n    /**\n    [Metadata](#highlight.tags.meta) that applies to the entire\n    document.\n    */\n    documentMeta: t(meta),\n    /**\n    [Metadata](#highlight.tags.meta) that annotates or adds\n    attributes to a given syntactic element.\n    */\n    annotation: t(meta),\n    /**\n    Processing instruction or preprocessor directive. Subtag of\n    [meta](#highlight.tags.meta).\n    */\n    processingInstruction: t(meta),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that a\n    given element is being defined. Expected to be used with the\n    various [name](#highlight.tags.name) tags.\n    */\n    definition: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that\n    something is constant. Mostly expected to be used with\n    [variable names](#highlight.tags.variableName).\n    */\n    constant: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) used to indicate that\n    a [variable](#highlight.tags.variableName) or [property\n    name](#highlight.tags.propertyName) is being called or defined\n    as a function.\n    */\n    function: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that can be applied to\n    [names](#highlight.tags.name) to indicate that they belong to\n    the language's standard environment.\n    */\n    standard: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates a given\n    [names](#highlight.tags.name) is local to some scope.\n    */\n    local: Tag.defineModifier(),\n    /**\n    A generic variant [modifier](#highlight.Tag^defineModifier) that\n    can be used to tag language-specific alternative variants of\n    some common tag. It is recommended for themes to define special\n    forms of at least the [string](#highlight.tags.string) and\n    [variable name](#highlight.tags.variableName) tags, since those\n    come up a lot.\n    */\n    special: Tag.defineModifier()\n};\n/**\nThis is a highlighter that adds stable, predictable classes to\ntokens, for styling with external CSS.\n\nThe following tags are mapped to their name prefixed with `\"tok-\"`\n(for example `\"tok-comment\"`):\n\n* [`link`](#highlight.tags.link)\n* [`heading`](#highlight.tags.heading)\n* [`emphasis`](#highlight.tags.emphasis)\n* [`strong`](#highlight.tags.strong)\n* [`keyword`](#highlight.tags.keyword)\n* [`atom`](#highlight.tags.atom)\n* [`bool`](#highlight.tags.bool)\n* [`url`](#highlight.tags.url)\n* [`labelName`](#highlight.tags.labelName)\n* [`inserted`](#highlight.tags.inserted)\n* [`deleted`](#highlight.tags.deleted)\n* [`literal`](#highlight.tags.literal)\n* [`string`](#highlight.tags.string)\n* [`number`](#highlight.tags.number)\n* [`variableName`](#highlight.tags.variableName)\n* [`typeName`](#highlight.tags.typeName)\n* [`namespace`](#highlight.tags.namespace)\n* [`className`](#highlight.tags.className)\n* [`macroName`](#highlight.tags.macroName)\n* [`propertyName`](#highlight.tags.propertyName)\n* [`operator`](#highlight.tags.operator)\n* [`comment`](#highlight.tags.comment)\n* [`meta`](#highlight.tags.meta)\n* [`punctuation`](#highlight.tags.punctuation)\n* [`invalid`](#highlight.tags.invalid)\n\nIn addition, these mappings are provided:\n\n* [`regexp`](#highlight.tags.regexp),\n  [`escape`](#highlight.tags.escape), and\n  [`special`](#highlight.tags.special)[`(string)`](#highlight.tags.string)\n  are mapped to `\"tok-string2\"`\n* [`special`](#highlight.tags.special)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName2\"`\n* [`local`](#highlight.tags.local)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-local\"`\n* [`definition`](#highlight.tags.definition)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-definition\"`\n* [`definition`](#highlight.tags.definition)[`(propertyName)`](#highlight.tags.propertyName)\n  to `\"tok-propertyName tok-definition\"`\n*/\nconst classHighlighter = tagHighlighter([\n    { tag: tags.link, class: \"tok-link\" },\n    { tag: tags.heading, class: \"tok-heading\" },\n    { tag: tags.emphasis, class: \"tok-emphasis\" },\n    { tag: tags.strong, class: \"tok-strong\" },\n    { tag: tags.keyword, class: \"tok-keyword\" },\n    { tag: tags.atom, class: \"tok-atom\" },\n    { tag: tags.bool, class: \"tok-bool\" },\n    { tag: tags.url, class: \"tok-url\" },\n    { tag: tags.labelName, class: \"tok-labelName\" },\n    { tag: tags.inserted, class: \"tok-inserted\" },\n    { tag: tags.deleted, class: \"tok-deleted\" },\n    { tag: tags.literal, class: \"tok-literal\" },\n    { tag: tags.string, class: \"tok-string\" },\n    { tag: tags.number, class: \"tok-number\" },\n    { tag: [tags.regexp, tags.escape, tags.special(tags.string)], class: \"tok-string2\" },\n    { tag: tags.variableName, class: \"tok-variableName\" },\n    { tag: tags.local(tags.variableName), class: \"tok-variableName tok-local\" },\n    { tag: tags.definition(tags.variableName), class: \"tok-variableName tok-definition\" },\n    { tag: tags.special(tags.variableName), class: \"tok-variableName2\" },\n    { tag: tags.definition(tags.propertyName), class: \"tok-propertyName tok-definition\" },\n    { tag: tags.typeName, class: \"tok-typeName\" },\n    { tag: tags.namespace, class: \"tok-namespace\" },\n    { tag: tags.className, class: \"tok-className\" },\n    { tag: tags.macroName, class: \"tok-macroName\" },\n    { tag: tags.propertyName, class: \"tok-propertyName\" },\n    { tag: tags.operator, class: \"tok-operator\" },\n    { tag: tags.comment, class: \"tok-comment\" },\n    { tag: tags.meta, class: \"tok-meta\" },\n    { tag: tags.invalid, class: \"tok-invalid\" },\n    { tag: tags.punctuation, class: \"tok-punctuation\" }\n]);\n\nexport { Tag, classHighlighter, getStyleTags, highlightTree, styleTags, tagHighlighter, tags };\n", "import { NodeProp, IterMode, Tree, TreeFragment, Parser, NodeType, NodeSet } from '@lezer/common';\nimport { StateEffect, StateField, Facet, EditorState, countColumn, combineConfig, RangeSet, RangeSetBuilder, Prec } from '@codemirror/state';\nimport { ViewPlugin, logException, EditorView, Decoration, WidgetType, gutter, GutterMarker, Direction } from '@codemirror/view';\nimport { tags, tagHighlighter, highlightTree, styleTags } from '@lezer/highlight';\nimport { StyleModule } from 'style-mod';\n\nvar _a;\n/**\nNode prop stored in a parser's top syntax node to provide the\nfacet that stores language-specific data for that language.\n*/\nconst languageDataProp = /*@__PURE__*/new NodeProp();\n/**\nHelper function to define a facet (to be added to the top syntax\nnode(s) for a language via\n[`languageDataProp`](https://codemirror.net/6/docs/ref/#language.languageDataProp)), that will be\nused to associate language data with the language. You\nprobably only need this when subclassing\n[`Language`](https://codemirror.net/6/docs/ref/#language.Language).\n*/\nfunction defineLanguageFacet(baseData) {\n    return Facet.define({\n        combine: baseData ? values => values.concat(baseData) : undefined\n    });\n}\n/**\nSyntax node prop used to register sublanguages. Should be added to\nthe top level node type for the language.\n*/\nconst sublanguageProp = /*@__PURE__*/new NodeProp();\n/**\nA language object manages parsing and per-language\n[metadata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt). Parse data is\nmanaged as a [Lezer](https://lezer.codemirror.net) tree. The class\ncan be used directly, via the [`LRLanguage`](https://codemirror.net/6/docs/ref/#language.LRLanguage)\nsubclass for [Lezer](https://lezer.codemirror.net/) LR parsers, or\nvia the [`StreamLanguage`](https://codemirror.net/6/docs/ref/#language.StreamLanguage) subclass\nfor stream parsers.\n*/\nclass Language {\n    /**\n    Construct a language object. If you need to invoke this\n    directly, first define a data facet with\n    [`defineLanguageFacet`](https://codemirror.net/6/docs/ref/#language.defineLanguageFacet), and then\n    configure your parser to [attach](https://codemirror.net/6/docs/ref/#language.languageDataProp) it\n    to the language's outer syntax node.\n    */\n    constructor(\n    /**\n    The [language data](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) facet\n    used for this language.\n    */\n    data, parser, extraExtensions = [], \n    /**\n    A language name.\n    */\n    name = \"\") {\n        this.data = data;\n        this.name = name;\n        // Kludge to define EditorState.tree as a debugging helper,\n        // without the EditorState package actually knowing about\n        // languages and lezer trees.\n        if (!EditorState.prototype.hasOwnProperty(\"tree\"))\n            Object.defineProperty(EditorState.prototype, \"tree\", { get() { return syntaxTree(this); } });\n        this.parser = parser;\n        this.extension = [\n            language.of(this),\n            EditorState.languageData.of((state, pos, side) => {\n                let top = topNodeAt(state, pos, side), data = top.type.prop(languageDataProp);\n                if (!data)\n                    return [];\n                let base = state.facet(data), sub = top.type.prop(sublanguageProp);\n                if (sub) {\n                    let innerNode = top.resolve(pos - top.from, side);\n                    for (let sublang of sub)\n                        if (sublang.test(innerNode, state)) {\n                            let data = state.facet(sublang.facet);\n                            return sublang.type == \"replace\" ? data : data.concat(base);\n                        }\n                }\n                return base;\n            })\n        ].concat(extraExtensions);\n    }\n    /**\n    Query whether this language is active at the given position.\n    */\n    isActiveAt(state, pos, side = -1) {\n        return topNodeAt(state, pos, side).type.prop(languageDataProp) == this.data;\n    }\n    /**\n    Find the document regions that were parsed using this language.\n    The returned regions will _include_ any nested languages rooted\n    in this language, when those exist.\n    */\n    findRegions(state) {\n        let lang = state.facet(language);\n        if ((lang === null || lang === void 0 ? void 0 : lang.data) == this.data)\n            return [{ from: 0, to: state.doc.length }];\n        if (!lang || !lang.allowsNesting)\n            return [];\n        let result = [];\n        let explore = (tree, from) => {\n            if (tree.prop(languageDataProp) == this.data) {\n                result.push({ from, to: from + tree.length });\n                return;\n            }\n            let mount = tree.prop(NodeProp.mounted);\n            if (mount) {\n                if (mount.tree.prop(languageDataProp) == this.data) {\n                    if (mount.overlay)\n                        for (let r of mount.overlay)\n                            result.push({ from: r.from + from, to: r.to + from });\n                    else\n                        result.push({ from: from, to: from + tree.length });\n                    return;\n                }\n                else if (mount.overlay) {\n                    let size = result.length;\n                    explore(mount.tree, mount.overlay[0].from + from);\n                    if (result.length > size)\n                        return;\n                }\n            }\n            for (let i = 0; i < tree.children.length; i++) {\n                let ch = tree.children[i];\n                if (ch instanceof Tree)\n                    explore(ch, tree.positions[i] + from);\n            }\n        };\n        explore(syntaxTree(state), 0);\n        return result;\n    }\n    /**\n    Indicates whether this language allows nested languages. The\n    default implementation returns true.\n    */\n    get allowsNesting() { return true; }\n}\n/**\n@internal\n*/\nLanguage.setState = /*@__PURE__*/StateEffect.define();\nfunction topNodeAt(state, pos, side) {\n    let topLang = state.facet(language), tree = syntaxTree(state).topNode;\n    if (!topLang || topLang.allowsNesting) {\n        for (let node = tree; node; node = node.enter(pos, side, IterMode.ExcludeBuffers | IterMode.EnterBracketed))\n            if (node.type.isTop)\n                tree = node;\n    }\n    return tree;\n}\n/**\nA subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language) for use with Lezer\n[LR parsers](https://lezer.codemirror.net/docs/ref#lr.LRParser)\nparsers.\n*/\nclass LRLanguage extends Language {\n    constructor(data, parser, name) {\n        super(data, parser, [], name);\n        this.parser = parser;\n    }\n    /**\n    Define a language from a parser.\n    */\n    static define(spec) {\n        let data = defineLanguageFacet(spec.languageData);\n        return new LRLanguage(data, spec.parser.configure({\n            props: [languageDataProp.add(type => type.isTop ? data : undefined)]\n        }), spec.name);\n    }\n    /**\n    Create a new instance of this language with a reconfigured\n    version of its parser and optionally a new name.\n    */\n    configure(options, name) {\n        return new LRLanguage(this.data, this.parser.configure(options), name || this.name);\n    }\n    get allowsNesting() { return this.parser.hasWrappers(); }\n}\n/**\nGet the syntax tree for a state, which is the current (possibly\nincomplete) parse tree of the active\n[language](https://codemirror.net/6/docs/ref/#language.Language), or the empty tree if there is no\nlanguage available.\n*/\nfunction syntaxTree(state) {\n    let field = state.field(Language.state, false);\n    return field ? field.tree : Tree.empty;\n}\n/**\nTry to get a parse tree that spans at least up to `upto`. The\nmethod will do at most `timeout` milliseconds of work to parse\nup to that point if the tree isn't already available.\n*/\nfunction ensureSyntaxTree(state, upto, timeout = 50) {\n    var _a;\n    let parse = (_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context;\n    if (!parse)\n        return null;\n    let oldVieport = parse.viewport;\n    parse.updateViewport({ from: 0, to: upto });\n    let result = parse.isDone(upto) || parse.work(timeout, upto) ? parse.tree : null;\n    parse.updateViewport(oldVieport);\n    return result;\n}\n/**\nQueries whether there is a full syntax tree available up to the\ngiven document position. If there isn't, the background parse\nprocess _might_ still be working and update the tree further, but\nthere is no guarantee of that\u2014the parser will [stop\nworking](https://codemirror.net/6/docs/ref/#language.syntaxParserRunning) when it has spent a\ncertain amount of time or has moved beyond the visible viewport.\nAlways returns false if no language has been enabled.\n*/\nfunction syntaxTreeAvailable(state, upto = state.doc.length) {\n    var _a;\n    return ((_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context.isDone(upto)) || false;\n}\n/**\nMove parsing forward, and update the editor state afterwards to\nreflect the new tree. Will work for at most `timeout`\nmilliseconds. Returns true if the parser managed get to the given\nposition in that time.\n*/\nfunction forceParsing(view, upto = view.viewport.to, timeout = 100) {\n    let success = ensureSyntaxTree(view.state, upto, timeout);\n    if (success != syntaxTree(view.state))\n        view.dispatch({});\n    return !!success;\n}\n/**\nTells you whether the language parser is planning to do more\nparsing work (in a `requestIdleCallback` pseudo-thread) or has\nstopped running, either because it parsed the entire document,\nbecause it spent too much time and was cut off, or because there\nis no language parser enabled.\n*/\nfunction syntaxParserRunning(view) {\n    var _a;\n    return ((_a = view.plugin(parseWorker)) === null || _a === void 0 ? void 0 : _a.isWorking()) || false;\n}\n/**\nLezer-style\n[`Input`](https://lezer.codemirror.net/docs/ref#common.Input)\nobject for a [`Text`](https://codemirror.net/6/docs/ref/#state.Text) object.\n*/\nclass DocInput {\n    /**\n    Create an input object for the given document.\n    */\n    constructor(doc) {\n        this.doc = doc;\n        this.cursorPos = 0;\n        this.string = \"\";\n        this.cursor = doc.iter();\n    }\n    get length() { return this.doc.length; }\n    syncTo(pos) {\n        this.string = this.cursor.next(pos - this.cursorPos).value;\n        this.cursorPos = pos + this.string.length;\n        return this.cursorPos - this.string.length;\n    }\n    chunk(pos) {\n        this.syncTo(pos);\n        return this.string;\n    }\n    get lineChunks() { return true; }\n    read(from, to) {\n        let stringStart = this.cursorPos - this.string.length;\n        if (from < stringStart || to >= this.cursorPos)\n            return this.doc.sliceString(from, to);\n        else\n            return this.string.slice(from - stringStart, to - stringStart);\n    }\n}\nlet currentContext = null;\n/**\nA parse context provided to parsers working on the editor content.\n*/\nclass ParseContext {\n    constructor(parser, \n    /**\n    The current editor state.\n    */\n    state, \n    /**\n    Tree fragments that can be reused by incremental re-parses.\n    */\n    fragments = [], \n    /**\n    @internal\n    */\n    tree, \n    /**\n    @internal\n    */\n    treeLen, \n    /**\n    The current editor viewport (or some overapproximation\n    thereof). Intended to be used for opportunistically avoiding\n    work (in which case\n    [`skipUntilInView`](https://codemirror.net/6/docs/ref/#language.ParseContext.skipUntilInView)\n    should be called to make sure the parser is restarted when the\n    skipped region becomes visible).\n    */\n    viewport, \n    /**\n    @internal\n    */\n    skipped, \n    /**\n    This is where skipping parsers can register a promise that,\n    when resolved, will schedule a new parse. It is cleared when\n    the parse worker picks up the promise. @internal\n    */\n    scheduleOn) {\n        this.parser = parser;\n        this.state = state;\n        this.fragments = fragments;\n        this.tree = tree;\n        this.treeLen = treeLen;\n        this.viewport = viewport;\n        this.skipped = skipped;\n        this.scheduleOn = scheduleOn;\n        this.parse = null;\n        /**\n        @internal\n        */\n        this.tempSkipped = [];\n    }\n    /**\n    @internal\n    */\n    static create(parser, state, viewport) {\n        return new ParseContext(parser, state, [], Tree.empty, 0, viewport, [], null);\n    }\n    startParse() {\n        return this.parser.startParse(new DocInput(this.state.doc), this.fragments);\n    }\n    /**\n    @internal\n    */\n    work(until, upto) {\n        if (upto != null && upto >= this.state.doc.length)\n            upto = undefined;\n        if (this.tree != Tree.empty && this.isDone(upto !== null && upto !== void 0 ? upto : this.state.doc.length)) {\n            this.takeTree();\n            return true;\n        }\n        return this.withContext(() => {\n            var _a;\n            if (typeof until == \"number\") {\n                let endTime = Date.now() + until;\n                until = () => Date.now() > endTime;\n            }\n            if (!this.parse)\n                this.parse = this.startParse();\n            if (upto != null && (this.parse.stoppedAt == null || this.parse.stoppedAt > upto) &&\n                upto < this.state.doc.length)\n                this.parse.stopAt(upto);\n            for (;;) {\n                let done = this.parse.advance();\n                if (done) {\n                    this.fragments = this.withoutTempSkipped(TreeFragment.addTree(done, this.fragments, this.parse.stoppedAt != null));\n                    this.treeLen = (_a = this.parse.stoppedAt) !== null && _a !== void 0 ? _a : this.state.doc.length;\n                    this.tree = done;\n                    this.parse = null;\n                    if (this.treeLen < (upto !== null && upto !== void 0 ? upto : this.state.doc.length))\n                        this.parse = this.startParse();\n                    else\n                        return true;\n                }\n                if (until())\n                    return false;\n            }\n        });\n    }\n    /**\n    @internal\n    */\n    takeTree() {\n        let pos, tree;\n        if (this.parse && (pos = this.parse.parsedPos) >= this.treeLen) {\n            if (this.parse.stoppedAt == null || this.parse.stoppedAt > pos)\n                this.parse.stopAt(pos);\n            this.withContext(() => { while (!(tree = this.parse.advance())) { } });\n            this.treeLen = pos;\n            this.tree = tree;\n            this.fragments = this.withoutTempSkipped(TreeFragment.addTree(this.tree, this.fragments, true));\n            this.parse = null;\n        }\n    }\n    withContext(f) {\n        let prev = currentContext;\n        currentContext = this;\n        try {\n            return f();\n        }\n        finally {\n            currentContext = prev;\n        }\n    }\n    withoutTempSkipped(fragments) {\n        for (let r; r = this.tempSkipped.pop();)\n            fragments = cutFragments(fragments, r.from, r.to);\n        return fragments;\n    }\n    /**\n    @internal\n    */\n    changes(changes, newState) {\n        let { fragments, tree, treeLen, viewport, skipped } = this;\n        this.takeTree();\n        if (!changes.empty) {\n            let ranges = [];\n            changes.iterChangedRanges((fromA, toA, fromB, toB) => ranges.push({ fromA, toA, fromB, toB }));\n            fragments = TreeFragment.applyChanges(fragments, ranges);\n            tree = Tree.empty;\n            treeLen = 0;\n            viewport = { from: changes.mapPos(viewport.from, -1), to: changes.mapPos(viewport.to, 1) };\n            if (this.skipped.length) {\n                skipped = [];\n                for (let r of this.skipped) {\n                    let from = changes.mapPos(r.from, 1), to = changes.mapPos(r.to, -1);\n                    if (from < to)\n                        skipped.push({ from, to });\n                }\n            }\n        }\n        return new ParseContext(this.parser, newState, fragments, tree, treeLen, viewport, skipped, this.scheduleOn);\n    }\n    /**\n    @internal\n    */\n    updateViewport(viewport) {\n        if (this.viewport.from == viewport.from && this.viewport.to == viewport.to)\n            return false;\n        this.viewport = viewport;\n        let startLen = this.skipped.length;\n        for (let i = 0; i < this.skipped.length; i++) {\n            let { from, to } = this.skipped[i];\n            if (from < viewport.to && to > viewport.from) {\n                this.fragments = cutFragments(this.fragments, from, to);\n                this.skipped.splice(i--, 1);\n            }\n        }\n        if (this.skipped.length >= startLen)\n            return false;\n        this.reset();\n        return true;\n    }\n    /**\n    @internal\n    */\n    reset() {\n        if (this.parse) {\n            this.takeTree();\n            this.parse = null;\n        }\n    }\n    /**\n    Notify the parse scheduler that the given region was skipped\n    because it wasn't in view, and the parse should be restarted\n    when it comes into view.\n    */\n    skipUntilInView(from, to) {\n        this.skipped.push({ from, to });\n    }\n    /**\n    Returns a parser intended to be used as placeholder when\n    asynchronously loading a nested parser. It'll skip its input and\n    mark it as not-really-parsed, so that the next update will parse\n    it again.\n    \n    When `until` is given, a reparse will be scheduled when that\n    promise resolves.\n    */\n    static getSkippingParser(until) {\n        return new class extends Parser {\n            createParse(input, fragments, ranges) {\n                let from = ranges[0].from, to = ranges[ranges.length - 1].to;\n                let parser = {\n                    parsedPos: from,\n                    advance() {\n                        let cx = currentContext;\n                        if (cx) {\n                            for (let r of ranges)\n                                cx.tempSkipped.push(r);\n                            if (until)\n                                cx.scheduleOn = cx.scheduleOn ? Promise.all([cx.scheduleOn, until]) : until;\n                        }\n                        this.parsedPos = to;\n                        return new Tree(NodeType.none, [], [], to - from);\n                    },\n                    stoppedAt: null,\n                    stopAt() { }\n                };\n                return parser;\n            }\n        };\n    }\n    /**\n    @internal\n    */\n    isDone(upto) {\n        upto = Math.min(upto, this.state.doc.length);\n        let frags = this.fragments;\n        return this.treeLen >= upto && frags.length && frags[0].from == 0 && frags[0].to >= upto;\n    }\n    /**\n    Get the context for the current parse, or `null` if no editor\n    parse is in progress.\n    */\n    static get() { return currentContext; }\n}\nfunction cutFragments(fragments, from, to) {\n    return TreeFragment.applyChanges(fragments, [{ fromA: from, toA: to, fromB: from, toB: to }]);\n}\nclass LanguageState {\n    constructor(\n    // A mutable parse state that is used to preserve work done during\n    // the lifetime of a state when moving to the next state.\n    context) {\n        this.context = context;\n        this.tree = context.tree;\n    }\n    apply(tr) {\n        if (!tr.docChanged && this.tree == this.context.tree)\n            return this;\n        let newCx = this.context.changes(tr.changes, tr.state);\n        // If the previous parse wasn't done, go forward only up to its\n        // end position or the end of the viewport, to avoid slowing down\n        // state updates with parse work beyond the viewport.\n        let upto = this.context.treeLen == tr.startState.doc.length ? undefined\n            : Math.max(tr.changes.mapPos(this.context.treeLen), newCx.viewport.to);\n        if (!newCx.work(20 /* Work.Apply */, upto))\n            newCx.takeTree();\n        return new LanguageState(newCx);\n    }\n    static init(state) {\n        let vpTo = Math.min(3000 /* Work.InitViewport */, state.doc.length);\n        let parseState = ParseContext.create(state.facet(language).parser, state, { from: 0, to: vpTo });\n        if (!parseState.work(20 /* Work.Apply */, vpTo))\n            parseState.takeTree();\n        return new LanguageState(parseState);\n    }\n}\nLanguage.state = /*@__PURE__*/StateField.define({\n    create: LanguageState.init,\n    update(value, tr) {\n        for (let e of tr.effects)\n            if (e.is(Language.setState))\n                return e.value;\n        if (tr.startState.facet(language) != tr.state.facet(language))\n            return LanguageState.init(tr.state);\n        return value.apply(tr);\n    }\n});\nlet requestIdle = (callback) => {\n    let timeout = setTimeout(() => callback(), 500 /* Work.MaxPause */);\n    return () => clearTimeout(timeout);\n};\nif (typeof requestIdleCallback != \"undefined\")\n    requestIdle = (callback) => {\n        let idle = -1, timeout = setTimeout(() => {\n            idle = requestIdleCallback(callback, { timeout: 500 /* Work.MaxPause */ - 100 /* Work.MinPause */ });\n        }, 100 /* Work.MinPause */);\n        return () => idle < 0 ? clearTimeout(timeout) : cancelIdleCallback(idle);\n    };\nconst isInputPending = typeof navigator != \"undefined\" && ((_a = navigator.scheduling) === null || _a === void 0 ? void 0 : _a.isInputPending)\n    ? () => navigator.scheduling.isInputPending() : null;\nconst parseWorker = /*@__PURE__*/ViewPlugin.fromClass(class ParseWorker {\n    constructor(view) {\n        this.view = view;\n        this.working = null;\n        this.workScheduled = 0;\n        // End of the current time chunk\n        this.chunkEnd = -1;\n        // Milliseconds of budget left for this chunk\n        this.chunkBudget = -1;\n        this.work = this.work.bind(this);\n        this.scheduleWork();\n    }\n    update(update) {\n        let cx = this.view.state.field(Language.state).context;\n        if (cx.updateViewport(update.view.viewport) || this.view.viewport.to > cx.treeLen)\n            this.scheduleWork();\n        if (update.docChanged || update.selectionSet) {\n            if (this.view.hasFocus)\n                this.chunkBudget += 50 /* Work.ChangeBonus */;\n            this.scheduleWork();\n        }\n        this.checkAsyncSchedule(cx);\n    }\n    scheduleWork() {\n        if (this.working)\n            return;\n        let { state } = this.view, field = state.field(Language.state);\n        if (field.tree != field.context.tree || !field.context.isDone(state.doc.length))\n            this.working = requestIdle(this.work);\n    }\n    work(deadline) {\n        this.working = null;\n        let now = Date.now();\n        if (this.chunkEnd < now && (this.chunkEnd < 0 || this.view.hasFocus)) { // Start a new chunk\n            this.chunkEnd = now + 30000 /* Work.ChunkTime */;\n            this.chunkBudget = 3000 /* Work.ChunkBudget */;\n        }\n        if (this.chunkBudget <= 0)\n            return; // No more budget\n        let { state, viewport: { to: vpTo } } = this.view, field = state.field(Language.state);\n        if (field.tree == field.context.tree && field.context.isDone(vpTo + 100000 /* Work.MaxParseAhead */))\n            return;\n        let endTime = Date.now() + Math.min(this.chunkBudget, 100 /* Work.Slice */, deadline && !isInputPending ? Math.max(25 /* Work.MinSlice */, deadline.timeRemaining() - 5) : 1e9);\n        let viewportFirst = field.context.treeLen < vpTo && state.doc.length > vpTo + 1000;\n        let done = field.context.work(() => {\n            return isInputPending && isInputPending() || Date.now() > endTime;\n        }, vpTo + (viewportFirst ? 0 : 100000 /* Work.MaxParseAhead */));\n        this.chunkBudget -= Date.now() - now;\n        if (done || this.chunkBudget <= 0) {\n            field.context.takeTree();\n            this.view.dispatch({ effects: Language.setState.of(new LanguageState(field.context)) });\n        }\n        if (this.chunkBudget > 0 && !(done && !viewportFirst))\n            this.scheduleWork();\n        this.checkAsyncSchedule(field.context);\n    }\n    checkAsyncSchedule(cx) {\n        if (cx.scheduleOn) {\n            this.workScheduled++;\n            cx.scheduleOn\n                .then(() => this.scheduleWork())\n                .catch(err => logException(this.view.state, err))\n                .then(() => this.workScheduled--);\n            cx.scheduleOn = null;\n        }\n    }\n    destroy() {\n        if (this.working)\n            this.working();\n    }\n    isWorking() {\n        return !!(this.working || this.workScheduled > 0);\n    }\n}, {\n    eventHandlers: { focus() { this.scheduleWork(); } }\n});\n/**\nThe facet used to associate a language with an editor state. Used\nby `Language` object's `extension` property (so you don't need to\nmanually wrap your languages in this). Can be used to access the\ncurrent language on a state.\n*/\nconst language = /*@__PURE__*/Facet.define({\n    combine(languages) { return languages.length ? languages[0] : null; },\n    enables: language => [\n        Language.state,\n        parseWorker,\n        EditorView.contentAttributes.compute([language], state => {\n            let lang = state.facet(language);\n            return lang && lang.name ? { \"data-language\": lang.name } : {};\n        })\n    ]\n});\n/**\nThis class bundles a [language](https://codemirror.net/6/docs/ref/#language.Language) with an\noptional set of supporting extensions. Language packages are\nencouraged to export a function that optionally takes a\nconfiguration object and returns a `LanguageSupport` instance, as\nthe main way for client code to use the package.\n*/\nclass LanguageSupport {\n    /**\n    Create a language support object.\n    */\n    constructor(\n    /**\n    The language object.\n    */\n    language, \n    /**\n    An optional set of supporting extensions. When nesting a\n    language in another language, the outer language is encouraged\n    to include the supporting extensions for its inner languages\n    in its own set of support extensions.\n    */\n    support = []) {\n        this.language = language;\n        this.support = support;\n        this.extension = [language, support];\n    }\n}\n/**\nLanguage descriptions are used to store metadata about languages\nand to dynamically load them. Their main role is finding the\nappropriate language for a filename or dynamically loading nested\nparsers.\n*/\nclass LanguageDescription {\n    constructor(\n    /**\n    The name of this language.\n    */\n    name, \n    /**\n    Alternative names for the mode (lowercased, includes `this.name`).\n    */\n    alias, \n    /**\n    File extensions associated with this language.\n    */\n    extensions, \n    /**\n    Optional filename pattern that should be associated with this\n    language.\n    */\n    filename, loadFunc, \n    /**\n    If the language has been loaded, this will hold its value.\n    */\n    support = undefined) {\n        this.name = name;\n        this.alias = alias;\n        this.extensions = extensions;\n        this.filename = filename;\n        this.loadFunc = loadFunc;\n        this.support = support;\n        this.loading = null;\n    }\n    /**\n    Start loading the the language. Will return a promise that\n    resolves to a [`LanguageSupport`](https://codemirror.net/6/docs/ref/#language.LanguageSupport)\n    object when the language successfully loads.\n    */\n    load() {\n        return this.loading || (this.loading = this.loadFunc().then(support => this.support = support, err => { this.loading = null; throw err; }));\n    }\n    /**\n    Create a language description.\n    */\n    static of(spec) {\n        let { load, support } = spec;\n        if (!load) {\n            if (!support)\n                throw new RangeError(\"Must pass either 'load' or 'support' to LanguageDescription.of\");\n            load = () => Promise.resolve(support);\n        }\n        return new LanguageDescription(spec.name, (spec.alias || []).concat(spec.name).map(s => s.toLowerCase()), spec.extensions || [], spec.filename, load, support);\n    }\n    /**\n    Look for a language in the given array of descriptions that\n    matches the filename. Will first match\n    [`filename`](https://codemirror.net/6/docs/ref/#language.LanguageDescription.filename) patterns,\n    and then [extensions](https://codemirror.net/6/docs/ref/#language.LanguageDescription.extensions),\n    and return the first language that matches.\n    */\n    static matchFilename(descs, filename) {\n        for (let d of descs)\n            if (d.filename && d.filename.test(filename))\n                return d;\n        let ext = /\\.([^.]+)$/.exec(filename);\n        if (ext)\n            for (let d of descs)\n                if (d.extensions.indexOf(ext[1]) > -1)\n                    return d;\n        return null;\n    }\n    /**\n    Look for a language whose name or alias matches the the given\n    name (case-insensitively). If `fuzzy` is true, and no direct\n    matchs is found, this'll also search for a language whose name\n    or alias occurs in the string (for names shorter than three\n    characters, only when surrounded by non-word characters).\n    */\n    static matchLanguageName(descs, name, fuzzy = true) {\n        name = name.toLowerCase();\n        for (let d of descs)\n            if (d.alias.some(a => a == name))\n                return d;\n        if (fuzzy)\n            for (let d of descs)\n                for (let a of d.alias) {\n                    let found = name.indexOf(a);\n                    if (found > -1 && (a.length > 2 || !/\\w/.test(name[found - 1]) && !/\\w/.test(name[found + a.length])))\n                        return d;\n                }\n        return null;\n    }\n}\n\n/**\nFacet that defines a way to provide a function that computes the\nappropriate indentation depth, as a column number (see\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)), at the start of a given\nline. A return value of `null` indicates no indentation can be\ndetermined, and the line should inherit the indentation of the one\nabove it. A return value of `undefined` defers to the next indent\nservice.\n*/\nconst indentService = /*@__PURE__*/Facet.define();\n/**\nFacet for overriding the unit by which indentation happens. Should\nbe a string consisting entirely of the same whitespace character.\nWhen not set, this defaults to 2 spaces.\n*/\nconst indentUnit = /*@__PURE__*/Facet.define({\n    combine: values => {\n        if (!values.length)\n            return \"  \";\n        let unit = values[0];\n        if (!unit || /\\S/.test(unit) || Array.from(unit).some(e => e != unit[0]))\n            throw new Error(\"Invalid indent unit: \" + JSON.stringify(values[0]));\n        return unit;\n    }\n});\n/**\nReturn the _column width_ of an indent unit in the state.\nDetermined by the [`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit)\nfacet, and [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) when that\ncontains tabs.\n*/\nfunction getIndentUnit(state) {\n    let unit = state.facet(indentUnit);\n    return unit.charCodeAt(0) == 9 ? state.tabSize * unit.length : unit.length;\n}\n/**\nCreate an indentation string that covers columns 0 to `cols`.\nWill use tabs for as much of the columns as possible when the\n[`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit) facet contains\ntabs.\n*/\nfunction indentString(state, cols) {\n    let result = \"\", ts = state.tabSize, ch = state.facet(indentUnit)[0];\n    if (ch == \"\\t\") {\n        while (cols >= ts) {\n            result += \"\\t\";\n            cols -= ts;\n        }\n        ch = \" \";\n    }\n    for (let i = 0; i < cols; i++)\n        result += ch;\n    return result;\n}\n/**\nGet the indentation, as a column number, at the given position.\nWill first consult any [indent services](https://codemirror.net/6/docs/ref/#language.indentService)\nthat are registered, and if none of those return an indentation,\nthis will check the syntax tree for the [indent node\nprop](https://codemirror.net/6/docs/ref/#language.indentNodeProp) and use that if found. Returns a\nnumber when an indentation could be determined, and null\notherwise.\n*/\nfunction getIndentation(context, pos) {\n    if (context instanceof EditorState)\n        context = new IndentContext(context);\n    for (let service of context.state.facet(indentService)) {\n        let result = service(context, pos);\n        if (result !== undefined)\n            return result;\n    }\n    let tree = syntaxTree(context.state);\n    return tree.length >= pos ? syntaxIndentation(context, tree, pos) : null;\n}\n/**\nCreate a change set that auto-indents all lines touched by the\ngiven document range.\n*/\nfunction indentRange(state, from, to) {\n    let updated = Object.create(null);\n    let context = new IndentContext(state, { overrideIndentation: start => { var _a; return (_a = updated[start]) !== null && _a !== void 0 ? _a : -1; } });\n    let changes = [];\n    for (let pos = from; pos <= to;) {\n        let line = state.doc.lineAt(pos);\n        pos = line.to + 1;\n        let indent = getIndentation(context, line.from);\n        if (indent == null)\n            continue;\n        if (!/\\S/.test(line.text))\n            indent = 0;\n        let cur = /^\\s*/.exec(line.text)[0];\n        let norm = indentString(state, indent);\n        if (cur != norm) {\n            updated[line.from] = indent;\n            changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n    }\n    return state.changes(changes);\n}\n/**\nIndentation contexts are used when calling [indentation\nservices](https://codemirror.net/6/docs/ref/#language.indentService). They provide helper utilities\nuseful in indentation logic, and can selectively override the\nindentation reported for some lines.\n*/\nclass IndentContext {\n    /**\n    Create an indent context.\n    */\n    constructor(\n    /**\n    The editor state.\n    */\n    state, \n    /**\n    @internal\n    */\n    options = {}) {\n        this.state = state;\n        this.options = options;\n        this.unit = getIndentUnit(state);\n    }\n    /**\n    Get a description of the line at the given position, taking\n    [simulated line\n    breaks](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n    into account. If there is such a break at `pos`, the `bias`\n    argument determines whether the part of the line line before or\n    after the break is used.\n    */\n    lineAt(pos, bias = 1) {\n        let line = this.state.doc.lineAt(pos);\n        let { simulateBreak, simulateDoubleBreak } = this.options;\n        if (simulateBreak != null && simulateBreak >= line.from && simulateBreak <= line.to) {\n            if (simulateDoubleBreak && simulateBreak == pos)\n                return { text: \"\", from: pos };\n            else if (bias < 0 ? simulateBreak < pos : simulateBreak <= pos)\n                return { text: line.text.slice(simulateBreak - line.from), from: simulateBreak };\n            else\n                return { text: line.text.slice(0, simulateBreak - line.from), from: line.from };\n        }\n        return line;\n    }\n    /**\n    Get the text directly after `pos`, either the entire line\n    or the next 100 characters, whichever is shorter.\n    */\n    textAfterPos(pos, bias = 1) {\n        if (this.options.simulateDoubleBreak && pos == this.options.simulateBreak)\n            return \"\";\n        let { text, from } = this.lineAt(pos, bias);\n        return text.slice(pos - from, Math.min(text.length, pos + 100 - from));\n    }\n    /**\n    Find the column for the given position.\n    */\n    column(pos, bias = 1) {\n        let { text, from } = this.lineAt(pos, bias);\n        let result = this.countColumn(text, pos - from);\n        let override = this.options.overrideIndentation ? this.options.overrideIndentation(from) : -1;\n        if (override > -1)\n            result += override - this.countColumn(text, text.search(/\\S|$/));\n        return result;\n    }\n    /**\n    Find the column position (taking tabs into account) of the given\n    position in the given string.\n    */\n    countColumn(line, pos = line.length) {\n        return countColumn(line, this.state.tabSize, pos);\n    }\n    /**\n    Find the indentation column of the line at the given point.\n    */\n    lineIndent(pos, bias = 1) {\n        let { text, from } = this.lineAt(pos, bias);\n        let override = this.options.overrideIndentation;\n        if (override) {\n            let overriden = override(from);\n            if (overriden > -1)\n                return overriden;\n        }\n        return this.countColumn(text, text.search(/\\S|$/));\n    }\n    /**\n    Returns the [simulated line\n    break](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n    for this context, if any.\n    */\n    get simulatedBreak() {\n        return this.options.simulateBreak || null;\n    }\n}\n/**\nA syntax tree node prop used to associate indentation strategies\nwith node types. Such a strategy is a function from an indentation\ncontext to a column number (see also\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)) or null, where null\nindicates that no definitive indentation can be determined.\n*/\nconst indentNodeProp = /*@__PURE__*/new NodeProp();\n// Compute the indentation for a given position from the syntax tree.\nfunction syntaxIndentation(cx, ast, pos) {\n    let stack = ast.resolveStack(pos);\n    let inner = ast.resolveInner(pos, -1).resolve(pos, 0).enterUnfinishedNodesBefore(pos);\n    if (inner != stack.node) {\n        let add = [];\n        for (let cur = inner; cur && !(cur.from < stack.node.from || cur.to > stack.node.to ||\n            cur.from == stack.node.from && cur.type == stack.node.type); cur = cur.parent)\n            add.push(cur);\n        for (let i = add.length - 1; i >= 0; i--)\n            stack = { node: add[i], next: stack };\n    }\n    return indentFor(stack, cx, pos);\n}\nfunction indentFor(stack, cx, pos) {\n    for (let cur = stack; cur; cur = cur.next) {\n        let strategy = indentStrategy(cur.node);\n        if (strategy)\n            return strategy(TreeIndentContext.create(cx, pos, cur));\n    }\n    return 0;\n}\nfunction ignoreClosed(cx) {\n    return cx.pos == cx.options.simulateBreak && cx.options.simulateDoubleBreak;\n}\nfunction indentStrategy(tree) {\n    let strategy = tree.type.prop(indentNodeProp);\n    if (strategy)\n        return strategy;\n    let first = tree.firstChild, close;\n    if (first && (close = first.type.prop(NodeProp.closedBy))) {\n        let last = tree.lastChild, closed = last && close.indexOf(last.name) > -1;\n        return cx => delimitedStrategy(cx, true, 1, undefined, closed && !ignoreClosed(cx) ? last.from : undefined);\n    }\n    return tree.parent == null ? topIndent : null;\n}\nfunction topIndent() { return 0; }\n/**\nObjects of this type provide context information and helper\nmethods to indentation functions registered on syntax nodes.\n*/\nclass TreeIndentContext extends IndentContext {\n    constructor(base, \n    /**\n    The position at which indentation is being computed.\n    */\n    pos, \n    /**\n    @internal\n    */\n    context) {\n        super(base.state, base.options);\n        this.base = base;\n        this.pos = pos;\n        this.context = context;\n    }\n    /**\n    The syntax tree node to which the indentation strategy\n    applies.\n    */\n    get node() { return this.context.node; }\n    /**\n    @internal\n    */\n    static create(base, pos, context) {\n        return new TreeIndentContext(base, pos, context);\n    }\n    /**\n    Get the text directly after `this.pos`, either the entire line\n    or the next 100 characters, whichever is shorter.\n    */\n    get textAfter() {\n        return this.textAfterPos(this.pos);\n    }\n    /**\n    Get the indentation at the reference line for `this.node`, which\n    is the line on which it starts, unless there is a node that is\n    _not_ a parent of this node covering the start of that line. If\n    so, the line at the start of that node is tried, again skipping\n    on if it is covered by another such node.\n    */\n    get baseIndent() {\n        return this.baseIndentFor(this.node);\n    }\n    /**\n    Get the indentation for the reference line of the given node\n    (see [`baseIndent`](https://codemirror.net/6/docs/ref/#language.TreeIndentContext.baseIndent)).\n    */\n    baseIndentFor(node) {\n        let line = this.state.doc.lineAt(node.from);\n        // Skip line starts that are covered by a sibling (or cousin, etc)\n        for (;;) {\n            let atBreak = node.resolve(line.from);\n            while (atBreak.parent && atBreak.parent.from == atBreak.from)\n                atBreak = atBreak.parent;\n            if (isParent(atBreak, node))\n                break;\n            line = this.state.doc.lineAt(atBreak.from);\n        }\n        return this.lineIndent(line.from);\n    }\n    /**\n    Continue looking for indentations in the node's parent nodes,\n    and return the result of that.\n    */\n    continue() {\n        return indentFor(this.context.next, this.base, this.pos);\n    }\n}\nfunction isParent(parent, of) {\n    for (let cur = of; cur; cur = cur.parent)\n        if (parent == cur)\n            return true;\n    return false;\n}\n// Check whether a delimited node is aligned (meaning there are\n// non-skipped nodes on the same line as the opening delimiter). And\n// if so, return the opening token.\nfunction bracketedAligned(context) {\n    let tree = context.node;\n    let openToken = tree.childAfter(tree.from), last = tree.lastChild;\n    if (!openToken)\n        return null;\n    let sim = context.options.simulateBreak;\n    let openLine = context.state.doc.lineAt(openToken.from);\n    let lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim);\n    for (let pos = openToken.to;;) {\n        let next = tree.childAfter(pos);\n        if (!next || next == last)\n            return null;\n        if (!next.type.isSkipped) {\n            if (next.from >= lineEnd)\n                return null;\n            let space = /^ */.exec(openLine.text.slice(openToken.to - openLine.from))[0].length;\n            return { from: openToken.from, to: openToken.to + space };\n        }\n        pos = next.to;\n    }\n}\n/**\nAn indentation strategy for delimited (usually bracketed) nodes.\nWill, by default, indent one unit more than the parent's base\nindent unless the line starts with a closing token. When `align`\nis true and there are non-skipped nodes on the node's opening\nline, the content of the node will be aligned with the end of the\nopening node, like this:\n\n    foo(bar,\n        baz)\n*/\nfunction delimitedIndent({ closing, align = true, units = 1 }) {\n    return (context) => delimitedStrategy(context, align, units, closing);\n}\nfunction delimitedStrategy(context, align, units, closing, closedAt) {\n    let after = context.textAfter, space = after.match(/^\\s*/)[0].length;\n    let closed = closing && after.slice(space, space + closing.length) == closing || closedAt == context.pos + space;\n    let aligned = align ? bracketedAligned(context) : null;\n    if (aligned)\n        return closed ? context.column(aligned.from) : context.column(aligned.to);\n    return context.baseIndent + (closed ? 0 : context.unit * units);\n}\n/**\nAn indentation strategy that aligns a node's content to its base\nindentation.\n*/\nconst flatIndent = (context) => context.baseIndent;\n/**\nCreates an indentation strategy that, by default, indents\ncontinued lines one unit more than the node's base indentation.\nYou can provide `except` to prevent indentation of lines that\nmatch a pattern (for example `/^else\\b/` in `if`/`else`\nconstructs), and you can change the amount of units used with the\n`units` option.\n*/\nfunction continuedIndent({ except, units = 1 } = {}) {\n    return (context) => {\n        let matchExcept = except && except.test(context.textAfter);\n        return context.baseIndent + (matchExcept ? 0 : units * context.unit);\n    };\n}\nconst DontIndentBeyond = 200;\n/**\nEnables reindentation on input. When a language defines an\n`indentOnInput` field in its [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt), which must hold a regular\nexpression, the line at the cursor will be reindented whenever new\ntext is typed and the input from the start of the line up to the\ncursor matches that regexp.\n\nTo avoid unneccesary reindents, it is recommended to start the\nregexp with `^` (usually followed by `\\s*`), and end it with `$`.\nFor example, `/^\\s*\\}$/` will reindent when a closing brace is\nadded at the start of a line.\n*/\nfunction indentOnInput() {\n    return EditorState.transactionFilter.of(tr => {\n        if (!tr.docChanged || !tr.isUserEvent(\"input.type\") && !tr.isUserEvent(\"input.complete\"))\n            return tr;\n        let rules = tr.startState.languageDataAt(\"indentOnInput\", tr.startState.selection.main.head);\n        if (!rules.length)\n            return tr;\n        let doc = tr.newDoc, { head } = tr.newSelection.main, line = doc.lineAt(head);\n        if (head > line.from + DontIndentBeyond)\n            return tr;\n        let lineStart = doc.sliceString(line.from, head);\n        if (!rules.some(r => r.test(lineStart)))\n            return tr;\n        let { state } = tr, last = -1, changes = [];\n        for (let { head } of state.selection.ranges) {\n            let line = state.doc.lineAt(head);\n            if (line.from == last)\n                continue;\n            last = line.from;\n            let indent = getIndentation(state, line.from);\n            if (indent == null)\n                continue;\n            let cur = /^\\s*/.exec(line.text)[0];\n            let norm = indentString(state, indent);\n            if (cur != norm)\n                changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n        return changes.length ? [tr, { changes, sequential: true }] : tr;\n    });\n}\n\n/**\nA facet that registers a code folding service. When called with\nthe extent of a line, such a function should return a foldable\nrange that starts on that line (but continues beyond it), if one\ncan be found.\n*/\nconst foldService = /*@__PURE__*/Facet.define();\n/**\nThis node prop is used to associate folding information with\nsyntax node types. Given a syntax node, it should check whether\nthat tree is foldable and return the range that can be collapsed\nwhen it is.\n*/\nconst foldNodeProp = /*@__PURE__*/new NodeProp();\n/**\n[Fold](https://codemirror.net/6/docs/ref/#language.foldNodeProp) function that folds everything but\nthe first and the last child of a syntax node. Useful for nodes\nthat start and end with delimiters.\n*/\nfunction foldInside(node) {\n    let first = node.firstChild, last = node.lastChild;\n    return first && first.to < last.from ? { from: first.to, to: last.type.isError ? node.to : last.from } : null;\n}\nfunction syntaxFolding(state, start, end) {\n    let tree = syntaxTree(state);\n    if (tree.length < end)\n        return null;\n    let stack = tree.resolveStack(end, 1);\n    let found = null;\n    for (let iter = stack; iter; iter = iter.next) {\n        let cur = iter.node;\n        if (cur.to <= end || cur.from > end)\n            continue;\n        if (found && cur.from < start)\n            break;\n        let prop = cur.type.prop(foldNodeProp);\n        if (prop && (cur.to < tree.length - 50 || tree.length == state.doc.length || !isUnfinished(cur))) {\n            let value = prop(cur, state);\n            if (value && value.from <= end && value.from >= start && value.to > end)\n                found = value;\n        }\n    }\n    return found;\n}\nfunction isUnfinished(node) {\n    let ch = node.lastChild;\n    return ch && ch.to == node.to && ch.type.isError;\n}\n/**\nCheck whether the given line is foldable. First asks any fold\nservices registered through\n[`foldService`](https://codemirror.net/6/docs/ref/#language.foldService), and if none of them return\na result, tries to query the [fold node\nprop](https://codemirror.net/6/docs/ref/#language.foldNodeProp) of syntax nodes that cover the end\nof the line.\n*/\nfunction foldable(state, lineStart, lineEnd) {\n    for (let service of state.facet(foldService)) {\n        let result = service(state, lineStart, lineEnd);\n        if (result)\n            return result;\n    }\n    return syntaxFolding(state, lineStart, lineEnd);\n}\nfunction mapRange(range, mapping) {\n    let from = mapping.mapPos(range.from, 1), to = mapping.mapPos(range.to, -1);\n    return from >= to ? undefined : { from, to };\n}\n/**\nState effect that can be attached to a transaction to fold the\ngiven range. (You probably only need this in exceptional\ncircumstances\u2014usually you'll just want to let\n[`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode) and the [fold\ngutter](https://codemirror.net/6/docs/ref/#language.foldGutter) create the transactions.)\n*/\nconst foldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\n/**\nState effect that unfolds the given range (if it was folded).\n*/\nconst unfoldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\nfunction selectedLines(view) {\n    let lines = [];\n    for (let { head } of view.state.selection.ranges) {\n        if (lines.some(l => l.from <= head && l.to >= head))\n            continue;\n        lines.push(view.lineBlockAt(head));\n    }\n    return lines;\n}\n/**\nThe state field that stores the folded ranges (as a [decoration\nset](https://codemirror.net/6/docs/ref/#view.DecorationSet)). Can be passed to\n[`EditorState.toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) and\n[`fromJSON`](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) to serialize the fold\nstate.\n*/\nconst foldState = /*@__PURE__*/StateField.define({\n    create() {\n        return Decoration.none;\n    },\n    update(folded, tr) {\n        if (tr.isUserEvent(\"delete\"))\n            tr.changes.iterChangedRanges((fromA, toA) => folded = clearTouchedFolds(folded, fromA, toA));\n        folded = folded.map(tr.changes);\n        for (let e of tr.effects) {\n            if (e.is(foldEffect) && !foldExists(folded, e.value.from, e.value.to)) {\n                let { preparePlaceholder } = tr.state.facet(foldConfig);\n                let widget = !preparePlaceholder ? foldWidget :\n                    Decoration.replace({ widget: new PreparedFoldWidget(preparePlaceholder(tr.state, e.value)) });\n                folded = folded.update({ add: [widget.range(e.value.from, e.value.to)] });\n            }\n            else if (e.is(unfoldEffect)) {\n                folded = folded.update({ filter: (from, to) => e.value.from != from || e.value.to != to,\n                    filterFrom: e.value.from, filterTo: e.value.to });\n            }\n        }\n        // Clear folded ranges that cover the selection head\n        if (tr.selection)\n            folded = clearTouchedFolds(folded, tr.selection.main.head);\n        return folded;\n    },\n    provide: f => EditorView.decorations.from(f),\n    toJSON(folded, state) {\n        let ranges = [];\n        folded.between(0, state.doc.length, (from, to) => { ranges.push(from, to); });\n        return ranges;\n    },\n    fromJSON(value) {\n        if (!Array.isArray(value) || value.length % 2)\n            throw new RangeError(\"Invalid JSON for fold state\");\n        let ranges = [];\n        for (let i = 0; i < value.length;) {\n            let from = value[i++], to = value[i++];\n            if (typeof from != \"number\" || typeof to != \"number\")\n                throw new RangeError(\"Invalid JSON for fold state\");\n            ranges.push(foldWidget.range(from, to));\n        }\n        return Decoration.set(ranges, true);\n    }\n});\nfunction clearTouchedFolds(folded, from, to = from) {\n    let touched = false;\n    folded.between(from, to, (a, b) => { if (a < to && b > from)\n        touched = true; });\n    return !touched ? folded : folded.update({\n        filterFrom: from,\n        filterTo: to,\n        filter: (a, b) => a >= to || b <= from\n    });\n}\n/**\nGet a [range set](https://codemirror.net/6/docs/ref/#state.RangeSet) containing the folded ranges\nin the given state.\n*/\nfunction foldedRanges(state) {\n    return state.field(foldState, false) || RangeSet.empty;\n}\nfunction findFold(state, from, to) {\n    var _a;\n    let found = null;\n    (_a = state.field(foldState, false)) === null || _a === void 0 ? void 0 : _a.between(from, to, (from, to) => {\n        if (!found || found.from > from)\n            found = { from, to };\n    });\n    return found;\n}\nfunction foldExists(folded, from, to) {\n    let found = false;\n    folded.between(from, from, (a, b) => { if (a == from && b == to)\n        found = true; });\n    return found;\n}\nfunction maybeEnable(state, other) {\n    return state.field(foldState, false) ? other : other.concat(StateEffect.appendConfig.of(codeFolding()));\n}\n/**\nFold the lines that are selected, if possible.\n*/\nconst foldCode = view => {\n    for (let line of selectedLines(view)) {\n        let range = foldable(view.state, line.from, line.to);\n        if (range) {\n            view.dispatch({ effects: maybeEnable(view.state, [foldEffect.of(range), announceFold(view, range)]) });\n            return true;\n        }\n    }\n    return false;\n};\n/**\nUnfold folded ranges on selected lines.\n*/\nconst unfoldCode = view => {\n    if (!view.state.field(foldState, false))\n        return false;\n    let effects = [];\n    for (let line of selectedLines(view)) {\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded)\n            effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n    }\n    if (effects.length)\n        view.dispatch({ effects });\n    return effects.length > 0;\n};\nfunction announceFold(view, range, fold = true) {\n    let lineFrom = view.state.doc.lineAt(range.from).number, lineTo = view.state.doc.lineAt(range.to).number;\n    return EditorView.announce.of(`${view.state.phrase(fold ? \"Folded lines\" : \"Unfolded lines\")} ${lineFrom} ${view.state.phrase(\"to\")} ${lineTo}.`);\n}\n/**\nFold all top-level foldable ranges. Note that, in most cases,\nfolding information will depend on the [syntax\ntree](https://codemirror.net/6/docs/ref/#language.syntaxTree), and folding everything may not work\nreliably when the document hasn't been fully parsed (either\nbecause the editor state was only just initialized, or because the\ndocument is so big that the parser decided not to parse it\nentirely).\n*/\nconst foldAll = view => {\n    let { state } = view, effects = [];\n    for (let pos = 0; pos < state.doc.length;) {\n        let line = view.lineBlockAt(pos), range = foldable(state, line.from, line.to);\n        if (range)\n            effects.push(foldEffect.of(range));\n        pos = (range ? view.lineBlockAt(range.to) : line).to + 1;\n    }\n    if (effects.length)\n        view.dispatch({ effects: maybeEnable(view.state, effects) });\n    return !!effects.length;\n};\n/**\nUnfold all folded code.\n*/\nconst unfoldAll = view => {\n    let field = view.state.field(foldState, false);\n    if (!field || !field.size)\n        return false;\n    let effects = [];\n    field.between(0, view.state.doc.length, (from, to) => { effects.push(unfoldEffect.of({ from, to })); });\n    view.dispatch({ effects });\n    return true;\n};\n// Find the foldable region containing the given line, if one exists\nfunction foldableContainer(view, lineBlock) {\n    // Look backwards through line blocks until we find a foldable region that\n    // intersects with the line\n    for (let line = lineBlock;;) {\n        let foldableRegion = foldable(view.state, line.from, line.to);\n        if (foldableRegion && foldableRegion.to > lineBlock.from)\n            return foldableRegion;\n        if (!line.from)\n            return null;\n        line = view.lineBlockAt(line.from - 1);\n    }\n}\n/**\nToggle folding at cursors. Unfolds if there is an existing fold\nstarting in that line, tries to find a foldable range around it\notherwise.\n*/\nconst toggleFold = (view) => {\n    let effects = [];\n    for (let line of selectedLines(view)) {\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded) {\n            effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n        }\n        else {\n            let foldRange = foldableContainer(view, line);\n            if (foldRange)\n                effects.push(foldEffect.of(foldRange), announceFold(view, foldRange));\n        }\n    }\n    if (effects.length > 0)\n        view.dispatch({ effects: maybeEnable(view.state, effects) });\n    return !!effects.length;\n};\n/**\nDefault fold-related key bindings.\n\n - Ctrl-Shift-[ (Cmd-Alt-[ on macOS): [`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode).\n - Ctrl-Shift-] (Cmd-Alt-] on macOS): [`unfoldCode`](https://codemirror.net/6/docs/ref/#language.unfoldCode).\n - Ctrl-Alt-[: [`foldAll`](https://codemirror.net/6/docs/ref/#language.foldAll).\n - Ctrl-Alt-]: [`unfoldAll`](https://codemirror.net/6/docs/ref/#language.unfoldAll).\n*/\nconst foldKeymap = [\n    { key: \"Ctrl-Shift-[\", mac: \"Cmd-Alt-[\", run: foldCode },\n    { key: \"Ctrl-Shift-]\", mac: \"Cmd-Alt-]\", run: unfoldCode },\n    { key: \"Ctrl-Alt-[\", run: foldAll },\n    { key: \"Ctrl-Alt-]\", run: unfoldAll }\n];\nconst defaultConfig = {\n    placeholderDOM: null,\n    preparePlaceholder: null,\n    placeholderText: \"\u2026\"\n};\nconst foldConfig = /*@__PURE__*/Facet.define({\n    combine(values) { return combineConfig(values, defaultConfig); }\n});\n/**\nCreate an extension that configures code folding.\n*/\nfunction codeFolding(config) {\n    let result = [foldState, baseTheme$1];\n    if (config)\n        result.push(foldConfig.of(config));\n    return result;\n}\nfunction widgetToDOM(view, prepared) {\n    let { state } = view, conf = state.facet(foldConfig);\n    let onclick = (event) => {\n        let line = view.lineBlockAt(view.posAtDOM(event.target));\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded)\n            view.dispatch({ effects: unfoldEffect.of(folded) });\n        event.preventDefault();\n    };\n    if (conf.placeholderDOM)\n        return conf.placeholderDOM(view, onclick, prepared);\n    let element = document.createElement(\"span\");\n    element.textContent = conf.placeholderText;\n    element.setAttribute(\"aria-label\", state.phrase(\"folded code\"));\n    element.title = state.phrase(\"unfold\");\n    element.className = \"cm-foldPlaceholder\";\n    element.onclick = onclick;\n    return element;\n}\nconst foldWidget = /*@__PURE__*/Decoration.replace({ widget: /*@__PURE__*/new class extends WidgetType {\n        toDOM(view) { return widgetToDOM(view, null); }\n    } });\nclass PreparedFoldWidget extends WidgetType {\n    constructor(value) {\n        super();\n        this.value = value;\n    }\n    eq(other) { return this.value == other.value; }\n    toDOM(view) { return widgetToDOM(view, this.value); }\n}\nconst foldGutterDefaults = {\n    openText: \"\u2304\",\n    closedText: \"\u203A\",\n    markerDOM: null,\n    domEventHandlers: {},\n    foldingChanged: () => false\n};\nclass FoldMarker extends GutterMarker {\n    constructor(config, open) {\n        super();\n        this.config = config;\n        this.open = open;\n    }\n    eq(other) { return this.config == other.config && this.open == other.open; }\n    toDOM(view) {\n        if (this.config.markerDOM)\n            return this.config.markerDOM(this.open);\n        let span = document.createElement(\"span\");\n        span.textContent = this.open ? this.config.openText : this.config.closedText;\n        span.title = view.state.phrase(this.open ? \"Fold line\" : \"Unfold line\");\n        return span;\n    }\n}\n/**\nCreate an extension that registers a fold gutter, which shows a\nfold status indicator before foldable lines (which can be clicked\nto fold or unfold the line).\n*/\nfunction foldGutter(config = {}) {\n    let fullConfig = { ...foldGutterDefaults, ...config };\n    let canFold = new FoldMarker(fullConfig, true), canUnfold = new FoldMarker(fullConfig, false);\n    let markers = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.from = view.viewport.from;\n            this.markers = this.buildMarkers(view);\n        }\n        update(update) {\n            if (update.docChanged || update.viewportChanged ||\n                update.startState.facet(language) != update.state.facet(language) ||\n                update.startState.field(foldState, false) != update.state.field(foldState, false) ||\n                syntaxTree(update.startState) != syntaxTree(update.state) ||\n                fullConfig.foldingChanged(update))\n                this.markers = this.buildMarkers(update.view);\n        }\n        buildMarkers(view) {\n            let builder = new RangeSetBuilder();\n            for (let line of view.viewportLineBlocks) {\n                let mark = findFold(view.state, line.from, line.to) ? canUnfold\n                    : foldable(view.state, line.from, line.to) ? canFold : null;\n                if (mark)\n                    builder.add(line.from, line.from, mark);\n            }\n            return builder.finish();\n        }\n    });\n    let { domEventHandlers } = fullConfig;\n    return [\n        markers,\n        gutter({\n            class: \"cm-foldGutter\",\n            markers(view) { var _a; return ((_a = view.plugin(markers)) === null || _a === void 0 ? void 0 : _a.markers) || RangeSet.empty; },\n            initialSpacer() {\n                return new FoldMarker(fullConfig, false);\n            },\n            domEventHandlers: {\n                ...domEventHandlers,\n                click: (view, line, event) => {\n                    if (domEventHandlers.click && domEventHandlers.click(view, line, event))\n                        return true;\n                    let folded = findFold(view.state, line.from, line.to);\n                    if (folded) {\n                        view.dispatch({ effects: unfoldEffect.of(folded) });\n                        return true;\n                    }\n                    let range = foldable(view.state, line.from, line.to);\n                    if (range) {\n                        view.dispatch({ effects: foldEffect.of(range) });\n                        return true;\n                    }\n                    return false;\n                }\n            }\n        }),\n        codeFolding()\n    ];\n}\nconst baseTheme$1 = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-foldPlaceholder\": {\n        backgroundColor: \"#eee\",\n        border: \"1px solid #ddd\",\n        color: \"#888\",\n        borderRadius: \".2em\",\n        margin: \"0 1px\",\n        padding: \"0 1px\",\n        cursor: \"pointer\"\n    },\n    \".cm-foldGutter span\": {\n        padding: \"0 1px\",\n        cursor: \"pointer\"\n    }\n});\n\n/**\nA highlight style associates CSS styles with highlighting\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag).\n*/\nclass HighlightStyle {\n    constructor(\n    /**\n    The tag styles used to create this highlight style.\n    */\n    specs, options) {\n        this.specs = specs;\n        let modSpec;\n        function def(spec) {\n            let cls = StyleModule.newName();\n            (modSpec || (modSpec = Object.create(null)))[\".\" + cls] = spec;\n            return cls;\n        }\n        const all = typeof options.all == \"string\" ? options.all : options.all ? def(options.all) : undefined;\n        const scopeOpt = options.scope;\n        this.scope = scopeOpt instanceof Language ? (type) => type.prop(languageDataProp) == scopeOpt.data\n            : scopeOpt ? (type) => type == scopeOpt : undefined;\n        this.style = tagHighlighter(specs.map(style => ({\n            tag: style.tag,\n            class: style.class || def(Object.assign({}, style, { tag: null }))\n        })), {\n            all,\n        }).style;\n        this.module = modSpec ? new StyleModule(modSpec) : null;\n        this.themeType = options.themeType;\n    }\n    /**\n    Create a highlighter style that associates the given styles to\n    the given tags. The specs must be objects that hold a style tag\n    or array of tags in their `tag` property, and either a single\n    `class` property providing a static CSS class (for highlighter\n    that rely on external styling), or a\n    [`style-mod`](https://github.com/marijnh/style-mod#documentation)-style\n    set of CSS properties (which define the styling for those tags).\n    \n    The CSS rules created for a highlighter will be emitted in the\n    order of the spec's properties. That means that for elements that\n    have multiple tags associated with them, styles defined further\n    down in the list will have a higher CSS precedence than styles\n    defined earlier.\n    */\n    static define(specs, options) {\n        return new HighlightStyle(specs, options || {});\n    }\n}\nconst highlighterFacet = /*@__PURE__*/Facet.define();\nconst fallbackHighlighter = /*@__PURE__*/Facet.define({\n    combine(values) { return values.length ? [values[0]] : null; }\n});\nfunction getHighlighters(state) {\n    let main = state.facet(highlighterFacet);\n    return main.length ? main : state.facet(fallbackHighlighter);\n}\n/**\nWrap a highlighter in an editor extension that uses it to apply\nsyntax highlighting to the editor content.\n\nWhen multiple (non-fallback) styles are provided, the styling\napplied is the union of the classes they emit.\n*/\nfunction syntaxHighlighting(highlighter, options) {\n    let ext = [treeHighlighter], themeType;\n    if (highlighter instanceof HighlightStyle) {\n        if (highlighter.module)\n            ext.push(EditorView.styleModule.of(highlighter.module));\n        themeType = highlighter.themeType;\n    }\n    if (options === null || options === void 0 ? void 0 : options.fallback)\n        ext.push(fallbackHighlighter.of(highlighter));\n    else if (themeType)\n        ext.push(highlighterFacet.computeN([EditorView.darkTheme], state => {\n            return state.facet(EditorView.darkTheme) == (themeType == \"dark\") ? [highlighter] : [];\n        }));\n    else\n        ext.push(highlighterFacet.of(highlighter));\n    return ext;\n}\n/**\nReturns the CSS classes (if any) that the highlighters active in\nthe state would assign to the given style\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag) and\n(optional) language\n[scope](https://codemirror.net/6/docs/ref/#language.HighlightStyle^define^options.scope).\n*/\nfunction highlightingFor(state, tags, scope) {\n    let highlighters = getHighlighters(state);\n    let result = null;\n    if (highlighters)\n        for (let highlighter of highlighters) {\n            if (!highlighter.scope || scope && highlighter.scope(scope)) {\n                let cls = highlighter.style(tags);\n                if (cls)\n                    result = result ? result + \" \" + cls : cls;\n            }\n        }\n    return result;\n}\nclass TreeHighlighter {\n    constructor(view) {\n        this.markCache = Object.create(null);\n        this.tree = syntaxTree(view.state);\n        this.decorations = this.buildDeco(view, getHighlighters(view.state));\n        this.decoratedTo = view.viewport.to;\n    }\n    update(update) {\n        let tree = syntaxTree(update.state), highlighters = getHighlighters(update.state);\n        let styleChange = highlighters != getHighlighters(update.startState);\n        let { viewport } = update.view, decoratedToMapped = update.changes.mapPos(this.decoratedTo, 1);\n        if (tree.length < viewport.to && !styleChange && tree.type == this.tree.type && decoratedToMapped >= viewport.to) {\n            this.decorations = this.decorations.map(update.changes);\n            this.decoratedTo = decoratedToMapped;\n        }\n        else if (tree != this.tree || update.viewportChanged || styleChange) {\n            this.tree = tree;\n            this.decorations = this.buildDeco(update.view, highlighters);\n            this.decoratedTo = viewport.to;\n        }\n    }\n    buildDeco(view, highlighters) {\n        if (!highlighters || !this.tree.length)\n            return Decoration.none;\n        let builder = new RangeSetBuilder();\n        for (let { from, to } of view.visibleRanges) {\n            highlightTree(this.tree, highlighters, (from, to, style) => {\n                builder.add(from, to, this.markCache[style] || (this.markCache[style] = Decoration.mark({ class: style })));\n            }, from, to);\n        }\n        return builder.finish();\n    }\n}\nconst treeHighlighter = /*@__PURE__*/Prec.high(/*@__PURE__*/ViewPlugin.fromClass(TreeHighlighter, {\n    decorations: v => v.decorations\n}));\n/**\nA default highlight style (works well with light themes).\n*/\nconst defaultHighlightStyle = /*@__PURE__*/HighlightStyle.define([\n    { tag: tags.meta,\n        color: \"#404740\" },\n    { tag: tags.link,\n        textDecoration: \"underline\" },\n    { tag: tags.heading,\n        textDecoration: \"underline\",\n        fontWeight: \"bold\" },\n    { tag: tags.emphasis,\n        fontStyle: \"italic\" },\n    { tag: tags.strong,\n        fontWeight: \"bold\" },\n    { tag: tags.strikethrough,\n        textDecoration: \"line-through\" },\n    { tag: tags.keyword,\n        color: \"#708\" },\n    { tag: [tags.atom, tags.bool, tags.url, tags.contentSeparator, tags.labelName],\n        color: \"#219\" },\n    { tag: [tags.literal, tags.inserted],\n        color: \"#164\" },\n    { tag: [tags.string, tags.deleted],\n        color: \"#a11\" },\n    { tag: [tags.regexp, tags.escape, /*@__PURE__*/tags.special(tags.string)],\n        color: \"#e40\" },\n    { tag: /*@__PURE__*/tags.definition(tags.variableName),\n        color: \"#00f\" },\n    { tag: /*@__PURE__*/tags.local(tags.variableName),\n        color: \"#30a\" },\n    { tag: [tags.typeName, tags.namespace],\n        color: \"#085\" },\n    { tag: tags.className,\n        color: \"#167\" },\n    { tag: [/*@__PURE__*/tags.special(tags.variableName), tags.macroName],\n        color: \"#256\" },\n    { tag: /*@__PURE__*/tags.definition(tags.propertyName),\n        color: \"#00c\" },\n    { tag: tags.comment,\n        color: \"#940\" },\n    { tag: tags.invalid,\n        color: \"#f00\" }\n]);\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \"&.cm-focused .cm-matchingBracket\": { backgroundColor: \"#328c8252\" },\n    \"&.cm-focused .cm-nonmatchingBracket\": { backgroundColor: \"#bb555544\" }\n});\nconst DefaultScanDist = 10000, DefaultBrackets = \"()[]{}\";\nconst bracketMatchingConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            afterCursor: true,\n            brackets: DefaultBrackets,\n            maxScanDistance: DefaultScanDist,\n            renderMatch: defaultRenderMatch\n        });\n    }\n});\nconst matchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-matchingBracket\" }), nonmatchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-nonmatchingBracket\" });\nfunction defaultRenderMatch(match) {\n    let decorations = [];\n    let mark = match.matched ? matchingMark : nonmatchingMark;\n    decorations.push(mark.range(match.start.from, match.start.to));\n    if (match.end)\n        decorations.push(mark.range(match.end.from, match.end.to));\n    return decorations;\n}\nconst bracketMatchingState = /*@__PURE__*/StateField.define({\n    create() { return Decoration.none; },\n    update(deco, tr) {\n        if (!tr.docChanged && !tr.selection)\n            return deco;\n        let decorations = [];\n        let config = tr.state.facet(bracketMatchingConfig);\n        for (let range of tr.state.selection.ranges) {\n            if (!range.empty)\n                continue;\n            let match = matchBrackets(tr.state, range.head, -1, config)\n                || (range.head > 0 && matchBrackets(tr.state, range.head - 1, 1, config))\n                || (config.afterCursor &&\n                    (matchBrackets(tr.state, range.head, 1, config) ||\n                        (range.head < tr.state.doc.length && matchBrackets(tr.state, range.head + 1, -1, config))));\n            if (match)\n                decorations = decorations.concat(config.renderMatch(match, tr.state));\n        }\n        return Decoration.set(decorations, true);\n    },\n    provide: f => EditorView.decorations.from(f)\n});\nconst bracketMatchingUnique = [\n    bracketMatchingState,\n    baseTheme\n];\n/**\nCreate an extension that enables bracket matching. Whenever the\ncursor is next to a bracket, that bracket and the one it matches\nare highlighted. Or, when no matching bracket is found, another\nhighlighting style is used to indicate this.\n*/\nfunction bracketMatching(config = {}) {\n    return [bracketMatchingConfig.of(config), bracketMatchingUnique];\n}\n/**\nWhen larger syntax nodes, such as HTML tags, are marked as\nopening/closing, it can be a bit messy to treat the whole node as\na matchable bracket. This node prop allows you to define, for such\na node, a \u2018handle\u2019\u2014the part of the node that is highlighted, and\nthat the cursor must be on to activate highlighting in the first\nplace.\n*/\nconst bracketMatchingHandle = /*@__PURE__*/new NodeProp();\nfunction matchingNodes(node, dir, brackets) {\n    let byProp = node.prop(dir < 0 ? NodeProp.openedBy : NodeProp.closedBy);\n    if (byProp)\n        return byProp;\n    if (node.name.length == 1) {\n        let index = brackets.indexOf(node.name);\n        if (index > -1 && index % 2 == (dir < 0 ? 1 : 0))\n            return [brackets[index + dir]];\n    }\n    return null;\n}\nfunction findHandle(node) {\n    let hasHandle = node.type.prop(bracketMatchingHandle);\n    return hasHandle ? hasHandle(node.node) : node;\n}\n/**\nFind the matching bracket for the token at `pos`, scanning\ndirection `dir`. Only the `brackets` and `maxScanDistance`\nproperties are used from `config`, if given. Returns null if no\nbracket was found at `pos`, or a match result otherwise.\n*/\nfunction matchBrackets(state, pos, dir, config = {}) {\n    let maxScanDistance = config.maxScanDistance || DefaultScanDist, brackets = config.brackets || DefaultBrackets;\n    let tree = syntaxTree(state), node = tree.resolveInner(pos, dir);\n    for (let cur = node; cur; cur = cur.parent) {\n        let matches = matchingNodes(cur.type, dir, brackets);\n        if (matches && cur.from < cur.to) {\n            let handle = findHandle(cur);\n            if (handle && (dir > 0 ? pos >= handle.from && pos < handle.to : pos > handle.from && pos <= handle.to))\n                return matchMarkedBrackets(state, pos, dir, cur, handle, matches, brackets);\n        }\n    }\n    return matchPlainBrackets(state, pos, dir, tree, node.type, maxScanDistance, brackets);\n}\nfunction matchMarkedBrackets(_state, _pos, dir, token, handle, matching, brackets) {\n    let parent = token.parent, firstToken = { from: handle.from, to: handle.to };\n    let depth = 0, cursor = parent === null || parent === void 0 ? void 0 : parent.cursor();\n    if (cursor && (dir < 0 ? cursor.childBefore(token.from) : cursor.childAfter(token.to)))\n        do {\n            if (dir < 0 ? cursor.to <= token.from : cursor.from >= token.to) {\n                if (depth == 0 && matching.indexOf(cursor.type.name) > -1 && cursor.from < cursor.to) {\n                    let endHandle = findHandle(cursor);\n                    return { start: firstToken, end: endHandle ? { from: endHandle.from, to: endHandle.to } : undefined, matched: true };\n                }\n                else if (matchingNodes(cursor.type, dir, brackets)) {\n                    depth++;\n                }\n                else if (matchingNodes(cursor.type, -dir, brackets)) {\n                    if (depth == 0) {\n                        let endHandle = findHandle(cursor);\n                        return {\n                            start: firstToken,\n                            end: endHandle && endHandle.from < endHandle.to ? { from: endHandle.from, to: endHandle.to } : undefined,\n                            matched: false\n                        };\n                    }\n                    depth--;\n                }\n            }\n        } while (dir < 0 ? cursor.prevSibling() : cursor.nextSibling());\n    return { start: firstToken, matched: false };\n}\nfunction matchPlainBrackets(state, pos, dir, tree, tokenType, maxScanDistance, brackets) {\n    let startCh = dir < 0 ? state.sliceDoc(pos - 1, pos) : state.sliceDoc(pos, pos + 1);\n    let bracket = brackets.indexOf(startCh);\n    if (bracket < 0 || (bracket % 2 == 0) != (dir > 0))\n        return null;\n    let startToken = { from: dir < 0 ? pos - 1 : pos, to: dir > 0 ? pos + 1 : pos };\n    let iter = state.doc.iterRange(pos, dir > 0 ? state.doc.length : 0), depth = 0;\n    for (let distance = 0; !(iter.next()).done && distance <= maxScanDistance;) {\n        let text = iter.value;\n        if (dir < 0)\n            distance += text.length;\n        let basePos = pos + distance * dir;\n        for (let pos = dir > 0 ? 0 : text.length - 1, end = dir > 0 ? text.length : -1; pos != end; pos += dir) {\n            let found = brackets.indexOf(text[pos]);\n            if (found < 0 || tree.resolveInner(basePos + pos, 1).type != tokenType)\n                continue;\n            if ((found % 2 == 0) == (dir > 0)) {\n                depth++;\n            }\n            else if (depth == 1) { // Closing\n                return { start: startToken, end: { from: basePos + pos, to: basePos + pos + 1 }, matched: (found >> 1) == (bracket >> 1) };\n            }\n            else {\n                depth--;\n            }\n        }\n        if (dir > 0)\n            distance += text.length;\n    }\n    return iter.done ? { start: startToken, matched: false } : null;\n}\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nfunction countCol(string, end, tabSize, startIndex = 0, startValue = 0) {\n    if (end == null) {\n        end = string.search(/[^\\s\\u00a0]/);\n        if (end == -1)\n            end = string.length;\n    }\n    let n = startValue;\n    for (let i = startIndex; i < end; i++) {\n        if (string.charCodeAt(i) == 9)\n            n += tabSize - (n % tabSize);\n        else\n            n++;\n    }\n    return n;\n}\n/**\nEncapsulates a single line of input. Given to stream syntax code,\nwhich uses it to tokenize the content.\n*/\nclass StringStream {\n    /**\n    Create a stream.\n    */\n    constructor(\n    /**\n    The line.\n    */\n    string, tabSize, \n    /**\n    The current indent unit size.\n    */\n    indentUnit, overrideIndent) {\n        this.string = string;\n        this.tabSize = tabSize;\n        this.indentUnit = indentUnit;\n        this.overrideIndent = overrideIndent;\n        /**\n        The current position on the line.\n        */\n        this.pos = 0;\n        /**\n        The start position of the current token.\n        */\n        this.start = 0;\n        this.lastColumnPos = 0;\n        this.lastColumnValue = 0;\n    }\n    /**\n    True if we are at the end of the line.\n    */\n    eol() { return this.pos >= this.string.length; }\n    /**\n    True if we are at the start of the line.\n    */\n    sol() { return this.pos == 0; }\n    /**\n    Get the next code unit after the current position, or undefined\n    if we're at the end of the line.\n    */\n    peek() { return this.string.charAt(this.pos) || undefined; }\n    /**\n    Read the next code unit and advance `this.pos`.\n    */\n    next() {\n        if (this.pos < this.string.length)\n            return this.string.charAt(this.pos++);\n    }\n    /**\n    Match the next character against the given string, regular\n    expression, or predicate. Consume and return it if it matches.\n    */\n    eat(match) {\n        let ch = this.string.charAt(this.pos);\n        let ok;\n        if (typeof match == \"string\")\n            ok = ch == match;\n        else\n            ok = ch && (match instanceof RegExp ? match.test(ch) : match(ch));\n        if (ok) {\n            ++this.pos;\n            return ch;\n        }\n    }\n    /**\n    Continue matching characters that match the given string,\n    regular expression, or predicate function. Return true if any\n    characters were consumed.\n    */\n    eatWhile(match) {\n        let start = this.pos;\n        while (this.eat(match)) { }\n        return this.pos > start;\n    }\n    /**\n    Consume whitespace ahead of `this.pos`. Return true if any was\n    found.\n    */\n    eatSpace() {\n        let start = this.pos;\n        while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))\n            ++this.pos;\n        return this.pos > start;\n    }\n    /**\n    Move to the end of the line.\n    */\n    skipToEnd() { this.pos = this.string.length; }\n    /**\n    Move to directly before the given character, if found on the\n    current line.\n    */\n    skipTo(ch) {\n        let found = this.string.indexOf(ch, this.pos);\n        if (found > -1) {\n            this.pos = found;\n            return true;\n        }\n    }\n    /**\n    Move back `n` characters.\n    */\n    backUp(n) { this.pos -= n; }\n    /**\n    Get the column position at `this.pos`.\n    */\n    column() {\n        if (this.lastColumnPos < this.start) {\n            this.lastColumnValue = countCol(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n            this.lastColumnPos = this.start;\n        }\n        return this.lastColumnValue;\n    }\n    /**\n    Get the indentation column of the current line.\n    */\n    indentation() {\n        var _a;\n        return (_a = this.overrideIndent) !== null && _a !== void 0 ? _a : countCol(this.string, null, this.tabSize);\n    }\n    /**\n    Match the input against the given string or regular expression\n    (which should start with a `^`). Return true or the regexp match\n    if it matches.\n    \n    Unless `consume` is set to `false`, this will move `this.pos`\n    past the matched text.\n    \n    When matching a string `caseInsensitive` can be set to true to\n    make the match case-insensitive.\n    */\n    match(pattern, consume, caseInsensitive) {\n        if (typeof pattern == \"string\") {\n            let cased = (str) => caseInsensitive ? str.toLowerCase() : str;\n            let substr = this.string.substr(this.pos, pattern.length);\n            if (cased(substr) == cased(pattern)) {\n                if (consume !== false)\n                    this.pos += pattern.length;\n                return true;\n            }\n            else\n                return null;\n        }\n        else {\n            let match = this.string.slice(this.pos).match(pattern);\n            if (match && match.index > 0)\n                return null;\n            if (match && consume !== false)\n                this.pos += match[0].length;\n            return match;\n        }\n    }\n    /**\n    Get the current token.\n    */\n    current() { return this.string.slice(this.start, this.pos); }\n}\n\nfunction fullParser(spec) {\n    return {\n        name: spec.name || \"\",\n        token: spec.token,\n        blankLine: spec.blankLine || (() => { }),\n        startState: spec.startState || (() => true),\n        copyState: spec.copyState || defaultCopyState,\n        indent: spec.indent || (() => null),\n        languageData: spec.languageData || {},\n        tokenTable: spec.tokenTable || noTokens,\n        mergeTokens: spec.mergeTokens !== false\n    };\n}\nfunction defaultCopyState(state) {\n    if (typeof state != \"object\")\n        return state;\n    let newState = {};\n    for (let prop in state) {\n        let val = state[prop];\n        newState[prop] = (val instanceof Array ? val.slice() : val);\n    }\n    return newState;\n}\nconst IndentedFrom = /*@__PURE__*/new WeakMap();\n/**\nA [language](https://codemirror.net/6/docs/ref/#language.Language) class based on a CodeMirror\n5-style [streaming parser](https://codemirror.net/6/docs/ref/#language.StreamParser).\n*/\nclass StreamLanguage extends Language {\n    constructor(parser) {\n        let data = defineLanguageFacet(parser.languageData);\n        let p = fullParser(parser), self;\n        let impl = new class extends Parser {\n            createParse(input, fragments, ranges) {\n                return new Parse(self, input, fragments, ranges);\n            }\n        };\n        super(data, impl, [], parser.name);\n        this.topNode = docID(data, this);\n        self = this;\n        this.streamParser = p;\n        this.stateAfter = new NodeProp({ perNode: true });\n        this.tokenTable = parser.tokenTable ? new TokenTable(p.tokenTable) : defaultTokenTable;\n    }\n    /**\n    Define a stream language.\n    */\n    static define(spec) { return new StreamLanguage(spec); }\n    /**\n    @internal\n    */\n    getIndent(cx) {\n        let from = undefined;\n        let { overrideIndentation } = cx.options;\n        if (overrideIndentation) {\n            from = IndentedFrom.get(cx.state);\n            if (from != null && from < cx.pos - 1e4)\n                from = undefined;\n        }\n        let start = findState(this, cx.node.tree, cx.node.from, cx.node.from, from !== null && from !== void 0 ? from : cx.pos), statePos, state;\n        if (start) {\n            state = start.state;\n            statePos = start.pos + 1;\n        }\n        else {\n            state = this.streamParser.startState(cx.unit);\n            statePos = cx.node.from;\n        }\n        if (cx.pos - statePos > 10000 /* C.MaxIndentScanDist */)\n            return null;\n        while (statePos < cx.pos) {\n            let line = cx.state.doc.lineAt(statePos), end = Math.min(cx.pos, line.to);\n            if (line.length) {\n                let indentation = overrideIndentation ? overrideIndentation(line.from) : -1;\n                let stream = new StringStream(line.text, cx.state.tabSize, cx.unit, indentation < 0 ? undefined : indentation);\n                while (stream.pos < end - line.from)\n                    readToken(this.streamParser.token, stream, state);\n            }\n            else {\n                this.streamParser.blankLine(state, cx.unit);\n            }\n            if (end == cx.pos)\n                break;\n            statePos = line.to + 1;\n        }\n        let line = cx.lineAt(cx.pos);\n        if (overrideIndentation && from == null)\n            IndentedFrom.set(cx.state, line.from);\n        return this.streamParser.indent(state, /^\\s*(.*)/.exec(line.text)[1], cx);\n    }\n    get allowsNesting() { return false; }\n}\nfunction findState(lang, tree, off, startPos, before) {\n    let state = off >= startPos && off + tree.length <= before && tree.prop(lang.stateAfter);\n    if (state)\n        return { state: lang.streamParser.copyState(state), pos: off + tree.length };\n    for (let i = tree.children.length - 1; i >= 0; i--) {\n        let child = tree.children[i], pos = off + tree.positions[i];\n        let found = child instanceof Tree && pos < before && findState(lang, child, pos, startPos, before);\n        if (found)\n            return found;\n    }\n    return null;\n}\nfunction cutTree(lang, tree, from, to, inside) {\n    if (inside && from <= 0 && to >= tree.length)\n        return tree;\n    if (!inside && from == 0 && tree.type == lang.topNode)\n        inside = true;\n    for (let i = tree.children.length - 1; i >= 0; i--) {\n        let pos = tree.positions[i], child = tree.children[i], inner;\n        if (pos < to && child instanceof Tree) {\n            if (!(inner = cutTree(lang, child, from - pos, to - pos, inside)))\n                break;\n            return !inside ? inner\n                : new Tree(tree.type, tree.children.slice(0, i).concat(inner), tree.positions.slice(0, i + 1), pos + inner.length);\n        }\n    }\n    return null;\n}\nfunction findStartInFragments(lang, fragments, startPos, endPos, editorState) {\n    for (let f of fragments) {\n        let from = f.from + (f.openStart ? 25 : 0), to = f.to - (f.openEnd ? 25 : 0);\n        let found = from <= startPos && to > startPos && findState(lang, f.tree, 0 - f.offset, startPos, to), tree;\n        if (found && found.pos <= endPos && (tree = cutTree(lang, f.tree, startPos + f.offset, found.pos + f.offset, false)))\n            return { state: found.state, tree };\n    }\n    return { state: lang.streamParser.startState(editorState ? getIndentUnit(editorState) : 4), tree: Tree.empty };\n}\nclass Parse {\n    constructor(lang, input, fragments, ranges) {\n        this.lang = lang;\n        this.input = input;\n        this.fragments = fragments;\n        this.ranges = ranges;\n        this.stoppedAt = null;\n        this.chunks = [];\n        this.chunkPos = [];\n        this.chunk = [];\n        this.chunkReused = undefined;\n        this.rangeIndex = 0;\n        this.to = ranges[ranges.length - 1].to;\n        let context = ParseContext.get(), from = ranges[0].from;\n        let { state, tree } = findStartInFragments(lang, fragments, from, this.to, context === null || context === void 0 ? void 0 : context.state);\n        this.state = state;\n        this.parsedPos = this.chunkStart = from + tree.length;\n        for (let i = 0; i < tree.children.length; i++) {\n            this.chunks.push(tree.children[i]);\n            this.chunkPos.push(tree.positions[i]);\n        }\n        if (context && this.parsedPos < context.viewport.from - 100000 /* C.MaxDistanceBeforeViewport */ &&\n            ranges.some(r => r.from <= context.viewport.from && r.to >= context.viewport.from)) {\n            this.state = this.lang.streamParser.startState(getIndentUnit(context.state));\n            context.skipUntilInView(this.parsedPos, context.viewport.from);\n            this.parsedPos = context.viewport.from;\n        }\n        this.moveRangeIndex();\n    }\n    advance() {\n        let context = ParseContext.get();\n        let parseEnd = this.stoppedAt == null ? this.to : Math.min(this.to, this.stoppedAt);\n        let end = Math.min(parseEnd, this.chunkStart + 512 /* C.ChunkSize */);\n        if (context)\n            end = Math.min(end, context.viewport.to);\n        while (this.parsedPos < end)\n            this.parseLine(context);\n        if (this.chunkStart < this.parsedPos)\n            this.finishChunk();\n        if (this.parsedPos >= parseEnd)\n            return this.finish();\n        if (context && this.parsedPos >= context.viewport.to) {\n            context.skipUntilInView(this.parsedPos, parseEnd);\n            return this.finish();\n        }\n        return null;\n    }\n    stopAt(pos) {\n        this.stoppedAt = pos;\n    }\n    lineAfter(pos) {\n        let chunk = this.input.chunk(pos);\n        if (!this.input.lineChunks) {\n            let eol = chunk.indexOf(\"\\n\");\n            if (eol > -1)\n                chunk = chunk.slice(0, eol);\n        }\n        else if (chunk == \"\\n\") {\n            chunk = \"\";\n        }\n        return pos + chunk.length <= this.to ? chunk : chunk.slice(0, this.to - pos);\n    }\n    nextLine() {\n        let from = this.parsedPos, line = this.lineAfter(from), end = from + line.length;\n        for (let index = this.rangeIndex;;) {\n            let rangeEnd = this.ranges[index].to;\n            if (rangeEnd >= end)\n                break;\n            line = line.slice(0, rangeEnd - (end - line.length));\n            index++;\n            if (index == this.ranges.length)\n                break;\n            let rangeStart = this.ranges[index].from;\n            let after = this.lineAfter(rangeStart);\n            line += after;\n            end = rangeStart + after.length;\n        }\n        return { line, end };\n    }\n    skipGapsTo(pos, offset, side) {\n        for (;;) {\n            let end = this.ranges[this.rangeIndex].to, offPos = pos + offset;\n            if (side > 0 ? end > offPos : end >= offPos)\n                break;\n            let start = this.ranges[++this.rangeIndex].from;\n            offset += start - end;\n        }\n        return offset;\n    }\n    moveRangeIndex() {\n        while (this.ranges[this.rangeIndex].to < this.parsedPos)\n            this.rangeIndex++;\n    }\n    emitToken(id, from, to, offset) {\n        let size = 4;\n        if (this.ranges.length > 1) {\n            offset = this.skipGapsTo(from, offset, 1);\n            from += offset;\n            let len0 = this.chunk.length;\n            offset = this.skipGapsTo(to, offset, -1);\n            to += offset;\n            size += this.chunk.length - len0;\n        }\n        let last = this.chunk.length - 4;\n        if (this.lang.streamParser.mergeTokens && size == 4 && last >= 0 &&\n            this.chunk[last] == id && this.chunk[last + 2] == from)\n            this.chunk[last + 2] = to;\n        else\n            this.chunk.push(id, from, to, size);\n        return offset;\n    }\n    parseLine(context) {\n        let { line, end } = this.nextLine(), offset = 0, { streamParser } = this.lang;\n        let stream = new StringStream(line, context ? context.state.tabSize : 4, context ? getIndentUnit(context.state) : 2);\n        if (stream.eol()) {\n            streamParser.blankLine(this.state, stream.indentUnit);\n        }\n        else {\n            while (!stream.eol()) {\n                let token = readToken(streamParser.token, stream, this.state);\n                if (token)\n                    offset = this.emitToken(this.lang.tokenTable.resolve(token), this.parsedPos + stream.start, this.parsedPos + stream.pos, offset);\n                if (stream.start > 10000 /* C.MaxLineLength */)\n                    break;\n            }\n        }\n        this.parsedPos = end;\n        this.moveRangeIndex();\n        if (this.parsedPos < this.to)\n            this.parsedPos++;\n    }\n    finishChunk() {\n        let tree = Tree.build({\n            buffer: this.chunk,\n            start: this.chunkStart,\n            length: this.parsedPos - this.chunkStart,\n            nodeSet,\n            topID: 0,\n            maxBufferLength: 512 /* C.ChunkSize */,\n            reused: this.chunkReused\n        });\n        tree = new Tree(tree.type, tree.children, tree.positions, tree.length, [[this.lang.stateAfter, this.lang.streamParser.copyState(this.state)]]);\n        this.chunks.push(tree);\n        this.chunkPos.push(this.chunkStart - this.ranges[0].from);\n        this.chunk = [];\n        this.chunkReused = undefined;\n        this.chunkStart = this.parsedPos;\n    }\n    finish() {\n        return new Tree(this.lang.topNode, this.chunks, this.chunkPos, this.parsedPos - this.ranges[0].from).balance();\n    }\n}\nfunction readToken(token, stream, state) {\n    stream.start = stream.pos;\n    for (let i = 0; i < 10; i++) {\n        let result = token(stream, state);\n        if (stream.pos > stream.start)\n            return result;\n    }\n    throw new Error(\"Stream parser failed to advance stream.\");\n}\nconst noTokens = /*@__PURE__*/Object.create(null);\nconst typeArray = [NodeType.none];\nconst nodeSet = /*@__PURE__*/new NodeSet(typeArray);\nconst warned = [];\n// Cache of node types by name and tags\nconst byTag = /*@__PURE__*/Object.create(null);\nconst defaultTable = /*@__PURE__*/Object.create(null);\nfor (let [legacyName, name] of [\n    [\"variable\", \"variableName\"],\n    [\"variable-2\", \"variableName.special\"],\n    [\"string-2\", \"string.special\"],\n    [\"def\", \"variableName.definition\"],\n    [\"tag\", \"tagName\"],\n    [\"attribute\", \"attributeName\"],\n    [\"type\", \"typeName\"],\n    [\"builtin\", \"variableName.standard\"],\n    [\"qualifier\", \"modifier\"],\n    [\"error\", \"invalid\"],\n    [\"header\", \"heading\"],\n    [\"property\", \"propertyName\"]\n])\n    defaultTable[legacyName] = /*@__PURE__*/createTokenType(noTokens, name);\nclass TokenTable {\n    constructor(extra) {\n        this.extra = extra;\n        this.table = Object.assign(Object.create(null), defaultTable);\n    }\n    resolve(tag) {\n        return !tag ? 0 : this.table[tag] || (this.table[tag] = createTokenType(this.extra, tag));\n    }\n}\nconst defaultTokenTable = /*@__PURE__*/new TokenTable(noTokens);\nfunction warnForPart(part, msg) {\n    if (warned.indexOf(part) > -1)\n        return;\n    warned.push(part);\n    console.warn(msg);\n}\nfunction createTokenType(extra, tagStr) {\n    let tags$1 = [];\n    for (let name of tagStr.split(\" \")) {\n        let found = [];\n        for (let part of name.split(\".\")) {\n            let value = (extra[part] || tags[part]);\n            if (!value) {\n                warnForPart(part, `Unknown highlighting tag ${part}`);\n            }\n            else if (typeof value == \"function\") {\n                if (!found.length)\n                    warnForPart(part, `Modifier ${part} used at start of tag`);\n                else\n                    found = found.map(value);\n            }\n            else {\n                if (found.length)\n                    warnForPart(part, `Tag ${part} used as modifier`);\n                else\n                    found = Array.isArray(value) ? value : [value];\n            }\n        }\n        for (let tag of found)\n            tags$1.push(tag);\n    }\n    if (!tags$1.length)\n        return 0;\n    let name = tagStr.replace(/ /g, \"_\"), key = name + \" \" + tags$1.map(t => t.id);\n    let known = byTag[key];\n    if (known)\n        return known.id;\n    let type = byTag[key] = NodeType.define({\n        id: typeArray.length,\n        name,\n        props: [styleTags({ [name]: tags$1 })]\n    });\n    typeArray.push(type);\n    return type.id;\n}\nfunction docID(data, lang) {\n    let type = NodeType.define({ id: typeArray.length, name: \"Document\", props: [\n            languageDataProp.add(() => data),\n            indentNodeProp.add(() => cx => lang.getIndent(cx))\n        ], top: true });\n    typeArray.push(type);\n    return type;\n}\n\nfunction buildForLine(line) {\n    return line.length <= 4096 && /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/.test(line);\n}\nfunction textHasRTL(text) {\n    for (let i = text.iter(); !i.next().done;)\n        if (buildForLine(i.value))\n            return true;\n    return false;\n}\nfunction changeAddsRTL(change) {\n    let added = false;\n    change.iterChanges((fA, tA, fB, tB, ins) => {\n        if (!added && textHasRTL(ins))\n            added = true;\n    });\n    return added;\n}\nconst alwaysIsolate = /*@__PURE__*/Facet.define({ combine: values => values.some(x => x) });\n/**\nMake sure nodes\n[marked](https://lezer.codemirror.net/docs/ref/#common.NodeProp^isolate)\nas isolating for bidirectional text are rendered in a way that\nisolates them from the surrounding text.\n*/\nfunction bidiIsolates(options = {}) {\n    let extensions = [isolateMarks];\n    if (options.alwaysIsolate)\n        extensions.push(alwaysIsolate.of(true));\n    return extensions;\n}\nconst isolateMarks = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.always = view.state.facet(alwaysIsolate) ||\n            view.textDirection != Direction.LTR ||\n            view.state.facet(EditorView.perLineTextDirection);\n        this.hasRTL = !this.always && textHasRTL(view.state.doc);\n        this.tree = syntaxTree(view.state);\n        this.decorations = this.always || this.hasRTL ? buildDeco(view, this.tree, this.always) : Decoration.none;\n    }\n    update(update) {\n        let always = update.state.facet(alwaysIsolate) ||\n            update.view.textDirection != Direction.LTR ||\n            update.state.facet(EditorView.perLineTextDirection);\n        if (!always && !this.hasRTL && changeAddsRTL(update.changes))\n            this.hasRTL = true;\n        if (!always && !this.hasRTL)\n            return;\n        let tree = syntaxTree(update.state);\n        if (always != this.always || tree != this.tree || update.docChanged || update.viewportChanged) {\n            this.tree = tree;\n            this.always = always;\n            this.decorations = buildDeco(update.view, tree, always);\n        }\n    }\n}, {\n    provide: plugin => {\n        function access(view) {\n            var _a, _b;\n            return (_b = (_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.decorations) !== null && _b !== void 0 ? _b : Decoration.none;\n        }\n        return [EditorView.outerDecorations.of(access),\n            Prec.lowest(EditorView.bidiIsolatedRanges.of(access))];\n    }\n});\nfunction buildDeco(view, tree, always) {\n    let deco = new RangeSetBuilder();\n    let ranges = view.visibleRanges;\n    if (!always)\n        ranges = clipRTLLines(ranges, view.state.doc);\n    for (let { from, to } of ranges) {\n        tree.iterate({\n            enter: node => {\n                let iso = node.type.prop(NodeProp.isolate);\n                if (iso)\n                    deco.add(node.from, node.to, marks[iso]);\n            },\n            from, to\n        });\n    }\n    return deco.finish();\n}\nfunction clipRTLLines(ranges, doc) {\n    let cur = doc.iter(), pos = 0, result = [], last = null;\n    for (let { from, to } of ranges) {\n        if (last && last.to > from) {\n            from = last.to;\n            if (from >= to)\n                continue;\n        }\n        if (pos + cur.value.length < from) {\n            cur.next(from - (pos + cur.value.length));\n            pos = from;\n        }\n        for (;;) {\n            let start = pos, end = pos + cur.value.length;\n            if (!cur.lineBreak && buildForLine(cur.value)) {\n                if (last && last.to > start - 10)\n                    last.to = Math.min(to, end);\n                else\n                    result.push(last = { from: start, to: Math.min(to, end) });\n            }\n            if (end >= to)\n                break;\n            pos = end;\n            cur.next();\n        }\n    }\n    return result;\n}\nconst marks = {\n    rtl: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"rtl\" }, bidiIsolate: Direction.RTL }),\n    ltr: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"ltr\" }, bidiIsolate: Direction.LTR }),\n    auto: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"auto\" }, bidiIsolate: null })\n};\n\nexport { DocInput, HighlightStyle, IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, ParseContext, StreamLanguage, StringStream, TreeIndentContext, bidiIsolates, bracketMatching, bracketMatchingHandle, codeFolding, continuedIndent, defaultHighlightStyle, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldAll, foldCode, foldEffect, foldGutter, foldInside, foldKeymap, foldNodeProp, foldService, foldState, foldable, foldedRanges, forceParsing, getIndentUnit, getIndentation, highlightingFor, indentNodeProp, indentOnInput, indentRange, indentService, indentString, indentUnit, language, languageDataProp, matchBrackets, sublanguageProp, syntaxHighlighting, syntaxParserRunning, syntaxTree, syntaxTreeAvailable, toggleFold, unfoldAll, unfoldCode, unfoldEffect };\n", "import { Annotation, StateEffect, EditorSelection, codePointAt, codePointSize, fromCodePoint, Facet, combineConfig, StateField, Prec, Text, Transaction, MapMode, RangeValue, RangeSet, CharCategory } from '@codemirror/state';\nimport { Direction, logException, showTooltip, EditorView, ViewPlugin, getTooltip, Decoration, WidgetType, keymap } from '@codemirror/view';\nimport { syntaxTree, indentUnit } from '@codemirror/language';\n\n/**\nAn instance of this is passed to completion source functions.\n*/\nclass CompletionContext {\n    /**\n    Create a new completion context. (Mostly useful for testing\n    completion sources\u2014in the editor, the extension will create\n    these for you.)\n    */\n    constructor(\n    /**\n    The editor state that the completion happens in.\n    */\n    state, \n    /**\n    The position at which the completion is happening.\n    */\n    pos, \n    /**\n    Indicates whether completion was activated explicitly, or\n    implicitly by typing. The usual way to respond to this is to\n    only return completions when either there is part of a\n    completable entity before the cursor, or `explicit` is true.\n    */\n    explicit, \n    /**\n    The editor view. May be undefined if the context was created\n    in a situation where there is no such view available, such as\n    in synchronous updates via\n    [`CompletionResult.update`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.update)\n    or when called by test code.\n    */\n    view) {\n        this.state = state;\n        this.pos = pos;\n        this.explicit = explicit;\n        this.view = view;\n        /**\n        @internal\n        */\n        this.abortListeners = [];\n        /**\n        @internal\n        */\n        this.abortOnDocChange = false;\n    }\n    /**\n    Get the extent, content, and (if there is a token) type of the\n    token before `this.pos`.\n    */\n    tokenBefore(types) {\n        let token = syntaxTree(this.state).resolveInner(this.pos, -1);\n        while (token && types.indexOf(token.name) < 0)\n            token = token.parent;\n        return token ? { from: token.from, to: this.pos,\n            text: this.state.sliceDoc(token.from, this.pos),\n            type: token.type } : null;\n    }\n    /**\n    Get the match of the given expression directly before the\n    cursor.\n    */\n    matchBefore(expr) {\n        let line = this.state.doc.lineAt(this.pos);\n        let start = Math.max(line.from, this.pos - 250);\n        let str = line.text.slice(start - line.from, this.pos - line.from);\n        let found = str.search(ensureAnchor(expr, false));\n        return found < 0 ? null : { from: start + found, to: this.pos, text: str.slice(found) };\n    }\n    /**\n    Yields true when the query has been aborted. Can be useful in\n    asynchronous queries to avoid doing work that will be ignored.\n    */\n    get aborted() { return this.abortListeners == null; }\n    /**\n    Allows you to register abort handlers, which will be called when\n    the query is\n    [aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).\n    \n    By default, running queries will not be aborted for regular\n    typing or backspacing, on the assumption that they are likely to\n    return a result with a\n    [`validFor`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.validFor) field that\n    allows the result to be used after all. Passing `onDocChange:\n    true` will cause this query to be aborted for any document\n    change.\n    */\n    addEventListener(type, listener, options) {\n        if (type == \"abort\" && this.abortListeners) {\n            this.abortListeners.push(listener);\n            if (options && options.onDocChange)\n                this.abortOnDocChange = true;\n        }\n    }\n}\nfunction toSet(chars) {\n    let flat = Object.keys(chars).join(\"\");\n    let words = /\\w/.test(flat);\n    if (words)\n        flat = flat.replace(/\\w/g, \"\");\n    return `[${words ? \"\\\\w\" : \"\"}${flat.replace(/[^\\w\\s]/g, \"\\\\$&\")}]`;\n}\nfunction prefixMatch(options) {\n    let first = Object.create(null), rest = Object.create(null);\n    for (let { label } of options) {\n        first[label[0]] = true;\n        for (let i = 1; i < label.length; i++)\n            rest[label[i]] = true;\n    }\n    let source = toSet(first) + toSet(rest) + \"*$\";\n    return [new RegExp(\"^\" + source), new RegExp(source)];\n}\n/**\nGiven a a fixed array of options, return an autocompleter that\ncompletes them.\n*/\nfunction completeFromList(list) {\n    let options = list.map(o => typeof o == \"string\" ? { label: o } : o);\n    let [validFor, match] = options.every(o => /^\\w+$/.test(o.label)) ? [/\\w*$/, /\\w+$/] : prefixMatch(options);\n    return (context) => {\n        let token = context.matchBefore(match);\n        return token || context.explicit ? { from: token ? token.from : context.pos, options, validFor } : null;\n    };\n}\n/**\nWrap the given completion source so that it will only fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifIn(nodes, source) {\n    return (context) => {\n        for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n            if (nodes.indexOf(pos.name) > -1)\n                return source(context);\n            if (pos.type.isTop)\n                break;\n        }\n        return null;\n    };\n}\n/**\nWrap the given completion source so that it will not fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifNotIn(nodes, source) {\n    return (context) => {\n        for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n            if (nodes.indexOf(pos.name) > -1)\n                return null;\n            if (pos.type.isTop)\n                break;\n        }\n        return source(context);\n    };\n}\nclass Option {\n    constructor(completion, source, match, score) {\n        this.completion = completion;\n        this.source = source;\n        this.match = match;\n        this.score = score;\n    }\n}\nfunction cur(state) { return state.selection.main.from; }\n// Make sure the given regexp has a $ at its end and, if `start` is\n// true, a ^ at its start.\nfunction ensureAnchor(expr, start) {\n    var _a;\n    let { source } = expr;\n    let addStart = start && source[0] != \"^\", addEnd = source[source.length - 1] != \"$\";\n    if (!addStart && !addEnd)\n        return expr;\n    return new RegExp(`${addStart ? \"^\" : \"\"}(?:${source})${addEnd ? \"$\" : \"\"}`, (_a = expr.flags) !== null && _a !== void 0 ? _a : (expr.ignoreCase ? \"i\" : \"\"));\n}\n/**\nThis annotation is added to transactions that are produced by\npicking a completion.\n*/\nconst pickedCompletion = /*@__PURE__*/Annotation.define();\n/**\nHelper function that returns a transaction spec which inserts a\ncompletion's text in the main selection range, and any other\nselection range that has the same text in front of it.\n*/\nfunction insertCompletionText(state, text, from, to) {\n    let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;\n    return Object.assign(Object.assign({}, state.changeByRange(range => {\n        if (range != main && from != to &&\n            state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))\n            return { range };\n        let lines = state.toText(text);\n        return {\n            changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: lines },\n            range: EditorSelection.cursor(range.from + fromOff + lines.length)\n        };\n    })), { scrollIntoView: true, userEvent: \"input.complete\" });\n}\nconst SourceCache = /*@__PURE__*/new WeakMap();\nfunction asSource(source) {\n    if (!Array.isArray(source))\n        return source;\n    let known = SourceCache.get(source);\n    if (!known)\n        SourceCache.set(source, known = completeFromList(source));\n    return known;\n}\nconst startCompletionEffect = /*@__PURE__*/StateEffect.define();\nconst closeCompletionEffect = /*@__PURE__*/StateEffect.define();\n\n// A pattern matcher for fuzzy completion matching. Create an instance\n// once for a pattern, and then use that to match any number of\n// completions.\nclass FuzzyMatcher {\n    constructor(pattern) {\n        this.pattern = pattern;\n        this.chars = [];\n        this.folded = [];\n        // Buffers reused by calls to `match` to track matched character\n        // positions.\n        this.any = [];\n        this.precise = [];\n        this.byWord = [];\n        this.score = 0;\n        this.matched = [];\n        for (let p = 0; p < pattern.length;) {\n            let char = codePointAt(pattern, p), size = codePointSize(char);\n            this.chars.push(char);\n            let part = pattern.slice(p, p + size), upper = part.toUpperCase();\n            this.folded.push(codePointAt(upper == part ? part.toLowerCase() : upper, 0));\n            p += size;\n        }\n        this.astral = pattern.length != this.chars.length;\n    }\n    ret(score, matched) {\n        this.score = score;\n        this.matched = matched;\n        return this;\n    }\n    // Matches a given word (completion) against the pattern (input).\n    // Will return a boolean indicating whether there was a match and,\n    // on success, set `this.score` to the score, `this.matched` to an\n    // array of `from, to` pairs indicating the matched parts of `word`.\n    //\n    // The score is a number that is more negative the worse the match\n    // is. See `Penalty` above.\n    match(word) {\n        if (this.pattern.length == 0)\n            return this.ret(-100 /* Penalty.NotFull */, []);\n        if (word.length < this.pattern.length)\n            return null;\n        let { chars, folded, any, precise, byWord } = this;\n        // For single-character queries, only match when they occur right\n        // at the start\n        if (chars.length == 1) {\n            let first = codePointAt(word, 0), firstSize = codePointSize(first);\n            let score = firstSize == word.length ? 0 : -100 /* Penalty.NotFull */;\n            if (first == chars[0]) ;\n            else if (first == folded[0])\n                score += -200 /* Penalty.CaseFold */;\n            else\n                return null;\n            return this.ret(score, [0, firstSize]);\n        }\n        let direct = word.indexOf(this.pattern);\n        if (direct == 0)\n            return this.ret(word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */, [0, this.pattern.length]);\n        let len = chars.length, anyTo = 0;\n        if (direct < 0) {\n            for (let i = 0, e = Math.min(word.length, 200); i < e && anyTo < len;) {\n                let next = codePointAt(word, i);\n                if (next == chars[anyTo] || next == folded[anyTo])\n                    any[anyTo++] = i;\n                i += codePointSize(next);\n            }\n            // No match, exit immediately\n            if (anyTo < len)\n                return null;\n        }\n        // This tracks the extent of the precise (non-folded, not\n        // necessarily adjacent) match\n        let preciseTo = 0;\n        // Tracks whether there is a match that hits only characters that\n        // appear to be starting words. `byWordFolded` is set to true when\n        // a case folded character is encountered in such a match\n        let byWordTo = 0, byWordFolded = false;\n        // If we've found a partial adjacent match, these track its state\n        let adjacentTo = 0, adjacentStart = -1, adjacentEnd = -1;\n        let hasLower = /[a-z]/.test(word), wordAdjacent = true;\n        // Go over the option's text, scanning for the various kinds of matches\n        for (let i = 0, e = Math.min(word.length, 200), prevType = 0 /* Tp.NonWord */; i < e && byWordTo < len;) {\n            let next = codePointAt(word, i);\n            if (direct < 0) {\n                if (preciseTo < len && next == chars[preciseTo])\n                    precise[preciseTo++] = i;\n                if (adjacentTo < len) {\n                    if (next == chars[adjacentTo] || next == folded[adjacentTo]) {\n                        if (adjacentTo == 0)\n                            adjacentStart = i;\n                        adjacentEnd = i + 1;\n                        adjacentTo++;\n                    }\n                    else {\n                        adjacentTo = 0;\n                    }\n                }\n            }\n            let ch, type = next < 0xff\n                ? (next >= 48 && next <= 57 || next >= 97 && next <= 122 ? 2 /* Tp.Lower */ : next >= 65 && next <= 90 ? 1 /* Tp.Upper */ : 0 /* Tp.NonWord */)\n                : ((ch = fromCodePoint(next)) != ch.toLowerCase() ? 1 /* Tp.Upper */ : ch != ch.toUpperCase() ? 2 /* Tp.Lower */ : 0 /* Tp.NonWord */);\n            if (!i || type == 1 /* Tp.Upper */ && hasLower || prevType == 0 /* Tp.NonWord */ && type != 0 /* Tp.NonWord */) {\n                if (chars[byWordTo] == next || (folded[byWordTo] == next && (byWordFolded = true)))\n                    byWord[byWordTo++] = i;\n                else if (byWord.length)\n                    wordAdjacent = false;\n            }\n            prevType = type;\n            i += codePointSize(next);\n        }\n        if (byWordTo == len && byWord[0] == 0 && wordAdjacent)\n            return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0), byWord, word);\n        if (adjacentTo == len && adjacentStart == 0)\n            return this.ret(-200 /* Penalty.CaseFold */ - word.length + (adjacentEnd == word.length ? 0 : -100 /* Penalty.NotFull */), [0, adjacentEnd]);\n        if (direct > -1)\n            return this.ret(-700 /* Penalty.NotStart */ - word.length, [direct, direct + this.pattern.length]);\n        if (adjacentTo == len)\n            return this.ret(-200 /* Penalty.CaseFold */ + -700 /* Penalty.NotStart */ - word.length, [adjacentStart, adjacentEnd]);\n        if (byWordTo == len)\n            return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0) + -700 /* Penalty.NotStart */ +\n                (wordAdjacent ? 0 : -1100 /* Penalty.Gap */), byWord, word);\n        return chars.length == 2 ? null\n            : this.result((any[0] ? -700 /* Penalty.NotStart */ : 0) + -200 /* Penalty.CaseFold */ + -1100 /* Penalty.Gap */, any, word);\n    }\n    result(score, positions, word) {\n        let result = [], i = 0;\n        for (let pos of positions) {\n            let to = pos + (this.astral ? codePointSize(codePointAt(word, pos)) : 1);\n            if (i && result[i - 1] == pos)\n                result[i - 1] = to;\n            else {\n                result[i++] = pos;\n                result[i++] = to;\n            }\n        }\n        return this.ret(score - word.length, result);\n    }\n}\nclass StrictMatcher {\n    constructor(pattern) {\n        this.pattern = pattern;\n        this.matched = [];\n        this.score = 0;\n        this.folded = pattern.toLowerCase();\n    }\n    match(word) {\n        if (word.length < this.pattern.length)\n            return null;\n        let start = word.slice(0, this.pattern.length);\n        let match = start == this.pattern ? 0 : start.toLowerCase() == this.folded ? -200 /* Penalty.CaseFold */ : null;\n        if (match == null)\n            return null;\n        this.matched = [0, start.length];\n        this.score = match + (word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */);\n        return this;\n    }\n}\n\nconst completionConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            activateOnTyping: true,\n            activateOnCompletion: () => false,\n            activateOnTypingDelay: 100,\n            selectOnOpen: true,\n            override: null,\n            closeOnBlur: true,\n            maxRenderedOptions: 100,\n            defaultKeymap: true,\n            tooltipClass: () => \"\",\n            optionClass: () => \"\",\n            aboveCursor: false,\n            icons: true,\n            addToOptions: [],\n            positionInfo: defaultPositionInfo,\n            filterStrict: false,\n            compareCompletions: (a, b) => a.label.localeCompare(b.label),\n            interactionDelay: 75,\n            updateSyncTime: 100\n        }, {\n            defaultKeymap: (a, b) => a && b,\n            closeOnBlur: (a, b) => a && b,\n            icons: (a, b) => a && b,\n            tooltipClass: (a, b) => c => joinClass(a(c), b(c)),\n            optionClass: (a, b) => c => joinClass(a(c), b(c)),\n            addToOptions: (a, b) => a.concat(b),\n            filterStrict: (a, b) => a || b,\n        });\n    }\n});\nfunction joinClass(a, b) {\n    return a ? b ? a + \" \" + b : a : b;\n}\nfunction defaultPositionInfo(view, list, option, info, space, tooltip) {\n    let rtl = view.textDirection == Direction.RTL, left = rtl, narrow = false;\n    let side = \"top\", offset, maxWidth;\n    let spaceLeft = list.left - space.left, spaceRight = space.right - list.right;\n    let infoWidth = info.right - info.left, infoHeight = info.bottom - info.top;\n    if (left && spaceLeft < Math.min(infoWidth, spaceRight))\n        left = false;\n    else if (!left && spaceRight < Math.min(infoWidth, spaceLeft))\n        left = true;\n    if (infoWidth <= (left ? spaceLeft : spaceRight)) {\n        offset = Math.max(space.top, Math.min(option.top, space.bottom - infoHeight)) - list.top;\n        maxWidth = Math.min(400 /* Info.Width */, left ? spaceLeft : spaceRight);\n    }\n    else {\n        narrow = true;\n        maxWidth = Math.min(400 /* Info.Width */, (rtl ? list.right : space.right - list.left) - 30 /* Info.Margin */);\n        let spaceBelow = space.bottom - list.bottom;\n        if (spaceBelow >= infoHeight || spaceBelow > list.top) { // Below the completion\n            offset = option.bottom - list.top;\n        }\n        else { // Above it\n            side = \"bottom\";\n            offset = list.bottom - option.top;\n        }\n    }\n    let scaleY = (list.bottom - list.top) / tooltip.offsetHeight;\n    let scaleX = (list.right - list.left) / tooltip.offsetWidth;\n    return {\n        style: `${side}: ${offset / scaleY}px; max-width: ${maxWidth / scaleX}px`,\n        class: \"cm-completionInfo-\" + (narrow ? (rtl ? \"left-narrow\" : \"right-narrow\") : left ? \"left\" : \"right\")\n    };\n}\n\nfunction optionContent(config) {\n    let content = config.addToOptions.slice();\n    if (config.icons)\n        content.push({\n            render(completion) {\n                let icon = document.createElement(\"div\");\n                icon.classList.add(\"cm-completionIcon\");\n                if (completion.type)\n                    icon.classList.add(...completion.type.split(/\\s+/g).map(cls => \"cm-completionIcon-\" + cls));\n                icon.setAttribute(\"aria-hidden\", \"true\");\n                return icon;\n            },\n            position: 20\n        });\n    content.push({\n        render(completion, _s, _v, match) {\n            let labelElt = document.createElement(\"span\");\n            labelElt.className = \"cm-completionLabel\";\n            let label = completion.displayLabel || completion.label, off = 0;\n            for (let j = 0; j < match.length;) {\n                let from = match[j++], to = match[j++];\n                if (from > off)\n                    labelElt.appendChild(document.createTextNode(label.slice(off, from)));\n                let span = labelElt.appendChild(document.createElement(\"span\"));\n                span.appendChild(document.createTextNode(label.slice(from, to)));\n                span.className = \"cm-completionMatchedText\";\n                off = to;\n            }\n            if (off < label.length)\n                labelElt.appendChild(document.createTextNode(label.slice(off)));\n            return labelElt;\n        },\n        position: 50\n    }, {\n        render(completion) {\n            if (!completion.detail)\n                return null;\n            let detailElt = document.createElement(\"span\");\n            detailElt.className = \"cm-completionDetail\";\n            detailElt.textContent = completion.detail;\n            return detailElt;\n        },\n        position: 80\n    });\n    return content.sort((a, b) => a.position - b.position).map(a => a.render);\n}\nfunction rangeAroundSelected(total, selected, max) {\n    if (total <= max)\n        return { from: 0, to: total };\n    if (selected < 0)\n        selected = 0;\n    if (selected <= (total >> 1)) {\n        let off = Math.floor(selected / max);\n        return { from: off * max, to: (off + 1) * max };\n    }\n    let off = Math.floor((total - selected) / max);\n    return { from: total - (off + 1) * max, to: total - off * max };\n}\nclass CompletionTooltip {\n    constructor(view, stateField, applyCompletion) {\n        this.view = view;\n        this.stateField = stateField;\n        this.applyCompletion = applyCompletion;\n        this.info = null;\n        this.infoDestroy = null;\n        this.placeInfoReq = {\n            read: () => this.measureInfo(),\n            write: (pos) => this.placeInfo(pos),\n            key: this\n        };\n        this.space = null;\n        this.currentClass = \"\";\n        let cState = view.state.field(stateField);\n        let { options, selected } = cState.open;\n        let config = view.state.facet(completionConfig);\n        this.optionContent = optionContent(config);\n        this.optionClass = config.optionClass;\n        this.tooltipClass = config.tooltipClass;\n        this.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions);\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-tooltip-autocomplete\";\n        this.updateTooltipClass(view.state);\n        this.dom.addEventListener(\"mousedown\", (e) => {\n            let { options } = view.state.field(stateField).open;\n            for (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) {\n                if (dom.nodeName == \"LI\" && (match = /-(\\d+)$/.exec(dom.id)) && +match[1] < options.length) {\n                    this.applyCompletion(view, options[+match[1]]);\n                    e.preventDefault();\n                    return;\n                }\n            }\n        });\n        this.dom.addEventListener(\"focusout\", (e) => {\n            let state = view.state.field(this.stateField, false);\n            if (state && state.tooltip && view.state.facet(completionConfig).closeOnBlur &&\n                e.relatedTarget != view.contentDOM)\n                view.dispatch({ effects: closeCompletionEffect.of(null) });\n        });\n        this.showOptions(options, cState.id);\n    }\n    mount() { this.updateSel(); }\n    showOptions(options, id) {\n        if (this.list)\n            this.list.remove();\n        this.list = this.dom.appendChild(this.createListBox(options, id, this.range));\n        this.list.addEventListener(\"scroll\", () => {\n            if (this.info)\n                this.view.requestMeasure(this.placeInfoReq);\n        });\n    }\n    update(update) {\n        var _a;\n        let cState = update.state.field(this.stateField);\n        let prevState = update.startState.field(this.stateField);\n        this.updateTooltipClass(update.state);\n        if (cState != prevState) {\n            let { options, selected, disabled } = cState.open;\n            if (!prevState.open || prevState.open.options != options) {\n                this.range = rangeAroundSelected(options.length, selected, update.state.facet(completionConfig).maxRenderedOptions);\n                this.showOptions(options, cState.id);\n            }\n            this.updateSel();\n            if (disabled != ((_a = prevState.open) === null || _a === void 0 ? void 0 : _a.disabled))\n                this.dom.classList.toggle(\"cm-tooltip-autocomplete-disabled\", !!disabled);\n        }\n    }\n    updateTooltipClass(state) {\n        let cls = this.tooltipClass(state);\n        if (cls != this.currentClass) {\n            for (let c of this.currentClass.split(\" \"))\n                if (c)\n                    this.dom.classList.remove(c);\n            for (let c of cls.split(\" \"))\n                if (c)\n                    this.dom.classList.add(c);\n            this.currentClass = cls;\n        }\n    }\n    positioned(space) {\n        this.space = space;\n        if (this.info)\n            this.view.requestMeasure(this.placeInfoReq);\n    }\n    updateSel() {\n        let cState = this.view.state.field(this.stateField), open = cState.open;\n        if (open.selected > -1 && open.selected < this.range.from || open.selected >= this.range.to) {\n            this.range = rangeAroundSelected(open.options.length, open.selected, this.view.state.facet(completionConfig).maxRenderedOptions);\n            this.showOptions(open.options, cState.id);\n        }\n        if (this.updateSelectedOption(open.selected)) {\n            this.destroyInfo();\n            let { completion } = open.options[open.selected];\n            let { info } = completion;\n            if (!info)\n                return;\n            let infoResult = typeof info === \"string\" ? document.createTextNode(info) : info(completion);\n            if (!infoResult)\n                return;\n            if (\"then\" in infoResult) {\n                infoResult.then(obj => {\n                    if (obj && this.view.state.field(this.stateField, false) == cState)\n                        this.addInfoPane(obj, completion);\n                }).catch(e => logException(this.view.state, e, \"completion info\"));\n            }\n            else {\n                this.addInfoPane(infoResult, completion);\n            }\n        }\n    }\n    addInfoPane(content, completion) {\n        this.destroyInfo();\n        let wrap = this.info = document.createElement(\"div\");\n        wrap.className = \"cm-tooltip cm-completionInfo\";\n        if (content.nodeType != null) {\n            wrap.appendChild(content);\n            this.infoDestroy = null;\n        }\n        else {\n            let { dom, destroy } = content;\n            wrap.appendChild(dom);\n            this.infoDestroy = destroy || null;\n        }\n        this.dom.appendChild(wrap);\n        this.view.requestMeasure(this.placeInfoReq);\n    }\n    updateSelectedOption(selected) {\n        let set = null;\n        for (let opt = this.list.firstChild, i = this.range.from; opt; opt = opt.nextSibling, i++) {\n            if (opt.nodeName != \"LI\" || !opt.id) {\n                i--; // A section header\n            }\n            else if (i == selected) {\n                if (!opt.hasAttribute(\"aria-selected\")) {\n                    opt.setAttribute(\"aria-selected\", \"true\");\n                    set = opt;\n                }\n            }\n            else {\n                if (opt.hasAttribute(\"aria-selected\"))\n                    opt.removeAttribute(\"aria-selected\");\n            }\n        }\n        if (set)\n            scrollIntoView(this.list, set);\n        return set;\n    }\n    measureInfo() {\n        let sel = this.dom.querySelector(\"[aria-selected]\");\n        if (!sel || !this.info)\n            return null;\n        let listRect = this.dom.getBoundingClientRect();\n        let infoRect = this.info.getBoundingClientRect();\n        let selRect = sel.getBoundingClientRect();\n        let space = this.space;\n        if (!space) {\n            let docElt = this.dom.ownerDocument.documentElement;\n            space = { left: 0, top: 0, right: docElt.clientWidth, bottom: docElt.clientHeight };\n        }\n        if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 ||\n            selRect.bottom < Math.max(space.top, listRect.top) + 10)\n            return null;\n        return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);\n    }\n    placeInfo(pos) {\n        if (this.info) {\n            if (pos) {\n                if (pos.style)\n                    this.info.style.cssText = pos.style;\n                this.info.className = \"cm-tooltip cm-completionInfo \" + (pos.class || \"\");\n            }\n            else {\n                this.info.style.cssText = \"top: -1e6px\";\n            }\n        }\n    }\n    createListBox(options, id, range) {\n        const ul = document.createElement(\"ul\");\n        ul.id = id;\n        ul.setAttribute(\"role\", \"listbox\");\n        ul.setAttribute(\"aria-expanded\", \"true\");\n        ul.setAttribute(\"aria-label\", this.view.state.phrase(\"Completions\"));\n        ul.addEventListener(\"mousedown\", e => {\n            // Prevent focus change when clicking the scrollbar\n            if (e.target == ul)\n                e.preventDefault();\n        });\n        let curSection = null;\n        for (let i = range.from; i < range.to; i++) {\n            let { completion, match } = options[i], { section } = completion;\n            if (section) {\n                let name = typeof section == \"string\" ? section : section.name;\n                if (name != curSection && (i > range.from || range.from == 0)) {\n                    curSection = name;\n                    if (typeof section != \"string\" && section.header) {\n                        ul.appendChild(section.header(section));\n                    }\n                    else {\n                        let header = ul.appendChild(document.createElement(\"completion-section\"));\n                        header.textContent = name;\n                    }\n                }\n            }\n            const li = ul.appendChild(document.createElement(\"li\"));\n            li.id = id + \"-\" + i;\n            li.setAttribute(\"role\", \"option\");\n            let cls = this.optionClass(completion);\n            if (cls)\n                li.className = cls;\n            for (let source of this.optionContent) {\n                let node = source(completion, this.view.state, this.view, match);\n                if (node)\n                    li.appendChild(node);\n            }\n        }\n        if (range.from)\n            ul.classList.add(\"cm-completionListIncompleteTop\");\n        if (range.to < options.length)\n            ul.classList.add(\"cm-completionListIncompleteBottom\");\n        return ul;\n    }\n    destroyInfo() {\n        if (this.info) {\n            if (this.infoDestroy)\n                this.infoDestroy();\n            this.info.remove();\n            this.info = null;\n        }\n    }\n    destroy() {\n        this.destroyInfo();\n    }\n}\nfunction completionTooltip(stateField, applyCompletion) {\n    return (view) => new CompletionTooltip(view, stateField, applyCompletion);\n}\nfunction scrollIntoView(container, element) {\n    let parent = container.getBoundingClientRect();\n    let self = element.getBoundingClientRect();\n    let scaleY = parent.height / container.offsetHeight;\n    if (self.top < parent.top)\n        container.scrollTop -= (parent.top - self.top) / scaleY;\n    else if (self.bottom > parent.bottom)\n        container.scrollTop += (self.bottom - parent.bottom) / scaleY;\n}\n\n// Used to pick a preferred option when two options with the same\n// label occur in the result.\nfunction score(option) {\n    return (option.boost || 0) * 100 + (option.apply ? 10 : 0) + (option.info ? 5 : 0) +\n        (option.type ? 1 : 0);\n}\nfunction sortOptions(active, state) {\n    let options = [];\n    let sections = null;\n    let addOption = (option) => {\n        options.push(option);\n        let { section } = option.completion;\n        if (section) {\n            if (!sections)\n                sections = [];\n            let name = typeof section == \"string\" ? section : section.name;\n            if (!sections.some(s => s.name == name))\n                sections.push(typeof section == \"string\" ? { name } : section);\n        }\n    };\n    let conf = state.facet(completionConfig);\n    for (let a of active)\n        if (a.hasResult()) {\n            let getMatch = a.result.getMatch;\n            if (a.result.filter === false) {\n                for (let option of a.result.options) {\n                    addOption(new Option(option, a.source, getMatch ? getMatch(option) : [], 1e9 - options.length));\n                }\n            }\n            else {\n                let pattern = state.sliceDoc(a.from, a.to), match;\n                let matcher = conf.filterStrict ? new StrictMatcher(pattern) : new FuzzyMatcher(pattern);\n                for (let option of a.result.options)\n                    if (match = matcher.match(option.label)) {\n                        let matched = !option.displayLabel ? match.matched : getMatch ? getMatch(option, match.matched) : [];\n                        addOption(new Option(option, a.source, matched, match.score + (option.boost || 0)));\n                    }\n            }\n        }\n    if (sections) {\n        let sectionOrder = Object.create(null), pos = 0;\n        let cmp = (a, b) => { var _a, _b; 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); };\n        for (let s of sections.sort(cmp)) {\n            pos -= 1e5;\n            sectionOrder[s.name] = pos;\n        }\n        for (let option of options) {\n            let { section } = option.completion;\n            if (section)\n                option.score += sectionOrder[typeof section == \"string\" ? section : section.name];\n        }\n    }\n    let result = [], prev = null;\n    let compare = conf.compareCompletions;\n    for (let opt of options.sort((a, b) => (b.score - a.score) || compare(a.completion, b.completion))) {\n        let cur = opt.completion;\n        if (!prev || prev.label != cur.label || prev.detail != cur.detail ||\n            (prev.type != null && cur.type != null && prev.type != cur.type) ||\n            prev.apply != cur.apply || prev.boost != cur.boost)\n            result.push(opt);\n        else if (score(opt.completion) > score(prev))\n            result[result.length - 1] = opt;\n        prev = opt.completion;\n    }\n    return result;\n}\nclass CompletionDialog {\n    constructor(options, attrs, tooltip, timestamp, selected, disabled) {\n        this.options = options;\n        this.attrs = attrs;\n        this.tooltip = tooltip;\n        this.timestamp = timestamp;\n        this.selected = selected;\n        this.disabled = disabled;\n    }\n    setSelected(selected, id) {\n        return selected == this.selected || selected >= this.options.length ? this\n            : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);\n    }\n    static build(active, state, id, prev, conf, didSetActive) {\n        if (prev && !didSetActive && active.some(s => s.isPending))\n            return prev.setDisabled();\n        let options = sortOptions(active, state);\n        if (!options.length)\n            return prev && active.some(a => a.isPending) ? prev.setDisabled() : null;\n        let selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;\n        if (prev && prev.selected != selected && prev.selected != -1) {\n            let selectedValue = prev.options[prev.selected].completion;\n            for (let i = 0; i < options.length; i++)\n                if (options[i].completion == selectedValue) {\n                    selected = i;\n                    break;\n                }\n        }\n        return new CompletionDialog(options, makeAttrs(id, selected), {\n            pos: active.reduce((a, b) => b.hasResult() ? Math.min(a, b.from) : a, 1e8),\n            create: createTooltip,\n            above: conf.aboveCursor,\n        }, prev ? prev.timestamp : Date.now(), selected, false);\n    }\n    map(changes) {\n        return new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), { pos: changes.mapPos(this.tooltip.pos) }), this.timestamp, this.selected, this.disabled);\n    }\n    setDisabled() {\n        return new CompletionDialog(this.options, this.attrs, this.tooltip, this.timestamp, this.selected, true);\n    }\n}\nclass CompletionState {\n    constructor(active, id, open) {\n        this.active = active;\n        this.id = id;\n        this.open = open;\n    }\n    static start() {\n        return new CompletionState(none, \"cm-ac-\" + Math.floor(Math.random() * 2e6).toString(36), null);\n    }\n    update(tr) {\n        let { state } = tr, conf = state.facet(completionConfig);\n        let sources = conf.override ||\n            state.languageDataAt(\"autocomplete\", cur(state)).map(asSource);\n        let active = sources.map(source => {\n            let value = this.active.find(s => s.source == source) ||\n                new ActiveSource(source, this.active.some(a => a.state != 0 /* State.Inactive */) ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n            return value.update(tr, conf);\n        });\n        if (active.length == this.active.length && active.every((a, i) => a == this.active[i]))\n            active = this.active;\n        let open = this.open, didSet = tr.effects.some(e => e.is(setActiveEffect));\n        if (open && tr.docChanged)\n            open = open.map(tr.changes);\n        if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) ||\n            !sameResults(active, this.active) || didSet)\n            open = CompletionDialog.build(active, state, this.id, open, conf, didSet);\n        else if (open && open.disabled && !active.some(a => a.isPending))\n            open = null;\n        if (!open && active.every(a => !a.isPending) && active.some(a => a.hasResult()))\n            active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);\n        for (let effect of tr.effects)\n            if (effect.is(setSelectedEffect))\n                open = open && open.setSelected(effect.value, this.id);\n        return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);\n    }\n    get tooltip() { return this.open ? this.open.tooltip : null; }\n    get attrs() { return this.open ? this.open.attrs : this.active.length ? baseAttrs : noAttrs; }\n}\nfunction sameResults(a, b) {\n    if (a == b)\n        return true;\n    for (let iA = 0, iB = 0;;) {\n        while (iA < a.length && !a[iA].hasResult())\n            iA++;\n        while (iB < b.length && !b[iB].hasResult())\n            iB++;\n        let endA = iA == a.length, endB = iB == b.length;\n        if (endA || endB)\n            return endA == endB;\n        if (a[iA++].result != b[iB++].result)\n            return false;\n    }\n}\nconst baseAttrs = {\n    \"aria-autocomplete\": \"list\"\n};\nconst noAttrs = {};\nfunction makeAttrs(id, selected) {\n    let result = {\n        \"aria-autocomplete\": \"list\",\n        \"aria-haspopup\": \"listbox\",\n        \"aria-controls\": id\n    };\n    if (selected > -1)\n        result[\"aria-activedescendant\"] = id + \"-\" + selected;\n    return result;\n}\nconst none = [];\nfunction getUpdateType(tr, conf) {\n    if (tr.isUserEvent(\"input.complete\")) {\n        let completion = tr.annotation(pickedCompletion);\n        if (completion && conf.activateOnCompletion(completion))\n            return 4 /* UpdateType.Activate */ | 8 /* UpdateType.Reset */;\n    }\n    let typing = tr.isUserEvent(\"input.type\");\n    return typing && conf.activateOnTyping ? 4 /* UpdateType.Activate */ | 1 /* UpdateType.Typing */\n        : typing ? 1 /* UpdateType.Typing */\n            : tr.isUserEvent(\"delete.backward\") ? 2 /* UpdateType.Backspacing */\n                : tr.selection ? 8 /* UpdateType.Reset */\n                    : tr.docChanged ? 16 /* UpdateType.ResetIfTouching */ : 0 /* UpdateType.None */;\n}\nclass ActiveSource {\n    constructor(source, state, explicit = false) {\n        this.source = source;\n        this.state = state;\n        this.explicit = explicit;\n    }\n    hasResult() { return false; }\n    get isPending() { return this.state == 1 /* State.Pending */; }\n    update(tr, conf) {\n        let type = getUpdateType(tr, conf), value = this;\n        if ((type & 8 /* UpdateType.Reset */) || (type & 16 /* UpdateType.ResetIfTouching */) && this.touches(tr))\n            value = new ActiveSource(value.source, 0 /* State.Inactive */);\n        if ((type & 4 /* UpdateType.Activate */) && value.state == 0 /* State.Inactive */)\n            value = new ActiveSource(this.source, 1 /* State.Pending */);\n        value = value.updateFor(tr, type);\n        for (let effect of tr.effects) {\n            if (effect.is(startCompletionEffect))\n                value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value);\n            else if (effect.is(closeCompletionEffect))\n                value = new ActiveSource(value.source, 0 /* State.Inactive */);\n            else if (effect.is(setActiveEffect))\n                for (let active of effect.value)\n                    if (active.source == value.source)\n                        value = active;\n        }\n        return value;\n    }\n    updateFor(tr, type) { return this.map(tr.changes); }\n    map(changes) { return this; }\n    touches(tr) {\n        return tr.changes.touchesRange(cur(tr.state));\n    }\n}\nclass ActiveResult extends ActiveSource {\n    constructor(source, explicit, limit, result, from, to) {\n        super(source, 3 /* State.Result */, explicit);\n        this.limit = limit;\n        this.result = result;\n        this.from = from;\n        this.to = to;\n    }\n    hasResult() { return true; }\n    updateFor(tr, type) {\n        var _a;\n        if (!(type & 3 /* UpdateType.SimpleInteraction */))\n            return this.map(tr.changes);\n        let result = this.result;\n        if (result.map && !tr.changes.empty)\n            result = result.map(result, tr.changes);\n        let from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);\n        let pos = cur(tr.state);\n        if (pos > to || !result ||\n            (type & 2 /* UpdateType.Backspacing */) && (cur(tr.startState) == this.from || pos < this.limit))\n            return new ActiveSource(this.source, type & 4 /* UpdateType.Activate */ ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n        let limit = tr.changes.mapPos(this.limit);\n        if (checkValid(result.validFor, tr.state, from, to))\n            return new ActiveResult(this.source, this.explicit, limit, result, from, to);\n        if (result.update &&\n            (result = result.update(result, from, to, new CompletionContext(tr.state, pos, false))))\n            return new ActiveResult(this.source, this.explicit, limit, result, result.from, (_a = result.to) !== null && _a !== void 0 ? _a : cur(tr.state));\n        return new ActiveSource(this.source, 1 /* State.Pending */, this.explicit);\n    }\n    map(mapping) {\n        if (mapping.empty)\n            return this;\n        let result = this.result.map ? this.result.map(this.result, mapping) : this.result;\n        if (!result)\n            return new ActiveSource(this.source, 0 /* State.Inactive */);\n        return new ActiveResult(this.source, this.explicit, mapping.mapPos(this.limit), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));\n    }\n    touches(tr) {\n        return tr.changes.touchesRange(this.from, this.to);\n    }\n}\nfunction checkValid(validFor, state, from, to) {\n    if (!validFor)\n        return false;\n    let text = state.sliceDoc(from, to);\n    return typeof validFor == \"function\" ? validFor(text, from, to, state) : ensureAnchor(validFor, true).test(text);\n}\nconst setActiveEffect = /*@__PURE__*/StateEffect.define({\n    map(sources, mapping) { return sources.map(s => s.map(mapping)); }\n});\nconst setSelectedEffect = /*@__PURE__*/StateEffect.define();\nconst completionState = /*@__PURE__*/StateField.define({\n    create() { return CompletionState.start(); },\n    update(value, tr) { return value.update(tr); },\n    provide: f => [\n        showTooltip.from(f, val => val.tooltip),\n        EditorView.contentAttributes.from(f, state => state.attrs)\n    ]\n});\nfunction applyCompletion(view, option) {\n    const apply = option.completion.apply || option.completion.label;\n    let result = view.state.field(completionState).active.find(a => a.source == option.source);\n    if (!(result instanceof ActiveResult))\n        return false;\n    if (typeof apply == \"string\")\n        view.dispatch(Object.assign(Object.assign({}, insertCompletionText(view.state, apply, result.from, result.to)), { annotations: pickedCompletion.of(option.completion) }));\n    else\n        apply(view, option.completion, result.from, result.to);\n    return true;\n}\nconst createTooltip = /*@__PURE__*/completionTooltip(completionState, applyCompletion);\n\n/**\nReturns a command that moves the completion selection forward or\nbackward by the given amount.\n*/\nfunction moveCompletionSelection(forward, by = \"option\") {\n    return (view) => {\n        let cState = view.state.field(completionState, false);\n        if (!cState || !cState.open || cState.open.disabled ||\n            Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n            return false;\n        let step = 1, tooltip;\n        if (by == \"page\" && (tooltip = getTooltip(view, cState.open.tooltip)))\n            step = Math.max(2, Math.floor(tooltip.dom.offsetHeight /\n                tooltip.dom.querySelector(\"li\").offsetHeight) - 1);\n        let { length } = cState.open.options;\n        let selected = cState.open.selected > -1 ? cState.open.selected + step * (forward ? 1 : -1) : forward ? 0 : length - 1;\n        if (selected < 0)\n            selected = by == \"page\" ? 0 : length - 1;\n        else if (selected >= length)\n            selected = by == \"page\" ? length - 1 : 0;\n        view.dispatch({ effects: setSelectedEffect.of(selected) });\n        return true;\n    };\n}\n/**\nAccept the current completion.\n*/\nconst acceptCompletion = (view) => {\n    let cState = view.state.field(completionState, false);\n    if (view.state.readOnly || !cState || !cState.open || cState.open.selected < 0 || cState.open.disabled ||\n        Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n        return false;\n    return applyCompletion(view, cState.open.options[cState.open.selected]);\n};\n/**\nExplicitly start autocompletion.\n*/\nconst startCompletion = (view) => {\n    let cState = view.state.field(completionState, false);\n    if (!cState)\n        return false;\n    view.dispatch({ effects: startCompletionEffect.of(true) });\n    return true;\n};\n/**\nClose the currently active completion.\n*/\nconst closeCompletion = (view) => {\n    let cState = view.state.field(completionState, false);\n    if (!cState || !cState.active.some(a => a.state != 0 /* State.Inactive */))\n        return false;\n    view.dispatch({ effects: closeCompletionEffect.of(null) });\n    return true;\n};\nclass RunningQuery {\n    constructor(active, context) {\n        this.active = active;\n        this.context = context;\n        this.time = Date.now();\n        this.updates = [];\n        // Note that 'undefined' means 'not done yet', whereas 'null' means\n        // 'query returned null'.\n        this.done = undefined;\n    }\n}\nconst MaxUpdateCount = 50, MinAbortTime = 1000;\nconst completionPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.debounceUpdate = -1;\n        this.running = [];\n        this.debounceAccept = -1;\n        this.pendingStart = false;\n        this.composing = 0 /* CompositionState.None */;\n        for (let active of view.state.field(completionState).active)\n            if (active.isPending)\n                this.startQuery(active);\n    }\n    update(update) {\n        let cState = update.state.field(completionState);\n        let conf = update.state.facet(completionConfig);\n        if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState)\n            return;\n        let doesReset = update.transactions.some(tr => {\n            let type = getUpdateType(tr, conf);\n            return (type & 8 /* UpdateType.Reset */) || (tr.selection || tr.docChanged) && !(type & 3 /* UpdateType.SimpleInteraction */);\n        });\n        for (let i = 0; i < this.running.length; i++) {\n            let query = this.running[i];\n            if (doesReset ||\n                query.context.abortOnDocChange && update.docChanged ||\n                query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {\n                for (let handler of query.context.abortListeners) {\n                    try {\n                        handler();\n                    }\n                    catch (e) {\n                        logException(this.view.state, e);\n                    }\n                }\n                query.context.abortListeners = null;\n                this.running.splice(i--, 1);\n            }\n            else {\n                query.updates.push(...update.transactions);\n            }\n        }\n        if (this.debounceUpdate > -1)\n            clearTimeout(this.debounceUpdate);\n        if (update.transactions.some(tr => tr.effects.some(e => e.is(startCompletionEffect))))\n            this.pendingStart = true;\n        let delay = this.pendingStart ? 50 : conf.activateOnTypingDelay;\n        this.debounceUpdate = cState.active.some(a => a.isPending && !this.running.some(q => q.active.source == a.source))\n            ? setTimeout(() => this.startUpdate(), delay) : -1;\n        if (this.composing != 0 /* CompositionState.None */)\n            for (let tr of update.transactions) {\n                if (tr.isUserEvent(\"input.type\"))\n                    this.composing = 2 /* CompositionState.Changed */;\n                else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection)\n                    this.composing = 3 /* CompositionState.ChangedAndMoved */;\n            }\n    }\n    startUpdate() {\n        this.debounceUpdate = -1;\n        this.pendingStart = false;\n        let { state } = this.view, cState = state.field(completionState);\n        for (let active of cState.active) {\n            if (active.isPending && !this.running.some(r => r.active.source == active.source))\n                this.startQuery(active);\n        }\n        if (this.running.length && cState.open && cState.open.disabled)\n            this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n    }\n    startQuery(active) {\n        let { state } = this.view, pos = cur(state);\n        let context = new CompletionContext(state, pos, active.explicit, this.view);\n        let pending = new RunningQuery(active, context);\n        this.running.push(pending);\n        Promise.resolve(active.source(context)).then(result => {\n            if (!pending.context.aborted) {\n                pending.done = result || null;\n                this.scheduleAccept();\n            }\n        }, err => {\n            this.view.dispatch({ effects: closeCompletionEffect.of(null) });\n            logException(this.view.state, err);\n        });\n    }\n    scheduleAccept() {\n        if (this.running.every(q => q.done !== undefined))\n            this.accept();\n        else if (this.debounceAccept < 0)\n            this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n    }\n    // For each finished query in this.running, try to create a result\n    // or, if appropriate, restart the query.\n    accept() {\n        var _a;\n        if (this.debounceAccept > -1)\n            clearTimeout(this.debounceAccept);\n        this.debounceAccept = -1;\n        let updated = [];\n        let conf = this.view.state.facet(completionConfig), cState = this.view.state.field(completionState);\n        for (let i = 0; i < this.running.length; i++) {\n            let query = this.running[i];\n            if (query.done === undefined)\n                continue;\n            this.running.splice(i--, 1);\n            if (query.done) {\n                let pos = cur(query.updates.length ? query.updates[0].startState : this.view.state);\n                let limit = Math.min(pos, query.done.from + (query.active.explicit ? 0 : 1));\n                let active = new ActiveResult(query.active.source, query.active.explicit, limit, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : pos);\n                // Replay the transactions that happened since the start of\n                // the request and see if that preserves the result\n                for (let tr of query.updates)\n                    active = active.update(tr, conf);\n                if (active.hasResult()) {\n                    updated.push(active);\n                    continue;\n                }\n            }\n            let current = cState.active.find(a => a.source == query.active.source);\n            if (current && current.isPending) {\n                if (query.done == null) {\n                    // Explicitly failed. Should clear the pending status if it\n                    // hasn't been re-set in the meantime.\n                    let active = new ActiveSource(query.active.source, 0 /* State.Inactive */);\n                    for (let tr of query.updates)\n                        active = active.update(tr, conf);\n                    if (!active.isPending)\n                        updated.push(active);\n                }\n                else {\n                    // Cleared by subsequent transactions. Restart.\n                    this.startQuery(current);\n                }\n            }\n        }\n        if (updated.length || cState.open && cState.open.disabled)\n            this.view.dispatch({ effects: setActiveEffect.of(updated) });\n    }\n}, {\n    eventHandlers: {\n        blur(event) {\n            let state = this.view.state.field(completionState, false);\n            if (state && state.tooltip && this.view.state.facet(completionConfig).closeOnBlur) {\n                let dialog = state.open && getTooltip(this.view, state.open.tooltip);\n                if (!dialog || !dialog.dom.contains(event.relatedTarget))\n                    setTimeout(() => this.view.dispatch({ effects: closeCompletionEffect.of(null) }), 10);\n            }\n        },\n        compositionstart() {\n            this.composing = 1 /* CompositionState.Started */;\n        },\n        compositionend() {\n            if (this.composing == 3 /* CompositionState.ChangedAndMoved */) {\n                // Safari fires compositionend events synchronously, possibly\n                // from inside an update, so dispatch asynchronously to avoid reentrancy\n                setTimeout(() => this.view.dispatch({ effects: startCompletionEffect.of(false) }), 20);\n            }\n            this.composing = 0 /* CompositionState.None */;\n        }\n    }\n});\nconst windows = typeof navigator == \"object\" && /*@__PURE__*//Win/.test(navigator.platform);\nconst commitCharacters = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.domEventHandlers({\n    keydown(event, view) {\n        let field = view.state.field(completionState, false);\n        if (!field || !field.open || field.open.disabled || field.open.selected < 0 ||\n            event.key.length > 1 || event.ctrlKey && !(windows && event.altKey) || event.metaKey)\n            return false;\n        let option = field.open.options[field.open.selected];\n        let result = field.active.find(a => a.source == option.source);\n        let commitChars = option.completion.commitCharacters || result.result.commitCharacters;\n        if (commitChars && commitChars.indexOf(event.key) > -1)\n            applyCompletion(view, option);\n        return false;\n    }\n}));\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-tooltip.cm-tooltip-autocomplete\": {\n        \"& > ul\": {\n            fontFamily: \"monospace\",\n            whiteSpace: \"nowrap\",\n            overflow: \"hidden auto\",\n            maxWidth_fallback: \"700px\",\n            maxWidth: \"min(700px, 95vw)\",\n            minWidth: \"250px\",\n            maxHeight: \"10em\",\n            height: \"100%\",\n            listStyle: \"none\",\n            margin: 0,\n            padding: 0,\n            \"& > li, & > completion-section\": {\n                padding: \"1px 3px\",\n                lineHeight: 1.2\n            },\n            \"& > li\": {\n                overflowX: \"hidden\",\n                textOverflow: \"ellipsis\",\n                cursor: \"pointer\"\n            },\n            \"& > completion-section\": {\n                display: \"list-item\",\n                borderBottom: \"1px solid silver\",\n                paddingLeft: \"0.5em\",\n                opacity: 0.7\n            }\n        }\n    },\n    \"&light .cm-tooltip-autocomplete ul li[aria-selected]\": {\n        background: \"#17c\",\n        color: \"white\",\n    },\n    \"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n        background: \"#777\",\n    },\n    \"&dark .cm-tooltip-autocomplete ul li[aria-selected]\": {\n        background: \"#347\",\n        color: \"white\",\n    },\n    \"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n        background: \"#444\",\n    },\n    \".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n        content: '\"\u00B7\u00B7\u00B7\"',\n        opacity: 0.5,\n        display: \"block\",\n        textAlign: \"center\"\n    },\n    \".cm-tooltip.cm-completionInfo\": {\n        position: \"absolute\",\n        padding: \"3px 9px\",\n        width: \"max-content\",\n        maxWidth: `${400 /* Info.Width */}px`,\n        boxSizing: \"border-box\",\n        whiteSpace: \"pre-line\"\n    },\n    \".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `${30 /* Info.Margin */}px` },\n    \".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `${30 /* Info.Margin */}px` },\n    \"&light .cm-snippetField\": { backgroundColor: \"#00000022\" },\n    \"&dark .cm-snippetField\": { backgroundColor: \"#ffffff22\" },\n    \".cm-snippetFieldPosition\": {\n        verticalAlign: \"text-top\",\n        width: 0,\n        height: \"1.15em\",\n        display: \"inline-block\",\n        margin: \"0 -0.7px -.7em\",\n        borderLeft: \"1.4px dotted #888\"\n    },\n    \".cm-completionMatchedText\": {\n        textDecoration: \"underline\"\n    },\n    \".cm-completionDetail\": {\n        marginLeft: \"0.5em\",\n        fontStyle: \"italic\"\n    },\n    \".cm-completionIcon\": {\n        fontSize: \"90%\",\n        width: \".8em\",\n        display: \"inline-block\",\n        textAlign: \"center\",\n        paddingRight: \".6em\",\n        opacity: \"0.6\",\n        boxSizing: \"content-box\"\n    },\n    \".cm-completionIcon-function, .cm-completionIcon-method\": {\n        \"&:after\": { content: \"'\u0192'\" }\n    },\n    \".cm-completionIcon-class\": {\n        \"&:after\": { content: \"'\u25CB'\" }\n    },\n    \".cm-completionIcon-interface\": {\n        \"&:after\": { content: \"'\u25CC'\" }\n    },\n    \".cm-completionIcon-variable\": {\n        \"&:after\": { content: \"'\uD835\uDC65'\" }\n    },\n    \".cm-completionIcon-constant\": {\n        \"&:after\": { content: \"'\uD835\uDC36'\" }\n    },\n    \".cm-completionIcon-type\": {\n        \"&:after\": { content: \"'\uD835\uDC61'\" }\n    },\n    \".cm-completionIcon-enum\": {\n        \"&:after\": { content: \"'\u222A'\" }\n    },\n    \".cm-completionIcon-property\": {\n        \"&:after\": { content: \"'\u25A1'\" }\n    },\n    \".cm-completionIcon-keyword\": {\n        \"&:after\": { content: \"'\uD83D\uDD11\\uFE0E'\" } // Disable emoji rendering\n    },\n    \".cm-completionIcon-namespace\": {\n        \"&:after\": { content: \"'\u25A2'\" }\n    },\n    \".cm-completionIcon-text\": {\n        \"&:after\": { content: \"'abc'\", fontSize: \"50%\", verticalAlign: \"middle\" }\n    }\n});\n\nclass FieldPos {\n    constructor(field, line, from, to) {\n        this.field = field;\n        this.line = line;\n        this.from = from;\n        this.to = to;\n    }\n}\nclass FieldRange {\n    constructor(field, from, to) {\n        this.field = field;\n        this.from = from;\n        this.to = to;\n    }\n    map(changes) {\n        let from = changes.mapPos(this.from, -1, MapMode.TrackDel);\n        let to = changes.mapPos(this.to, 1, MapMode.TrackDel);\n        return from == null || to == null ? null : new FieldRange(this.field, from, to);\n    }\n}\nclass Snippet {\n    constructor(lines, fieldPositions) {\n        this.lines = lines;\n        this.fieldPositions = fieldPositions;\n    }\n    instantiate(state, pos) {\n        let text = [], lineStart = [pos];\n        let lineObj = state.doc.lineAt(pos), baseIndent = /^\\s*/.exec(lineObj.text)[0];\n        for (let line of this.lines) {\n            if (text.length) {\n                let indent = baseIndent, tabs = /^\\t*/.exec(line)[0].length;\n                for (let i = 0; i < tabs; i++)\n                    indent += state.facet(indentUnit);\n                lineStart.push(pos + indent.length - tabs);\n                line = indent + line.slice(tabs);\n            }\n            text.push(line);\n            pos += line.length + 1;\n        }\n        let ranges = this.fieldPositions.map(pos => new FieldRange(pos.field, lineStart[pos.line] + pos.from, lineStart[pos.line] + pos.to));\n        return { text, ranges };\n    }\n    static parse(template) {\n        let fields = [];\n        let lines = [], positions = [], m;\n        for (let line of template.split(/\\r\\n?|\\n/)) {\n            while (m = /[#$]\\{(?:(\\d+)(?::([^}]*))?|((?:\\\\[{}]|[^}])*))\\}/.exec(line)) {\n                let seq = m[1] ? +m[1] : null, rawName = m[2] || m[3] || \"\", found = -1;\n                let name = rawName.replace(/\\\\[{}]/g, m => m[1]);\n                for (let i = 0; i < fields.length; i++) {\n                    if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false)\n                        found = i;\n                }\n                if (found < 0) {\n                    let i = 0;\n                    while (i < fields.length && (seq == null || (fields[i].seq != null && fields[i].seq < seq)))\n                        i++;\n                    fields.splice(i, 0, { seq, name });\n                    found = i;\n                    for (let pos of positions)\n                        if (pos.field >= found)\n                            pos.field++;\n                }\n                positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));\n                line = line.slice(0, m.index) + rawName + line.slice(m.index + m[0].length);\n            }\n            line = line.replace(/\\\\([{}])/g, (_, brace, index) => {\n                for (let pos of positions)\n                    if (pos.line == lines.length && pos.from > index) {\n                        pos.from--;\n                        pos.to--;\n                    }\n                return brace;\n            });\n            lines.push(line);\n        }\n        return new Snippet(lines, positions);\n    }\n}\nlet fieldMarker = /*@__PURE__*/Decoration.widget({ widget: /*@__PURE__*/new class extends WidgetType {\n        toDOM() {\n            let span = document.createElement(\"span\");\n            span.className = \"cm-snippetFieldPosition\";\n            return span;\n        }\n        ignoreEvent() { return false; }\n    } });\nlet fieldRange = /*@__PURE__*/Decoration.mark({ class: \"cm-snippetField\" });\nclass ActiveSnippet {\n    constructor(ranges, active) {\n        this.ranges = ranges;\n        this.active = active;\n        this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to)));\n    }\n    map(changes) {\n        let ranges = [];\n        for (let r of this.ranges) {\n            let mapped = r.map(changes);\n            if (!mapped)\n                return null;\n            ranges.push(mapped);\n        }\n        return new ActiveSnippet(ranges, this.active);\n    }\n    selectionInsideField(sel) {\n        return sel.ranges.every(range => this.ranges.some(r => r.field == this.active && r.from <= range.from && r.to >= range.to));\n    }\n}\nconst setActive = /*@__PURE__*/StateEffect.define({\n    map(value, changes) { return value && value.map(changes); }\n});\nconst moveToField = /*@__PURE__*/StateEffect.define();\nconst snippetState = /*@__PURE__*/StateField.define({\n    create() { return null; },\n    update(value, tr) {\n        for (let effect of tr.effects) {\n            if (effect.is(setActive))\n                return effect.value;\n            if (effect.is(moveToField) && value)\n                return new ActiveSnippet(value.ranges, effect.value);\n        }\n        if (value && tr.docChanged)\n            value = value.map(tr.changes);\n        if (value && tr.selection && !value.selectionInsideField(tr.selection))\n            value = null;\n        return value;\n    },\n    provide: f => EditorView.decorations.from(f, val => val ? val.deco : Decoration.none)\n});\nfunction fieldSelection(ranges, field) {\n    return EditorSelection.create(ranges.filter(r => r.field == field).map(r => EditorSelection.range(r.from, r.to)));\n}\n/**\nConvert a snippet template to a function that can\n[apply](https://codemirror.net/6/docs/ref/#autocomplete.Completion.apply) it. Snippets are written\nusing syntax like this:\n\n    \"for (let ${index} = 0; ${index} < ${end}; ${index}++) {\\n\\t${}\\n}\"\n\nEach `${}` placeholder (you may also use `#{}`) indicates a field\nthat the user can fill in. Its name, if any, will be the default\ncontent for the field.\n\nWhen the snippet is activated by calling the returned function,\nthe code is inserted at the given position. Newlines in the\ntemplate are indented by the indentation of the start line, plus\none [indent unit](https://codemirror.net/6/docs/ref/#language.indentUnit) per tab character after\nthe newline.\n\nOn activation, (all instances of) the first field are selected.\nThe user can move between fields with Tab and Shift-Tab as long as\nthe fields are active. Moving to the last field or moving the\ncursor out of the current field deactivates the fields.\n\nThe order of fields defaults to textual order, but you can add\nnumbers to placeholders (`${1}` or `${1:defaultText}`) to provide\na custom order.\n\nTo include a literal `{` or `}` in your template, put a backslash\nin front of it. This will be removed and the brace will not be\ninterpreted as indicating a placeholder.\n*/\nfunction snippet(template) {\n    let snippet = Snippet.parse(template);\n    return (editor, completion, from, to) => {\n        let { text, ranges } = snippet.instantiate(editor.state, from);\n        let { main } = editor.state.selection;\n        let spec = {\n            changes: { from, to: to == main.from ? main.to : to, insert: Text.of(text) },\n            scrollIntoView: true,\n            annotations: completion ? [pickedCompletion.of(completion), Transaction.userEvent.of(\"input.complete\")] : undefined\n        };\n        if (ranges.length)\n            spec.selection = fieldSelection(ranges, 0);\n        if (ranges.some(r => r.field > 0)) {\n            let active = new ActiveSnippet(ranges, 0);\n            let effects = spec.effects = [setActive.of(active)];\n            if (editor.state.field(snippetState, false) === undefined)\n                effects.push(StateEffect.appendConfig.of([snippetState, addSnippetKeymap, snippetPointerHandler, baseTheme]));\n        }\n        editor.dispatch(editor.state.update(spec));\n    };\n}\nfunction moveField(dir) {\n    return ({ state, dispatch }) => {\n        let active = state.field(snippetState, false);\n        if (!active || dir < 0 && active.active == 0)\n            return false;\n        let next = active.active + dir, last = dir > 0 && !active.ranges.some(r => r.field == next + dir);\n        dispatch(state.update({\n            selection: fieldSelection(active.ranges, next),\n            effects: setActive.of(last ? null : new ActiveSnippet(active.ranges, next)),\n            scrollIntoView: true\n        }));\n        return true;\n    };\n}\n/**\nA command that clears the active snippet, if any.\n*/\nconst clearSnippet = ({ state, dispatch }) => {\n    let active = state.field(snippetState, false);\n    if (!active)\n        return false;\n    dispatch(state.update({ effects: setActive.of(null) }));\n    return true;\n};\n/**\nMove to the next snippet field, if available.\n*/\nconst nextSnippetField = /*@__PURE__*/moveField(1);\n/**\nMove to the previous snippet field, if available.\n*/\nconst prevSnippetField = /*@__PURE__*/moveField(-1);\n/**\nCheck if there is an active snippet with a next field for\n`nextSnippetField` to move to.\n*/\nfunction hasNextSnippetField(state) {\n    let active = state.field(snippetState, false);\n    return !!(active && active.ranges.some(r => r.field == active.active + 1));\n}\n/**\nReturns true if there is an active snippet and a previous field\nfor `prevSnippetField` to move to.\n*/\nfunction hasPrevSnippetField(state) {\n    let active = state.field(snippetState, false);\n    return !!(active && active.active > 0);\n}\nconst defaultSnippetKeymap = [\n    { key: \"Tab\", run: nextSnippetField, shift: prevSnippetField },\n    { key: \"Escape\", run: clearSnippet }\n];\n/**\nA facet that can be used to configure the key bindings used by\nsnippets. The default binds Tab to\n[`nextSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.nextSnippetField), Shift-Tab to\n[`prevSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.prevSnippetField), and Escape\nto [`clearSnippet`](https://codemirror.net/6/docs/ref/#autocomplete.clearSnippet).\n*/\nconst snippetKeymap = /*@__PURE__*/Facet.define({\n    combine(maps) { return maps.length ? maps[0] : defaultSnippetKeymap; }\n});\nconst addSnippetKeymap = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.compute([snippetKeymap], state => state.facet(snippetKeymap)));\n/**\nCreate a completion from a snippet. Returns an object with the\nproperties from `completion`, plus an `apply` function that\napplies the snippet.\n*/\nfunction snippetCompletion(template, completion) {\n    return Object.assign(Object.assign({}, completion), { apply: snippet(template) });\n}\nconst snippetPointerHandler = /*@__PURE__*/EditorView.domEventHandlers({\n    mousedown(event, view) {\n        let active = view.state.field(snippetState, false), pos;\n        if (!active || (pos = view.posAtCoords({ x: event.clientX, y: event.clientY })) == null)\n            return false;\n        let match = active.ranges.find(r => r.from <= pos && r.to >= pos);\n        if (!match || match.field == active.active)\n            return false;\n        view.dispatch({\n            selection: fieldSelection(active.ranges, match.field),\n            effects: setActive.of(active.ranges.some(r => r.field > match.field)\n                ? new ActiveSnippet(active.ranges, match.field) : null),\n            scrollIntoView: true\n        });\n        return true;\n    }\n});\n\nfunction wordRE(wordChars) {\n    let escaped = wordChars.replace(/[\\]\\-\\\\]/g, \"\\\\$&\");\n    try {\n        return new RegExp(`[\\\\p{Alphabetic}\\\\p{Number}_${escaped}]+`, \"ug\");\n    }\n    catch (_a) {\n        return new RegExp(`[\\w${escaped}]`, \"g\");\n    }\n}\nfunction mapRE(re, f) {\n    return new RegExp(f(re.source), re.unicode ? \"u\" : \"\");\n}\nconst wordCaches = /*@__PURE__*/Object.create(null);\nfunction wordCache(wordChars) {\n    return wordCaches[wordChars] || (wordCaches[wordChars] = new WeakMap);\n}\nfunction storeWords(doc, wordRE, result, seen, ignoreAt) {\n    for (let lines = doc.iterLines(), pos = 0; !lines.next().done;) {\n        let { value } = lines, m;\n        wordRE.lastIndex = 0;\n        while (m = wordRE.exec(value)) {\n            if (!seen[m[0]] && pos + m.index != ignoreAt) {\n                result.push({ type: \"text\", label: m[0] });\n                seen[m[0]] = true;\n                if (result.length >= 2000 /* C.MaxList */)\n                    return;\n            }\n        }\n        pos += value.length + 1;\n    }\n}\nfunction collectWords(doc, cache, wordRE, to, ignoreAt) {\n    let big = doc.length >= 1000 /* C.MinCacheLen */;\n    let cached = big && cache.get(doc);\n    if (cached)\n        return cached;\n    let result = [], seen = Object.create(null);\n    if (doc.children) {\n        let pos = 0;\n        for (let ch of doc.children) {\n            if (ch.length >= 1000 /* C.MinCacheLen */) {\n                for (let c of collectWords(ch, cache, wordRE, to - pos, ignoreAt - pos)) {\n                    if (!seen[c.label]) {\n                        seen[c.label] = true;\n                        result.push(c);\n                    }\n                }\n            }\n            else {\n                storeWords(ch, wordRE, result, seen, ignoreAt - pos);\n            }\n            pos += ch.length + 1;\n        }\n    }\n    else {\n        storeWords(doc, wordRE, result, seen, ignoreAt);\n    }\n    if (big && result.length < 2000 /* C.MaxList */)\n        cache.set(doc, result);\n    return result;\n}\n/**\nA completion source that will scan the document for words (using a\n[character categorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer)), and\nreturn those as completions.\n*/\nconst completeAnyWord = context => {\n    let wordChars = context.state.languageDataAt(\"wordChars\", context.pos).join(\"\");\n    let re = wordRE(wordChars);\n    let token = context.matchBefore(mapRE(re, s => s + \"$\"));\n    if (!token && !context.explicit)\n        return null;\n    let from = token ? token.from : context.pos;\n    let options = collectWords(context.state.doc, wordCache(wordChars), re, 50000 /* C.Range */, from);\n    return { from, options, validFor: mapRE(re, s => \"^\" + s) };\n};\n\nconst defaults = {\n    brackets: [\"(\", \"[\", \"{\", \"'\", '\"'],\n    before: \")]}:;>\",\n    stringPrefixes: []\n};\nconst closeBracketEffect = /*@__PURE__*/StateEffect.define({\n    map(value, mapping) {\n        let mapped = mapping.mapPos(value, -1, MapMode.TrackAfter);\n        return mapped == null ? undefined : mapped;\n    }\n});\nconst closedBracket = /*@__PURE__*/new class extends RangeValue {\n};\nclosedBracket.startSide = 1;\nclosedBracket.endSide = -1;\nconst bracketState = /*@__PURE__*/StateField.define({\n    create() { return RangeSet.empty; },\n    update(value, tr) {\n        value = value.map(tr.changes);\n        if (tr.selection) {\n            let line = tr.state.doc.lineAt(tr.selection.main.head);\n            value = value.update({ filter: from => from >= line.from && from <= line.to });\n        }\n        for (let effect of tr.effects)\n            if (effect.is(closeBracketEffect))\n                value = value.update({ add: [closedBracket.range(effect.value, effect.value + 1)] });\n        return value;\n    }\n});\n/**\nExtension to enable bracket-closing behavior. When a closeable\nbracket is typed, its closing bracket is immediately inserted\nafter the cursor. When closing a bracket directly in front of a\nclosing bracket inserted by the extension, the cursor moves over\nthat bracket.\n*/\nfunction closeBrackets() {\n    return [inputHandler, bracketState];\n}\nconst definedClosing = \"()[]{}<>\u00AB\u00BB\u00BB\u00AB\uFF3B\uFF3D\uFF5B\uFF5D\";\nfunction closing(ch) {\n    for (let i = 0; i < definedClosing.length; i += 2)\n        if (definedClosing.charCodeAt(i) == ch)\n            return definedClosing.charAt(i + 1);\n    return fromCodePoint(ch < 128 ? ch : ch + 1);\n}\nfunction config(state, pos) {\n    return state.languageDataAt(\"closeBrackets\", pos)[0] || defaults;\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\nconst inputHandler = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, insert) => {\n    if ((android ? view.composing : view.compositionStarted) || view.state.readOnly)\n        return false;\n    let sel = view.state.selection.main;\n    if (insert.length > 2 || insert.length == 2 && codePointSize(codePointAt(insert, 0)) == 1 ||\n        from != sel.from || to != sel.to)\n        return false;\n    let tr = insertBracket(view.state, insert);\n    if (!tr)\n        return false;\n    view.dispatch(tr);\n    return true;\n});\n/**\nCommand that implements deleting a pair of matching brackets when\nthe cursor is between them.\n*/\nconst deleteBracketPair = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let conf = config(state, state.selection.main.head);\n    let tokens = conf.brackets || defaults.brackets;\n    let dont = null, changes = state.changeByRange(range => {\n        if (range.empty) {\n            let before = prevChar(state.doc, range.head);\n            for (let token of tokens) {\n                if (token == before && nextChar(state.doc, range.head) == closing(codePointAt(token, 0)))\n                    return { changes: { from: range.head - token.length, to: range.head + token.length },\n                        range: EditorSelection.cursor(range.head - token.length) };\n            }\n        }\n        return { range: dont = range };\n    });\n    if (!dont)\n        dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete.backward\" }));\n    return !dont;\n};\n/**\nClose-brackets related key bindings. Binds Backspace to\n[`deleteBracketPair`](https://codemirror.net/6/docs/ref/#autocomplete.deleteBracketPair).\n*/\nconst closeBracketsKeymap = [\n    { key: \"Backspace\", run: deleteBracketPair }\n];\n/**\nImplements the extension's behavior on text insertion. If the\ngiven string counts as a bracket in the language around the\nselection, and replacing the selection with it requires custom\nbehavior (inserting a closing version or skipping past a\npreviously-closed bracket), this function returns a transaction\nrepresenting that custom behavior. (You only need this if you want\nto programmatically insert brackets\u2014the\n[`closeBrackets`](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets) extension will\ntake care of running this for user input.)\n*/\nfunction insertBracket(state, bracket) {\n    let conf = config(state, state.selection.main.head);\n    let tokens = conf.brackets || defaults.brackets;\n    for (let tok of tokens) {\n        let closed = closing(codePointAt(tok, 0));\n        if (bracket == tok)\n            return closed == tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1, conf)\n                : handleOpen(state, tok, closed, conf.before || defaults.before);\n        if (bracket == closed && closedBracketAt(state, state.selection.main.from))\n            return handleClose(state, tok, closed);\n    }\n    return null;\n}\nfunction closedBracketAt(state, pos) {\n    let found = false;\n    state.field(bracketState).between(0, state.doc.length, from => {\n        if (from == pos)\n            found = true;\n    });\n    return found;\n}\nfunction nextChar(doc, pos) {\n    let next = doc.sliceString(pos, pos + 2);\n    return next.slice(0, codePointSize(codePointAt(next, 0)));\n}\nfunction prevChar(doc, pos) {\n    let prev = doc.sliceString(pos - 2, pos);\n    return codePointSize(codePointAt(prev, 0)) == prev.length ? prev : prev.slice(1);\n}\nfunction handleOpen(state, open, close, closeBefore) {\n    let dont = null, changes = state.changeByRange(range => {\n        if (!range.empty)\n            return { changes: [{ insert: open, from: range.from }, { insert: close, from: range.to }],\n                effects: closeBracketEffect.of(range.to + open.length),\n                range: EditorSelection.range(range.anchor + open.length, range.head + open.length) };\n        let next = nextChar(state.doc, range.head);\n        if (!next || /\\s/.test(next) || closeBefore.indexOf(next) > -1)\n            return { changes: { insert: open + close, from: range.head },\n                effects: closeBracketEffect.of(range.head + open.length),\n                range: EditorSelection.cursor(range.head + open.length) };\n        return { range: dont = range };\n    });\n    return dont ? null : state.update(changes, {\n        scrollIntoView: true,\n        userEvent: \"input.type\"\n    });\n}\nfunction handleClose(state, _open, close) {\n    let dont = null, changes = state.changeByRange(range => {\n        if (range.empty && nextChar(state.doc, range.head) == close)\n            return { changes: { from: range.head, to: range.head + close.length, insert: close },\n                range: EditorSelection.cursor(range.head + close.length) };\n        return dont = { range };\n    });\n    return dont ? null : state.update(changes, {\n        scrollIntoView: true,\n        userEvent: \"input.type\"\n    });\n}\n// Handles cases where the open and close token are the same, and\n// possibly triple quotes (as in `\"\"\"abc\"\"\"`-style quoting).\nfunction handleSame(state, token, allowTriple, config) {\n    let stringPrefixes = config.stringPrefixes || defaults.stringPrefixes;\n    let dont = null, changes = state.changeByRange(range => {\n        if (!range.empty)\n            return { changes: [{ insert: token, from: range.from }, { insert: token, from: range.to }],\n                effects: closeBracketEffect.of(range.to + token.length),\n                range: EditorSelection.range(range.anchor + token.length, range.head + token.length) };\n        let pos = range.head, next = nextChar(state.doc, pos), start;\n        if (next == token) {\n            if (nodeStart(state, pos)) {\n                return { changes: { insert: token + token, from: pos },\n                    effects: closeBracketEffect.of(pos + token.length),\n                    range: EditorSelection.cursor(pos + token.length) };\n            }\n            else if (closedBracketAt(state, pos)) {\n                let isTriple = allowTriple && state.sliceDoc(pos, pos + token.length * 3) == token + token + token;\n                let content = isTriple ? token + token + token : token;\n                return { changes: { from: pos, to: pos + content.length, insert: content },\n                    range: EditorSelection.cursor(pos + content.length) };\n            }\n        }\n        else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token &&\n            (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 &&\n            nodeStart(state, start)) {\n            return { changes: { insert: token + token + token + token, from: pos },\n                effects: closeBracketEffect.of(pos + token.length),\n                range: EditorSelection.cursor(pos + token.length) };\n        }\n        else if (state.charCategorizer(pos)(next) != CharCategory.Word) {\n            if (canStartStringAt(state, pos, stringPrefixes) > -1 && !probablyInString(state, pos, token, stringPrefixes))\n                return { changes: { insert: token + token, from: pos },\n                    effects: closeBracketEffect.of(pos + token.length),\n                    range: EditorSelection.cursor(pos + token.length) };\n        }\n        return { range: dont = range };\n    });\n    return dont ? null : state.update(changes, {\n        scrollIntoView: true,\n        userEvent: \"input.type\"\n    });\n}\nfunction nodeStart(state, pos) {\n    let tree = syntaxTree(state).resolveInner(pos + 1);\n    return tree.parent && tree.from == pos;\n}\nfunction probablyInString(state, pos, quoteToken, prefixes) {\n    let node = syntaxTree(state).resolveInner(pos, -1);\n    let maxPrefix = prefixes.reduce((m, p) => Math.max(m, p.length), 0);\n    for (let i = 0; i < 5; i++) {\n        let start = state.sliceDoc(node.from, Math.min(node.to, node.from + quoteToken.length + maxPrefix));\n        let quotePos = start.indexOf(quoteToken);\n        if (!quotePos || quotePos > -1 && prefixes.indexOf(start.slice(0, quotePos)) > -1) {\n            let first = node.firstChild;\n            while (first && first.from == node.from && first.to - first.from > quoteToken.length + quotePos) {\n                if (state.sliceDoc(first.to - quoteToken.length, first.to) == quoteToken)\n                    return false;\n                first = first.firstChild;\n            }\n            return true;\n        }\n        let parent = node.to == pos && node.parent;\n        if (!parent)\n            break;\n        node = parent;\n    }\n    return false;\n}\nfunction canStartStringAt(state, pos, prefixes) {\n    let charCat = state.charCategorizer(pos);\n    if (charCat(state.sliceDoc(pos - 1, pos)) != CharCategory.Word)\n        return pos;\n    for (let prefix of prefixes) {\n        let start = pos - prefix.length;\n        if (state.sliceDoc(start, pos) == prefix && charCat(state.sliceDoc(start - 1, start)) != CharCategory.Word)\n            return start;\n    }\n    return -1;\n}\n\n/**\nReturns an extension that enables autocompletion.\n*/\nfunction autocompletion(config = {}) {\n    return [\n        commitCharacters,\n        completionState,\n        completionConfig.of(config),\n        completionPlugin,\n        completionKeymapExt,\n        baseTheme\n    ];\n}\n/**\nBasic keybindings for autocompletion.\n\n - Ctrl-Space (and Alt-\\` on macOS): [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)\n - Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)\n - ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`\n - ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)\n*/\nconst completionKeymap = [\n    { key: \"Ctrl-Space\", run: startCompletion },\n    { mac: \"Alt-`\", run: startCompletion },\n    { key: \"Escape\", run: closeCompletion },\n    { key: \"ArrowDown\", run: /*@__PURE__*/moveCompletionSelection(true) },\n    { key: \"ArrowUp\", run: /*@__PURE__*/moveCompletionSelection(false) },\n    { key: \"PageDown\", run: /*@__PURE__*/moveCompletionSelection(true, \"page\") },\n    { key: \"PageUp\", run: /*@__PURE__*/moveCompletionSelection(false, \"page\") },\n    { key: \"Enter\", run: acceptCompletion }\n];\nconst completionKeymapExt = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.computeN([completionConfig], state => state.facet(completionConfig).defaultKeymap ? [completionKeymap] : []));\n/**\nGet the current completion status. When completions are available,\nthis will return `\"active\"`. When completions are pending (in the\nprocess of being queried), this returns `\"pending\"`. Otherwise, it\nreturns `null`.\n*/\nfunction completionStatus(state) {\n    let cState = state.field(completionState, false);\n    return cState && cState.active.some(a => a.isPending) ? \"pending\"\n        : cState && cState.active.some(a => a.state != 0 /* State.Inactive */) ? \"active\" : null;\n}\nconst completionArrayCache = /*@__PURE__*/new WeakMap;\n/**\nReturns the available completions as an array.\n*/\nfunction currentCompletions(state) {\n    var _a;\n    let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n    if (!open || open.disabled)\n        return [];\n    let completions = completionArrayCache.get(open.options);\n    if (!completions)\n        completionArrayCache.set(open.options, completions = open.options.map(o => o.completion));\n    return completions;\n}\n/**\nReturn the currently selected completion, if any.\n*/\nfunction selectedCompletion(state) {\n    var _a;\n    let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n    return open && !open.disabled && open.selected >= 0 ? open.options[open.selected].completion : null;\n}\n/**\nReturns the currently selected position in the active completion\nlist, or null if no completions are active.\n*/\nfunction selectedCompletionIndex(state) {\n    var _a;\n    let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n    return open && !open.disabled && open.selected >= 0 ? open.selected : null;\n}\n/**\nCreate an effect that can be attached to a transaction to change\nthe currently selected completion.\n*/\nfunction setSelectedCompletion(index) {\n    return setSelectedEffect.of(index);\n}\n\nexport { CompletionContext, acceptCompletion, autocompletion, clearSnippet, closeBrackets, closeBracketsKeymap, closeCompletion, completeAnyWord, completeFromList, completionKeymap, completionStatus, currentCompletions, deleteBracketPair, hasNextSnippetField, hasPrevSnippetField, ifIn, ifNotIn, insertBracket, insertCompletionText, moveCompletionSelection, nextSnippetField, pickedCompletion, prevSnippetField, selectedCompletion, selectedCompletionIndex, setSelectedCompletion, snippet, snippetCompletion, snippetKeymap, startCompletion };\n", "import { Annotation, Facet, combineConfig, StateField, Transaction, ChangeSet, ChangeDesc, EditorSelection, StateEffect, Text, findClusterBreak, countColumn, CharCategory } from '@codemirror/state';\nimport { EditorView, Direction } from '@codemirror/view';\nimport { IndentContext, getIndentation, indentString, matchBrackets, syntaxTree, getIndentUnit, indentUnit } from '@codemirror/language';\nimport { NodeProp } from '@lezer/common';\n\n/**\nComment or uncomment the current selection. Will use line comments\nif available, otherwise falling back to block comments.\n*/\nconst toggleComment = target => {\n    let { state } = target, line = state.doc.lineAt(state.selection.main.from), config = getConfig(target.state, line.from);\n    return config.line ? toggleLineComment(target) : config.block ? toggleBlockCommentByLine(target) : false;\n};\nfunction command(f, option) {\n    return ({ state, dispatch }) => {\n        if (state.readOnly)\n            return false;\n        let tr = f(option, state);\n        if (!tr)\n            return false;\n        dispatch(state.update(tr));\n        return true;\n    };\n}\n/**\nComment or uncomment the current selection using line comments.\nThe line comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleLineComment = /*@__PURE__*/command(changeLineComment, 0 /* CommentOption.Toggle */);\n/**\nComment the current selection using line comments.\n*/\nconst lineComment = /*@__PURE__*/command(changeLineComment, 1 /* CommentOption.Comment */);\n/**\nUncomment the current selection using line comments.\n*/\nconst lineUncomment = /*@__PURE__*/command(changeLineComment, 2 /* CommentOption.Uncomment */);\n/**\nComment or uncomment the current selection using block comments.\nThe block comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleBlockComment = /*@__PURE__*/command(changeBlockComment, 0 /* CommentOption.Toggle */);\n/**\nComment the current selection using block comments.\n*/\nconst blockComment = /*@__PURE__*/command(changeBlockComment, 1 /* CommentOption.Comment */);\n/**\nUncomment the current selection using block comments.\n*/\nconst blockUncomment = /*@__PURE__*/command(changeBlockComment, 2 /* CommentOption.Uncomment */);\n/**\nComment or uncomment the lines around the current selection using\nblock comments.\n*/\nconst toggleBlockCommentByLine = /*@__PURE__*/command((o, s) => changeBlockComment(o, s, selectedLineRanges(s)), 0 /* CommentOption.Toggle */);\nfunction getConfig(state, pos) {\n    let data = state.languageDataAt(\"commentTokens\", pos, 1);\n    return data.length ? data[0] : {};\n}\nconst SearchMargin = 50;\n/**\nDetermines if the given range is block-commented in the given\nstate.\n*/\nfunction findBlockComment(state, { open, close }, from, to) {\n    let textBefore = state.sliceDoc(from - SearchMargin, from);\n    let textAfter = state.sliceDoc(to, to + SearchMargin);\n    let spaceBefore = /\\s*$/.exec(textBefore)[0].length, spaceAfter = /^\\s*/.exec(textAfter)[0].length;\n    let beforeOff = textBefore.length - spaceBefore;\n    if (textBefore.slice(beforeOff - open.length, beforeOff) == open &&\n        textAfter.slice(spaceAfter, spaceAfter + close.length) == close) {\n        return { open: { pos: from - spaceBefore, margin: spaceBefore && 1 },\n            close: { pos: to + spaceAfter, margin: spaceAfter && 1 } };\n    }\n    let startText, endText;\n    if (to - from <= 2 * SearchMargin) {\n        startText = endText = state.sliceDoc(from, to);\n    }\n    else {\n        startText = state.sliceDoc(from, from + SearchMargin);\n        endText = state.sliceDoc(to - SearchMargin, to);\n    }\n    let startSpace = /^\\s*/.exec(startText)[0].length, endSpace = /\\s*$/.exec(endText)[0].length;\n    let endOff = endText.length - endSpace - close.length;\n    if (startText.slice(startSpace, startSpace + open.length) == open &&\n        endText.slice(endOff, endOff + close.length) == close) {\n        return { open: { pos: from + startSpace + open.length,\n                margin: /\\s/.test(startText.charAt(startSpace + open.length)) ? 1 : 0 },\n            close: { pos: to - endSpace - close.length,\n                margin: /\\s/.test(endText.charAt(endOff - 1)) ? 1 : 0 } };\n    }\n    return null;\n}\nfunction selectedLineRanges(state) {\n    let ranges = [];\n    for (let r of state.selection.ranges) {\n        let fromLine = state.doc.lineAt(r.from);\n        let toLine = r.to <= fromLine.to ? fromLine : state.doc.lineAt(r.to);\n        if (toLine.from > fromLine.from && toLine.from == r.to)\n            toLine = r.to == fromLine.to + 1 ? fromLine : state.doc.lineAt(r.to - 1);\n        let last = ranges.length - 1;\n        if (last >= 0 && ranges[last].to > fromLine.from)\n            ranges[last].to = toLine.to;\n        else\n            ranges.push({ from: fromLine.from + /^\\s*/.exec(fromLine.text)[0].length, to: toLine.to });\n    }\n    return ranges;\n}\n// Performs toggle, comment and uncomment of block comments in\n// languages that support them.\nfunction changeBlockComment(option, state, ranges = state.selection.ranges) {\n    let tokens = ranges.map(r => getConfig(state, r.from).block);\n    if (!tokens.every(c => c))\n        return null;\n    let comments = ranges.map((r, i) => findBlockComment(state, tokens[i], r.from, r.to));\n    if (option != 2 /* CommentOption.Uncomment */ && !comments.every(c => c)) {\n        return { changes: state.changes(ranges.map((range, i) => {\n                if (comments[i])\n                    return [];\n                return [{ from: range.from, insert: tokens[i].open + \" \" }, { from: range.to, insert: \" \" + tokens[i].close }];\n            })) };\n    }\n    else if (option != 1 /* CommentOption.Comment */ && comments.some(c => c)) {\n        let changes = [];\n        for (let i = 0, comment; i < comments.length; i++)\n            if (comment = comments[i]) {\n                let token = tokens[i], { open, close } = comment;\n                changes.push({ from: open.pos - token.open.length, to: open.pos + open.margin }, { from: close.pos - close.margin, to: close.pos + token.close.length });\n            }\n        return { changes };\n    }\n    return null;\n}\n// Performs toggle, comment and uncomment of line comments.\nfunction changeLineComment(option, state, ranges = state.selection.ranges) {\n    let lines = [];\n    let prevLine = -1;\n    for (let { from, to } of ranges) {\n        let startI = lines.length, minIndent = 1e9;\n        let token = getConfig(state, from).line;\n        if (!token)\n            continue;\n        for (let pos = from; pos <= to;) {\n            let line = state.doc.lineAt(pos);\n            if (line.from > prevLine && (from == to || to > line.from)) {\n                prevLine = line.from;\n                let indent = /^\\s*/.exec(line.text)[0].length;\n                let empty = indent == line.length;\n                let comment = line.text.slice(indent, indent + token.length) == token ? indent : -1;\n                if (indent < line.text.length && indent < minIndent)\n                    minIndent = indent;\n                lines.push({ line, comment, token, indent, empty, single: false });\n            }\n            pos = line.to + 1;\n        }\n        if (minIndent < 1e9)\n            for (let i = startI; i < lines.length; i++)\n                if (lines[i].indent < lines[i].line.text.length)\n                    lines[i].indent = minIndent;\n        if (lines.length == startI + 1)\n            lines[startI].single = true;\n    }\n    if (option != 2 /* CommentOption.Uncomment */ && lines.some(l => l.comment < 0 && (!l.empty || l.single))) {\n        let changes = [];\n        for (let { line, token, indent, empty, single } of lines)\n            if (single || !empty)\n                changes.push({ from: line.from + indent, insert: token + \" \" });\n        let changeSet = state.changes(changes);\n        return { changes: changeSet, selection: state.selection.map(changeSet, 1) };\n    }\n    else if (option != 1 /* CommentOption.Comment */ && lines.some(l => l.comment >= 0)) {\n        let changes = [];\n        for (let { line, comment, token } of lines)\n            if (comment >= 0) {\n                let from = line.from + comment, to = from + token.length;\n                if (line.text[to - line.from] == \" \")\n                    to++;\n                changes.push({ from, to });\n            }\n        return { changes };\n    }\n    return null;\n}\n\nconst fromHistory = /*@__PURE__*/Annotation.define();\n/**\nTransaction annotation that will prevent that transaction from\nbeing combined with other transactions in the undo history. Given\n`\"before\"`, it'll prevent merging with previous transactions. With\n`\"after\"`, subsequent transactions won't be combined with this\none. With `\"full\"`, the transaction is isolated on both sides.\n*/\nconst isolateHistory = /*@__PURE__*/Annotation.define();\n/**\nThis facet provides a way to register functions that, given a\ntransaction, provide a set of effects that the history should\nstore when inverting the transaction. This can be used to\nintegrate some kinds of effects in the history, so that they can\nbe undone (and redone again).\n*/\nconst invertedEffects = /*@__PURE__*/Facet.define();\nconst historyConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            minDepth: 100,\n            newGroupDelay: 500,\n            joinToEvent: (_t, isAdjacent) => isAdjacent,\n        }, {\n            minDepth: Math.max,\n            newGroupDelay: Math.min,\n            joinToEvent: (a, b) => (tr, adj) => a(tr, adj) || b(tr, adj)\n        });\n    }\n});\nconst historyField_ = /*@__PURE__*/StateField.define({\n    create() {\n        return HistoryState.empty;\n    },\n    update(state, tr) {\n        let config = tr.state.facet(historyConfig);\n        let fromHist = tr.annotation(fromHistory);\n        if (fromHist) {\n            let item = HistEvent.fromTransaction(tr, fromHist.selection), from = fromHist.side;\n            let other = from == 0 /* BranchName.Done */ ? state.undone : state.done;\n            if (item)\n                other = updateBranch(other, other.length, config.minDepth, item);\n            else\n                other = addSelection(other, tr.startState.selection);\n            return new HistoryState(from == 0 /* BranchName.Done */ ? fromHist.rest : other, from == 0 /* BranchName.Done */ ? other : fromHist.rest);\n        }\n        let isolate = tr.annotation(isolateHistory);\n        if (isolate == \"full\" || isolate == \"before\")\n            state = state.isolate();\n        if (tr.annotation(Transaction.addToHistory) === false)\n            return !tr.changes.empty ? state.addMapping(tr.changes.desc) : state;\n        let event = HistEvent.fromTransaction(tr);\n        let time = tr.annotation(Transaction.time), userEvent = tr.annotation(Transaction.userEvent);\n        if (event)\n            state = state.addChanges(event, time, userEvent, config, tr);\n        else if (tr.selection)\n            state = state.addSelection(tr.startState.selection, time, userEvent, config.newGroupDelay);\n        if (isolate == \"full\" || isolate == \"after\")\n            state = state.isolate();\n        return state;\n    },\n    toJSON(value) {\n        return { done: value.done.map(e => e.toJSON()), undone: value.undone.map(e => e.toJSON()) };\n    },\n    fromJSON(json) {\n        return new HistoryState(json.done.map(HistEvent.fromJSON), json.undone.map(HistEvent.fromJSON));\n    }\n});\n/**\nCreate a history extension with the given configuration.\n*/\nfunction history(config = {}) {\n    return [\n        historyField_,\n        historyConfig.of(config),\n        EditorView.domEventHandlers({\n            beforeinput(e, view) {\n                let command = e.inputType == \"historyUndo\" ? undo : e.inputType == \"historyRedo\" ? redo : null;\n                if (!command)\n                    return false;\n                e.preventDefault();\n                return command(view);\n            }\n        })\n    ];\n}\n/**\nThe state field used to store the history data. Should probably\nonly be used when you want to\n[serialize](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) or\n[deserialize](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) state objects in a way\nthat preserves history.\n*/\nconst historyField = historyField_;\nfunction cmd(side, selection) {\n    return function ({ state, dispatch }) {\n        if (!selection && state.readOnly)\n            return false;\n        let historyState = state.field(historyField_, false);\n        if (!historyState)\n            return false;\n        let tr = historyState.pop(side, state, selection);\n        if (!tr)\n            return false;\n        dispatch(tr);\n        return true;\n    };\n}\n/**\nUndo a single group of history events. Returns false if no group\nwas available.\n*/\nconst undo = /*@__PURE__*/cmd(0 /* BranchName.Done */, false);\n/**\nRedo a group of history events. Returns false if no group was\navailable.\n*/\nconst redo = /*@__PURE__*/cmd(1 /* BranchName.Undone */, false);\n/**\nUndo a change or selection change.\n*/\nconst undoSelection = /*@__PURE__*/cmd(0 /* BranchName.Done */, true);\n/**\nRedo a change or selection change.\n*/\nconst redoSelection = /*@__PURE__*/cmd(1 /* BranchName.Undone */, true);\nfunction depth(side) {\n    return function (state) {\n        let histState = state.field(historyField_, false);\n        if (!histState)\n            return 0;\n        let branch = side == 0 /* BranchName.Done */ ? histState.done : histState.undone;\n        return branch.length - (branch.length && !branch[0].changes ? 1 : 0);\n    };\n}\n/**\nThe amount of undoable change events available in a given state.\n*/\nconst undoDepth = /*@__PURE__*/depth(0 /* BranchName.Done */);\n/**\nThe amount of redoable change events available in a given state.\n*/\nconst redoDepth = /*@__PURE__*/depth(1 /* BranchName.Undone */);\n// History events store groups of changes or effects that need to be\n// undone/redone together.\nclass HistEvent {\n    constructor(\n    // The changes in this event. Normal events hold at least one\n    // change or effect. But it may be necessary to store selection\n    // events before the first change, in which case a special type of\n    // instance is created which doesn't hold any changes, with\n    // changes == startSelection == undefined\n    changes, \n    // The effects associated with this event\n    effects, \n    // Accumulated mapping (from addToHistory==false) that should be\n    // applied to events below this one.\n    mapped, \n    // The selection before this event\n    startSelection, \n    // Stores selection changes after this event, to be used for\n    // selection undo/redo.\n    selectionsAfter) {\n        this.changes = changes;\n        this.effects = effects;\n        this.mapped = mapped;\n        this.startSelection = startSelection;\n        this.selectionsAfter = selectionsAfter;\n    }\n    setSelAfter(after) {\n        return new HistEvent(this.changes, this.effects, this.mapped, this.startSelection, after);\n    }\n    toJSON() {\n        var _a, _b, _c;\n        return {\n            changes: (_a = this.changes) === null || _a === void 0 ? void 0 : _a.toJSON(),\n            mapped: (_b = this.mapped) === null || _b === void 0 ? void 0 : _b.toJSON(),\n            startSelection: (_c = this.startSelection) === null || _c === void 0 ? void 0 : _c.toJSON(),\n            selectionsAfter: this.selectionsAfter.map(s => s.toJSON())\n        };\n    }\n    static fromJSON(json) {\n        return new HistEvent(json.changes && ChangeSet.fromJSON(json.changes), [], json.mapped && ChangeDesc.fromJSON(json.mapped), json.startSelection && EditorSelection.fromJSON(json.startSelection), json.selectionsAfter.map(EditorSelection.fromJSON));\n    }\n    // This does not check `addToHistory` and such, it assumes the\n    // transaction needs to be converted to an item. Returns null when\n    // there are no changes or effects in the transaction.\n    static fromTransaction(tr, selection) {\n        let effects = none;\n        for (let invert of tr.startState.facet(invertedEffects)) {\n            let result = invert(tr);\n            if (result.length)\n                effects = effects.concat(result);\n        }\n        if (!effects.length && tr.changes.empty)\n            return null;\n        return new HistEvent(tr.changes.invert(tr.startState.doc), effects, undefined, selection || tr.startState.selection, none);\n    }\n    static selection(selections) {\n        return new HistEvent(undefined, none, undefined, undefined, selections);\n    }\n}\nfunction updateBranch(branch, to, maxLen, newEvent) {\n    let start = to + 1 > maxLen + 20 ? to - maxLen - 1 : 0;\n    let newBranch = branch.slice(start, to);\n    newBranch.push(newEvent);\n    return newBranch;\n}\nfunction isAdjacent(a, b) {\n    let ranges = [], isAdjacent = false;\n    a.iterChangedRanges((f, t) => ranges.push(f, t));\n    b.iterChangedRanges((_f, _t, f, t) => {\n        for (let i = 0; i < ranges.length;) {\n            let from = ranges[i++], to = ranges[i++];\n            if (t >= from && f <= to)\n                isAdjacent = true;\n        }\n    });\n    return isAdjacent;\n}\nfunction eqSelectionShape(a, b) {\n    return a.ranges.length == b.ranges.length &&\n        a.ranges.filter((r, i) => r.empty != b.ranges[i].empty).length === 0;\n}\nfunction conc(a, b) {\n    return !a.length ? b : !b.length ? a : a.concat(b);\n}\nconst none = [];\nconst MaxSelectionsPerEvent = 200;\nfunction addSelection(branch, selection) {\n    if (!branch.length) {\n        return [HistEvent.selection([selection])];\n    }\n    else {\n        let lastEvent = branch[branch.length - 1];\n        let sels = lastEvent.selectionsAfter.slice(Math.max(0, lastEvent.selectionsAfter.length - MaxSelectionsPerEvent));\n        if (sels.length && sels[sels.length - 1].eq(selection))\n            return branch;\n        sels.push(selection);\n        return updateBranch(branch, branch.length - 1, 1e9, lastEvent.setSelAfter(sels));\n    }\n}\n// Assumes the top item has one or more selectionAfter values\nfunction popSelection(branch) {\n    let last = branch[branch.length - 1];\n    let newBranch = branch.slice();\n    newBranch[branch.length - 1] = last.setSelAfter(last.selectionsAfter.slice(0, last.selectionsAfter.length - 1));\n    return newBranch;\n}\n// Add a mapping to the top event in the given branch. If this maps\n// away all the changes and effects in that item, drop it and\n// propagate the mapping to the next item.\nfunction addMappingToBranch(branch, mapping) {\n    if (!branch.length)\n        return branch;\n    let length = branch.length, selections = none;\n    while (length) {\n        let event = mapEvent(branch[length - 1], mapping, selections);\n        if (event.changes && !event.changes.empty || event.effects.length) { // Event survived mapping\n            let result = branch.slice(0, length);\n            result[length - 1] = event;\n            return result;\n        }\n        else { // Drop this event, since there's no changes or effects left\n            mapping = event.mapped;\n            length--;\n            selections = event.selectionsAfter;\n        }\n    }\n    return selections.length ? [HistEvent.selection(selections)] : none;\n}\nfunction mapEvent(event, mapping, extraSelections) {\n    let selections = conc(event.selectionsAfter.length ? event.selectionsAfter.map(s => s.map(mapping)) : none, extraSelections);\n    // Change-less events don't store mappings (they are always the last event in a branch)\n    if (!event.changes)\n        return HistEvent.selection(selections);\n    let mappedChanges = event.changes.map(mapping), before = mapping.mapDesc(event.changes, true);\n    let fullMapping = event.mapped ? event.mapped.composeDesc(before) : before;\n    return new HistEvent(mappedChanges, StateEffect.mapEffects(event.effects, mapping), fullMapping, event.startSelection.map(before), selections);\n}\nconst joinableUserEvent = /^(input\\.type|delete)($|\\.)/;\nclass HistoryState {\n    constructor(done, undone, prevTime = 0, prevUserEvent = undefined) {\n        this.done = done;\n        this.undone = undone;\n        this.prevTime = prevTime;\n        this.prevUserEvent = prevUserEvent;\n    }\n    isolate() {\n        return this.prevTime ? new HistoryState(this.done, this.undone) : this;\n    }\n    addChanges(event, time, userEvent, config, tr) {\n        let done = this.done, lastEvent = done[done.length - 1];\n        if (lastEvent && lastEvent.changes && !lastEvent.changes.empty && event.changes &&\n            (!userEvent || joinableUserEvent.test(userEvent)) &&\n            ((!lastEvent.selectionsAfter.length &&\n                time - this.prevTime < config.newGroupDelay &&\n                config.joinToEvent(tr, isAdjacent(lastEvent.changes, event.changes))) ||\n                // For compose (but not compose.start) events, always join with previous event\n                userEvent == \"input.type.compose\")) {\n            done = updateBranch(done, done.length - 1, config.minDepth, new HistEvent(event.changes.compose(lastEvent.changes), conc(StateEffect.mapEffects(event.effects, lastEvent.changes), lastEvent.effects), lastEvent.mapped, lastEvent.startSelection, none));\n        }\n        else {\n            done = updateBranch(done, done.length, config.minDepth, event);\n        }\n        return new HistoryState(done, none, time, userEvent);\n    }\n    addSelection(selection, time, userEvent, newGroupDelay) {\n        let last = this.done.length ? this.done[this.done.length - 1].selectionsAfter : none;\n        if (last.length > 0 &&\n            time - this.prevTime < newGroupDelay &&\n            userEvent == this.prevUserEvent && userEvent && /^select($|\\.)/.test(userEvent) &&\n            eqSelectionShape(last[last.length - 1], selection))\n            return this;\n        return new HistoryState(addSelection(this.done, selection), this.undone, time, userEvent);\n    }\n    addMapping(mapping) {\n        return new HistoryState(addMappingToBranch(this.done, mapping), addMappingToBranch(this.undone, mapping), this.prevTime, this.prevUserEvent);\n    }\n    pop(side, state, onlySelection) {\n        let branch = side == 0 /* BranchName.Done */ ? this.done : this.undone;\n        if (branch.length == 0)\n            return null;\n        let event = branch[branch.length - 1], selection = event.selectionsAfter[0] || state.selection;\n        if (onlySelection && event.selectionsAfter.length) {\n            return state.update({\n                selection: event.selectionsAfter[event.selectionsAfter.length - 1],\n                annotations: fromHistory.of({ side, rest: popSelection(branch), selection }),\n                userEvent: side == 0 /* BranchName.Done */ ? \"select.undo\" : \"select.redo\",\n                scrollIntoView: true\n            });\n        }\n        else if (!event.changes) {\n            return null;\n        }\n        else {\n            let rest = branch.length == 1 ? none : branch.slice(0, branch.length - 1);\n            if (event.mapped)\n                rest = addMappingToBranch(rest, event.mapped);\n            return state.update({\n                changes: event.changes,\n                selection: event.startSelection,\n                effects: event.effects,\n                annotations: fromHistory.of({ side, rest, selection }),\n                filter: false,\n                userEvent: side == 0 /* BranchName.Done */ ? \"undo\" : \"redo\",\n                scrollIntoView: true\n            });\n        }\n    }\n}\nHistoryState.empty = /*@__PURE__*/new HistoryState(none, none);\n/**\nDefault key bindings for the undo history.\n\n- Mod-z: [`undo`](https://codemirror.net/6/docs/ref/#commands.undo).\n- Mod-y (Mod-Shift-z on macOS) + Ctrl-Shift-z on Linux: [`redo`](https://codemirror.net/6/docs/ref/#commands.redo).\n- Mod-u: [`undoSelection`](https://codemirror.net/6/docs/ref/#commands.undoSelection).\n- Alt-u (Mod-Shift-u on macOS): [`redoSelection`](https://codemirror.net/6/docs/ref/#commands.redoSelection).\n*/\nconst historyKeymap = [\n    { key: \"Mod-z\", run: undo, preventDefault: true },\n    { key: \"Mod-y\", mac: \"Mod-Shift-z\", run: redo, preventDefault: true },\n    { linux: \"Ctrl-Shift-z\", run: redo, preventDefault: true },\n    { key: \"Mod-u\", run: undoSelection, preventDefault: true },\n    { key: \"Alt-u\", mac: \"Mod-Shift-u\", run: redoSelection, preventDefault: true }\n];\n\nfunction updateSel(sel, by) {\n    return EditorSelection.create(sel.ranges.map(by), sel.mainIndex);\n}\nfunction setSel(state, selection) {\n    return state.update({ selection, scrollIntoView: true, userEvent: \"select\" });\n}\nfunction moveSel({ state, dispatch }, how) {\n    let selection = updateSel(state.selection, how);\n    if (selection.eq(state.selection, true))\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n}\nfunction rangeEnd(range, forward) {\n    return EditorSelection.cursor(forward ? range.to : range.from);\n}\nfunction cursorByChar(view, forward) {\n    return moveSel(view, range => range.empty ? view.moveByChar(range, forward) : rangeEnd(range, forward));\n}\nfunction ltrAtCursor(view) {\n    return view.textDirectionAt(view.state.selection.main.head) == Direction.LTR;\n}\n/**\nMove the selection one character to the left (which is backward in\nleft-to-right text, forward in right-to-left text).\n*/\nconst cursorCharLeft = view => cursorByChar(view, !ltrAtCursor(view));\n/**\nMove the selection one character to the right.\n*/\nconst cursorCharRight = view => cursorByChar(view, ltrAtCursor(view));\n/**\nMove the selection one character forward.\n*/\nconst cursorCharForward = view => cursorByChar(view, true);\n/**\nMove the selection one character backward.\n*/\nconst cursorCharBackward = view => cursorByChar(view, false);\nfunction byCharLogical(state, range, forward) {\n    let pos = range.head, line = state.doc.lineAt(pos);\n    if (pos == (forward ? line.to : line.from))\n        pos = forward ? Math.min(state.doc.length, line.to + 1) : Math.max(0, line.from - 1);\n    else\n        pos = line.from + findClusterBreak(line.text, pos - line.from, forward);\n    return EditorSelection.cursor(pos, forward ? -1 : 1);\n}\nfunction moveByCharLogical(target, forward) {\n    return moveSel(target, range => range.empty ? byCharLogical(target.state, range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection one character forward, in logical\n(non-text-direction-aware) string index order.\n*/\nconst cursorCharForwardLogical = target => moveByCharLogical(target, true);\n/**\nMove the selection one character backward, in logical string index\norder.\n*/\nconst cursorCharBackwardLogical = target => moveByCharLogical(target, false);\nfunction cursorByGroup(view, forward) {\n    return moveSel(view, range => range.empty ? view.moveByGroup(range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection to the left across one group of word or\nnon-word (but also non-space) characters.\n*/\nconst cursorGroupLeft = view => cursorByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection one group to the right.\n*/\nconst cursorGroupRight = view => cursorByGroup(view, ltrAtCursor(view));\n/**\nMove the selection one group forward.\n*/\nconst cursorGroupForward = view => cursorByGroup(view, true);\n/**\nMove the selection one group backward.\n*/\nconst cursorGroupBackward = view => cursorByGroup(view, false);\nfunction toGroupStart(view, pos, start) {\n    let categorize = view.state.charCategorizer(pos);\n    let cat = categorize(start), initial = cat != CharCategory.Space;\n    return (next) => {\n        let nextCat = categorize(next);\n        if (nextCat != CharCategory.Space)\n            return initial && nextCat == cat;\n        initial = false;\n        return true;\n    };\n}\n/**\nMove the cursor one group forward in the default Windows style,\nwhere it moves to the start of the next group.\n*/\nconst cursorGroupForwardWin = view => {\n    return moveSel(view, range => range.empty\n        ? view.moveByChar(range, true, start => toGroupStart(view, range.head, start))\n        : rangeEnd(range, true));\n};\nconst segmenter = typeof Intl != \"undefined\" && Intl.Segmenter ?\n    /*@__PURE__*/new (Intl.Segmenter)(undefined, { granularity: \"word\" }) : null;\nfunction moveBySubword(view, range, forward) {\n    let categorize = view.state.charCategorizer(range.from);\n    let cat = CharCategory.Space, pos = range.from, steps = 0;\n    let done = false, sawUpper = false, sawLower = false;\n    let step = (next) => {\n        if (done)\n            return false;\n        pos += forward ? next.length : -next.length;\n        let nextCat = categorize(next), ahead;\n        if (nextCat == CharCategory.Word && next.charCodeAt(0) < 128 && /[\\W_]/.test(next))\n            nextCat = -1; // Treat word punctuation specially\n        if (cat == CharCategory.Space)\n            cat = nextCat;\n        if (cat != nextCat)\n            return false;\n        if (cat == CharCategory.Word) {\n            if (next.toLowerCase() == next) {\n                if (!forward && sawUpper)\n                    return false;\n                sawLower = true;\n            }\n            else if (sawLower) {\n                if (forward)\n                    return false;\n                done = true;\n            }\n            else {\n                if (sawUpper && forward && categorize(ahead = view.state.sliceDoc(pos, pos + 1)) == CharCategory.Word &&\n                    ahead.toLowerCase() == ahead)\n                    return false;\n                sawUpper = true;\n            }\n        }\n        steps++;\n        return true;\n    };\n    let end = view.moveByChar(range, forward, start => {\n        step(start);\n        return step;\n    });\n    if (segmenter && cat == CharCategory.Word && end.from == range.from + steps * (forward ? 1 : -1)) {\n        let from = Math.min(range.head, end.head), to = Math.max(range.head, end.head);\n        let skipped = view.state.sliceDoc(from, to);\n        if (skipped.length > 1 && /[\\u4E00-\\uffff]/.test(skipped)) {\n            let segments = Array.from(segmenter.segment(skipped));\n            if (segments.length > 1) {\n                if (forward)\n                    return EditorSelection.cursor(range.head + segments[1].index, -1);\n                return EditorSelection.cursor(end.head + segments[segments.length - 1].index, 1);\n            }\n        }\n    }\n    return end;\n}\nfunction cursorBySubword(view, forward) {\n    return moveSel(view, range => range.empty ? moveBySubword(view, range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection one group or camel-case subword forward.\n*/\nconst cursorSubwordForward = view => cursorBySubword(view, true);\n/**\nMove the selection one group or camel-case subword backward.\n*/\nconst cursorSubwordBackward = view => cursorBySubword(view, false);\nfunction interestingNode(state, node, bracketProp) {\n    if (node.type.prop(bracketProp))\n        return true;\n    let len = node.to - node.from;\n    return len && (len > 2 || /[^\\s,.;:]/.test(state.sliceDoc(node.from, node.to))) || node.firstChild;\n}\nfunction moveBySyntax(state, start, forward) {\n    let pos = syntaxTree(state).resolveInner(start.head);\n    let bracketProp = forward ? NodeProp.closedBy : NodeProp.openedBy;\n    // Scan forward through child nodes to see if there's an interesting\n    // node ahead.\n    for (let at = start.head;;) {\n        let next = forward ? pos.childAfter(at) : pos.childBefore(at);\n        if (!next)\n            break;\n        if (interestingNode(state, next, bracketProp))\n            pos = next;\n        else\n            at = forward ? next.to : next.from;\n    }\n    let bracket = pos.type.prop(bracketProp), match, newPos;\n    if (bracket && (match = forward ? matchBrackets(state, pos.from, 1) : matchBrackets(state, pos.to, -1)) && match.matched)\n        newPos = forward ? match.end.to : match.end.from;\n    else\n        newPos = forward ? pos.to : pos.from;\n    return EditorSelection.cursor(newPos, forward ? -1 : 1);\n}\n/**\nMove the cursor over the next syntactic element to the left.\n*/\nconst cursorSyntaxLeft = view => moveSel(view, range => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the cursor over the next syntactic element to the right.\n*/\nconst cursorSyntaxRight = view => moveSel(view, range => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction cursorByLine(view, forward) {\n    return moveSel(view, range => {\n        if (!range.empty)\n            return rangeEnd(range, forward);\n        let moved = view.moveVertically(range, forward);\n        return moved.head != range.head ? moved : view.moveToLineBoundary(range, forward);\n    });\n}\n/**\nMove the selection one line up.\n*/\nconst cursorLineUp = view => cursorByLine(view, false);\n/**\nMove the selection one line down.\n*/\nconst cursorLineDown = view => cursorByLine(view, true);\nfunction pageInfo(view) {\n    let selfScroll = view.scrollDOM.clientHeight < view.scrollDOM.scrollHeight - 2;\n    let marginTop = 0, marginBottom = 0, height;\n    if (selfScroll) {\n        for (let source of view.state.facet(EditorView.scrollMargins)) {\n            let margins = source(view);\n            if (margins === null || margins === void 0 ? void 0 : margins.top)\n                marginTop = Math.max(margins === null || margins === void 0 ? void 0 : margins.top, marginTop);\n            if (margins === null || margins === void 0 ? void 0 : margins.bottom)\n                marginBottom = Math.max(margins === null || margins === void 0 ? void 0 : margins.bottom, marginBottom);\n        }\n        height = view.scrollDOM.clientHeight - marginTop - marginBottom;\n    }\n    else {\n        height = (view.dom.ownerDocument.defaultView || window).innerHeight;\n    }\n    return { marginTop, marginBottom, selfScroll,\n        height: Math.max(view.defaultLineHeight, height - 5) };\n}\nfunction cursorByPage(view, forward) {\n    let page = pageInfo(view);\n    let { state } = view, selection = updateSel(state.selection, range => {\n        return range.empty ? view.moveVertically(range, forward, page.height)\n            : rangeEnd(range, forward);\n    });\n    if (selection.eq(state.selection))\n        return false;\n    let effect;\n    if (page.selfScroll) {\n        let startPos = view.coordsAtPos(state.selection.main.head);\n        let scrollRect = view.scrollDOM.getBoundingClientRect();\n        let scrollTop = scrollRect.top + page.marginTop, scrollBottom = scrollRect.bottom - page.marginBottom;\n        if (startPos && startPos.top > scrollTop && startPos.bottom < scrollBottom)\n            effect = EditorView.scrollIntoView(selection.main.head, { y: \"start\", yMargin: startPos.top - scrollTop });\n    }\n    view.dispatch(setSel(state, selection), { effects: effect });\n    return true;\n}\n/**\nMove the selection one page up.\n*/\nconst cursorPageUp = view => cursorByPage(view, false);\n/**\nMove the selection one page down.\n*/\nconst cursorPageDown = view => cursorByPage(view, true);\nfunction moveByLineBoundary(view, start, forward) {\n    let line = view.lineBlockAt(start.head), moved = view.moveToLineBoundary(start, forward);\n    if (moved.head == start.head && moved.head != (forward ? line.to : line.from))\n        moved = view.moveToLineBoundary(start, forward, false);\n    if (!forward && moved.head == line.from && line.length) {\n        let space = /^\\s*/.exec(view.state.sliceDoc(line.from, Math.min(line.from + 100, line.to)))[0].length;\n        if (space && start.head != line.from + space)\n            moved = EditorSelection.cursor(line.from + space);\n    }\n    return moved;\n}\n/**\nMove the selection to the next line wrap point, or to the end of\nthe line if there isn't one left on this line.\n*/\nconst cursorLineBoundaryForward = view => moveSel(view, range => moveByLineBoundary(view, range, true));\n/**\nMove the selection to previous line wrap point, or failing that to\nthe start of the line. If the line is indented, and the cursor\nisn't already at the end of the indentation, this will move to the\nend of the indentation instead of the start of the line.\n*/\nconst cursorLineBoundaryBackward = view => moveSel(view, range => moveByLineBoundary(view, range, false));\n/**\nMove the selection one line wrap point to the left.\n*/\nconst cursorLineBoundaryLeft = view => moveSel(view, range => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection one line wrap point to the right.\n*/\nconst cursorLineBoundaryRight = view => moveSel(view, range => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection to the start of the line.\n*/\nconst cursorLineStart = view => moveSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).from, 1));\n/**\nMove the selection to the end of the line.\n*/\nconst cursorLineEnd = view => moveSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).to, -1));\nfunction toMatchingBracket(state, dispatch, extend) {\n    let found = false, selection = updateSel(state.selection, range => {\n        let matching = matchBrackets(state, range.head, -1)\n            || matchBrackets(state, range.head, 1)\n            || (range.head > 0 && matchBrackets(state, range.head - 1, 1))\n            || (range.head < state.doc.length && matchBrackets(state, range.head + 1, -1));\n        if (!matching || !matching.end)\n            return range;\n        found = true;\n        let head = matching.start.from == range.head ? matching.end.to : matching.end.from;\n        return extend ? EditorSelection.range(range.anchor, head) : EditorSelection.cursor(head);\n    });\n    if (!found)\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n}\n/**\nMove the selection to the bracket matching the one it is currently\non, if any.\n*/\nconst cursorMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, false);\n/**\nExtend the selection to the bracket matching the one the selection\nhead is currently on, if any.\n*/\nconst selectMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, true);\nfunction extendSel(target, how) {\n    let selection = updateSel(target.state.selection, range => {\n        let head = how(range);\n        return EditorSelection.range(range.anchor, head.head, head.goalColumn, head.bidiLevel || undefined);\n    });\n    if (selection.eq(target.state.selection))\n        return false;\n    target.dispatch(setSel(target.state, selection));\n    return true;\n}\nfunction selectByChar(view, forward) {\n    return extendSel(view, range => view.moveByChar(range, forward));\n}\n/**\nMove the selection head one character to the left, while leaving\nthe anchor in place.\n*/\nconst selectCharLeft = view => selectByChar(view, !ltrAtCursor(view));\n/**\nMove the selection head one character to the right.\n*/\nconst selectCharRight = view => selectByChar(view, ltrAtCursor(view));\n/**\nMove the selection head one character forward.\n*/\nconst selectCharForward = view => selectByChar(view, true);\n/**\nMove the selection head one character backward.\n*/\nconst selectCharBackward = view => selectByChar(view, false);\n/**\nMove the selection head one character forward by logical\n(non-direction aware) string index order.\n*/\nconst selectCharForwardLogical = target => extendSel(target, range => byCharLogical(target.state, range, true));\n/**\nMove the selection head one character backward by logical string\nindex order.\n*/\nconst selectCharBackwardLogical = target => extendSel(target, range => byCharLogical(target.state, range, false));\nfunction selectByGroup(view, forward) {\n    return extendSel(view, range => view.moveByGroup(range, forward));\n}\n/**\nMove the selection head one [group](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) to\nthe left.\n*/\nconst selectGroupLeft = view => selectByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection head one group to the right.\n*/\nconst selectGroupRight = view => selectByGroup(view, ltrAtCursor(view));\n/**\nMove the selection head one group forward.\n*/\nconst selectGroupForward = view => selectByGroup(view, true);\n/**\nMove the selection head one group backward.\n*/\nconst selectGroupBackward = view => selectByGroup(view, false);\n/**\nMove the selection head one group forward in the default Windows\nstyle, skipping to the start of the next group.\n*/\nconst selectGroupForwardWin = view => {\n    return extendSel(view, range => view.moveByChar(range, true, start => toGroupStart(view, range.head, start)));\n};\nfunction selectBySubword(view, forward) {\n    return extendSel(view, range => moveBySubword(view, range, forward));\n}\n/**\nMove the selection head one group or camel-case subword forward.\n*/\nconst selectSubwordForward = view => selectBySubword(view, true);\n/**\nMove the selection head one group or subword backward.\n*/\nconst selectSubwordBackward = view => selectBySubword(view, false);\n/**\nMove the selection head over the next syntactic element to the left.\n*/\nconst selectSyntaxLeft = view => extendSel(view, range => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the selection head over the next syntactic element to the right.\n*/\nconst selectSyntaxRight = view => extendSel(view, range => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction selectByLine(view, forward) {\n    return extendSel(view, range => view.moveVertically(range, forward));\n}\n/**\nMove the selection head one line up.\n*/\nconst selectLineUp = view => selectByLine(view, false);\n/**\nMove the selection head one line down.\n*/\nconst selectLineDown = view => selectByLine(view, true);\nfunction selectByPage(view, forward) {\n    return extendSel(view, range => view.moveVertically(range, forward, pageInfo(view).height));\n}\n/**\nMove the selection head one page up.\n*/\nconst selectPageUp = view => selectByPage(view, false);\n/**\nMove the selection head one page down.\n*/\nconst selectPageDown = view => selectByPage(view, true);\n/**\nMove the selection head to the next line boundary.\n*/\nconst selectLineBoundaryForward = view => extendSel(view, range => moveByLineBoundary(view, range, true));\n/**\nMove the selection head to the previous line boundary.\n*/\nconst selectLineBoundaryBackward = view => extendSel(view, range => moveByLineBoundary(view, range, false));\n/**\nMove the selection head one line boundary to the left.\n*/\nconst selectLineBoundaryLeft = view => extendSel(view, range => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection head one line boundary to the right.\n*/\nconst selectLineBoundaryRight = view => extendSel(view, range => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection head to the start of the line.\n*/\nconst selectLineStart = view => extendSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).from));\n/**\nMove the selection head to the end of the line.\n*/\nconst selectLineEnd = view => extendSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).to));\n/**\nMove the selection to the start of the document.\n*/\nconst cursorDocStart = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: 0 }));\n    return true;\n};\n/**\nMove the selection to the end of the document.\n*/\nconst cursorDocEnd = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: state.doc.length }));\n    return true;\n};\n/**\nMove the selection head to the start of the document.\n*/\nconst selectDocStart = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: state.selection.main.anchor, head: 0 }));\n    return true;\n};\n/**\nMove the selection head to the end of the document.\n*/\nconst selectDocEnd = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: state.selection.main.anchor, head: state.doc.length }));\n    return true;\n};\n/**\nSelect the entire document.\n*/\nconst selectAll = ({ state, dispatch }) => {\n    dispatch(state.update({ selection: { anchor: 0, head: state.doc.length }, userEvent: \"select\" }));\n    return true;\n};\n/**\nExpand the selection to cover entire lines.\n*/\nconst selectLine = ({ state, dispatch }) => {\n    let ranges = selectedLineBlocks(state).map(({ from, to }) => EditorSelection.range(from, Math.min(to + 1, state.doc.length)));\n    dispatch(state.update({ selection: EditorSelection.create(ranges), userEvent: \"select\" }));\n    return true;\n};\n/**\nSelect the next syntactic construct that is larger than the\nselection. Note that this will only work insofar as the language\n[provider](https://codemirror.net/6/docs/ref/#language.language) you use builds up a full\nsyntax tree.\n*/\nconst selectParentSyntax = ({ state, dispatch }) => {\n    let selection = updateSel(state.selection, range => {\n        let tree = syntaxTree(state), stack = tree.resolveStack(range.from, 1);\n        if (range.empty) {\n            let stackBefore = tree.resolveStack(range.from, -1);\n            if (stackBefore.node.from >= stack.node.from && stackBefore.node.to <= stack.node.to)\n                stack = stackBefore;\n        }\n        for (let cur = stack; cur; cur = cur.next) {\n            let { node } = cur;\n            if (((node.from < range.from && node.to >= range.to) ||\n                (node.to > range.to && node.from <= range.from)) &&\n                cur.next)\n                return EditorSelection.range(node.to, node.from);\n        }\n        return range;\n    });\n    if (selection.eq(state.selection))\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n};\n/**\nSimplify the current selection. When multiple ranges are selected,\nreduce it to its main range. Otherwise, if the selection is\nnon-empty, convert it to a cursor selection.\n*/\nconst simplifySelection = ({ state, dispatch }) => {\n    let cur = state.selection, selection = null;\n    if (cur.ranges.length > 1)\n        selection = EditorSelection.create([cur.main]);\n    else if (!cur.main.empty)\n        selection = EditorSelection.create([EditorSelection.cursor(cur.main.head)]);\n    if (!selection)\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n};\nfunction deleteBy(target, by) {\n    if (target.state.readOnly)\n        return false;\n    let event = \"delete.selection\", { state } = target;\n    let changes = state.changeByRange(range => {\n        let { from, to } = range;\n        if (from == to) {\n            let towards = by(range);\n            if (towards < from) {\n                event = \"delete.backward\";\n                towards = skipAtomic(target, towards, false);\n            }\n            else if (towards > from) {\n                event = \"delete.forward\";\n                towards = skipAtomic(target, towards, true);\n            }\n            from = Math.min(from, towards);\n            to = Math.max(to, towards);\n        }\n        else {\n            from = skipAtomic(target, from, false);\n            to = skipAtomic(target, to, true);\n        }\n        return from == to ? { range } : { changes: { from, to }, range: EditorSelection.cursor(from, from < range.head ? -1 : 1) };\n    });\n    if (changes.changes.empty)\n        return false;\n    target.dispatch(state.update(changes, {\n        scrollIntoView: true,\n        userEvent: event,\n        effects: event == \"delete.selection\" ? EditorView.announce.of(state.phrase(\"Selection deleted\")) : undefined\n    }));\n    return true;\n}\nfunction skipAtomic(target, pos, forward) {\n    if (target instanceof EditorView)\n        for (let ranges of target.state.facet(EditorView.atomicRanges).map(f => f(target)))\n            ranges.between(pos, pos, (from, to) => {\n                if (from < pos && to > pos)\n                    pos = forward ? to : from;\n            });\n    return pos;\n}\nconst deleteByChar = (target, forward, byIndentUnit) => deleteBy(target, range => {\n    let pos = range.from, { state } = target, line = state.doc.lineAt(pos), before, targetPos;\n    if (byIndentUnit && !forward && pos > line.from && pos < line.from + 200 &&\n        !/[^ \\t]/.test(before = line.text.slice(0, pos - line.from))) {\n        if (before[before.length - 1] == \"\\t\")\n            return pos - 1;\n        let col = countColumn(before, state.tabSize), drop = col % getIndentUnit(state) || getIndentUnit(state);\n        for (let i = 0; i < drop && before[before.length - 1 - i] == \" \"; i++)\n            pos--;\n        targetPos = pos;\n    }\n    else {\n        targetPos = findClusterBreak(line.text, pos - line.from, forward, forward) + line.from;\n        if (targetPos == pos && line.number != (forward ? state.doc.lines : 1))\n            targetPos += forward ? 1 : -1;\n        else if (!forward && /[\\ufe00-\\ufe0f]/.test(line.text.slice(targetPos - line.from, pos - line.from)))\n            targetPos = findClusterBreak(line.text, targetPos - line.from, false, false) + line.from;\n    }\n    return targetPos;\n});\n/**\nDelete the selection, or, for cursor selections, the character or\nindentation unit before the cursor.\n*/\nconst deleteCharBackward = view => deleteByChar(view, false, true);\n/**\nDelete the selection or the character before the cursor. Does not\nimplement any extended behavior like deleting whole indentation\nunits in one go.\n*/\nconst deleteCharBackwardStrict = view => deleteByChar(view, false, false);\n/**\nDelete the selection or the character after the cursor.\n*/\nconst deleteCharForward = view => deleteByChar(view, true, false);\nconst deleteByGroup = (target, forward) => deleteBy(target, range => {\n    let pos = range.head, { state } = target, line = state.doc.lineAt(pos);\n    let categorize = state.charCategorizer(pos);\n    for (let cat = null;;) {\n        if (pos == (forward ? line.to : line.from)) {\n            if (pos == range.head && line.number != (forward ? state.doc.lines : 1))\n                pos += forward ? 1 : -1;\n            break;\n        }\n        let next = findClusterBreak(line.text, pos - line.from, forward) + line.from;\n        let nextChar = line.text.slice(Math.min(pos, next) - line.from, Math.max(pos, next) - line.from);\n        let nextCat = categorize(nextChar);\n        if (cat != null && nextCat != cat)\n            break;\n        if (nextChar != \" \" || pos != range.head)\n            cat = nextCat;\n        pos = next;\n    }\n    return pos;\n});\n/**\nDelete the selection or backward until the end of the next\n[group](https://codemirror.net/6/docs/ref/#view.EditorView.moveByGroup), only skipping groups of\nwhitespace when they consist of a single space.\n*/\nconst deleteGroupBackward = target => deleteByGroup(target, false);\n/**\nDelete the selection or forward until the end of the next group.\n*/\nconst deleteGroupForward = target => deleteByGroup(target, true);\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line. If the cursor is directly at the end of the\nline, delete the line break after it.\n*/\nconst deleteToLineEnd = view => deleteBy(view, range => {\n    let lineEnd = view.lineBlockAt(range.head).to;\n    return range.head < lineEnd ? lineEnd : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe start of the line. If the cursor is directly at the start of the\nline, delete the line break before it.\n*/\nconst deleteToLineStart = view => deleteBy(view, range => {\n    let lineStart = view.lineBlockAt(range.head).from;\n    return range.head > lineStart ? lineStart : Math.max(0, range.head - 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe start of the line or the next line wrap before the cursor.\n*/\nconst deleteLineBoundaryBackward = view => deleteBy(view, range => {\n    let lineStart = view.moveToLineBoundary(range, false).head;\n    return range.head > lineStart ? lineStart : Math.max(0, range.head - 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line or the next line wrap after the cursor.\n*/\nconst deleteLineBoundaryForward = view => deleteBy(view, range => {\n    let lineStart = view.moveToLineBoundary(range, true).head;\n    return range.head < lineStart ? lineStart : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nDelete all whitespace directly before a line end from the\ndocument.\n*/\nconst deleteTrailingWhitespace = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let changes = [];\n    for (let pos = 0, prev = \"\", iter = state.doc.iter();;) {\n        iter.next();\n        if (iter.lineBreak || iter.done) {\n            let trailing = prev.search(/\\s+$/);\n            if (trailing > -1)\n                changes.push({ from: pos - (prev.length - trailing), to: pos });\n            if (iter.done)\n                break;\n            prev = \"\";\n        }\n        else {\n            prev = iter.value;\n        }\n        pos += iter.value.length;\n    }\n    if (!changes.length)\n        return false;\n    dispatch(state.update({ changes, userEvent: \"delete\" }));\n    return true;\n};\n/**\nReplace each selection range with a line break, leaving the cursor\non the line before the break.\n*/\nconst splitLine = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let changes = state.changeByRange(range => {\n        return { changes: { from: range.from, to: range.to, insert: Text.of([\"\", \"\"]) },\n            range: EditorSelection.cursor(range.from) };\n    });\n    dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\n/**\nFlip the characters before and after the cursor(s).\n*/\nconst transposeChars = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let changes = state.changeByRange(range => {\n        if (!range.empty || range.from == 0 || range.from == state.doc.length)\n            return { range };\n        let pos = range.from, line = state.doc.lineAt(pos);\n        let from = pos == line.from ? pos - 1 : findClusterBreak(line.text, pos - line.from, false) + line.from;\n        let to = pos == line.to ? pos + 1 : findClusterBreak(line.text, pos - line.from, true) + line.from;\n        return { changes: { from, to, insert: state.doc.slice(pos, to).append(state.doc.slice(from, pos)) },\n            range: EditorSelection.cursor(to) };\n    });\n    if (changes.changes.empty)\n        return false;\n    dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"move.character\" }));\n    return true;\n};\nfunction selectedLineBlocks(state) {\n    let blocks = [], upto = -1;\n    for (let range of state.selection.ranges) {\n        let startLine = state.doc.lineAt(range.from), endLine = state.doc.lineAt(range.to);\n        if (!range.empty && range.to == endLine.from)\n            endLine = state.doc.lineAt(range.to - 1);\n        if (upto >= startLine.number) {\n            let prev = blocks[blocks.length - 1];\n            prev.to = endLine.to;\n            prev.ranges.push(range);\n        }\n        else {\n            blocks.push({ from: startLine.from, to: endLine.to, ranges: [range] });\n        }\n        upto = endLine.number + 1;\n    }\n    return blocks;\n}\nfunction moveLine(state, dispatch, forward) {\n    if (state.readOnly)\n        return false;\n    let changes = [], ranges = [];\n    for (let block of selectedLineBlocks(state)) {\n        if (forward ? block.to == state.doc.length : block.from == 0)\n            continue;\n        let nextLine = state.doc.lineAt(forward ? block.to + 1 : block.from - 1);\n        let size = nextLine.length + 1;\n        if (forward) {\n            changes.push({ from: block.to, to: nextLine.to }, { from: block.from, insert: nextLine.text + state.lineBreak });\n            for (let r of block.ranges)\n                ranges.push(EditorSelection.range(Math.min(state.doc.length, r.anchor + size), Math.min(state.doc.length, r.head + size)));\n        }\n        else {\n            changes.push({ from: nextLine.from, to: block.from }, { from: block.to, insert: state.lineBreak + nextLine.text });\n            for (let r of block.ranges)\n                ranges.push(EditorSelection.range(r.anchor - size, r.head - size));\n        }\n    }\n    if (!changes.length)\n        return false;\n    dispatch(state.update({\n        changes,\n        scrollIntoView: true,\n        selection: EditorSelection.create(ranges, state.selection.mainIndex),\n        userEvent: \"move.line\"\n    }));\n    return true;\n}\n/**\nMove the selected lines up one line.\n*/\nconst moveLineUp = ({ state, dispatch }) => moveLine(state, dispatch, false);\n/**\nMove the selected lines down one line.\n*/\nconst moveLineDown = ({ state, dispatch }) => moveLine(state, dispatch, true);\nfunction copyLine(state, dispatch, forward) {\n    if (state.readOnly)\n        return false;\n    let changes = [];\n    for (let block of selectedLineBlocks(state)) {\n        if (forward)\n            changes.push({ from: block.from, insert: state.doc.slice(block.from, block.to) + state.lineBreak });\n        else\n            changes.push({ from: block.to, insert: state.lineBreak + state.doc.slice(block.from, block.to) });\n    }\n    dispatch(state.update({ changes, scrollIntoView: true, userEvent: \"input.copyline\" }));\n    return true;\n}\n/**\nCreate a copy of the selected lines. Keep the selection in the top copy.\n*/\nconst copyLineUp = ({ state, dispatch }) => copyLine(state, dispatch, false);\n/**\nCreate a copy of the selected lines. Keep the selection in the bottom copy.\n*/\nconst copyLineDown = ({ state, dispatch }) => copyLine(state, dispatch, true);\n/**\nDelete selected lines.\n*/\nconst deleteLine = view => {\n    if (view.state.readOnly)\n        return false;\n    let { state } = view, changes = state.changes(selectedLineBlocks(state).map(({ from, to }) => {\n        if (from > 0)\n            from--;\n        else if (to < state.doc.length)\n            to++;\n        return { from, to };\n    }));\n    let selection = updateSel(state.selection, range => {\n        let dist = undefined;\n        if (view.lineWrapping) {\n            let block = view.lineBlockAt(range.head), pos = view.coordsAtPos(range.head, range.assoc || 1);\n            if (pos)\n                dist = (block.bottom + view.documentTop) - pos.bottom + view.defaultLineHeight / 2;\n        }\n        return view.moveVertically(range, true, dist);\n    }).map(changes);\n    view.dispatch({ changes, selection, scrollIntoView: true, userEvent: \"delete.line\" });\n    return true;\n};\n/**\nReplace the selection with a newline.\n*/\nconst insertNewline = ({ state, dispatch }) => {\n    dispatch(state.update(state.replaceSelection(state.lineBreak), { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\n/**\nReplace the selection with a newline and the same amount of\nindentation as the line above.\n*/\nconst insertNewlineKeepIndent = ({ state, dispatch }) => {\n    dispatch(state.update(state.changeByRange(range => {\n        let indent = /^\\s*/.exec(state.doc.lineAt(range.from).text)[0];\n        return {\n            changes: { from: range.from, to: range.to, insert: state.lineBreak + indent },\n            range: EditorSelection.cursor(range.from + indent.length + 1)\n        };\n    }), { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\nfunction isBetweenBrackets(state, pos) {\n    if (/\\(\\)|\\[\\]|\\{\\}/.test(state.sliceDoc(pos - 1, pos + 1)))\n        return { from: pos, to: pos };\n    let context = syntaxTree(state).resolveInner(pos);\n    let before = context.childBefore(pos), after = context.childAfter(pos), closedBy;\n    if (before && after && before.to <= pos && after.from >= pos &&\n        (closedBy = before.type.prop(NodeProp.closedBy)) && closedBy.indexOf(after.name) > -1 &&\n        state.doc.lineAt(before.to).from == state.doc.lineAt(after.from).from &&\n        !/\\S/.test(state.sliceDoc(before.to, after.from)))\n        return { from: before.to, to: after.from };\n    return null;\n}\n/**\nReplace the selection with a newline and indent the newly created\nline(s). If the current line consists only of whitespace, this\nwill also delete that whitespace. When the cursor is between\nmatching brackets, an additional newline will be inserted after\nthe cursor.\n*/\nconst insertNewlineAndIndent = /*@__PURE__*/newlineAndIndent(false);\n/**\nCreate a blank, indented line below the current line.\n*/\nconst insertBlankLine = /*@__PURE__*/newlineAndIndent(true);\nfunction newlineAndIndent(atEof) {\n    return ({ state, dispatch }) => {\n        if (state.readOnly)\n            return false;\n        let changes = state.changeByRange(range => {\n            let { from, to } = range, line = state.doc.lineAt(from);\n            let explode = !atEof && from == to && isBetweenBrackets(state, from);\n            if (atEof)\n                from = to = (to <= line.to ? line : state.doc.lineAt(to)).to;\n            let cx = new IndentContext(state, { simulateBreak: from, simulateDoubleBreak: !!explode });\n            let indent = getIndentation(cx, from);\n            if (indent == null)\n                indent = countColumn(/^\\s*/.exec(state.doc.lineAt(from).text)[0], state.tabSize);\n            while (to < line.to && /\\s/.test(line.text[to - line.from]))\n                to++;\n            if (explode)\n                ({ from, to } = explode);\n            else if (from > line.from && from < line.from + 100 && !/\\S/.test(line.text.slice(0, from)))\n                from = line.from;\n            let insert = [\"\", indentString(state, indent)];\n            if (explode)\n                insert.push(indentString(state, cx.lineIndent(line.from, -1)));\n            return { changes: { from, to, insert: Text.of(insert) },\n                range: EditorSelection.cursor(from + 1 + insert[1].length) };\n        });\n        dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n        return true;\n    };\n}\nfunction changeBySelectedLine(state, f) {\n    let atLine = -1;\n    return state.changeByRange(range => {\n        let changes = [];\n        for (let pos = range.from; pos <= range.to;) {\n            let line = state.doc.lineAt(pos);\n            if (line.number > atLine && (range.empty || range.to > line.from)) {\n                f(line, changes, range);\n                atLine = line.number;\n            }\n            pos = line.to + 1;\n        }\n        let changeSet = state.changes(changes);\n        return { changes,\n            range: EditorSelection.range(changeSet.mapPos(range.anchor, 1), changeSet.mapPos(range.head, 1)) };\n    });\n}\n/**\nAuto-indent the selected lines. This uses the [indentation service\nfacet](https://codemirror.net/6/docs/ref/#language.indentService) as source for auto-indent\ninformation.\n*/\nconst indentSelection = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let updated = Object.create(null);\n    let context = new IndentContext(state, { overrideIndentation: start => {\n            let found = updated[start];\n            return found == null ? -1 : found;\n        } });\n    let changes = changeBySelectedLine(state, (line, changes, range) => {\n        let indent = getIndentation(context, line.from);\n        if (indent == null)\n            return;\n        if (!/\\S/.test(line.text))\n            indent = 0;\n        let cur = /^\\s*/.exec(line.text)[0];\n        let norm = indentString(state, indent);\n        if (cur != norm || range.from < line.from + cur.length) {\n            updated[line.from] = indent;\n            changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n    });\n    if (!changes.changes.empty)\n        dispatch(state.update(changes, { userEvent: \"indent\" }));\n    return true;\n};\n/**\nAdd a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation to all selected\nlines.\n*/\nconst indentMore = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    dispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n        changes.push({ from: line.from, insert: state.facet(indentUnit) });\n    }), { userEvent: \"input.indent\" }));\n    return true;\n};\n/**\nRemove a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation from all\nselected lines.\n*/\nconst indentLess = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    dispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n        let space = /^\\s*/.exec(line.text)[0];\n        if (!space)\n            return;\n        let col = countColumn(space, state.tabSize), keep = 0;\n        let insert = indentString(state, Math.max(0, col - getIndentUnit(state)));\n        while (keep < space.length && keep < insert.length && space.charCodeAt(keep) == insert.charCodeAt(keep))\n            keep++;\n        changes.push({ from: line.from + keep, to: line.from + space.length, insert: insert.slice(keep) });\n    }), { userEvent: \"delete.dedent\" }));\n    return true;\n};\n/**\nEnables or disables\n[tab-focus mode](https://codemirror.net/6/docs/ref/#view.EditorView.setTabFocusMode). While on, this\nprevents the editor's key bindings from capturing Tab or\nShift-Tab, making it possible for the user to move focus out of\nthe editor with the keyboard.\n*/\nconst toggleTabFocusMode = view => {\n    view.setTabFocusMode();\n    return true;\n};\n/**\nTemporarily enables [tab-focus\nmode](https://codemirror.net/6/docs/ref/#view.EditorView.setTabFocusMode) for two seconds or until\nanother key is pressed.\n*/\nconst temporarilySetTabFocusMode = view => {\n    view.setTabFocusMode(2000);\n    return true;\n};\n/**\nInsert a tab character at the cursor or, if something is selected,\nuse [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore) to indent the entire\nselection.\n*/\nconst insertTab = ({ state, dispatch }) => {\n    if (state.selection.ranges.some(r => !r.empty))\n        return indentMore({ state, dispatch });\n    dispatch(state.update(state.replaceSelection(\"\\t\"), { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\n/**\nArray of key bindings containing the Emacs-style bindings that are\navailable on macOS by default.\n\n - Ctrl-b: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n - Ctrl-f: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n - Ctrl-p: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n - Ctrl-n: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n - Ctrl-a: [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n - Ctrl-e: [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n - Ctrl-d: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n - Ctrl-h: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n - Ctrl-k: [`deleteToLineEnd`](https://codemirror.net/6/docs/ref/#commands.deleteToLineEnd)\n - Ctrl-Alt-h: [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n - Ctrl-o: [`splitLine`](https://codemirror.net/6/docs/ref/#commands.splitLine)\n - Ctrl-t: [`transposeChars`](https://codemirror.net/6/docs/ref/#commands.transposeChars)\n - Ctrl-v: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown)\n - Alt-v: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp)\n*/\nconst emacsStyleKeymap = [\n    { key: \"Ctrl-b\", run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },\n    { key: \"Ctrl-f\", run: cursorCharRight, shift: selectCharRight },\n    { key: \"Ctrl-p\", run: cursorLineUp, shift: selectLineUp },\n    { key: \"Ctrl-n\", run: cursorLineDown, shift: selectLineDown },\n    { key: \"Ctrl-a\", run: cursorLineStart, shift: selectLineStart },\n    { key: \"Ctrl-e\", run: cursorLineEnd, shift: selectLineEnd },\n    { key: \"Ctrl-d\", run: deleteCharForward },\n    { key: \"Ctrl-h\", run: deleteCharBackward },\n    { key: \"Ctrl-k\", run: deleteToLineEnd },\n    { key: \"Ctrl-Alt-h\", run: deleteGroupBackward },\n    { key: \"Ctrl-o\", run: splitLine },\n    { key: \"Ctrl-t\", run: transposeChars },\n    { key: \"Ctrl-v\", run: cursorPageDown },\n];\n/**\nAn array of key bindings closely sticking to platform-standard or\nwidely used bindings. (This includes the bindings from\n[`emacsStyleKeymap`](https://codemirror.net/6/docs/ref/#commands.emacsStyleKeymap), with their `key`\nproperty changed to `mac`.)\n\n - ArrowLeft: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n - ArrowRight: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n - Ctrl-ArrowLeft (Alt-ArrowLeft on macOS): [`cursorGroupLeft`](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) ([`selectGroupLeft`](https://codemirror.net/6/docs/ref/#commands.selectGroupLeft) with Shift)\n - Ctrl-ArrowRight (Alt-ArrowRight on macOS): [`cursorGroupRight`](https://codemirror.net/6/docs/ref/#commands.cursorGroupRight) ([`selectGroupRight`](https://codemirror.net/6/docs/ref/#commands.selectGroupRight) with Shift)\n - Cmd-ArrowLeft (on macOS): [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n - Cmd-ArrowRight (on macOS): [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n - ArrowUp: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n - ArrowDown: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n - Cmd-ArrowUp (on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n - Cmd-ArrowDown (on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n - Ctrl-ArrowUp (on macOS): [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n - Ctrl-ArrowDown (on macOS): [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n - PageUp: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n - PageDown: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n - Home: [`cursorLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryBackward) ([`selectLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryBackward) with Shift)\n - End: [`cursorLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryForward) ([`selectLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryForward) with Shift)\n - Ctrl-Home (Cmd-Home on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n - Ctrl-End (Cmd-Home on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n - Enter and Shift-Enter: [`insertNewlineAndIndent`](https://codemirror.net/6/docs/ref/#commands.insertNewlineAndIndent)\n - Ctrl-a (Cmd-a on macOS): [`selectAll`](https://codemirror.net/6/docs/ref/#commands.selectAll)\n - Backspace: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n - Delete: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n - Ctrl-Backspace (Alt-Backspace on macOS): [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n - Ctrl-Delete (Alt-Delete on macOS): [`deleteGroupForward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupForward)\n - Cmd-Backspace (macOS): [`deleteLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryBackward).\n - Cmd-Delete (macOS): [`deleteLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryForward).\n*/\nconst standardKeymap = /*@__PURE__*/[\n    { key: \"ArrowLeft\", run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },\n    { key: \"Mod-ArrowLeft\", mac: \"Alt-ArrowLeft\", run: cursorGroupLeft, shift: selectGroupLeft, preventDefault: true },\n    { mac: \"Cmd-ArrowLeft\", run: cursorLineBoundaryLeft, shift: selectLineBoundaryLeft, preventDefault: true },\n    { key: \"ArrowRight\", run: cursorCharRight, shift: selectCharRight, preventDefault: true },\n    { key: \"Mod-ArrowRight\", mac: \"Alt-ArrowRight\", run: cursorGroupRight, shift: selectGroupRight, preventDefault: true },\n    { mac: \"Cmd-ArrowRight\", run: cursorLineBoundaryRight, shift: selectLineBoundaryRight, preventDefault: true },\n    { key: \"ArrowUp\", run: cursorLineUp, shift: selectLineUp, preventDefault: true },\n    { mac: \"Cmd-ArrowUp\", run: cursorDocStart, shift: selectDocStart },\n    { mac: \"Ctrl-ArrowUp\", run: cursorPageUp, shift: selectPageUp },\n    { key: \"ArrowDown\", run: cursorLineDown, shift: selectLineDown, preventDefault: true },\n    { mac: \"Cmd-ArrowDown\", run: cursorDocEnd, shift: selectDocEnd },\n    { mac: \"Ctrl-ArrowDown\", run: cursorPageDown, shift: selectPageDown },\n    { key: \"PageUp\", run: cursorPageUp, shift: selectPageUp },\n    { key: \"PageDown\", run: cursorPageDown, shift: selectPageDown },\n    { key: \"Home\", run: cursorLineBoundaryBackward, shift: selectLineBoundaryBackward, preventDefault: true },\n    { key: \"Mod-Home\", run: cursorDocStart, shift: selectDocStart },\n    { key: \"End\", run: cursorLineBoundaryForward, shift: selectLineBoundaryForward, preventDefault: true },\n    { key: \"Mod-End\", run: cursorDocEnd, shift: selectDocEnd },\n    { key: \"Enter\", run: insertNewlineAndIndent, shift: insertNewlineAndIndent },\n    { key: \"Mod-a\", run: selectAll },\n    { key: \"Backspace\", run: deleteCharBackward, shift: deleteCharBackward },\n    { key: \"Delete\", run: deleteCharForward },\n    { key: \"Mod-Backspace\", mac: \"Alt-Backspace\", run: deleteGroupBackward },\n    { key: \"Mod-Delete\", mac: \"Alt-Delete\", run: deleteGroupForward },\n    { mac: \"Mod-Backspace\", run: deleteLineBoundaryBackward },\n    { mac: \"Mod-Delete\", run: deleteLineBoundaryForward }\n].concat(/*@__PURE__*/emacsStyleKeymap.map(b => ({ mac: b.key, run: b.run, shift: b.shift })));\n/**\nThe default keymap. Includes all bindings from\n[`standardKeymap`](https://codemirror.net/6/docs/ref/#commands.standardKeymap) plus the following:\n\n- Alt-ArrowLeft (Ctrl-ArrowLeft on macOS): [`cursorSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxLeft) ([`selectSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxLeft) with Shift)\n- Alt-ArrowRight (Ctrl-ArrowRight on macOS): [`cursorSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxRight) ([`selectSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxRight) with Shift)\n- Alt-ArrowUp: [`moveLineUp`](https://codemirror.net/6/docs/ref/#commands.moveLineUp)\n- Alt-ArrowDown: [`moveLineDown`](https://codemirror.net/6/docs/ref/#commands.moveLineDown)\n- Shift-Alt-ArrowUp: [`copyLineUp`](https://codemirror.net/6/docs/ref/#commands.copyLineUp)\n- Shift-Alt-ArrowDown: [`copyLineDown`](https://codemirror.net/6/docs/ref/#commands.copyLineDown)\n- Escape: [`simplifySelection`](https://codemirror.net/6/docs/ref/#commands.simplifySelection)\n- Ctrl-Enter (Cmd-Enter on macOS): [`insertBlankLine`](https://codemirror.net/6/docs/ref/#commands.insertBlankLine)\n- Alt-l (Ctrl-l on macOS): [`selectLine`](https://codemirror.net/6/docs/ref/#commands.selectLine)\n- Ctrl-i (Cmd-i on macOS): [`selectParentSyntax`](https://codemirror.net/6/docs/ref/#commands.selectParentSyntax)\n- Ctrl-[ (Cmd-[ on macOS): [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess)\n- Ctrl-] (Cmd-] on macOS): [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore)\n- Ctrl-Alt-\\\\ (Cmd-Alt-\\\\ on macOS): [`indentSelection`](https://codemirror.net/6/docs/ref/#commands.indentSelection)\n- Shift-Ctrl-k (Shift-Cmd-k on macOS): [`deleteLine`](https://codemirror.net/6/docs/ref/#commands.deleteLine)\n- Shift-Ctrl-\\\\ (Shift-Cmd-\\\\ on macOS): [`cursorMatchingBracket`](https://codemirror.net/6/docs/ref/#commands.cursorMatchingBracket)\n- Ctrl-/ (Cmd-/ on macOS): [`toggleComment`](https://codemirror.net/6/docs/ref/#commands.toggleComment).\n- Shift-Alt-a: [`toggleBlockComment`](https://codemirror.net/6/docs/ref/#commands.toggleBlockComment).\n- Ctrl-m (Alt-Shift-m on macOS): [`toggleTabFocusMode`](https://codemirror.net/6/docs/ref/#commands.toggleTabFocusMode).\n*/\nconst defaultKeymap = /*@__PURE__*/[\n    { key: \"Alt-ArrowLeft\", mac: \"Ctrl-ArrowLeft\", run: cursorSyntaxLeft, shift: selectSyntaxLeft },\n    { key: \"Alt-ArrowRight\", mac: \"Ctrl-ArrowRight\", run: cursorSyntaxRight, shift: selectSyntaxRight },\n    { key: \"Alt-ArrowUp\", run: moveLineUp },\n    { key: \"Shift-Alt-ArrowUp\", run: copyLineUp },\n    { key: \"Alt-ArrowDown\", run: moveLineDown },\n    { key: \"Shift-Alt-ArrowDown\", run: copyLineDown },\n    { key: \"Escape\", run: simplifySelection },\n    { key: \"Mod-Enter\", run: insertBlankLine },\n    { key: \"Alt-l\", mac: \"Ctrl-l\", run: selectLine },\n    { key: \"Mod-i\", run: selectParentSyntax, preventDefault: true },\n    { key: \"Mod-[\", run: indentLess },\n    { key: \"Mod-]\", run: indentMore },\n    { key: \"Mod-Alt-\\\\\", run: indentSelection },\n    { key: \"Shift-Mod-k\", run: deleteLine },\n    { key: \"Shift-Mod-\\\\\", run: cursorMatchingBracket },\n    { key: \"Mod-/\", run: toggleComment },\n    { key: \"Alt-A\", run: toggleBlockComment },\n    { key: \"Ctrl-m\", mac: \"Shift-Alt-m\", run: toggleTabFocusMode },\n].concat(standardKeymap);\n/**\nA binding that binds Tab to [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore) and\nShift-Tab to [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess).\nPlease see the [Tab example](../../examples/tab/) before using\nthis.\n*/\nconst indentWithTab = { key: \"Tab\", run: indentMore, shift: indentLess };\n\nexport { blockComment, blockUncomment, copyLineDown, copyLineUp, cursorCharBackward, cursorCharBackwardLogical, cursorCharForward, cursorCharForwardLogical, cursorCharLeft, cursorCharRight, cursorDocEnd, cursorDocStart, cursorGroupBackward, cursorGroupForward, cursorGroupForwardWin, cursorGroupLeft, cursorGroupRight, cursorLineBoundaryBackward, cursorLineBoundaryForward, cursorLineBoundaryLeft, cursorLineBoundaryRight, cursorLineDown, cursorLineEnd, cursorLineStart, cursorLineUp, cursorMatchingBracket, cursorPageDown, cursorPageUp, cursorSubwordBackward, cursorSubwordForward, cursorSyntaxLeft, cursorSyntaxRight, defaultKeymap, deleteCharBackward, deleteCharBackwardStrict, deleteCharForward, deleteGroupBackward, deleteGroupForward, deleteLine, deleteLineBoundaryBackward, deleteLineBoundaryForward, deleteToLineEnd, deleteToLineStart, deleteTrailingWhitespace, emacsStyleKeymap, history, historyField, historyKeymap, indentLess, indentMore, indentSelection, indentWithTab, insertBlankLine, insertNewline, insertNewlineAndIndent, insertNewlineKeepIndent, insertTab, invertedEffects, isolateHistory, lineComment, lineUncomment, moveLineDown, moveLineUp, redo, redoDepth, redoSelection, selectAll, selectCharBackward, selectCharBackwardLogical, selectCharForward, selectCharForwardLogical, selectCharLeft, selectCharRight, selectDocEnd, selectDocStart, selectGroupBackward, selectGroupForward, selectGroupForwardWin, selectGroupLeft, selectGroupRight, selectLine, selectLineBoundaryBackward, selectLineBoundaryForward, selectLineBoundaryLeft, selectLineBoundaryRight, selectLineDown, selectLineEnd, selectLineStart, selectLineUp, selectMatchingBracket, selectPageDown, selectPageUp, selectParentSyntax, selectSubwordBackward, selectSubwordForward, selectSyntaxLeft, selectSyntaxRight, simplifySelection, splitLine, standardKeymap, temporarilySetTabFocusMode, toggleBlockComment, toggleBlockCommentByLine, toggleComment, toggleLineComment, toggleTabFocusMode, transposeChars, undo, undoDepth, undoSelection };\n", "import \"CodeBlockView.styles_2tv1fs.wyw.css\"; export const codeBlock = \"codeBlock_c154l84y\";\nexport const loadingPlaceholder = \"loadingPlaceholder_lhs1e0w\";", "import { Plugin, PluginKey, type Selection } from \"prosemirror-state\"\n\ninterface PluginState {\n\tpreviousSelection: Selection | null\n}\n\nexport const codeBlockPluginKey = new PluginKey<PluginState>(\"codeBlock\")\n\nexport function codeBlockPlugin() {\n\tlet selection: Selection | null = null\n\n\treturn new Plugin<PluginState>({\n\t\tkey: codeBlockPluginKey,\n\n\t\tstate: {\n\t\t\tinit() {\n\t\t\t\treturn {\n\t\t\t\t\tpreviousSelection: null,\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tapply(transaction) {\n\t\t\t\tconst previousSelection = selection\n\t\t\t\tselection = transaction.selection\n\t\t\t\treturn { previousSelection }\n\t\t\t},\n\t\t},\n\t})\n}\n", "import { EditorView as CodeMirror } from \"@codemirror/view\"\nimport { fonts } from \"@framerjs/fresco/tokens\"\n\n/**\n * Creates a base CodeMirror theme with default styling for the code editor.\n * This theme sets foundational styles like fonts, padding, borders, and line numbers.\n * It can be overridden by other themes applied afterwards.\n *\n * @returns {Object} CodeMirror base theme extension with default editor styles\n */\nexport function createBaseTheme() {\n\treturn CodeMirror.baseTheme({\n\t\t\"&\": {\n\t\t\theight: \"100%\",\n\t\t\tborderRadius: \"8px\",\n\t\t},\n\t\t\".cm-matchingBracket, .cm-nonmatchingBracket, &.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket\":\n\t\t\t{\n\t\t\t\tcolor: \"inherit\",\n\t\t\t\tbackgroundColor: \"rgba(128,128,128,.25)\",\n\t\t\t\tbackgroundBlendMode: \"difference\",\n\t\t\t},\n\t\t\"&.cm-editor.cm-focused\": {\n\t\t\toutline: \"none\",\n\t\t},\n\t\t\"& .cm-activeLine\": {\n\t\t\tbackgroundColor: \"transparent\",\n\t\t},\n\t\t\"&.cm-editor.cm-focused .cm-activeLine\": {\n\t\t\tborderRadius: \"4px\",\n\t\t},\n\t\t\".cm-errorLine\": {\n\t\t\tborderRadius: \"4px\",\n\t\t},\n\t\t\".cm-content\": {\n\t\t\tpadding: \"0\",\n\t\t},\n\t\t\".cm-scroller\": {\n\t\t\tfontFamily: fonts.family.monospace,\n\t\t\tfontSize: \"12px\",\n\t\t\tfontWeight: 400,\n\t\t\tletterSpacing: \"0px\",\n\t\t\tlineHeight: \"20px\",\n\t\t\tfontStyle: \"normal\",\n\t\t\tpadding: \"16px 16px\",\n\t\t},\n\t\t\".cm-gutters\": {\n\t\t\tborder: \"none\",\n\t\t\tpaddingLeft: \"4px\",\n\t\t},\n\t\t\".cm-gutter.cm-lineNumbers\": {\n\t\t\tfontSize: \".6em\",\n\t\t},\n\t\t\".cm-lineNumbers .cm-gutterElement\": {\n\t\t\tminWidth: \"20px\",\n\t\t},\n\t\t\".cm-content.cm-readonly .cm-line\": {\n\t\t\tpaddingLeft: 0,\n\t\t},\n\t\t\"& .cm-panels\": {\n\t\t\tfontFamily: fonts.family.sansSerif,\n\t\t},\n\t\t\".cm-content .cm-line\": {\n\t\t\tpadding: \"0 2px 0 4px\",\n\t\t},\n\t\t\".cm-activeLine\": {\n\t\t\tbackgroundColor: \"transparent !important\",\n\t\t},\n\t\t\".cm-matchingBracket, .cm-nonmatchingBracket\": {\n\t\t\tbackgroundColor: \"transparent !important\",\n\t\t},\n\t})\n}\n", "import { EditorView as CodeMirror } from \"@codemirror/view\"\nimport { isString, isUndefined } from \"utils/typeChecks.ts\"\nimport type { Theme, ThemeSyntaxStyle } from \"./themes.ts\"\n\n/**\n * Creates a CodeMirror theme object with directly applied styles\n *\n * @param {Object} theme - Theme object in CMSTheme format (similar to sandpack but allowing undefined values)\n * @returns {Object} Extension theme object to apply directly to CodeMirror extensions\n */\nexport function createCodeMirrorThemeByThemeDefinition(theme: Theme) {\n\tconst { colors, syntax, font } = theme\n\n\treturn CodeMirror.theme({\n\t\t\"&\": {\n\t\t\tbackgroundColor: colors?.surface1 ?? null,\n\t\t\tcolor: getSyntaxColor(syntax?.plain),\n\t\t},\n\t\t\"&.cm-editor.cm-focused .cm-activeLine\": {\n\t\t\tbackgroundColor: colors?.surface3 ?? null,\n\t\t},\n\t\t\".cm-errorLine\": {\n\t\t\tbackgroundColor: colors?.errorSurface ?? null,\n\t\t},\n\t\t\".cm-content\": {\n\t\t\tcaretColor: colors?.accent ?? null,\n\t\t},\n\t\t\".cm-scroller\": {\n\t\t\tfontFamily: font?.mono || \"monospace\", // Default defined by sandpack. Setting it here to prevent regressions.\n\t\t\tlineHeight: font?.lineHeight || \"1.4\", // Default defined by sandpack. Setting it here to prevent regressions.\n\t\t},\n\t\t\".cm-gutters\": {\n\t\t\tbackgroundColor: colors?.surface1 ?? null,\n\t\t\tcolor: colors?.disabled ?? null,\n\t\t},\n\t\t\".cm-lineNumbers .cm-gutterElement\": {\n\t\t\tlineHeight: font?.lineHeight || \"1.4\", // Default defined by sandpack. Setting it here to prevent regressions.\n\t\t},\n\t})\n}\n\n// Helper to resolve syntax values that can be strings or objects. Default color is black to mimic sandpack defaults.\nfunction getSyntaxColor(value: string | ThemeSyntaxStyle | undefined, defaultColor: string = \"#000000\") {\n\tif (isUndefined(value)) return defaultColor\n\tif (isString(value)) return value\n\tif (isString(value.color)) return value.color\n\n\treturn defaultColor\n}\n", "import type { StyleSpec } from \"style-mod\"\n\nexport function getBackgroundStyle(background?: string): StyleSpec {\n\tif (background) {\n\t\treturn {\n\t\t\tbackgroundColor: `${background} !important`,\n\t\t}\n\t}\n\n\treturn {}\n}\n", "import type { StyleSpec } from \"style-mod\"\n\nexport interface BorderRadiusProperties {\n\tborderRadius?: number\n\tisMixedBorderRadius?: boolean\n\ttopLeftRadius?: number\n\ttopRightRadius?: number\n\tbottomRightRadius?: number\n\tbottomLeftRadius?: number\n}\n\n/**\n * Generates a CSS border radius string based on the provided properties.\n */\nexport function getBorderRadiusStyle({\n\tborderRadius = 0,\n\tisMixedBorderRadius = false,\n\ttopLeftRadius = 0,\n\ttopRightRadius = 0,\n\tbottomRightRadius = 0,\n\tbottomLeftRadius = 0,\n}: BorderRadiusProperties): StyleSpec {\n\tif (isMixedBorderRadius) {\n\t\treturn {\n\t\t\tborderTopLeftRadius: `${topLeftRadius}px !important`,\n\t\t\tborderTopRightRadius: `${topRightRadius}px !important`,\n\t\t\tborderBottomRightRadius: `${bottomRightRadius}px !important`,\n\t\t\tborderBottomLeftRadius: `${bottomLeftRadius}px !important`,\n\t\t}\n\t}\n\n\treturn {\n\t\tborderRadius: `${borderRadius}px !important`,\n\t}\n}\n", "import type { StyleSpec } from \"style-mod\"\n\ntype BorderStyle = \"solid\" | \"dashed\" | \"dotted\" | \"double\"\n\n/**\n * Used before version 1.3.0 and is kept for smooth migration of existing components\n * @deprecated\n */\nexport interface BorderPropertiesOld {\n\tborderWidth?: number\n\tborderColor?: string\n\tborderStyle?: BorderStyle\n\tisMixedBorderWidth?: boolean\n\tborderWidthBottom?: number\n\tborderWidthLeft?: number\n\tborderWidthRight?: number\n\tborderWidthTop?: number\n}\n\nexport interface BorderProperties {\n\tborderWidth?: number\n\tborderColor?: string\n\tborderStyle?: BorderStyle\n\tborderBottomWidth?: number\n\tborderLeftWidth?: number\n\tborderRightWidth?: number\n\tborderTopWidth?: number\n}\n\n/**\n * Generates a CSS border style string based on the provided properties.\n */\nexport function getBorderStyle(border: Partial<BorderProperties | BorderPropertiesOld>): StyleSpec {\n\tconst {\n\t\tborderWidth = 0,\n\t\tborderColor = \"unset\",\n\t\tborderStyle = \"none\",\n\t\tborderTopWidth = 0,\n\t\tborderRightWidth = 0,\n\t\tborderBottomWidth = 0,\n\t\tborderLeftWidth = 0,\n\t} = normalizeBorderProperties(border)\n\n\tconst isMixedBorderWidth =\n\t\tborderTopWidth !== borderRightWidth || borderTopWidth !== borderBottomWidth || borderTopWidth !== borderLeftWidth\n\n\tconst style: StyleSpec = {\n\t\tborderStyle: `${borderStyle} !important`,\n\t\tborderColor: `${borderColor} !important`,\n\t}\n\n\tif (isMixedBorderWidth) {\n\t\treturn {\n\t\t\t...style,\n\t\t\tborderTopWidth: `${borderTopWidth}px !important`,\n\t\t\tborderRightWidth: `${borderRightWidth}px !important`,\n\t\t\tborderBottomWidth: `${borderBottomWidth}px !important`,\n\t\t\tborderLeftWidth: `${borderLeftWidth}px !important`,\n\t\t}\n\t}\n\n\treturn {\n\t\t...style,\n\t\tborderWidth: `${borderWidth}px !important`,\n\t}\n}\n\nfunction normalizeBorderProperties(border: Partial<BorderProperties | BorderPropertiesOld>): BorderProperties {\n\tconst normalizedProps: Partial<BorderProperties> = {\n\t\tborderWidth: border.borderWidth,\n\t\tborderColor: border.borderColor,\n\t\tborderStyle: border.borderStyle,\n\t}\n\n\tif (\n\t\t\"borderBottomWidth\" in border ||\n\t\t\"borderLeftWidth\" in border ||\n\t\t\"borderRightWidth\" in border ||\n\t\t\"borderTopWidth\" in border\n\t) {\n\t\tnormalizedProps.borderBottomWidth = border.borderBottomWidth\n\t\tnormalizedProps.borderLeftWidth = border.borderLeftWidth\n\t\tnormalizedProps.borderRightWidth = border.borderRightWidth\n\t\tnormalizedProps.borderTopWidth = border.borderTopWidth\n\t} else if (\n\t\t\"borderWidthBottom\" in border ||\n\t\t\"borderWidthLeft\" in border ||\n\t\t\"borderWidthRight\" in border ||\n\t\t\"borderWidthTop\" in border\n\t) {\n\t\tnormalizedProps.borderBottomWidth = border.borderWidthBottom\n\t\tnormalizedProps.borderLeftWidth = border.borderWidthLeft\n\t\tnormalizedProps.borderRightWidth = border.borderWidthRight\n\t\tnormalizedProps.borderTopWidth = border.borderWidthTop\n\t}\n\n\treturn normalizedProps\n}\n", "import type { StyleSpec } from \"style-mod\"\n\nexport interface FontProperties {\n\tfontFamily?: string\n\tfontSize?: string\n\tfontStyle?: string\n\tfontWeight?: number\n\tletterSpacing?: string\n\tlineHeight?: string\n}\n\nexport function getFontStyles(font: FontProperties): StyleSpec {\n\tconst style: StyleSpec = {}\n\tif (font.fontFamily) style.fontFamily = `${font.fontFamily} !important`\n\tif (font.fontSize) style.fontSize = `${font.fontSize} !important`\n\tif (font.fontWeight) style.fontWeight = `${font.fontWeight} !important`\n\tif (font.letterSpacing) style.letterSpacing = `${font.letterSpacing} !important`\n\tif (font.lineHeight) style.lineHeight = `${font.lineHeight} !important`\n\tif (font.fontStyle) style.fontStyle = `${font.fontStyle} !important`\n\treturn style\n}\n", "import type { StyleSpec } from \"style-mod\"\n\nexport interface PaddingProperties {\n\tpadding?: number\n\tpaddingPerSide?: boolean\n\tpaddingTop?: number\n\tpaddingRight?: number\n\tpaddingBottom?: number\n\tpaddingLeft?: number\n}\n\n/**\n * Generates a CSS padding string based on the provided properties.\n */\nexport function getPaddingStyle({\n\tpadding = 0,\n\tpaddingPerSide = false,\n\tpaddingTop = 0,\n\tpaddingRight = 0,\n\tpaddingBottom = 0,\n\tpaddingLeft = 0,\n}: PaddingProperties): StyleSpec {\n\tif (paddingPerSide) {\n\t\treturn {\n\t\t\tpaddingTop: `${paddingTop}px !important`,\n\t\t\tpaddingRight: `${paddingRight}px !important`,\n\t\t\tpaddingBottom: `${paddingBottom}px !important`,\n\t\t\tpaddingLeft: `${paddingLeft}px !important`,\n\t\t}\n\t}\n\n\treturn {\n\t\tpadding: `${padding}px !important`,\n\t}\n}\n", "import { EditorView as CodeMirror } from \"@codemirror/view\"\nimport { getBackgroundStyle } from \"../utils/getBackgroundStyle.ts\"\nimport { type BorderRadiusProperties, getBorderRadiusStyle } from \"../utils/getBorderRadiusStyle.ts\"\nimport type { BorderProperties, BorderPropertiesOld } from \"../utils/getBorderStyle.ts\"\nimport { getBorderStyle } from \"../utils/getBorderStyle.ts\"\nimport { getFontStyles } from \"../utils/getFontStyles.ts\"\nimport type { FontProperties } from \"../utils/getFontStyles.ts\"\nimport { type PaddingProperties, getPaddingStyle } from \"../utils/getPaddingStyle.ts\"\n\nexport interface ThemeOverrideProps extends BorderRadiusProperties, PaddingProperties {\n\tfont?: FontProperties\n\tborder?: Partial<BorderProperties | BorderPropertiesOld>\n\tbackground?: string\n}\n\n/**\n * Creates a CodeMirror theme that overrides specific style properties with !important. This ensures\n * the styles take precedence over base themes and other themes applied before or after. Used for\n * applying custom styling (mainly coming from property control values) like padding, borders, fonts\n * etc. to the code editor.\n *\n * @returns {Extension} CodeMirror theme extension with overridden styles\n */\nexport function createOverrideTheme({ border = {}, font = {}, background, ...props }: ThemeOverrideProps) {\n\treturn CodeMirror.theme({\n\t\t\"&\": {\n\t\t\t...getBorderRadiusStyle(props),\n\t\t\t...getBorderStyle(border),\n\t\t\t...getBackgroundStyle(background),\n\t\t},\n\t\t\"& .cm-scroller\": {\n\t\t\t...getPaddingStyle(props),\n\t\t\t...getFontStyles(font),\n\t\t},\n\t})\n}\n", "import { HighlightStyle, syntaxHighlighting } from \"@codemirror/language\"\nimport { tags } from \"@lezer/highlight\"\nimport type { Theme } from \"./themes.ts\"\n\n/**\n * Creates a direct syntax highlighting configuration for CodeMirror based on a theme object.\n *\n * @param {Object} theme - Theme object in CMSTheme format\n * @returns {Object} A HighlightStyle object ready to use with CodeMirror\n */\nexport function createSyntaxHighlightByThemeDefinition(theme: Theme) {\n\tconst syntax = theme.syntax\n\n\tconst highlightStyle = HighlightStyle.define([\n\t\t{\n\t\t\ttag: tags.link,\n\t\t\ttextDecoration: \"underline\",\n\t\t},\n\t\t{\n\t\t\ttag: tags.emphasis,\n\t\t\tfontStyle: \"italic\",\n\t\t},\n\t\t{\n\t\t\ttag: tags.strong,\n\t\t\tfontWeight: \"bold\",\n\t\t},\n\n\t\t// Keywords (if, for, function, etc.)\n\t\t{\n\t\t\ttag: tags.keyword,\n\t\t\tcolor: syntax.keyword,\n\t\t\tfontStyle: theme.fontStyle.keyword,\n\t\t},\n\n\t\t// Literals (true, 42, null, etc.)\n\t\t{\n\t\t\ttag: [tags.atom, tags.number, tags.bool],\n\t\t\tcolor: syntax.static,\n\t\t},\n\n\t\t// Variable names\n\t\t{\n\t\t\ttag: tags.variableName,\n\t\t\tcolor: syntax.plain,\n\t\t},\n\n\t\t// HTML/XML/JSX tags\n\t\t{\n\t\t\ttag: tags.standard(tags.tagName),\n\t\t\tcolor: syntax.tag,\n\t\t},\n\n\t\t// Function names and component names\n\t\t{\n\t\t\ttag: [tags.function(tags.variableName), tags.definition(tags.function(tags.variableName)), tags.tagName],\n\t\t\tcolor: syntax.definition,\n\t\t},\n\n\t\t// Property names\n\t\t{\n\t\t\ttag: tags.propertyName,\n\t\t\tcolor: syntax.property,\n\t\t\tfontStyle: theme.fontStyle.property,\n\t\t},\n\n\t\t// Strings and inserted content\n\t\t{\n\t\t\ttag: [tags.literal, tags.inserted],\n\t\t\tcolor: syntax.string,\n\t\t},\n\n\t\t// Punctuation (, . ; etc.)\n\t\t{\n\t\t\ttag: tags.punctuation,\n\t\t\tcolor: syntax.punctuation,\n\t\t},\n\n\t\t// Comments and quotes\n\t\t{\n\t\t\ttag: [tags.comment, tags.quote],\n\t\t\tcolor: syntax.comment,\n\t\t\tfontStyle: theme.fontStyle.comment,\n\t\t},\n\t])\n\n\treturn syntaxHighlighting(highlightStyle)\n}\n", "import type { Theme } from \"./themes.ts\"\nimport * as themes from \"./themes.ts\"\n\ntype ThemeName = keyof typeof themes\n\nexport interface ThemeProps {\n\tthemeMode?: \"Dynamic\" | \"Static\"\n\ttheme?: string\n\tlightTheme?: string\n\tdarkTheme?: string\n}\n\nfunction getThemeDefinitionForProps(\n\t{ themeMode = \"Static\", theme = \"framerDark\", lightTheme = \"framerLight\", darkTheme = \"framerDark\" }: ThemeProps,\n\tisDark: boolean,\n) {\n\tlet name = theme\n\n\tif (themeMode === \"Dynamic\") {\n\t\tif (isDark) {\n\t\t\tname = darkTheme\n\t\t} else {\n\t\t\tname = lightTheme\n\t\t}\n\t}\n\n\tif (name && name in themes) {\n\t\t// biome-ignore lint/nursery/noDynamicNamespaceImportAccess: Intentional\n\t\treturn themes[name as ThemeName]\n\t}\n\n\tthrow Error(\"Theme not found\")\n}\n\n/**\n * Retrieves a theme definition by name from our theme list file. If no matching, theme by theme\n * name is found, it returns the CMSTheme as a fallback.\n */\nexport function getThemeDefinition(props: ThemeProps | undefined, isDark: boolean): Theme {\n\tif (props) {\n\t\treturn getThemeDefinitionForProps(props, isDark)\n\t}\n\n\treturn themes.cmsTheme\n}\n", "import { Parser, NodeProp, NodeSet, NodeType, DefaultBufferLength, Tree, IterMode } from '@lezer/common';\n\n/// A parse stack. These are used internally by the parser to track\n/// parsing progress. They also provide some properties and methods\n/// that external code such as a tokenizer can use to get information\n/// about the parse state.\nclass Stack {\n    /// @internal\n    constructor(\n    /// The parse that this stack is part of @internal\n    p, \n    /// Holds state, input pos, buffer index triplets for all but the\n    /// top state @internal\n    stack, \n    /// The current parse state @internal\n    state, \n    // The position at which the next reduce should take place. This\n    // can be less than `this.pos` when skipped expressions have been\n    // added to the stack (which should be moved outside of the next\n    // reduction)\n    /// @internal\n    reducePos, \n    /// The input position up to which this stack has parsed.\n    pos, \n    /// The dynamic score of the stack, including dynamic precedence\n    /// and error-recovery penalties\n    /// @internal\n    score, \n    // The output buffer. Holds (type, start, end, size) quads\n    // representing nodes created by the parser, where `size` is\n    // amount of buffer array entries covered by this node.\n    /// @internal\n    buffer, \n    // The base offset of the buffer. When stacks are split, the split\n    // instance shared the buffer history with its parent up to\n    // `bufferBase`, which is the absolute offset (including the\n    // offset of previous splits) into the buffer at which this stack\n    // starts writing.\n    /// @internal\n    bufferBase, \n    /// @internal\n    curContext, \n    /// @internal\n    lookAhead = 0, \n    // A parent stack from which this was split off, if any. This is\n    // set up so that it always points to a stack that has some\n    // additional buffer content, never to a stack with an equal\n    // `bufferBase`.\n    /// @internal\n    parent) {\n        this.p = p;\n        this.stack = stack;\n        this.state = state;\n        this.reducePos = reducePos;\n        this.pos = pos;\n        this.score = score;\n        this.buffer = buffer;\n        this.bufferBase = bufferBase;\n        this.curContext = curContext;\n        this.lookAhead = lookAhead;\n        this.parent = parent;\n    }\n    /// @internal\n    toString() {\n        return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? \"!\" + this.score : \"\"}`;\n    }\n    // Start an empty stack\n    /// @internal\n    static start(p, state, pos = 0) {\n        let cx = p.parser.context;\n        return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null);\n    }\n    /// The stack's current [context](#lr.ContextTracker) value, if\n    /// any. Its type will depend on the context tracker's type\n    /// parameter, or it will be `null` if there is no context\n    /// tracker.\n    get context() { return this.curContext ? this.curContext.context : null; }\n    // Push a state onto the stack, tracking its start position as well\n    // as the buffer base at that point.\n    /// @internal\n    pushState(state, start) {\n        this.stack.push(this.state, start, this.bufferBase + this.buffer.length);\n        this.state = state;\n    }\n    // Apply a reduce action\n    /// @internal\n    reduce(action) {\n        var _a;\n        let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;\n        let { parser } = this.p;\n        let dPrec = parser.dynamicPrecedence(type);\n        if (dPrec)\n            this.score += dPrec;\n        if (depth == 0) {\n            this.pushState(parser.getGoto(this.state, type, true), this.reducePos);\n            // Zero-depth reductions are a special case\u2014they add stuff to\n            // the stack without popping anything off.\n            if (type < parser.minRepeatTerm)\n                this.storeNode(type, this.reducePos, this.reducePos, 4, true);\n            this.reduceContext(type, this.reducePos);\n            return;\n        }\n        // Find the base index into `this.stack`, content after which will\n        // be dropped. Note that with `StayFlag` reductions we need to\n        // consume two extra frames (the dummy parent node for the skipped\n        // expression and the state that we'll be staying in, which should\n        // be moved to `this.state`).\n        let base = this.stack.length - ((depth - 1) * 3) - (action & 262144 /* Action.StayFlag */ ? 6 : 0);\n        let start = base ? this.stack[base - 2] : this.p.ranges[0].from, size = this.reducePos - start;\n        // This is a kludge to try and detect overly deep left-associative\n        // trees, which will not increase the parse stack depth and thus\n        // won't be caught by the regular stack-depth limit check.\n        if (size >= 2000 /* Recover.MinBigReduction */ && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) {\n            if (start == this.p.lastBigReductionStart) {\n                this.p.bigReductionCount++;\n                this.p.lastBigReductionSize = size;\n            }\n            else if (this.p.lastBigReductionSize < size) {\n                this.p.bigReductionCount = 1;\n                this.p.lastBigReductionStart = start;\n                this.p.lastBigReductionSize = size;\n            }\n        }\n        let bufferBase = base ? this.stack[base - 1] : 0, count = this.bufferBase + this.buffer.length - bufferBase;\n        // Store normal terms or `R -> R R` repeat reductions\n        if (type < parser.minRepeatTerm || (action & 131072 /* Action.RepeatFlag */)) {\n            let pos = parser.stateFlag(this.state, 1 /* StateFlag.Skipped */) ? this.pos : this.reducePos;\n            this.storeNode(type, start, pos, count + 4, true);\n        }\n        if (action & 262144 /* Action.StayFlag */) {\n            this.state = this.stack[base];\n        }\n        else {\n            let baseStateID = this.stack[base - 3];\n            this.state = parser.getGoto(baseStateID, type, true);\n        }\n        while (this.stack.length > base)\n            this.stack.pop();\n        this.reduceContext(type, start);\n    }\n    // Shift a value into the buffer\n    /// @internal\n    storeNode(term, start, end, size = 4, isReduce = false) {\n        if (term == 0 /* Term.Err */ &&\n            (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {\n            // Try to omit/merge adjacent error nodes\n            let cur = this, top = this.buffer.length;\n            if (top == 0 && cur.parent) {\n                top = cur.bufferBase - cur.parent.bufferBase;\n                cur = cur.parent;\n            }\n            if (top > 0 && cur.buffer[top - 4] == 0 /* Term.Err */ && cur.buffer[top - 1] > -1) {\n                if (start == end)\n                    return;\n                if (cur.buffer[top - 2] >= start) {\n                    cur.buffer[top - 2] = end;\n                    return;\n                }\n            }\n        }\n        if (!isReduce || this.pos == end) { // Simple case, just append\n            this.buffer.push(term, start, end, size);\n        }\n        else { // There may be skipped nodes that have to be moved forward\n            let index = this.buffer.length;\n            if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */)\n                while (index > 0 && this.buffer[index - 2] > end) {\n                    // Move this record forward\n                    this.buffer[index] = this.buffer[index - 4];\n                    this.buffer[index + 1] = this.buffer[index - 3];\n                    this.buffer[index + 2] = this.buffer[index - 2];\n                    this.buffer[index + 3] = this.buffer[index - 1];\n                    index -= 4;\n                    if (size > 4)\n                        size -= 4;\n                }\n            this.buffer[index] = term;\n            this.buffer[index + 1] = start;\n            this.buffer[index + 2] = end;\n            this.buffer[index + 3] = size;\n        }\n    }\n    // Apply a shift action\n    /// @internal\n    shift(action, next, nextEnd) {\n        let start = this.pos;\n        if (action & 131072 /* Action.GotoFlag */) {\n            this.pushState(action & 65535 /* Action.ValueMask */, this.pos);\n        }\n        else if ((action & 262144 /* Action.StayFlag */) == 0) { // Regular shift\n            let nextState = action, { parser } = this.p;\n            if (nextEnd > this.pos || next <= parser.maxNode) {\n                this.pos = nextEnd;\n                if (!parser.stateFlag(nextState, 1 /* StateFlag.Skipped */))\n                    this.reducePos = nextEnd;\n            }\n            this.pushState(nextState, start);\n            this.shiftContext(next, start);\n            if (next <= parser.maxNode)\n                this.buffer.push(next, start, nextEnd, 4);\n        }\n        else { // Shift-and-stay, which means this is a skipped token\n            this.pos = nextEnd;\n            this.shiftContext(next, start);\n            if (next <= this.p.parser.maxNode)\n                this.buffer.push(next, start, nextEnd, 4);\n        }\n    }\n    // Apply an action\n    /// @internal\n    apply(action, next, nextEnd) {\n        if (action & 65536 /* Action.ReduceFlag */)\n            this.reduce(action);\n        else\n            this.shift(action, next, nextEnd);\n    }\n    // Add a prebuilt (reused) node into the buffer.\n    /// @internal\n    useNode(value, next) {\n        let index = this.p.reused.length - 1;\n        if (index < 0 || this.p.reused[index] != value) {\n            this.p.reused.push(value);\n            index++;\n        }\n        let start = this.pos;\n        this.reducePos = this.pos = start + value.length;\n        this.pushState(next, start);\n        this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */);\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length)));\n    }\n    // Split the stack. Due to the buffer sharing and the fact\n    // that `this.stack` tends to stay quite shallow, this isn't very\n    // expensive.\n    /// @internal\n    split() {\n        let parent = this;\n        let off = parent.buffer.length;\n        // Because the top of the buffer (after this.pos) may be mutated\n        // to reorder reductions and skipped tokens, and shared buffers\n        // should be immutable, this copies any outstanding skipped tokens\n        // to the new buffer, and puts the base pointer before them.\n        while (off > 0 && parent.buffer[off - 2] > parent.reducePos)\n            off -= 4;\n        let buffer = parent.buffer.slice(off), base = parent.bufferBase + off;\n        // Make sure parent points to an actual parent with content, if there is such a parent.\n        while (parent && base == parent.bufferBase)\n            parent = parent.parent;\n        return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent);\n    }\n    // Try to recover from an error by 'deleting' (ignoring) one token.\n    /// @internal\n    recoverByDelete(next, nextEnd) {\n        let isNode = next <= this.p.parser.maxNode;\n        if (isNode)\n            this.storeNode(next, this.pos, nextEnd, 4);\n        this.storeNode(0 /* Term.Err */, this.pos, nextEnd, isNode ? 8 : 4);\n        this.pos = this.reducePos = nextEnd;\n        this.score -= 190 /* Recover.Delete */;\n    }\n    /// Check if the given term would be able to be shifted (optionally\n    /// after some reductions) on this stack. This can be useful for\n    /// external tokenizers that want to make sure they only provide a\n    /// given token when it applies.\n    canShift(term) {\n        for (let sim = new SimulatedStack(this);;) {\n            let action = this.p.parser.stateSlot(sim.state, 4 /* ParseState.DefaultReduce */) || this.p.parser.hasAction(sim.state, term);\n            if (action == 0)\n                return false;\n            if ((action & 65536 /* Action.ReduceFlag */) == 0)\n                return true;\n            sim.reduce(action);\n        }\n    }\n    // Apply up to Recover.MaxNext recovery actions that conceptually\n    // inserts some missing token or rule.\n    /// @internal\n    recoverByInsert(next) {\n        if (this.stack.length >= 300 /* Recover.MaxInsertStackDepth */)\n            return [];\n        let nextStates = this.p.parser.nextStates(this.state);\n        if (nextStates.length > 4 /* Recover.MaxNext */ << 1 || this.stack.length >= 120 /* Recover.DampenInsertStackDepth */) {\n            let best = [];\n            for (let i = 0, s; i < nextStates.length; i += 2) {\n                if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next))\n                    best.push(nextStates[i], s);\n            }\n            if (this.stack.length < 120 /* Recover.DampenInsertStackDepth */)\n                for (let i = 0; best.length < 4 /* Recover.MaxNext */ << 1 && i < nextStates.length; i += 2) {\n                    let s = nextStates[i + 1];\n                    if (!best.some((v, i) => (i & 1) && v == s))\n                        best.push(nextStates[i], s);\n                }\n            nextStates = best;\n        }\n        let result = [];\n        for (let i = 0; i < nextStates.length && result.length < 4 /* Recover.MaxNext */; i += 2) {\n            let s = nextStates[i + 1];\n            if (s == this.state)\n                continue;\n            let stack = this.split();\n            stack.pushState(s, this.pos);\n            stack.storeNode(0 /* Term.Err */, stack.pos, stack.pos, 4, true);\n            stack.shiftContext(nextStates[i], this.pos);\n            stack.score -= 200 /* Recover.Insert */;\n            result.push(stack);\n        }\n        return result;\n    }\n    // Force a reduce, if possible. Return false if that can't\n    // be done.\n    /// @internal\n    forceReduce() {\n        let { parser } = this.p;\n        let reduce = parser.stateSlot(this.state, 5 /* ParseState.ForcedReduce */);\n        if ((reduce & 65536 /* Action.ReduceFlag */) == 0)\n            return false;\n        if (!parser.validAction(this.state, reduce)) {\n            let depth = reduce >> 19 /* Action.ReduceDepthShift */, term = reduce & 65535 /* Action.ValueMask */;\n            let target = this.stack.length - depth * 3;\n            if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) {\n                let backup = this.findForcedReduction();\n                if (backup == null)\n                    return false;\n                reduce = backup;\n            }\n            this.storeNode(0 /* Term.Err */, this.reducePos, this.reducePos, 4, true);\n            this.score -= 100 /* Recover.Reduce */;\n        }\n        this.reducePos = this.pos;\n        this.reduce(reduce);\n        return true;\n    }\n    /// Try to scan through the automaton to find some kind of reduction\n    /// that can be applied. Used when the regular ForcedReduce field\n    /// isn't a valid action. @internal\n    findForcedReduction() {\n        let { parser } = this.p, seen = [];\n        let explore = (state, depth) => {\n            if (seen.includes(state))\n                return;\n            seen.push(state);\n            return parser.allActions(state, (action) => {\n                if (action & (262144 /* Action.StayFlag */ | 131072 /* Action.GotoFlag */)) ;\n                else if (action & 65536 /* Action.ReduceFlag */) {\n                    let rDepth = (action >> 19 /* Action.ReduceDepthShift */) - depth;\n                    if (rDepth > 1) {\n                        let term = action & 65535 /* Action.ValueMask */, target = this.stack.length - rDepth * 3;\n                        if (target >= 0 && parser.getGoto(this.stack[target], term, false) >= 0)\n                            return (rDepth << 19 /* Action.ReduceDepthShift */) | 65536 /* Action.ReduceFlag */ | term;\n                    }\n                }\n                else {\n                    let found = explore(action, depth + 1);\n                    if (found != null)\n                        return found;\n                }\n            });\n        };\n        return explore(this.state, 0);\n    }\n    /// @internal\n    forceAll() {\n        while (!this.p.parser.stateFlag(this.state, 2 /* StateFlag.Accepting */)) {\n            if (!this.forceReduce()) {\n                this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n                break;\n            }\n        }\n        return this;\n    }\n    /// Check whether this state has no further actions (assumed to be a direct descendant of the\n    /// top state, since any other states must be able to continue\n    /// somehow). @internal\n    get deadEnd() {\n        if (this.stack.length != 3)\n            return false;\n        let { parser } = this.p;\n        return parser.data[parser.stateSlot(this.state, 1 /* ParseState.Actions */)] == 65535 /* Seq.End */ &&\n            !parser.stateSlot(this.state, 4 /* ParseState.DefaultReduce */);\n    }\n    /// Restart the stack (put it back in its start state). Only safe\n    /// when this.stack.length == 3 (state is directly below the top\n    /// state). @internal\n    restart() {\n        this.state = this.stack[0];\n        this.stack.length = 0;\n    }\n    /// @internal\n    sameState(other) {\n        if (this.state != other.state || this.stack.length != other.stack.length)\n            return false;\n        for (let i = 0; i < this.stack.length; i += 3)\n            if (this.stack[i] != other.stack[i])\n                return false;\n        return true;\n    }\n    /// Get the parser used by this stack.\n    get parser() { return this.p.parser; }\n    /// Test whether a given dialect (by numeric ID, as exported from\n    /// the terms file) is enabled.\n    dialectEnabled(dialectID) { return this.p.parser.dialect.flags[dialectID]; }\n    shiftContext(term, start) {\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start)));\n    }\n    reduceContext(term, start) {\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start)));\n    }\n    /// @internal\n    emitContext() {\n        let last = this.buffer.length - 1;\n        if (last < 0 || this.buffer[last] != -3)\n            this.buffer.push(this.curContext.hash, this.pos, this.pos, -3);\n    }\n    /// @internal\n    emitLookAhead() {\n        let last = this.buffer.length - 1;\n        if (last < 0 || this.buffer[last] != -4)\n            this.buffer.push(this.lookAhead, this.pos, this.pos, -4);\n    }\n    updateContext(context) {\n        if (context != this.curContext.context) {\n            let newCx = new StackContext(this.curContext.tracker, context);\n            if (newCx.hash != this.curContext.hash)\n                this.emitContext();\n            this.curContext = newCx;\n        }\n    }\n    /// @internal\n    setLookAhead(lookAhead) {\n        if (lookAhead > this.lookAhead) {\n            this.emitLookAhead();\n            this.lookAhead = lookAhead;\n        }\n    }\n    /// @internal\n    close() {\n        if (this.curContext && this.curContext.tracker.strict)\n            this.emitContext();\n        if (this.lookAhead > 0)\n            this.emitLookAhead();\n    }\n}\nclass StackContext {\n    constructor(tracker, context) {\n        this.tracker = tracker;\n        this.context = context;\n        this.hash = tracker.strict ? tracker.hash(context) : 0;\n    }\n}\nvar Recover;\n(function (Recover) {\n    Recover[Recover[\"Insert\"] = 200] = \"Insert\";\n    Recover[Recover[\"Delete\"] = 190] = \"Delete\";\n    Recover[Recover[\"Reduce\"] = 100] = \"Reduce\";\n    Recover[Recover[\"MaxNext\"] = 4] = \"MaxNext\";\n    Recover[Recover[\"MaxInsertStackDepth\"] = 300] = \"MaxInsertStackDepth\";\n    Recover[Recover[\"DampenInsertStackDepth\"] = 120] = \"DampenInsertStackDepth\";\n    Recover[Recover[\"MinBigReduction\"] = 2000] = \"MinBigReduction\";\n})(Recover || (Recover = {}));\n// Used to cheaply run some reductions to scan ahead without mutating\n// an entire stack\nclass SimulatedStack {\n    constructor(start) {\n        this.start = start;\n        this.state = start.state;\n        this.stack = start.stack;\n        this.base = this.stack.length;\n    }\n    reduce(action) {\n        let term = action & 65535 /* Action.ValueMask */, depth = action >> 19 /* Action.ReduceDepthShift */;\n        if (depth == 0) {\n            if (this.stack == this.start.stack)\n                this.stack = this.stack.slice();\n            this.stack.push(this.state, 0, 0);\n            this.base += 3;\n        }\n        else {\n            this.base -= (depth - 1) * 3;\n        }\n        let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true);\n        this.state = goto;\n    }\n}\n// This is given to `Tree.build` to build a buffer, and encapsulates\n// the parent-stack-walking necessary to read the nodes.\nclass StackBufferCursor {\n    constructor(stack, pos, index) {\n        this.stack = stack;\n        this.pos = pos;\n        this.index = index;\n        this.buffer = stack.buffer;\n        if (this.index == 0)\n            this.maybeNext();\n    }\n    static create(stack, pos = stack.bufferBase + stack.buffer.length) {\n        return new StackBufferCursor(stack, pos, pos - stack.bufferBase);\n    }\n    maybeNext() {\n        let next = this.stack.parent;\n        if (next != null) {\n            this.index = this.stack.bufferBase - next.bufferBase;\n            this.stack = next;\n            this.buffer = next.buffer;\n        }\n    }\n    get id() { return this.buffer[this.index - 4]; }\n    get start() { return this.buffer[this.index - 3]; }\n    get end() { return this.buffer[this.index - 2]; }\n    get size() { return this.buffer[this.index - 1]; }\n    next() {\n        this.index -= 4;\n        this.pos -= 4;\n        if (this.index == 0)\n            this.maybeNext();\n    }\n    fork() {\n        return new StackBufferCursor(this.stack, this.pos, this.index);\n    }\n}\n\n// See lezer-generator/src/encode.ts for comments about the encoding\n// used here\nfunction decodeArray(input, Type = Uint16Array) {\n    if (typeof input != \"string\")\n        return input;\n    let array = null;\n    for (let pos = 0, out = 0; pos < input.length;) {\n        let value = 0;\n        for (;;) {\n            let next = input.charCodeAt(pos++), stop = false;\n            if (next == 126 /* Encode.BigValCode */) {\n                value = 65535 /* Encode.BigVal */;\n                break;\n            }\n            if (next >= 92 /* Encode.Gap2 */)\n                next--;\n            if (next >= 34 /* Encode.Gap1 */)\n                next--;\n            let digit = next - 32 /* Encode.Start */;\n            if (digit >= 46 /* Encode.Base */) {\n                digit -= 46 /* Encode.Base */;\n                stop = true;\n            }\n            value += digit;\n            if (stop)\n                break;\n            value *= 46 /* Encode.Base */;\n        }\n        if (array)\n            array[out++] = value;\n        else\n            array = new Type(value);\n    }\n    return array;\n}\n\nclass CachedToken {\n    constructor() {\n        this.start = -1;\n        this.value = -1;\n        this.end = -1;\n        this.extended = -1;\n        this.lookAhead = 0;\n        this.mask = 0;\n        this.context = 0;\n    }\n}\nconst nullToken = new CachedToken;\n/// [Tokenizers](#lr.ExternalTokenizer) interact with the input\n/// through this interface. It presents the input as a stream of\n/// characters, tracking lookahead and hiding the complexity of\n/// [ranges](#common.Parser.parse^ranges) from tokenizer code.\nclass InputStream {\n    /// @internal\n    constructor(\n    /// @internal\n    input, \n    /// @internal\n    ranges) {\n        this.input = input;\n        this.ranges = ranges;\n        /// @internal\n        this.chunk = \"\";\n        /// @internal\n        this.chunkOff = 0;\n        /// Backup chunk\n        this.chunk2 = \"\";\n        this.chunk2Pos = 0;\n        /// The character code of the next code unit in the input, or -1\n        /// when the stream is at the end of the input.\n        this.next = -1;\n        /// @internal\n        this.token = nullToken;\n        this.rangeIndex = 0;\n        this.pos = this.chunkPos = ranges[0].from;\n        this.range = ranges[0];\n        this.end = ranges[ranges.length - 1].to;\n        this.readNext();\n    }\n    /// @internal\n    resolveOffset(offset, assoc) {\n        let range = this.range, index = this.rangeIndex;\n        let pos = this.pos + offset;\n        while (pos < range.from) {\n            if (!index)\n                return null;\n            let next = this.ranges[--index];\n            pos -= range.from - next.to;\n            range = next;\n        }\n        while (assoc < 0 ? pos > range.to : pos >= range.to) {\n            if (index == this.ranges.length - 1)\n                return null;\n            let next = this.ranges[++index];\n            pos += next.from - range.to;\n            range = next;\n        }\n        return pos;\n    }\n    /// @internal\n    clipPos(pos) {\n        if (pos >= this.range.from && pos < this.range.to)\n            return pos;\n        for (let range of this.ranges)\n            if (range.to > pos)\n                return Math.max(pos, range.from);\n        return this.end;\n    }\n    /// Look at a code unit near the stream position. `.peek(0)` equals\n    /// `.next`, `.peek(-1)` gives you the previous character, and so\n    /// on.\n    ///\n    /// Note that looking around during tokenizing creates dependencies\n    /// on potentially far-away content, which may reduce the\n    /// effectiveness incremental parsing\u2014when looking forward\u2014or even\n    /// cause invalid reparses when looking backward more than 25 code\n    /// units, since the library does not track lookbehind.\n    peek(offset) {\n        let idx = this.chunkOff + offset, pos, result;\n        if (idx >= 0 && idx < this.chunk.length) {\n            pos = this.pos + offset;\n            result = this.chunk.charCodeAt(idx);\n        }\n        else {\n            let resolved = this.resolveOffset(offset, 1);\n            if (resolved == null)\n                return -1;\n            pos = resolved;\n            if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) {\n                result = this.chunk2.charCodeAt(pos - this.chunk2Pos);\n            }\n            else {\n                let i = this.rangeIndex, range = this.range;\n                while (range.to <= pos)\n                    range = this.ranges[++i];\n                this.chunk2 = this.input.chunk(this.chunk2Pos = pos);\n                if (pos + this.chunk2.length > range.to)\n                    this.chunk2 = this.chunk2.slice(0, range.to - pos);\n                result = this.chunk2.charCodeAt(0);\n            }\n        }\n        if (pos >= this.token.lookAhead)\n            this.token.lookAhead = pos + 1;\n        return result;\n    }\n    /// Accept a token. By default, the end of the token is set to the\n    /// current stream position, but you can pass an offset (relative to\n    /// the stream position) to change that.\n    acceptToken(token, endOffset = 0) {\n        let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos;\n        if (end == null || end < this.token.start)\n            throw new RangeError(\"Token end out of bounds\");\n        this.token.value = token;\n        this.token.end = end;\n    }\n    getChunk() {\n        if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) {\n            let { chunk, chunkPos } = this;\n            this.chunk = this.chunk2;\n            this.chunkPos = this.chunk2Pos;\n            this.chunk2 = chunk;\n            this.chunk2Pos = chunkPos;\n            this.chunkOff = this.pos - this.chunkPos;\n        }\n        else {\n            this.chunk2 = this.chunk;\n            this.chunk2Pos = this.chunkPos;\n            let nextChunk = this.input.chunk(this.pos);\n            let end = this.pos + nextChunk.length;\n            this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk;\n            this.chunkPos = this.pos;\n            this.chunkOff = 0;\n        }\n    }\n    readNext() {\n        if (this.chunkOff >= this.chunk.length) {\n            this.getChunk();\n            if (this.chunkOff == this.chunk.length)\n                return this.next = -1;\n        }\n        return this.next = this.chunk.charCodeAt(this.chunkOff);\n    }\n    /// Move the stream forward N (defaults to 1) code units. Returns\n    /// the new value of [`next`](#lr.InputStream.next).\n    advance(n = 1) {\n        this.chunkOff += n;\n        while (this.pos + n >= this.range.to) {\n            if (this.rangeIndex == this.ranges.length - 1)\n                return this.setDone();\n            n -= this.range.to - this.pos;\n            this.range = this.ranges[++this.rangeIndex];\n            this.pos = this.range.from;\n        }\n        this.pos += n;\n        if (this.pos >= this.token.lookAhead)\n            this.token.lookAhead = this.pos + 1;\n        return this.readNext();\n    }\n    setDone() {\n        this.pos = this.chunkPos = this.end;\n        this.range = this.ranges[this.rangeIndex = this.ranges.length - 1];\n        this.chunk = \"\";\n        return this.next = -1;\n    }\n    /// @internal\n    reset(pos, token) {\n        if (token) {\n            this.token = token;\n            token.start = pos;\n            token.lookAhead = pos + 1;\n            token.value = token.extended = -1;\n        }\n        else {\n            this.token = nullToken;\n        }\n        if (this.pos != pos) {\n            this.pos = pos;\n            if (pos == this.end) {\n                this.setDone();\n                return this;\n            }\n            while (pos < this.range.from)\n                this.range = this.ranges[--this.rangeIndex];\n            while (pos >= this.range.to)\n                this.range = this.ranges[++this.rangeIndex];\n            if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) {\n                this.chunkOff = pos - this.chunkPos;\n            }\n            else {\n                this.chunk = \"\";\n                this.chunkOff = 0;\n            }\n            this.readNext();\n        }\n        return this;\n    }\n    /// @internal\n    read(from, to) {\n        if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length)\n            return this.chunk.slice(from - this.chunkPos, to - this.chunkPos);\n        if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length)\n            return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos);\n        if (from >= this.range.from && to <= this.range.to)\n            return this.input.read(from, to);\n        let result = \"\";\n        for (let r of this.ranges) {\n            if (r.from >= to)\n                break;\n            if (r.to > from)\n                result += this.input.read(Math.max(r.from, from), Math.min(r.to, to));\n        }\n        return result;\n    }\n}\n/// @internal\nclass TokenGroup {\n    constructor(data, id) {\n        this.data = data;\n        this.id = id;\n    }\n    token(input, stack) {\n        let { parser } = stack.p;\n        readToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable);\n    }\n}\nTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/// @hide\nclass LocalTokenGroup {\n    constructor(data, precTable, elseToken) {\n        this.precTable = precTable;\n        this.elseToken = elseToken;\n        this.data = typeof data == \"string\" ? decodeArray(data) : data;\n    }\n    token(input, stack) {\n        let start = input.pos, skipped = 0;\n        for (;;) {\n            readToken(this.data, input, stack, 0, this.data, this.precTable);\n            if (input.token.value > -1)\n                break;\n            if (this.elseToken == null)\n                return;\n            if (input.next < 0)\n                break;\n            input.advance();\n            input.reset(input.pos, input.token);\n            skipped++;\n        }\n        if (skipped) {\n            input.reset(start, input.token);\n            input.acceptToken(this.elseToken, skipped);\n        }\n    }\n}\nLocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/// `@external tokens` declarations in the grammar should resolve to\n/// an instance of this class.\nclass ExternalTokenizer {\n    /// Create a tokenizer. The first argument is the function that,\n    /// given an input stream, scans for the types of tokens it\n    /// recognizes at the stream's position, and calls\n    /// [`acceptToken`](#lr.InputStream.acceptToken) when it finds\n    /// one.\n    constructor(\n    /// @internal\n    token, options = {}) {\n        this.token = token;\n        this.contextual = !!options.contextual;\n        this.fallback = !!options.fallback;\n        this.extend = !!options.extend;\n    }\n}\n// Tokenizer data is stored a big uint16 array containing, for each\n// state:\n//\n//  - A group bitmask, indicating what token groups are reachable from\n//    this state, so that paths that can only lead to tokens not in\n//    any of the current groups can be cut off early.\n//\n//  - The position of the end of the state's sequence of accepting\n//    tokens\n//\n//  - The number of outgoing edges for the state\n//\n//  - The accepting tokens, as (token id, group mask) pairs\n//\n//  - The outgoing edges, as (start character, end character, state\n//    index) triples, with end character being exclusive\n//\n// This function interprets that data, running through a stream as\n// long as new states with the a matching group mask can be reached,\n// and updating `input.token` when it matches a token.\nfunction readToken(data, input, stack, group, precTable, precOffset) {\n    let state = 0, groupMask = 1 << group, { dialect } = stack.p.parser;\n    scan: for (;;) {\n        if ((groupMask & data[state]) == 0)\n            break;\n        let accEnd = data[state + 1];\n        // Check whether this state can lead to a token in the current group\n        // Accept tokens in this state, possibly overwriting\n        // lower-precedence / shorter tokens\n        for (let i = state + 3; i < accEnd; i += 2)\n            if ((data[i + 1] & groupMask) > 0) {\n                let term = data[i];\n                if (dialect.allows(term) &&\n                    (input.token.value == -1 || input.token.value == term ||\n                        overrides(term, input.token.value, precTable, precOffset))) {\n                    input.acceptToken(term);\n                    break;\n                }\n            }\n        let next = input.next, low = 0, high = data[state + 2];\n        // Special case for EOF\n        if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */ && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */) {\n            state = data[accEnd + high * 3 - 1];\n            continue scan;\n        }\n        // Do a binary search on the state's edges\n        for (; low < high;) {\n            let mid = (low + high) >> 1;\n            let index = accEnd + mid + (mid << 1);\n            let from = data[index], to = data[index + 1] || 0x10000;\n            if (next < from)\n                high = mid;\n            else if (next >= to)\n                low = mid + 1;\n            else {\n                state = data[index + 2];\n                input.advance();\n                continue scan;\n            }\n        }\n        break;\n    }\n}\nfunction findOffset(data, start, term) {\n    for (let i = start, next; (next = data[i]) != 65535 /* Seq.End */; i++)\n        if (next == term)\n            return i - start;\n    return -1;\n}\nfunction overrides(token, prev, tableData, tableOffset) {\n    let iPrev = findOffset(tableData, tableOffset, prev);\n    return iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev;\n}\n\n// Environment variable used to control console output\nconst verbose = typeof process != \"undefined\" && process.env && /\\bparse\\b/.test(process.env.LOG);\nlet stackIDs = null;\nvar Safety;\n(function (Safety) {\n    Safety[Safety[\"Margin\"] = 25] = \"Margin\";\n})(Safety || (Safety = {}));\nfunction cutAt(tree, pos, side) {\n    let cursor = tree.cursor(IterMode.IncludeAnonymous);\n    cursor.moveTo(pos);\n    for (;;) {\n        if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))\n            for (;;) {\n                if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)\n                    return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Safety.Margin */))\n                        : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Safety.Margin */));\n                if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())\n                    break;\n                if (!cursor.parent())\n                    return side < 0 ? 0 : tree.length;\n            }\n    }\n}\nclass FragmentCursor {\n    constructor(fragments, nodeSet) {\n        this.fragments = fragments;\n        this.nodeSet = nodeSet;\n        this.i = 0;\n        this.fragment = null;\n        this.safeFrom = -1;\n        this.safeTo = -1;\n        this.trees = [];\n        this.start = [];\n        this.index = [];\n        this.nextFragment();\n    }\n    nextFragment() {\n        let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];\n        if (fr) {\n            this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from;\n            this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to;\n            while (this.trees.length) {\n                this.trees.pop();\n                this.start.pop();\n                this.index.pop();\n            }\n            this.trees.push(fr.tree);\n            this.start.push(-fr.offset);\n            this.index.push(0);\n            this.nextStart = this.safeFrom;\n        }\n        else {\n            this.nextStart = 1e9;\n        }\n    }\n    // `pos` must be >= any previously given `pos` for this cursor\n    nodeAt(pos) {\n        if (pos < this.nextStart)\n            return null;\n        while (this.fragment && this.safeTo <= pos)\n            this.nextFragment();\n        if (!this.fragment)\n            return null;\n        for (;;) {\n            let last = this.trees.length - 1;\n            if (last < 0) { // End of tree\n                this.nextFragment();\n                return null;\n            }\n            let top = this.trees[last], index = this.index[last];\n            if (index == top.children.length) {\n                this.trees.pop();\n                this.start.pop();\n                this.index.pop();\n                continue;\n            }\n            let next = top.children[index];\n            let start = this.start[last] + top.positions[index];\n            if (start > pos) {\n                this.nextStart = start;\n                return null;\n            }\n            if (next instanceof Tree) {\n                if (start == pos) {\n                    if (start < this.safeFrom)\n                        return null;\n                    let end = start + next.length;\n                    if (end <= this.safeTo) {\n                        let lookAhead = next.prop(NodeProp.lookAhead);\n                        if (!lookAhead || end + lookAhead < this.fragment.to)\n                            return next;\n                    }\n                }\n                this.index[last]++;\n                if (start + next.length >= Math.max(this.safeFrom, pos)) { // Enter this node\n                    this.trees.push(next);\n                    this.start.push(start);\n                    this.index.push(0);\n                }\n            }\n            else {\n                this.index[last]++;\n                this.nextStart = start + next.length;\n            }\n        }\n    }\n}\nclass TokenCache {\n    constructor(parser, stream) {\n        this.stream = stream;\n        this.tokens = [];\n        this.mainToken = null;\n        this.actions = [];\n        this.tokens = parser.tokenizers.map(_ => new CachedToken);\n    }\n    getActions(stack) {\n        let actionIndex = 0;\n        let main = null;\n        let { parser } = stack.p, { tokenizers } = parser;\n        let mask = parser.stateSlot(stack.state, 3 /* ParseState.TokenizerMask */);\n        let context = stack.curContext ? stack.curContext.hash : 0;\n        let lookAhead = 0;\n        for (let i = 0; i < tokenizers.length; i++) {\n            if (((1 << i) & mask) == 0)\n                continue;\n            let tokenizer = tokenizers[i], token = this.tokens[i];\n            if (main && !tokenizer.fallback)\n                continue;\n            if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {\n                this.updateCachedToken(token, tokenizer, stack);\n                token.mask = mask;\n                token.context = context;\n            }\n            if (token.lookAhead > token.end + 25 /* Safety.Margin */)\n                lookAhead = Math.max(token.lookAhead, lookAhead);\n            if (token.value != 0 /* Term.Err */) {\n                let startIndex = actionIndex;\n                if (token.extended > -1)\n                    actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);\n                actionIndex = this.addActions(stack, token.value, token.end, actionIndex);\n                if (!tokenizer.extend) {\n                    main = token;\n                    if (actionIndex > startIndex)\n                        break;\n                }\n            }\n        }\n        while (this.actions.length > actionIndex)\n            this.actions.pop();\n        if (lookAhead)\n            stack.setLookAhead(lookAhead);\n        if (!main && stack.pos == this.stream.end) {\n            main = new CachedToken;\n            main.value = stack.p.parser.eofTerm;\n            main.start = main.end = stack.pos;\n            actionIndex = this.addActions(stack, main.value, main.end, actionIndex);\n        }\n        this.mainToken = main;\n        return this.actions;\n    }\n    getMainToken(stack) {\n        if (this.mainToken)\n            return this.mainToken;\n        let main = new CachedToken, { pos, p } = stack;\n        main.start = pos;\n        main.end = Math.min(pos + 1, p.stream.end);\n        main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Term.Err */;\n        return main;\n    }\n    updateCachedToken(token, tokenizer, stack) {\n        let start = this.stream.clipPos(stack.pos);\n        tokenizer.token(this.stream.reset(start, token), stack);\n        if (token.value > -1) {\n            let { parser } = stack.p;\n            for (let i = 0; i < parser.specialized.length; i++)\n                if (parser.specialized[i] == token.value) {\n                    let result = parser.specializers[i](this.stream.read(token.start, token.end), stack);\n                    if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {\n                        if ((result & 1) == 0 /* Specialize.Specialize */)\n                            token.value = result >> 1;\n                        else\n                            token.extended = result >> 1;\n                        break;\n                    }\n                }\n        }\n        else {\n            token.value = 0 /* Term.Err */;\n            token.end = this.stream.clipPos(start + 1);\n        }\n    }\n    putAction(action, token, end, index) {\n        // Don't add duplicate actions\n        for (let i = 0; i < index; i += 3)\n            if (this.actions[i] == action)\n                return index;\n        this.actions[index++] = action;\n        this.actions[index++] = token;\n        this.actions[index++] = end;\n        return index;\n    }\n    addActions(stack, token, end, index) {\n        let { state } = stack, { parser } = stack.p, { data } = parser;\n        for (let set = 0; set < 2; set++) {\n            for (let i = parser.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */);; i += 3) {\n                if (data[i] == 65535 /* Seq.End */) {\n                    if (data[i + 1] == 1 /* Seq.Next */) {\n                        i = pair(data, i + 2);\n                    }\n                    else {\n                        if (index == 0 && data[i + 1] == 2 /* Seq.Other */)\n                            index = this.putAction(pair(data, i + 2), token, end, index);\n                        break;\n                    }\n                }\n                if (data[i] == token)\n                    index = this.putAction(pair(data, i + 1), token, end, index);\n            }\n        }\n        return index;\n    }\n}\nvar Rec;\n(function (Rec) {\n    Rec[Rec[\"Distance\"] = 5] = \"Distance\";\n    Rec[Rec[\"MaxRemainingPerStep\"] = 3] = \"MaxRemainingPerStep\";\n    // When two stacks have been running independently long enough to\n    // add this many elements to their buffers, prune one.\n    Rec[Rec[\"MinBufferLengthPrune\"] = 500] = \"MinBufferLengthPrune\";\n    Rec[Rec[\"ForceReduceLimit\"] = 10] = \"ForceReduceLimit\";\n    // Once a stack reaches this depth (in .stack.length) force-reduce\n    // it back to CutTo to avoid creating trees that overflow the stack\n    // on recursive traversal.\n    Rec[Rec[\"CutDepth\"] = 15000] = \"CutDepth\";\n    Rec[Rec[\"CutTo\"] = 9000] = \"CutTo\";\n    Rec[Rec[\"MaxLeftAssociativeReductionCount\"] = 300] = \"MaxLeftAssociativeReductionCount\";\n    // The maximum number of non-recovering stacks to explore (to avoid\n    // getting bogged down with exponentially multiplying stacks in\n    // ambiguous content)\n    Rec[Rec[\"MaxStackCount\"] = 12] = \"MaxStackCount\";\n})(Rec || (Rec = {}));\nclass Parse {\n    constructor(parser, input, fragments, ranges) {\n        this.parser = parser;\n        this.input = input;\n        this.ranges = ranges;\n        this.recovering = 0;\n        this.nextStackID = 0x2654; // \u2654, \u2655, \u2656, \u2657, \u2658, \u2659, \u2660, \u2661, \u2662, \u2663, \u2664, \u2665, \u2666, \u2667\n        this.minStackPos = 0;\n        this.reused = [];\n        this.stoppedAt = null;\n        this.lastBigReductionStart = -1;\n        this.lastBigReductionSize = 0;\n        this.bigReductionCount = 0;\n        this.stream = new InputStream(input, ranges);\n        this.tokens = new TokenCache(parser, this.stream);\n        this.topTerm = parser.top[1];\n        let { from } = ranges[0];\n        this.stacks = [Stack.start(this, parser.top[0], from)];\n        this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4\n            ? new FragmentCursor(fragments, parser.nodeSet) : null;\n    }\n    get parsedPos() {\n        return this.minStackPos;\n    }\n    // Move the parser forward. This will process all parse stacks at\n    // `this.pos` and try to advance them to a further position. If no\n    // stack for such a position is found, it'll start error-recovery.\n    //\n    // When the parse is finished, this will return a syntax tree. When\n    // not, it returns `null`.\n    advance() {\n        let stacks = this.stacks, pos = this.minStackPos;\n        // This will hold stacks beyond `pos`.\n        let newStacks = this.stacks = [];\n        let stopped, stoppedTokens;\n        // If a large amount of reductions happened with the same start\n        // position, force the stack out of that production in order to\n        // avoid creating a tree too deep to recurse through.\n        // (This is an ugly kludge, because unfortunately there is no\n        // straightforward, cheap way to check for this happening, due to\n        // the history of reductions only being available in an\n        // expensive-to-access format in the stack buffers.)\n        if (this.bigReductionCount > 300 /* Rec.MaxLeftAssociativeReductionCount */ && stacks.length == 1) {\n            let [s] = stacks;\n            while (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart) { }\n            this.bigReductionCount = this.lastBigReductionSize = 0;\n        }\n        // Keep advancing any stacks at `pos` until they either move\n        // forward or can't be advanced. Gather stacks that can't be\n        // advanced further in `stopped`.\n        for (let i = 0; i < stacks.length; i++) {\n            let stack = stacks[i];\n            for (;;) {\n                this.tokens.mainToken = null;\n                if (stack.pos > pos) {\n                    newStacks.push(stack);\n                }\n                else if (this.advanceStack(stack, newStacks, stacks)) {\n                    continue;\n                }\n                else {\n                    if (!stopped) {\n                        stopped = [];\n                        stoppedTokens = [];\n                    }\n                    stopped.push(stack);\n                    let tok = this.tokens.getMainToken(stack);\n                    stoppedTokens.push(tok.value, tok.end);\n                }\n                break;\n            }\n        }\n        if (!newStacks.length) {\n            let finished = stopped && findFinished(stopped);\n            if (finished)\n                return this.stackToTree(finished);\n            if (this.parser.strict) {\n                if (verbose && stopped)\n                    console.log(\"Stuck with token \" + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : \"none\"));\n                throw new SyntaxError(\"No parse at \" + pos);\n            }\n            if (!this.recovering)\n                this.recovering = 5 /* Rec.Distance */;\n        }\n        if (this.recovering && stopped) {\n            let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0]\n                : this.runRecovery(stopped, stoppedTokens, newStacks);\n            if (finished)\n                return this.stackToTree(finished.forceAll());\n        }\n        if (this.recovering) {\n            let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* Rec.MaxRemainingPerStep */;\n            if (newStacks.length > maxRemaining) {\n                newStacks.sort((a, b) => b.score - a.score);\n                while (newStacks.length > maxRemaining)\n                    newStacks.pop();\n            }\n            if (newStacks.some(s => s.reducePos > pos))\n                this.recovering--;\n        }\n        else if (newStacks.length > 1) {\n            // Prune stacks that are in the same state, or that have been\n            // running without splitting for a while, to avoid getting stuck\n            // with multiple successful stacks running endlessly on.\n            outer: for (let i = 0; i < newStacks.length - 1; i++) {\n                let stack = newStacks[i];\n                for (let j = i + 1; j < newStacks.length; j++) {\n                    let other = newStacks[j];\n                    if (stack.sameState(other) ||\n                        stack.buffer.length > 500 /* Rec.MinBufferLengthPrune */ && other.buffer.length > 500 /* Rec.MinBufferLengthPrune */) {\n                        if (((stack.score - other.score) || (stack.buffer.length - other.buffer.length)) > 0) {\n                            newStacks.splice(j--, 1);\n                        }\n                        else {\n                            newStacks.splice(i--, 1);\n                            continue outer;\n                        }\n                    }\n                }\n            }\n            if (newStacks.length > 12 /* Rec.MaxStackCount */)\n                newStacks.splice(12 /* Rec.MaxStackCount */, newStacks.length - 12 /* Rec.MaxStackCount */);\n        }\n        this.minStackPos = newStacks[0].pos;\n        for (let i = 1; i < newStacks.length; i++)\n            if (newStacks[i].pos < this.minStackPos)\n                this.minStackPos = newStacks[i].pos;\n        return null;\n    }\n    stopAt(pos) {\n        if (this.stoppedAt != null && this.stoppedAt < pos)\n            throw new RangeError(\"Can't move stoppedAt forward\");\n        this.stoppedAt = pos;\n    }\n    // Returns an updated version of the given stack, or null if the\n    // stack can't advance normally. When `split` and `stacks` are\n    // given, stacks split off by ambiguous operations will be pushed to\n    // `split`, or added to `stacks` if they move `pos` forward.\n    advanceStack(stack, stacks, split) {\n        let start = stack.pos, { parser } = this;\n        let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n        if (this.stoppedAt != null && start > this.stoppedAt)\n            return stack.forceReduce() ? stack : null;\n        if (this.fragments) {\n            let strictCx = stack.curContext && stack.curContext.tracker.strict, cxHash = strictCx ? stack.curContext.hash : 0;\n            for (let cached = this.fragments.nodeAt(start); cached;) {\n                let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1;\n                if (match > -1 && cached.length && (!strictCx || (cached.prop(NodeProp.contextHash) || 0) == cxHash)) {\n                    stack.useNode(cached, match);\n                    if (verbose)\n                        console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`);\n                    return true;\n                }\n                if (!(cached instanceof Tree) || cached.children.length == 0 || cached.positions[0] > 0)\n                    break;\n                let inner = cached.children[0];\n                if (inner instanceof Tree && cached.positions[0] == 0)\n                    cached = inner;\n                else\n                    break;\n            }\n        }\n        let defaultReduce = parser.stateSlot(stack.state, 4 /* ParseState.DefaultReduce */);\n        if (defaultReduce > 0) {\n            stack.reduce(defaultReduce);\n            if (verbose)\n                console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* Action.ValueMask */)})`);\n            return true;\n        }\n        if (stack.stack.length >= 15000 /* Rec.CutDepth */) {\n            while (stack.stack.length > 9000 /* Rec.CutTo */ && stack.forceReduce()) { }\n        }\n        let actions = this.tokens.getActions(stack);\n        for (let i = 0; i < actions.length;) {\n            let action = actions[i++], term = actions[i++], end = actions[i++];\n            let last = i == actions.length || !split;\n            let localStack = last ? stack : stack.split();\n            localStack.apply(action, term, end);\n            if (verbose)\n                console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* Action.ReduceFlag */) == 0 ? \"shift\"\n                    : `reduce of ${parser.getName(action & 65535 /* Action.ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? \"\" : \", split\"})`);\n            if (last)\n                return true;\n            else if (localStack.pos > start)\n                stacks.push(localStack);\n            else\n                split.push(localStack);\n        }\n        return false;\n    }\n    // Advance a given stack forward as far as it will go. Returns the\n    // (possibly updated) stack if it got stuck, or null if it moved\n    // forward and was given to `pushStackDedup`.\n    advanceFully(stack, newStacks) {\n        let pos = stack.pos;\n        for (;;) {\n            if (!this.advanceStack(stack, null, null))\n                return false;\n            if (stack.pos > pos) {\n                pushStackDedup(stack, newStacks);\n                return true;\n            }\n        }\n    }\n    runRecovery(stacks, tokens, newStacks) {\n        let finished = null, restarted = false;\n        for (let i = 0; i < stacks.length; i++) {\n            let stack = stacks[i], token = tokens[i << 1], tokenEnd = tokens[(i << 1) + 1];\n            let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n            if (stack.deadEnd) {\n                if (restarted)\n                    continue;\n                restarted = true;\n                stack.restart();\n                if (verbose)\n                    console.log(base + this.stackID(stack) + \" (restarted)\");\n                let done = this.advanceFully(stack, newStacks);\n                if (done)\n                    continue;\n            }\n            let force = stack.split(), forceBase = base;\n            for (let j = 0; force.forceReduce() && j < 10 /* Rec.ForceReduceLimit */; j++) {\n                if (verbose)\n                    console.log(forceBase + this.stackID(force) + \" (via force-reduce)\");\n                let done = this.advanceFully(force, newStacks);\n                if (done)\n                    break;\n                if (verbose)\n                    forceBase = this.stackID(force) + \" -> \";\n            }\n            for (let insert of stack.recoverByInsert(token)) {\n                if (verbose)\n                    console.log(base + this.stackID(insert) + \" (via recover-insert)\");\n                this.advanceFully(insert, newStacks);\n            }\n            if (this.stream.end > stack.pos) {\n                if (tokenEnd == stack.pos) {\n                    tokenEnd++;\n                    token = 0 /* Term.Err */;\n                }\n                stack.recoverByDelete(token, tokenEnd);\n                if (verbose)\n                    console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);\n                pushStackDedup(stack, newStacks);\n            }\n            else if (!finished || finished.score < stack.score) {\n                finished = stack;\n            }\n        }\n        return finished;\n    }\n    // Convert the stack's buffer to a syntax tree.\n    stackToTree(stack) {\n        stack.close();\n        return Tree.build({ buffer: StackBufferCursor.create(stack),\n            nodeSet: this.parser.nodeSet,\n            topID: this.topTerm,\n            maxBufferLength: this.parser.bufferLength,\n            reused: this.reused,\n            start: this.ranges[0].from,\n            length: stack.pos - this.ranges[0].from,\n            minRepeatType: this.parser.minRepeatTerm });\n    }\n    stackID(stack) {\n        let id = (stackIDs || (stackIDs = new WeakMap)).get(stack);\n        if (!id)\n            stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++));\n        return id + stack;\n    }\n}\nfunction pushStackDedup(stack, newStacks) {\n    for (let i = 0; i < newStacks.length; i++) {\n        let other = newStacks[i];\n        if (other.pos == stack.pos && other.sameState(stack)) {\n            if (newStacks[i].score < stack.score)\n                newStacks[i] = stack;\n            return;\n        }\n    }\n    newStacks.push(stack);\n}\nclass Dialect {\n    constructor(source, flags, disabled) {\n        this.source = source;\n        this.flags = flags;\n        this.disabled = disabled;\n    }\n    allows(term) { return !this.disabled || this.disabled[term] == 0; }\n}\nconst id = x => x;\n/// Context trackers are used to track stateful context (such as\n/// indentation in the Python grammar, or parent elements in the XML\n/// grammar) needed by external tokenizers. You declare them in a\n/// grammar file as `@context exportName from \"module\"`.\n///\n/// Context values should be immutable, and can be updated (replaced)\n/// on shift or reduce actions.\n///\n/// The export used in a `@context` declaration should be of this\n/// type.\nclass ContextTracker {\n    /// Define a context tracker.\n    constructor(spec) {\n        this.start = spec.start;\n        this.shift = spec.shift || id;\n        this.reduce = spec.reduce || id;\n        this.reuse = spec.reuse || id;\n        this.hash = spec.hash || (() => 0);\n        this.strict = spec.strict !== false;\n    }\n}\n/// Holds the parse tables for a given grammar, as generated by\n/// `lezer-generator`, and provides [methods](#common.Parser) to parse\n/// content with.\nclass LRParser extends Parser {\n    /// @internal\n    constructor(spec) {\n        super();\n        /// @internal\n        this.wrappers = [];\n        if (spec.version != 14 /* File.Version */)\n            throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* File.Version */})`);\n        let nodeNames = spec.nodeNames.split(\" \");\n        this.minRepeatTerm = nodeNames.length;\n        for (let i = 0; i < spec.repeatNodeCount; i++)\n            nodeNames.push(\"\");\n        let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]);\n        let nodeProps = [];\n        for (let i = 0; i < nodeNames.length; i++)\n            nodeProps.push([]);\n        function setProp(nodeID, prop, value) {\n            nodeProps[nodeID].push([prop, prop.deserialize(String(value))]);\n        }\n        if (spec.nodeProps)\n            for (let propSpec of spec.nodeProps) {\n                let prop = propSpec[0];\n                if (typeof prop == \"string\")\n                    prop = NodeProp[prop];\n                for (let i = 1; i < propSpec.length;) {\n                    let next = propSpec[i++];\n                    if (next >= 0) {\n                        setProp(next, prop, propSpec[i++]);\n                    }\n                    else {\n                        let value = propSpec[i + -next];\n                        for (let j = -next; j > 0; j--)\n                            setProp(propSpec[i++], prop, value);\n                        i++;\n                    }\n                }\n            }\n        this.nodeSet = new NodeSet(nodeNames.map((name, i) => NodeType.define({\n            name: i >= this.minRepeatTerm ? undefined : name,\n            id: i,\n            props: nodeProps[i],\n            top: topTerms.indexOf(i) > -1,\n            error: i == 0,\n            skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1\n        })));\n        if (spec.propSources)\n            this.nodeSet = this.nodeSet.extend(...spec.propSources);\n        this.strict = false;\n        this.bufferLength = DefaultBufferLength;\n        let tokenArray = decodeArray(spec.tokenData);\n        this.context = spec.context;\n        this.specializerSpecs = spec.specialized || [];\n        this.specialized = new Uint16Array(this.specializerSpecs.length);\n        for (let i = 0; i < this.specializerSpecs.length; i++)\n            this.specialized[i] = this.specializerSpecs[i].term;\n        this.specializers = this.specializerSpecs.map(getSpecializer);\n        this.states = decodeArray(spec.states, Uint32Array);\n        this.data = decodeArray(spec.stateData);\n        this.goto = decodeArray(spec.goto);\n        this.maxTerm = spec.maxTerm;\n        this.tokenizers = spec.tokenizers.map(value => typeof value == \"number\" ? new TokenGroup(tokenArray, value) : value);\n        this.topRules = spec.topRules;\n        this.dialects = spec.dialects || {};\n        this.dynamicPrecedences = spec.dynamicPrecedences || null;\n        this.tokenPrecTable = spec.tokenPrec;\n        this.termNames = spec.termNames || null;\n        this.maxNode = this.nodeSet.types.length - 1;\n        this.dialect = this.parseDialect();\n        this.top = this.topRules[Object.keys(this.topRules)[0]];\n    }\n    createParse(input, fragments, ranges) {\n        let parse = new Parse(this, input, fragments, ranges);\n        for (let w of this.wrappers)\n            parse = w(parse, input, fragments, ranges);\n        return parse;\n    }\n    /// Get a goto table entry @internal\n    getGoto(state, term, loose = false) {\n        let table = this.goto;\n        if (term >= table[0])\n            return -1;\n        for (let pos = table[term + 1];;) {\n            let groupTag = table[pos++], last = groupTag & 1;\n            let target = table[pos++];\n            if (last && loose)\n                return target;\n            for (let end = pos + (groupTag >> 1); pos < end; pos++)\n                if (table[pos] == state)\n                    return target;\n            if (last)\n                return -1;\n        }\n    }\n    /// Check if this state has an action for a given terminal @internal\n    hasAction(state, terminal) {\n        let data = this.data;\n        for (let set = 0; set < 2; set++) {\n            for (let i = this.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */), next;; i += 3) {\n                if ((next = data[i]) == 65535 /* Seq.End */) {\n                    if (data[i + 1] == 1 /* Seq.Next */)\n                        next = data[i = pair(data, i + 2)];\n                    else if (data[i + 1] == 2 /* Seq.Other */)\n                        return pair(data, i + 2);\n                    else\n                        break;\n                }\n                if (next == terminal || next == 0 /* Term.Err */)\n                    return pair(data, i + 1);\n            }\n        }\n        return 0;\n    }\n    /// @internal\n    stateSlot(state, slot) {\n        return this.states[(state * 6 /* ParseState.Size */) + slot];\n    }\n    /// @internal\n    stateFlag(state, flag) {\n        return (this.stateSlot(state, 0 /* ParseState.Flags */) & flag) > 0;\n    }\n    /// @internal\n    validAction(state, action) {\n        return !!this.allActions(state, a => a == action ? true : null);\n    }\n    /// @internal\n    allActions(state, action) {\n        let deflt = this.stateSlot(state, 4 /* ParseState.DefaultReduce */);\n        let result = deflt ? action(deflt) : undefined;\n        for (let i = this.stateSlot(state, 1 /* ParseState.Actions */); result == null; i += 3) {\n            if (this.data[i] == 65535 /* Seq.End */) {\n                if (this.data[i + 1] == 1 /* Seq.Next */)\n                    i = pair(this.data, i + 2);\n                else\n                    break;\n            }\n            result = action(pair(this.data, i + 1));\n        }\n        return result;\n    }\n    /// Get the states that can follow this one through shift actions or\n    /// goto jumps. @internal\n    nextStates(state) {\n        let result = [];\n        for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) {\n            if (this.data[i] == 65535 /* Seq.End */) {\n                if (this.data[i + 1] == 1 /* Seq.Next */)\n                    i = pair(this.data, i + 2);\n                else\n                    break;\n            }\n            if ((this.data[i + 2] & (65536 /* Action.ReduceFlag */ >> 16)) == 0) {\n                let value = this.data[i + 1];\n                if (!result.some((v, i) => (i & 1) && v == value))\n                    result.push(this.data[i], value);\n            }\n        }\n        return result;\n    }\n    /// Configure the parser. Returns a new parser instance that has the\n    /// given settings modified. Settings not provided in `config` are\n    /// kept from the original parser.\n    configure(config) {\n        // Hideous reflection-based kludge to make it easy to create a\n        // slightly modified copy of a parser.\n        let copy = Object.assign(Object.create(LRParser.prototype), this);\n        if (config.props)\n            copy.nodeSet = this.nodeSet.extend(...config.props);\n        if (config.top) {\n            let info = this.topRules[config.top];\n            if (!info)\n                throw new RangeError(`Invalid top rule name ${config.top}`);\n            copy.top = info;\n        }\n        if (config.tokenizers)\n            copy.tokenizers = this.tokenizers.map(t => {\n                let found = config.tokenizers.find(r => r.from == t);\n                return found ? found.to : t;\n            });\n        if (config.specializers) {\n            copy.specializers = this.specializers.slice();\n            copy.specializerSpecs = this.specializerSpecs.map((s, i) => {\n                let found = config.specializers.find(r => r.from == s.external);\n                if (!found)\n                    return s;\n                let spec = Object.assign(Object.assign({}, s), { external: found.to });\n                copy.specializers[i] = getSpecializer(spec);\n                return spec;\n            });\n        }\n        if (config.contextTracker)\n            copy.context = config.contextTracker;\n        if (config.dialect)\n            copy.dialect = this.parseDialect(config.dialect);\n        if (config.strict != null)\n            copy.strict = config.strict;\n        if (config.wrap)\n            copy.wrappers = copy.wrappers.concat(config.wrap);\n        if (config.bufferLength != null)\n            copy.bufferLength = config.bufferLength;\n        return copy;\n    }\n    /// Tells you whether any [parse wrappers](#lr.ParserConfig.wrap)\n    /// are registered for this parser.\n    hasWrappers() {\n        return this.wrappers.length > 0;\n    }\n    /// Returns the name associated with a given term. This will only\n    /// work for all terms when the parser was generated with the\n    /// `--names` option. By default, only the names of tagged terms are\n    /// stored.\n    getName(term) {\n        return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term);\n    }\n    /// The eof term id is always allocated directly after the node\n    /// types. @internal\n    get eofTerm() { return this.maxNode + 1; }\n    /// The type of top node produced by the parser.\n    get topNode() { return this.nodeSet.types[this.top[1]]; }\n    /// @internal\n    dynamicPrecedence(term) {\n        let prec = this.dynamicPrecedences;\n        return prec == null ? 0 : prec[term] || 0;\n    }\n    /// @internal\n    parseDialect(dialect) {\n        let values = Object.keys(this.dialects), flags = values.map(() => false);\n        if (dialect)\n            for (let part of dialect.split(\" \")) {\n                let id = values.indexOf(part);\n                if (id >= 0)\n                    flags[id] = true;\n            }\n        let disabled = null;\n        for (let i = 0; i < values.length; i++)\n            if (!flags[i]) {\n                for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* Seq.End */;)\n                    (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1;\n            }\n        return new Dialect(dialect, flags, disabled);\n    }\n    /// Used by the output of the parser generator. Not available to\n    /// user code. @hide\n    static deserialize(spec) {\n        return new LRParser(spec);\n    }\n}\nfunction pair(data, off) { return data[off] | (data[off + 1] << 16); }\nfunction findFinished(stacks) {\n    let best = null;\n    for (let stack of stacks) {\n        let stopped = stack.p.stoppedAt;\n        if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) &&\n            stack.p.parser.stateFlag(stack.state, 2 /* StateFlag.Accepting */) &&\n            (!best || best.score < stack.score))\n            best = stack;\n    }\n    return best;\n}\nfunction getSpecializer(spec) {\n    if (spec.external) {\n        let mask = spec.extend ? 1 /* Specialize.Extend */ : 0 /* Specialize.Specialize */;\n        return (value, stack) => (spec.external(value, stack) << 1) | mask;\n    }\n    return spec.get;\n}\n\nexport { ContextTracker, ExternalTokenizer, InputStream, LRParser, LocalTokenGroup, Stack };\n", "import { ContextTracker, ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { parseMixed } from '@lezer/common';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst scriptText = 54,\n  StartCloseScriptTag = 1,\n  styleText = 55,\n  StartCloseStyleTag = 2,\n  textareaText = 56,\n  StartCloseTextareaTag = 3,\n  EndTag = 4,\n  SelfClosingEndTag = 5,\n  StartTag = 6,\n  StartScriptTag = 7,\n  StartStyleTag = 8,\n  StartTextareaTag = 9,\n  StartSelfClosingTag = 10,\n  StartCloseTag = 11,\n  NoMatchStartCloseTag = 12,\n  MismatchedStartCloseTag = 13,\n  missingCloseTag = 57,\n  IncompleteCloseTag = 14,\n  commentContent$1 = 58,\n  Element = 20,\n  TagName = 22,\n  Attribute = 23,\n  AttributeName = 24,\n  AttributeValue = 26,\n  UnquotedAttributeValue = 27,\n  ScriptText = 28,\n  StyleText = 31,\n  TextareaText = 34,\n  OpenTag = 36,\n  CloseTag = 37,\n  Dialect_noMatch = 0,\n  Dialect_selfClosing = 1;\n\n/* Hand-written tokenizers for HTML. */\n\nconst selfClosers = {\n  area: true, base: true, br: true, col: true, command: true,\n  embed: true, frame: true, hr: true, img: true, input: true,\n  keygen: true, link: true, meta: true, param: true, source: true,\n  track: true, wbr: true, menuitem: true\n};\n\nconst implicitlyClosed = {\n  dd: true, li: true, optgroup: true, option: true, p: true,\n  rp: true, rt: true, tbody: true, td: true, tfoot: true,\n  th: true, tr: true\n};\n\nconst closeOnOpen = {\n  dd: {dd: true, dt: true},\n  dt: {dd: true, dt: true},\n  li: {li: true},\n  option: {option: true, optgroup: true},\n  optgroup: {optgroup: true},\n  p: {\n    address: true, article: true, aside: true, blockquote: true, dir: true,\n    div: true, dl: true, fieldset: true, footer: true, form: true,\n    h1: true, h2: true, h3: true, h4: true, h5: true, h6: true,\n    header: true, hgroup: true, hr: true, menu: true, nav: true, ol: true,\n    p: true, pre: true, section: true, table: true, ul: true\n  },\n  rp: {rp: true, rt: true},\n  rt: {rp: true, rt: true},\n  tbody: {tbody: true, tfoot: true},\n  td: {td: true, th: true},\n  tfoot: {tbody: true},\n  th: {td: true, th: true},\n  thead: {tbody: true, tfoot: true},\n  tr: {tr: true}\n};\n\nfunction nameChar(ch) {\n  return ch == 45 || ch == 46 || ch == 58 || ch >= 65 && ch <= 90 || ch == 95 || ch >= 97 && ch <= 122 || ch >= 161\n}\n\nfunction isSpace(ch) {\n  return ch == 9 || ch == 10 || ch == 13 || ch == 32\n}\n\nlet cachedName = null, cachedInput = null, cachedPos = 0;\nfunction tagNameAfter(input, offset) {\n  let pos = input.pos + offset;\n  if (cachedPos == pos && cachedInput == input) return cachedName\n  let next = input.peek(offset);\n  while (isSpace(next)) next = input.peek(++offset);\n  let name = \"\";\n  for (;;) {\n    if (!nameChar(next)) break\n    name += String.fromCharCode(next);\n    next = input.peek(++offset);\n  }\n  // Undefined to signal there's a <? or <!, null for just missing\n  cachedInput = input; cachedPos = pos;\n  return cachedName = name ? name.toLowerCase() : next == question || next == bang ? undefined : null\n}\n\nconst lessThan = 60, greaterThan = 62, slash = 47, question = 63, bang = 33, dash = 45;\n\nfunction ElementContext(name, parent) {\n  this.name = name;\n  this.parent = parent;\n  this.hash = parent ? parent.hash : 0;\n  for (let i = 0; i < name.length; i++) this.hash += (this.hash << 4) + name.charCodeAt(i) + (name.charCodeAt(i) << 8);\n}\n\nconst startTagTerms = [StartTag, StartSelfClosingTag, StartScriptTag, StartStyleTag, StartTextareaTag];\n\nconst elementContext = new ContextTracker({\n  start: null,\n  shift(context, term, stack, input) {\n    return startTagTerms.indexOf(term) > -1 ? new ElementContext(tagNameAfter(input, 1) || \"\", context) : context\n  },\n  reduce(context, term) {\n    return term == Element && context ? context.parent : context\n  },\n  reuse(context, node, stack, input) {\n    let type = node.type.id;\n    return type == StartTag || type == OpenTag\n      ? new ElementContext(tagNameAfter(input, 1) || \"\", context) : context\n  },\n  hash(context) { return context ? context.hash : 0 },\n  strict: false\n});\n\nconst tagStart = new ExternalTokenizer((input, stack) => {\n  if (input.next != lessThan) {\n    // End of file, close any open tags\n    if (input.next < 0 && stack.context) input.acceptToken(missingCloseTag);\n    return\n  }\n  input.advance();\n  let close = input.next == slash;\n  if (close) input.advance();\n  let name = tagNameAfter(input, 0);\n  if (name === undefined) return\n  if (!name) return input.acceptToken(close ? IncompleteCloseTag : StartTag)\n\n  let parent = stack.context ? stack.context.name : null;\n  if (close) {\n    if (name == parent) return input.acceptToken(StartCloseTag)\n    if (parent && implicitlyClosed[parent]) return input.acceptToken(missingCloseTag, -2)\n    if (stack.dialectEnabled(Dialect_noMatch)) return input.acceptToken(NoMatchStartCloseTag)\n    for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return\n    input.acceptToken(MismatchedStartCloseTag);\n  } else {\n    if (name == \"script\") return input.acceptToken(StartScriptTag)\n    if (name == \"style\") return input.acceptToken(StartStyleTag)\n    if (name == \"textarea\") return input.acceptToken(StartTextareaTag)\n    if (selfClosers.hasOwnProperty(name)) return input.acceptToken(StartSelfClosingTag)\n    if (parent && closeOnOpen[parent] && closeOnOpen[parent][name]) input.acceptToken(missingCloseTag, -1);\n    else input.acceptToken(StartTag);\n  }\n}, {contextual: true});\n\nconst commentContent = new ExternalTokenizer(input => {\n  for (let dashes = 0, i = 0;; i++) {\n    if (input.next < 0) {\n      if (i) input.acceptToken(commentContent$1);\n      break\n    }\n    if (input.next == dash) {\n      dashes++;\n    } else if (input.next == greaterThan && dashes >= 2) {\n      if (i > 3) input.acceptToken(commentContent$1, -2);\n      break\n    } else {\n      dashes = 0;\n    }\n    input.advance();\n  }\n});\n\nfunction inForeignElement(context) {\n  for (; context; context = context.parent)\n    if (context.name == \"svg\" || context.name == \"math\") return true\n  return false\n}\n\nconst endTag = new ExternalTokenizer((input, stack) => {\n  if (input.next == slash && input.peek(1) == greaterThan) {\n    let selfClosing = stack.dialectEnabled(Dialect_selfClosing) || inForeignElement(stack.context);\n    input.acceptToken(selfClosing ? SelfClosingEndTag : EndTag, 2);\n  } else if (input.next == greaterThan) {\n    input.acceptToken(EndTag, 1);\n  }\n});\n\nfunction contentTokenizer(tag, textToken, endToken) {\n  let lastState = 2 + tag.length;\n  return new ExternalTokenizer(input => {\n    // state means:\n    // - 0 nothing matched\n    // - 1 '<' matched\n    // - 2 '</' + possibly whitespace matched\n    // - 3-(1+tag.length) part of the tag matched\n    // - lastState whole tag + possibly whitespace matched\n    for (let state = 0, matchedLen = 0, i = 0;; i++) {\n      if (input.next < 0) {\n        if (i) input.acceptToken(textToken);\n        break\n      }\n      if (state == 0 && input.next == lessThan ||\n          state == 1 && input.next == slash ||\n          state >= 2 && state < lastState && input.next == tag.charCodeAt(state - 2)) {\n        state++;\n        matchedLen++;\n      } else if ((state == 2 || state == lastState) && isSpace(input.next)) {\n        matchedLen++;\n      } else if (state == lastState && input.next == greaterThan) {\n        if (i > matchedLen)\n          input.acceptToken(textToken, -matchedLen);\n        else\n          input.acceptToken(endToken, -(matchedLen - 2));\n        break\n      } else if ((input.next == 10 /* '\\n' */ || input.next == 13 /* '\\r' */) && i) {\n        input.acceptToken(textToken, 1);\n        break\n      } else {\n        state = matchedLen = 0;\n      }\n      input.advance();\n    }\n  })\n}\n\nconst scriptTokens = contentTokenizer(\"script\", scriptText, StartCloseScriptTag);\n\nconst styleTokens = contentTokenizer(\"style\", styleText, StartCloseStyleTag);\n\nconst textareaTokens = contentTokenizer(\"textarea\", textareaText, StartCloseTextareaTag);\n\nconst htmlHighlighting = styleTags({\n  \"Text RawText\": tags.content,\n  \"StartTag StartCloseTag SelfClosingEndTag EndTag\": tags.angleBracket,\n  TagName: tags.tagName,\n  \"MismatchedCloseTag/TagName\": [tags.tagName,  tags.invalid],\n  AttributeName: tags.attributeName,\n  \"AttributeValue UnquotedAttributeValue\": tags.attributeValue,\n  Is: tags.definitionOperator,\n  \"EntityReference CharacterReference\": tags.character,\n  Comment: tags.blockComment,\n  ProcessingInst: tags.processingInstruction,\n  DoctypeDecl: tags.documentMeta\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \",xOVO!rOOO!WQ#tO'#CqO!]Q#tO'#CzO!bQ#tO'#C}O!gQ#tO'#DQO!lQ#tO'#DSO!qOaO'#CpO!|ObO'#CpO#XOdO'#CpO$eO!rO'#CpOOO`'#Cp'#CpO$lO$fO'#DTO$tQ#tO'#DVO$yQ#tO'#DWOOO`'#Dk'#DkOOO`'#DY'#DYQVO!rOOO%OQ&rO,59]O%WQ&rO,59fO%`Q&rO,59iO%hQ&rO,59lO%sQ&rO,59nOOOa'#D^'#D^O%{OaO'#CxO&WOaO,59[OOOb'#D_'#D_O&`ObO'#C{O&kObO,59[OOOd'#D`'#D`O&sOdO'#DOO'OOdO,59[OOO`'#Da'#DaO'WO!rO,59[O'_Q#tO'#DROOO`,59[,59[OOOp'#Db'#DbO'dO$fO,59oOOO`,59o,59oO'lQ#|O,59qO'qQ#|O,59rOOO`-E7W-E7WO'vQ&rO'#CsOOQW'#DZ'#DZO(UQ&rO1G.wOOOa1G.w1G.wO(^Q&rO1G/QOOOb1G/Q1G/QO(fQ&rO1G/TOOOd1G/T1G/TO(nQ&rO1G/WOOO`1G/W1G/WOOO`1G/Y1G/YO(yQ&rO1G/YOOOa-E7[-E7[O)RQ#tO'#CyOOO`1G.v1G.vOOOb-E7]-E7]O)WQ#tO'#C|OOOd-E7^-E7^O)]Q#tO'#DPOOO`-E7_-E7_O)bQ#|O,59mOOOp-E7`-E7`OOO`1G/Z1G/ZOOO`1G/]1G/]OOO`1G/^1G/^O)gQ,UO,59_OOQW-E7X-E7XOOOa7+$c7+$cOOOb7+$l7+$lOOOd7+$o7+$oOOO`7+$r7+$rOOO`7+$t7+$tO)rQ#|O,59eO)wQ#|O,59hO)|Q#|O,59kOOO`1G/X1G/XO*RO7[O'#CvO*dOMhO'#CvOOQW1G.y1G.yOOO`1G/P1G/POOO`1G/S1G/SOOO`1G/V1G/VOOOO'#D['#D[O*uO7[O,59bOOQW,59b,59bOOOO'#D]'#D]O+WOMhO,59bOOOO-E7Y-E7YOOQW1G.|1G.|OOOO-E7Z-E7Z\",\n  stateData: \"+s~O!^OS~OUSOVPOWQOXROYTO[]O][O^^O`^Oa^Ob^Oc^Ox^O{_O!dZO~OfaO~OfbO~OfcO~OfdO~OfeO~O!WfOPlP!ZlP~O!XiOQoP!ZoP~O!YlORrP!ZrP~OUSOVPOWQOXROYTOZqO[]O][O^^O`^Oa^Ob^Oc^Ox^O!dZO~O!ZrO~P#dO![sO!euO~OfvO~OfwO~OS|OhyO~OS!OOhyO~OS!QOhyO~OS!SOT!TOhyO~OS!TOhyO~O!WfOPlX!ZlX~OP!WO!Z!XO~O!XiOQoX!ZoX~OQ!ZO!Z!XO~O!YlORrX!ZrX~OR!]O!Z!XO~O!Z!XO~P#dOf!_O~O![sO!e!aO~OS!bO~OS!cO~Oi!dOSgXhgXTgX~OS!fOhyO~OS!gOhyO~OS!hOhyO~OS!iOT!jOhyO~OS!jOhyO~Of!kO~Of!lO~Of!mO~OS!nO~Ok!qO!`!oO!b!pO~OS!rO~OS!sO~OS!tO~Oa!uOb!uOc!uO!`!wO!a!uO~Oa!xOb!xOc!xO!b!wO!c!xO~Oa!uOb!uOc!uO!`!{O!a!uO~Oa!xOb!xOc!xO!b!{O!c!xO~OT~bac!dx{!d~\",\n  goto: \"%p!`PPPPPPPPPPPPPPPPPPPP!a!gP!mPP!yP!|#P#S#Y#]#`#f#i#l#r#x!aP!a!aP$O$U$l$r$x%O%U%[%bPPPPPPPP%hX^OX`pXUOX`pezabcde{}!P!R!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ}bQ!PcQ!RdQ!UeZ!e{}!P!R!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp\",\n  nodeNames: \"\u26A0 StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl\",\n  maxTerm: 67,\n  context: elementContext,\n  nodeProps: [\n    [\"closedBy\", -10,1,2,3,7,8,9,10,11,12,13,\"EndTag\",6,\"EndTag SelfClosingEndTag\",-4,21,30,33,36,\"CloseTag\"],\n    [\"openedBy\", 4,\"StartTag StartCloseTag\",5,\"StartTag\",-4,29,32,35,37,\"OpenTag\"],\n    [\"group\", -9,14,17,18,19,20,39,40,41,42,\"Entity\",16,\"Entity TextContent\",-3,28,31,34,\"TextContent Entity\"]\n  ],\n  propSources: [htmlHighlighting],\n  skippedNodes: [0],\n  repeatNodeCount: 9,\n  tokenData: \"#%g!aR!YOX$qXY,QYZ,QZ[$q[]&X]^,Q^p$qpq,Qqr-_rs4ysv-_vw5iwxJ^x}-_}!OKP!O!P-_!P!Q$q!Q![-_![!]!!O!]!^-_!^!_!&W!_!`#$o!`!a&X!a!c-_!c!}!!O!}#R-_#R#S!!O#S#T3V#T#o!!O#o#s-_#s$f$q$f%W-_%W%o!!O%o%p-_%p&a!!O&a&b-_&b1p!!O1p4U-_4U4d!!O4d4e-_4e$IS!!O$IS$I`-_$I`$Ib!!O$Ib$Kh-_$Kh%#t!!O%#t&/x-_&/x&Et!!O&Et&FV-_&FV;'S!!O;'S;:j!&Q;:j;=`4s<%l?&r-_?&r?Ah!!O?Ah?BY$q?BY?Mn!!O?MnO$q!Z$|c`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr$qrs&}sv$qvw+Pwx(tx!^$q!^!_*V!_!a&X!a#S$q#S#T&X#T;'S$q;'S;=`+z<%lO$q!R&bX`P!a`!cpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&Xq'UV`P!cpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}P'pT`POv'kw!^'k!_;'S'k;'S;=`(P<%lO'kP(SP;=`<%l'kp([S!cpOv(Vx;'S(V;'S;=`(h<%lO(Vp(kP;=`<%l(Vq(qP;=`<%l&}a({W`P!a`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t`)jT!a`Or)esv)ew;'S)e;'S;=`)y<%lO)e`)|P;=`<%l)ea*SP;=`<%l(t!Q*^V!a`!cpOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!Q*vP;=`<%l*V!R*|P;=`<%l&XW+UYkWOX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+PW+wP;=`<%l+P!Z+}P;=`<%l$q!a,]``P!a`!cp!^^OX&XXY,QYZ,QZ]&X]^,Q^p&Xpq,Qqr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!_-ljhS`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_1n!_!a&X!a#S-_#S#T3V#T#s-_#s$f$q$f;'S-_;'S;=`4s<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q[/echSkWOX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!^!_0p!a#S/^#S#T0p#T#s/^#s$f+P$f;'S/^;'S;=`1h<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+PS0uXhSqr0psw0px!P0p!Q!_0p!a#s0p$f;'S0p;'S;=`1b<%l?Ah0p?BY?Mn0pS1eP;=`<%l0p[1kP;=`<%l/^!U1wbhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!U3SP;=`<%l1n!V3bchS`P!a`!cpOq&Xqr3Vrs&}sv3Vvw0pwx(tx!P3V!P!Q&X!Q!^3V!^!_1n!_!a&X!a#s3V#s$f&X$f;'S3V;'S;=`4m<%l?Ah3V?Ah?BY&X?BY?Mn3V?MnO&X!V4pP;=`<%l3V!_4vP;=`<%l-_!Z5SV!`h`P!cpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}!_5rjhSkWc!ROX7dXZ8qZ[7d[^8q^p7dqr:crs8qst@Ttw:cwx8qx!P:c!P!Q7d!Q!]:c!]!^/^!^!_=p!_!a8q!a#S:c#S#T=p#T#s:c#s$f7d$f;'S:c;'S;=`?}<%l?Ah:c?Ah?BY7d?BY?Mn:c?MnO7d!Z7ibkWOX7dXZ8qZ[7d[^8q^p7dqr7drs8qst+Ptw7dwx8qx!]7d!]!^9f!^!a8q!a#S7d#S#T8q#T;'S7d;'S;=`:]<%lO7d!R8tVOp8qqs8qt!]8q!]!^9Z!^;'S8q;'S;=`9`<%lO8q!R9`Oa!R!R9cP;=`<%l8q!Z9mYkWa!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z:`P;=`<%l7d!_:jjhSkWOX7dXZ8qZ[7d[^8q^p7dqr:crs8qst/^tw:cwx8qx!P:c!P!Q7d!Q!]:c!]!^<[!^!_=p!_!a8q!a#S:c#S#T=p#T#s:c#s$f7d$f;'S:c;'S;=`?}<%l?Ah:c?Ah?BY7d?BY?Mn:c?MnO7d!_<echSkWa!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!^!_0p!a#S/^#S#T0p#T#s/^#s$f+P$f;'S/^;'S;=`1h<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!V=udhSOp8qqr=prs8qst0ptw=pwx8qx!P=p!P!Q8q!Q!]=p!]!^?T!^!_=p!_!a8q!a#s=p#s$f8q$f;'S=p;'S;=`?w<%l?Ah=p?Ah?BY8q?BY?Mn=p?MnO8q!V?[XhSa!Rqr0psw0px!P0p!Q!_0p!a#s0p$f;'S0p;'S;=`1b<%l?Ah0p?BY?Mn0p!V?zP;=`<%l=p!_@QP;=`<%l:c!_@[ihSkWOXAyXZCTZ[Ay[^CT^pAyqrDrrsCTswDrwxCTx!PDr!P!QAy!Q!]Dr!]!^/^!^!_G|!_!aCT!a#SDr#S#TG|#T#sDr#s$fAy$f;'SDr;'S;=`JW<%l?AhDr?Ah?BYAy?BY?MnDr?MnOAy!ZBOakWOXAyXZCTZ[Ay[^CT^pAyqrAyrsCTswAywxCTx!]Ay!]!^Cu!^!aCT!a#SAy#S#TCT#T;'SAy;'S;=`Dl<%lOAy!RCWUOpCTq!]CT!]!^Cj!^;'SCT;'S;=`Co<%lOCT!RCoOb!R!RCrP;=`<%lCT!ZC|YkWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZDoP;=`<%lAy!_DyihSkWOXAyXZCTZ[Ay[^CT^pAyqrDrrsCTswDrwxCTx!PDr!P!QAy!Q!]Dr!]!^Fh!^!_G|!_!aCT!a#SDr#S#TG|#T#sDr#s$fAy$f;'SDr;'S;=`JW<%l?AhDr?Ah?BYAy?BY?MnDr?MnOAy!_FqchSkWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!^!_0p!a#S/^#S#T0p#T#s/^#s$f+P$f;'S/^;'S;=`1h<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VHRchSOpCTqrG|rsCTswG|wxCTx!PG|!P!QCT!Q!]G|!]!^I^!^!_G|!_!aCT!a#sG|#s$fCT$f;'SG|;'S;=`JQ<%l?AhG|?Ah?BYCT?BY?MnG|?MnOCT!VIeXhSb!Rqr0psw0px!P0p!Q!_0p!a#s0p$f;'S0p;'S;=`1b<%l?Ah0p?BY?Mn0p!VJTP;=`<%lG|!_JZP;=`<%lDr!ZJgW!bx`P!a`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aK^lhS`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMU!O!P-_!P!Q$q!Q!^-_!^!_1n!_!a&X!a#S-_#S#T3V#T#s-_#s$f$q$f;'S-_;'S;=`4s<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aMckhS`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_1n!_!`&X!`!a! W!a#S-_#S#T3V#T#s-_#s$f$q$f;'S-_;'S;=`4s<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!T! cX`P!a`!cp!eQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!a!!_!ZhSfQ`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!O!!O!O!P!!O!P!Q$q!Q![!!O![!]!!O!]!^-_!^!_1n!_!a&X!a!c-_!c!}!!O!}#R-_#R#S!!O#S#T3V#T#o!!O#o#s-_#s$f$q$f$}-_$}%O!!O%O%W-_%W%o!!O%o%p-_%p&a!!O&a&b-_&b1p!!O1p4U!!O4U4d!!O4d4e-_4e$IS!!O$IS$I`-_$I`$Ib!!O$Ib$Je-_$Je$Jg!!O$Jg$Kh-_$Kh%#t!!O%#t&/x-_&/x&Et!!O&Et&FV-_&FV;'S!!O;'S;:j!&Q;:j;=`4s<%l?&r-_?&r?Ah!!O?Ah?BY$q?BY?Mn!!O?MnO$q!a!&TP;=`<%l!!O!V!&achS!a`!cpOq*Vqr!'lrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!b!Ey!b#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!'uhhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex}1n}!O!)a!O!P1n!P!Q*V!Q!_1n!_!a*V!a!f1n!f!g!,]!g#W1n#W#X!<y#X#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!)jdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex}1n}!O!*x!O!P1n!P!Q*V!Q!_1n!_!a*V!a#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!+TbhS!a`!cp!dPOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!,fdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!q1n!q!r!-t!r#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!-}dhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!e1n!e!f!/]!f#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!/fdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!v1n!v!w!0t!w#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!0}dhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!{1n!{!|!2]!|#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!2fdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!r1n!r!s!3t!s#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!3}dhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a!g1n!g!h!5]!h#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!5fchS!a`!cpOq!6qqr!5]rs!7hsv!5]vw!;`wx!9[x!P!5]!P!Q!6q!Q!_!5]!_!`!6q!`!a!:j!a#s!5]#s$f!6q$f;'S!5];'S;=`!<s<%l?Ah!5]?Ah?BY!6q?BY?Mn!5]?MnO!6q!R!6xY!a`!cpOr!6qrs!7hsv!6qvw!8Swx!9[x!`!6q!`!a!:j!a;'S!6q;'S;=`!;Y<%lO!6qq!7mV!cpOv!7hvx!8Sx!`!7h!`!a!8q!a;'S!7h;'S;=`!9U<%lO!7hP!8VTO!`!8S!`!a!8f!a;'S!8S;'S;=`!8k<%lO!8SP!8kO{PP!8nP;=`<%l!8Sq!8xS!cp{POv(Vx;'S(V;'S;=`(h<%lO(Vq!9XP;=`<%l!7ha!9aX!a`Or!9[rs!8Ssv!9[vw!8Sw!`!9[!`!a!9|!a;'S!9[;'S;=`!:d<%lO!9[a!:TT!a`{POr)esv)ew;'S)e;'S;=`)y<%lO)ea!:gP;=`<%l!9[!R!:sV!a`!cp{POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;]P;=`<%l!6qT!;ebhSOq!8Sqr!;`rs!8Ssw!;`wx!8Sx!P!;`!P!Q!8S!Q!_!;`!_!`!8S!`!a!8f!a#s!;`#s$f!8S$f;'S!;`;'S;=`!<m<%l?Ah!;`?Ah?BY!8S?BY?Mn!;`?MnO!8ST!<pP;=`<%l!;`!V!<vP;=`<%l!5]!V!=SdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#c1n#c#d!>b#d#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!>kdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#V1n#V#W!?y#W#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!@SdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#h1n#h#i!Ab#i#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!AkdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#m1n#m#n!By#n#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!CSdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#d1n#d#e!Db#e#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!DkdhS!a`!cpOq*Vqr1nrs(Vsv1nvw0pwx)ex!P1n!P!Q*V!Q!_1n!_!a*V!a#X1n#X#Y!5]#Y#s1n#s$f*V$f;'S1n;'S;=`3P<%l?Ah1n?Ah?BY*V?BY?Mn1n?MnO*V!V!FSchS!a`!cpOq!G_qr!Eyrs!HUsv!Eyvw!Ncwx!Jvx!P!Ey!P!Q!G_!Q!_!Ey!_!a!G_!a!b##T!b#s!Ey#s$f!G_$f;'S!Ey;'S;=`#$i<%l?Ah!Ey?Ah?BY!G_?BY?Mn!Ey?MnO!G_!R!GfY!a`!cpOr!G_rs!HUsv!G_vw!Hpwx!Jvx!a!G_!a!b!Lv!b;'S!G_;'S;=`!N]<%lO!G_q!HZV!cpOv!HUvx!Hpx!a!HU!a!b!Iq!b;'S!HU;'S;=`!Jp<%lO!HUP!HsTO!a!Hp!a!b!IS!b;'S!Hp;'S;=`!Ik<%lO!HpP!IVTO!`!Hp!`!a!If!a;'S!Hp;'S;=`!Ik<%lO!HpP!IkOxPP!InP;=`<%l!Hpq!IvV!cpOv!HUvx!Hpx!`!HU!`!a!J]!a;'S!HU;'S;=`!Jp<%lO!HUq!JdS!cpxPOv(Vx;'S(V;'S;=`(h<%lO(Vq!JsP;=`<%l!HUa!J{X!a`Or!Jvrs!Hpsv!Jvvw!Hpw!a!Jv!a!b!Kh!b;'S!Jv;'S;=`!Lp<%lO!Jva!KmX!a`Or!Jvrs!Hpsv!Jvvw!Hpw!`!Jv!`!a!LY!a;'S!Jv;'S;=`!Lp<%lO!Jva!LaT!a`xPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!LsP;=`<%l!Jv!R!L}Y!a`!cpOr!G_rs!HUsv!G_vw!Hpwx!Jvx!`!G_!`!a!Mm!a;'S!G_;'S;=`!N]<%lO!G_!R!MvV!a`!cpxPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!N`P;=`<%l!G_T!NhbhSOq!Hpqr!Ncrs!Hpsw!Ncwx!Hpx!P!Nc!P!Q!Hp!Q!_!Nc!_!a!Hp!a!b# p!b#s!Nc#s$f!Hp$f;'S!Nc;'S;=`#!}<%l?Ah!Nc?Ah?BY!Hp?BY?Mn!Nc?MnO!HpT# ubhSOq!Hpqr!Ncrs!Hpsw!Ncwx!Hpx!P!Nc!P!Q!Hp!Q!_!Nc!_!`!Hp!`!a!If!a#s!Nc#s$f!Hp$f;'S!Nc;'S;=`#!}<%l?Ah!Nc?Ah?BY!Hp?BY?Mn!Nc?MnO!HpT##QP;=`<%l!Nc!V##^chS!a`!cpOq!G_qr!Eyrs!HUsv!Eyvw!Ncwx!Jvx!P!Ey!P!Q!G_!Q!_!Ey!_!`!G_!`!a!Mm!a#s!Ey#s$f!G_$f;'S!Ey;'S;=`#$i<%l?Ah!Ey?Ah?BY!G_?BY?Mn!Ey?MnO!G_!V#$lP;=`<%l!Ey!V#$zXiS`P!a`!cpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X\",\n  tokenizers: [scriptTokens, styleTokens, textareaTokens, endTag, tagStart, commentContent, 0, 1, 2, 3, 4, 5],\n  topRules: {\"Document\":[0,15]},\n  dialects: {noMatch: 0, selfClosing: 485},\n  tokenPrec: 487\n});\n\nfunction getAttrs(openTag, input) {\n  let attrs = Object.create(null);\n  for (let att of openTag.getChildren(Attribute)) {\n    let name = att.getChild(AttributeName), value = att.getChild(AttributeValue) || att.getChild(UnquotedAttributeValue);\n    if (name) attrs[input.read(name.from, name.to)] =\n      !value ? \"\" : value.type.id == AttributeValue ? input.read(value.from + 1, value.to - 1) : input.read(value.from, value.to);\n  }\n  return attrs\n}\n\nfunction findTagName(openTag, input) {\n  let tagNameNode = openTag.getChild(TagName);\n  return tagNameNode ? input.read(tagNameNode.from, tagNameNode.to) : \" \"\n}\n\nfunction maybeNest(node, input, tags) {\n  let attrs;\n  for (let tag of tags) {\n    if (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(node.node.parent.firstChild, input))))\n      return {parser: tag.parser}\n  }\n  return null\n}\n\n// tags?: {\n//   tag: string,\n//   attrs?: ({[attr: string]: string}) => boolean,\n//   parser: Parser\n// }[]\n// attributes?: {\n//   name: string,\n//   tagName?: string,\n//   parser: Parser\n// }[]\n \nfunction configureNesting(tags = [], attributes = []) {\n  let script = [], style = [], textarea = [], other = [];\n  for (let tag of tags) {\n    let array = tag.tag == \"script\" ? script : tag.tag == \"style\" ? style : tag.tag == \"textarea\" ? textarea : other;\n    array.push(tag);\n  }\n  let attrs = attributes.length ? Object.create(null) : null;\n  for (let attr of attributes) (attrs[attr.name] || (attrs[attr.name] = [])).push(attr);\n\n  return parseMixed((node, input) => {\n    let id = node.type.id;\n    if (id == ScriptText) return maybeNest(node, input, script)\n    if (id == StyleText) return maybeNest(node, input, style)\n    if (id == TextareaText) return maybeNest(node, input, textarea)\n\n    if (id == Element && other.length) {\n      let n = node.node, open = n.firstChild, tagName = open && findTagName(open, input), attrs;\n      if (tagName) for (let tag of other) {\n        if (tag.tag == tagName && (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(n, input))))) {\n          let close = n.lastChild;\n          return {parser: tag.parser, overlay: [{from: open.to, to: close.type.id == CloseTag ? close.from : n.to}]}\n        }\n      }\n    }\n\n    if (attrs && id == Attribute) {\n      let n = node.node, nameNode;\n      if (nameNode = n.firstChild) {\n        let matches = attrs[input.read(nameNode.from, nameNode.to)];\n        if (matches) for (let attr of matches) {\n          if (attr.tagName && attr.tagName != findTagName(n.parent, input)) continue\n          let value = n.lastChild;\n          if (value.type.id == AttributeValue) {\n            let from = value.from + 1;\n            let last = value.lastChild, to = value.to - (last && last.isError ? 0 : 1);\n            if (to > from) return {parser: attr.parser, overlay: [{from, to}]}\n          } else if (value.type.id == UnquotedAttributeValue) {\n            return {parser: attr.parser, overlay: [{from: value.from, to: value.to}]}\n          }\n        }\n      }\n    }\n    return null\n  })\n}\n\nexport { configureNesting, parser };\n", "import { ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst descendantOp = 95,\n  Unit = 1,\n  callee = 96,\n  identifier = 97,\n  VariableName = 2;\n\n/* Hand-written tokenizers for CSS tokens that can't be\n   expressed by Lezer's built-in tokenizer. */\n\nconst space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197,\n               8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];\nconst colon = 58, parenL = 40, underscore = 95, bracketL = 91, dash = 45, period = 46,\n      hash = 35, percent = 37;\n\nfunction isAlpha(ch) { return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 161 }\n\nfunction isDigit(ch) { return ch >= 48 && ch <= 57 }\n\nconst identifiers = new ExternalTokenizer((input, stack) => {\n  for (let inside = false, dashes = 0, i = 0;; i++) {\n    let {next} = input;\n    if (isAlpha(next) || next == dash || next == underscore || (inside && isDigit(next))) {\n      if (!inside && (next != dash || i > 0)) inside = true;\n      if (dashes === i && next == dash) dashes++;\n      input.advance();\n    } else {\n      if (inside)\n        input.acceptToken(next == parenL ? callee : dashes == 2 && stack.canShift(VariableName) ? VariableName : identifier);\n      break\n    }\n  }\n});\n\nconst descendant = new ExternalTokenizer(input => {\n  if (space.includes(input.peek(-1))) {\n    let {next} = input;\n    if (isAlpha(next) || next == underscore || next == hash || next == period ||\n        next == bracketL || next == colon || next == dash)\n      input.acceptToken(descendantOp);\n  }\n});\n\nconst unitToken = new ExternalTokenizer(input => {\n  if (!space.includes(input.peek(-1))) {\n    let {next} = input;\n    if (next == percent) { input.advance(); input.acceptToken(Unit); }\n    if (isAlpha(next)) {\n      do { input.advance(); } while (isAlpha(input.next))\n      input.acceptToken(Unit);\n    }\n  }\n});\n\nconst cssHighlighting = styleTags({\n  \"AtKeyword import charset namespace keyframes media supports\": tags.definitionKeyword,\n  \"from to selector\": tags.keyword,\n  NamespaceName: tags.namespace,\n  KeyframeName: tags.labelName,\n  KeyframeRangeName: tags.operatorKeyword,\n  TagName: tags.tagName,\n  ClassName: tags.className,\n  PseudoClassName: tags.constant(tags.className),\n  IdName: tags.labelName,\n  \"FeatureName PropertyName\": tags.propertyName,\n  AttributeName: tags.attributeName,\n  NumberLiteral: tags.number,\n  KeywordQuery: tags.keyword,\n  UnaryQueryOp: tags.operatorKeyword,\n  \"CallTag ValueName\": tags.atom,\n  VariableName: tags.variableName,\n  Callee: tags.operatorKeyword,\n  Unit: tags.unit,\n  \"UniversalSelector NestingSelector\": tags.definitionOperator,\n  MatchOp: tags.compareOperator,\n  \"ChildOp SiblingOp, LogicOp\": tags.logicOperator,\n  BinOp: tags.arithmeticOperator,\n  Important: tags.modifier,\n  Comment: tags.blockComment,\n  ColorLiteral: tags.color,\n  \"ParenthesizedContent StringLiteral\": tags.string,\n  \":\": tags.punctuation,\n  \"PseudoOp #\": tags.derefOperator,\n  \"; ,\": tags.separator,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_callee = {__proto__:null,lang:32, \"nth-child\":32, \"nth-last-child\":32, \"nth-of-type\":32, \"nth-last-of-type\":32, dir:32, \"host-context\":32, url:60, \"url-prefix\":60, domain:60, regexp:60, selector:134};\nconst spec_AtKeyword = {__proto__:null,\"@import\":114, \"@media\":138, \"@charset\":142, \"@namespace\":146, \"@keyframes\":152, \"@supports\":164};\nconst spec_identifier = {__proto__:null,not:128, only:128};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"8`QYQ[OOO#_Q[OOOOQP'#Cd'#CdOOQP'#Cc'#CcO#fQ[O'#CfO$YQXO'#CaO$aQ[O'#ChO$lQ[O'#DPO$qQ[O'#DTOOQP'#Ee'#EeO$vQdO'#DeO%bQ[O'#DrO$vQdO'#DtO%sQ[O'#DvO&OQ[O'#DyO&WQ[O'#EPO&fQ[O'#EROOQS'#Ed'#EdOOQS'#ET'#ETQYQ[OOO&mQXO'#CdO'bQWO'#DaO'gQWO'#EkO'rQ[O'#EkQOQWOOOOQP'#Cg'#CgOOQP,59Q,59QO#fQ[O,59QO'|Q[O'#EWO(hQWO,58{O(pQ[O,59SO$lQ[O,59kO$qQ[O,59oO'|Q[O,59sO'|Q[O,59uO'|Q[O,59vO({Q[O'#D`OOQS,58{,58{OOQP'#Ck'#CkOOQO'#C}'#C}OOQP,59S,59SO)SQWO,59SO)XQWO,59SOOQP'#DR'#DROOQP,59k,59kOOQO'#DV'#DVO)^Q`O,59oOOQS'#Cp'#CpO$vQdO'#CqO)fQvO'#CsO*sQtO,5:POOQO'#Cx'#CxO)XQWO'#CwO+XQWO'#CyOOQS'#Eh'#EhOOQO'#Dh'#DhO+^Q[O'#DoO+lQWO'#ElO&WQ[O'#DmO+zQWO'#DpOOQO'#Em'#EmO(kQWO,5:^O,PQpO,5:`OOQS'#Dx'#DxO,XQWO,5:bO,^Q[O,5:bOOQO'#D{'#D{O,fQWO,5:eO,kQWO,5:kO,sQWO,5:mOOQS-E8R-E8RO$vQdO,59{O,{Q[O'#EYO-YQWO,5;VO-YQWO,5;VOOQP1G.l1G.lO.PQXO,5:rOOQO-E8U-E8UOOQS1G.g1G.gOOQP1G.n1G.nO)SQWO1G.nO)XQWO1G.nOOQP1G/V1G/VO.^Q`O1G/ZO.wQXO1G/_O/_QXO1G/aO/uQXO1G/bO0]QWO,59zO0bQ[O'#DOO0iQdO'#CoOOQP1G/Z1G/ZO$vQdO1G/ZO0pQpO,59]OOQS,59_,59_O$vQdO,59aO0xQWO1G/kOOQS,59c,59cO0}Q!bO,59eO1VQWO'#DhO1bQWO,5:TO1gQWO,5:ZO&WQ[O,5:VO&WQ[O'#EZO1oQWO,5;WO1zQWO,5:XO'|Q[O,5:[OOQS1G/x1G/xOOQS1G/z1G/zOOQS1G/|1G/|O2]QWO1G/|O2bQdO'#D|OOQS1G0P1G0POOQS1G0V1G0VOOQS1G0X1G0XO2mQtO1G/gOOQO,5:t,5:tO3TQ[O,5:tOOQO-E8W-E8WO3bQWO1G0qOOQP7+$Y7+$YOOQP7+$u7+$uO$vQdO7+$uOOQS1G/f1G/fO3mQXO'#EjO3tQWO,59jO3yQtO'#EUO4nQdO'#EgO4xQWO,59ZO4}QpO7+$uOOQS1G.w1G.wOOQS1G.{1G.{OOQS7+%V7+%VO5VQWO1G/PO$vQdO1G/oOOQO1G/u1G/uOOQO1G/q1G/qO5[QWO,5:uOOQO-E8X-E8XO5jQXO1G/vOOQS7+%h7+%hO5qQYO'#CsOOQO'#EO'#EOO5|Q`O'#D}OOQO'#D}'#D}O6XQWO'#E[O6aQdO,5:hOOQS,5:h,5:hO6lQtO'#EXO$vQdO'#EXO7jQdO7+%ROOQO7+%R7+%ROOQO1G0`1G0`O7}QpO<<HaO8VQWO,5;UOOQP1G/U1G/UOOQS-E8S-E8SO$vQdO'#EVO8_QWO,5;ROOQT1G.u1G.uOOQP<<Ha<<HaOOQS7+$k7+$kO8gQdO7+%ZOOQO7+%b7+%bOOQO,5:i,5:iO2eQdO'#E]O6XQWO,5:vOOQS,5:v,5:vOOQS-E8Y-E8YOOQS1G0S1G0SO8nQtO,5:sOOQS-E8V-E8VOOQO<<Hm<<HmOOQPAN={AN={O9lQdO,5:qOOQO-E8T-E8TOOQO<<Hu<<HuOOQO,5:w,5:wOOQO-E8Z-E8ZOOQS1G0b1G0b\",\n  stateData: \":O~O#VOSROS~OUXOXXO]UO^UOtVOxWO!Y`O!ZYO!gZO!i[O!k]O!n^O!t_O#TQO#YSO~OQeOUXOXXO]UO^UOtVOxWO!Y`O!ZYO!gZO!i[O!k]O!n^O!t_O#TdO#YSO~O#Q#_P~P!ZO#TiO~O]nO^nOplOtoOxpO|qO!PsO#RrO#YkO~O!RtO~P#kO`zO#SwO#TvO~O#T{O~O#T}O~OQ!WOb!QOf!WOh!WOn!VO#S!TO#T!PO#]!RO~Ob!YO!b![O!e!]O#T!XO!R#`P~Oh!bOn!VO#T!aO~Oh!dO#T!dO~Ob!YO!b![O!e!]O#T!XO~O!W#`P~P%bO]WX]!UX^WXpWXtWXxWX|WX!PWX!RWX#RWX#YWX~O]!iO~O!W!jO#Q#_X!Q#_X~O#Q#_X!Q#_X~P!ZOUXOXXO]UO^UOtVOxWO#TQO#YSO~OplO!RtO~O`!sO#SwO#TvO~O!Q#_P~P!ZOb!zO~Ob!{O~Ov!|Oz!}O~OP#PObgXjgX!WgX!bgX!egX#TgXagXQgXfgXhgXngXpgX!VgX#QgX#SgX#]gXvgX!QgX~Ob!YOj#QO!b![O!e!]O#T!XO!W#`P~Ob#TO~Ob!YO!b![O!e!]O#T#UO~Op#YO!`#XO!R#`X!W#`X~Ob#]O~Oj#QO!W#_O~O!W#`O~Oh#aOn!VO~O!R#bO~O!RtO!`#XO~O!RtO!W#eO~O!W!|X#Q!|X!Q!|X~P!ZO!W!jO#Q#_a!Q#_a~O]nO^nOtoOxpO|qO!PsO#RrO#YkO~Op!za!R!zaa!za~P-eOv#lOz#mO~O]nO^nOtoOxpO#YkO~Op{i|{i!P{i!R{i#R{ia{i~P.fOp}i|}i!P}i!R}i#R}ia}i~P.fOp!Oi|!Oi!P!Oi!R!Oi#R!Oia!Oi~P.fO!Q#nO~Oa#^P~P'|Oa#ZP~P$vOa#uOj#QO~O!W#wO~Oh#xOo#xO~O]!^Xa![X!`![X~O]#yO~Oa#zO!`#XO~Op#YO!R#`a!W#`a~O!`#XOp!aa!R!aa!W!aaa!aa~O!W$PO~O!Q$WO#T$RO#]$QO~Oj#QOp$YO!V$[O!W!Ti#Q!Ti!Q!Ti~P$vO!W!|a#Q!|a!Q!|a~P!ZO!W!jO#Q#_i!Q#_i~Oa#^X~P#kOa$`O~Oj#QOQ!xXa!xXb!xXf!xXh!xXn!xXp!xX#S!xX#T!xX#]!xX~Op$bOa#ZX~P$vOa$dO~Oj#QOv$eO~Oa$fO~O!`#XOp!}a!R!}a!W!}a~Oa$hO~P-eOP#POpgX!RgX~O#]$QOp!qX!R!qX~Op$jO!RtO~O!Q$nO#T$RO#]$QO~Oj#QOQ!{Xb!{Xf!{Xh!{Xn!{Xp!{X!V!{X!W!{X#Q!{X#S!{X#T!{X#]!{X!Q!{X~Op$YO!V$qO!W!Tq#Q!Tq!Q!Tq~P$vOj#QOv$rO~OplOa#^a~Op$bOa#Za~Oa$uO~P$vOj#QOQ!{ab!{af!{ah!{an!{ap!{a!V!{a!W!{a#Q!{a#S!{a#T!{a#]!{a!Q!{a~Oa!yap!ya~P$vO#VoR#]j!Pj~\",\n  goto: \",z#bPPPPP#cP#l#{P#l$[#lPP$bPPP$h$q$qP%TP$qP$q%o&RPPP&k&q#lP&wP#lP&}P#lP#l#lPPP'T'j'wPP#cPP(O(O(Y(OP(OP(O(OP#cP#cP#cP(]#cP(`(c(f(m#cP#cP(r)R)a)g)q)w*R*X*_PPPPPP*e*nP+Z+^P,S,V,],f_aOPcgt!j#hkXOPcglqrst!j!z#]#hkROPcglqrst!j!z#]#hQjSR!mkQxUR!qnQ!qzQ#S!UR#k!sq!WY[!Q!i!{!}#Q#f#m#r#y$Y$Z$b$g$sp!WY[!Q!i!{!}#Q#f#m#r#y$Y$Z$b$g$sU$T#b$V$jR$i$Sq!UY[!Q!i!{!}#Q#f#m#r#y$Y$Z$b$g$sp!WY[!Q!i!{!}#Q#f#m#r#y$Y$Z$b$g$sQ!b]R#a!cQyUR!rnQ!qyR#k!rQ|VR!toQ!OWR!upQuTQ!pmQ#^!_Q#d!fQ#e!gQ$l$UR$x$kSfPtQ!lgQ#g!jR$]#hZePgt!j#ha!^Z_`!S!Y![#X#YR#V!YR!c]R!e^R#c!eS$U#b$VR$v$jV$S#b$V$jQcOSgPtU!hcg#hR#h!jQ#r!{U$a#r$g$sQ$g#yR$s$bQ$c#rR$t$cQmTS!om$_R$_#oQ$Z#fR$p$ZQ!kfS#i!k#jR#j!lQ#Z!ZR#}#ZQ$V#bR$m$VQ$k$UR$w$k_bOPcgt!j#h^TOPcgt!j#hQ!nlQ!vqQ!wrQ!xsQ#o!zR$O#]R#s!{Q!SYQ!`[Q#O!QQ#f!i[#q!{#r#y$b$g$sQ#t!}Q#v#QS$X#f$ZQ$^#mR$o$YR#p!zQhPR!ytQ!_ZQ!g`R#R!SU!ZZ`!SQ!f_Q#W!YQ#[![Q#{#XR#|#Y\",\n  nodeNames: \"\u26A0 Unit VariableName Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee CallLiteral CallTag ParenthesizedContent , PseudoClassName ArgList IdSelector # IdName ] AttributeSelector [ AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp } { Block Declaration PropertyName Important ; ImportStatement AtKeyword import KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports AtRule Styles\",\n  maxTerm: 109,\n  nodeProps: [\n    [\"openedBy\", 17,\"(\",48,\"{\"],\n    [\"closedBy\", 18,\")\",49,\"}\"]\n  ],\n  propSources: [cssHighlighting],\n  skippedNodes: [0,3],\n  repeatNodeCount: 9,\n  tokenData: \"Lq~R!^OX$}X^%u^p$}pq%uqr)Xrs.Rst/utu6duv$}vw7^wx7oxy9^yz9oz{9t{|:_|}?Q}!O?c!O!P@Q!P!Q@i!Q![Cu![!]Dp!]!^El!^!_$}!_!`E}!`!aF`!a!b$}!b!cG[!c!}$}!}#OHt#O#P$}#P#QIV#Q#R6d#R#T$}#T#UIh#U#c$}#c#dJy#d#o$}#o#pK`#p#q6d#q#rKq#r#sLS#s#y$}#y#z%u#z$f$}$f$g%u$g#BY$}#BY#BZ%u#BZ$IS$}$IS$I_%u$I_$I|$}$I|$JO%u$JO$JT$}$JT$JU%u$JU$KV$}$KV$KW%u$KW&FU$}&FU&FV%u&FV;'S$};'S;=`Lk<%lO$}W%QSOy%^z;'S%^;'S;=`%o<%lO%^W%cSoWOy%^z;'S%^;'S;=`%o<%lO%^W%rP;=`<%l%^~%zh#V~OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^~'mh#V~oWOX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^^)[UOy%^z#]%^#]#^)n#^;'S%^;'S;=`%o<%lO%^^)sUoWOy%^z#a%^#a#b*V#b;'S%^;'S;=`%o<%lO%^^*[UoWOy%^z#d%^#d#e*n#e;'S%^;'S;=`%o<%lO%^^*sUoWOy%^z#c%^#c#d+V#d;'S%^;'S;=`%o<%lO%^^+[UoWOy%^z#f%^#f#g+n#g;'S%^;'S;=`%o<%lO%^^+sUoWOy%^z#h%^#h#i,V#i;'S%^;'S;=`%o<%lO%^^,[UoWOy%^z#T%^#T#U,n#U;'S%^;'S;=`%o<%lO%^^,sUoWOy%^z#b%^#b#c-V#c;'S%^;'S;=`%o<%lO%^^-[UoWOy%^z#h%^#h#i-n#i;'S%^;'S;=`%o<%lO%^^-uS!VUoWOy%^z;'S%^;'S;=`%o<%lO%^~.UWOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o<%lO.R~.sOh~~.vRO;'S.R;'S;=`/P;=`O.R~/SXOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o;=`<%l.R<%lO.R~/rP;=`<%l.R_/zYtPOy%^z!Q%^!Q![0j![!c%^!c!i0j!i#T%^#T#Z0j#Z;'S%^;'S;=`%o<%lO%^^0oYoWOy%^z!Q%^!Q![1_![!c%^!c!i1_!i#T%^#T#Z1_#Z;'S%^;'S;=`%o<%lO%^^1dYoWOy%^z!Q%^!Q![2S![!c%^!c!i2S!i#T%^#T#Z2S#Z;'S%^;'S;=`%o<%lO%^^2ZYfUoWOy%^z!Q%^!Q![2y![!c%^!c!i2y!i#T%^#T#Z2y#Z;'S%^;'S;=`%o<%lO%^^3QYfUoWOy%^z!Q%^!Q![3p![!c%^!c!i3p!i#T%^#T#Z3p#Z;'S%^;'S;=`%o<%lO%^^3uYoWOy%^z!Q%^!Q![4e![!c%^!c!i4e!i#T%^#T#Z4e#Z;'S%^;'S;=`%o<%lO%^^4lYfUoWOy%^z!Q%^!Q![5[![!c%^!c!i5[!i#T%^#T#Z5[#Z;'S%^;'S;=`%o<%lO%^^5aYoWOy%^z!Q%^!Q![6P![!c%^!c!i6P!i#T%^#T#Z6P#Z;'S%^;'S;=`%o<%lO%^^6WSfUoWOy%^z;'S%^;'S;=`%o<%lO%^Y6gUOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^Y7QSzQoWOy%^z;'S%^;'S;=`%o<%lO%^X7cSXPOy%^z;'S%^;'S;=`%o<%lO%^~7rWOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W<%lO7o~8_RO;'S7o;'S;=`8h;=`O7o~8kXOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W;=`<%l7o<%lO7o~9ZP;=`<%l7o_9cSbVOy%^z;'S%^;'S;=`%o<%lO%^~9tOa~_9{UUPjSOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^_:fWjS!PPOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^^;TUoWOy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^^;nYoW#]UOy%^z!Q%^!Q![;g![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^^<cYoWOy%^z{%^{|=R|}%^}!O=R!O!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^^=WUoWOy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^^=qUoW#]UOy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^^>[[oW#]UOy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^_?VSpVOy%^z;'S%^;'S;=`%o<%lO%^^?hWjSOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^_@VU#YPOy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^~@nTjSOy%^z{@}{;'S%^;'S;=`%o<%lO%^~ASUoWOy@}yzAfz{Bm{;'S@};'S;=`Co<%lO@}~AiTOzAfz{Ax{;'SAf;'S;=`Bg<%lOAf~A{VOzAfz{Ax{!PAf!P!QBb!Q;'SAf;'S;=`Bg<%lOAf~BgOR~~BjP;=`<%lAf~BrWoWOy@}yzAfz{Bm{!P@}!P!QC[!Q;'S@};'S;=`Co<%lO@}~CcSoWR~Oy%^z;'S%^;'S;=`%o<%lO%^~CrP;=`<%l@}^Cz[#]UOy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^XDuU]POy%^z![%^![!]EX!];'S%^;'S;=`%o<%lO%^XE`S^PoWOy%^z;'S%^;'S;=`%o<%lO%^_EqS!WVOy%^z;'S%^;'S;=`%o<%lO%^YFSSzQOy%^z;'S%^;'S;=`%o<%lO%^XFeU|POy%^z!`%^!`!aFw!a;'S%^;'S;=`%o<%lO%^XGOS|PoWOy%^z;'S%^;'S;=`%o<%lO%^XG_WOy%^z!c%^!c!}Gw!}#T%^#T#oGw#o;'S%^;'S;=`%o<%lO%^XHO[!YPoWOy%^z}%^}!OGw!O!Q%^!Q![Gw![!c%^!c!}Gw!}#T%^#T#oGw#o;'S%^;'S;=`%o<%lO%^XHySxPOy%^z;'S%^;'S;=`%o<%lO%^^I[SvUOy%^z;'S%^;'S;=`%o<%lO%^XIkUOy%^z#b%^#b#cI}#c;'S%^;'S;=`%o<%lO%^XJSUoWOy%^z#W%^#W#XJf#X;'S%^;'S;=`%o<%lO%^XJmS!`PoWOy%^z;'S%^;'S;=`%o<%lO%^XJ|UOy%^z#f%^#f#gJf#g;'S%^;'S;=`%o<%lO%^ZKeS!RROy%^z;'S%^;'S;=`%o<%lO%^_KvS!QVOy%^z;'S%^;'S;=`%o<%lO%^ZLXU!PPOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^WLnP;=`<%l$}\",\n  tokenizers: [descendant, unitToken, identifiers, 0, 1, 2, 3],\n  topRules: {\"StyleSheet\":[0,4],\"Styles\":[1,84]},\n  specialized: [{term: 96, get: value => spec_callee[value] || -1},{term: 56, get: value => spec_AtKeyword[value] || -1},{term: 97, get: value => spec_identifier[value] || -1}],\n  tokenPrec: 1142\n});\n\nexport { parser };\n", "import { parser } from '@lezer/css';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\nlet _properties = null;\nfunction properties() {\n    if (!_properties && typeof document == \"object\" && document.body) {\n        let { style } = document.body, names = [], seen = new Set;\n        for (let prop in style)\n            if (prop != \"cssText\" && prop != \"cssFloat\") {\n                if (typeof style[prop] == \"string\") {\n                    if (/[A-Z]/.test(prop))\n                        prop = prop.replace(/[A-Z]/g, ch => \"-\" + ch.toLowerCase());\n                    if (!seen.has(prop)) {\n                        names.push(prop);\n                        seen.add(prop);\n                    }\n                }\n            }\n        _properties = names.sort().map(name => ({ type: \"property\", label: name }));\n    }\n    return _properties || [];\n}\nconst pseudoClasses = /*@__PURE__*/[\n    \"active\", \"after\", \"any-link\", \"autofill\", \"backdrop\", \"before\",\n    \"checked\", \"cue\", \"default\", \"defined\", \"disabled\", \"empty\",\n    \"enabled\", \"file-selector-button\", \"first\", \"first-child\",\n    \"first-letter\", \"first-line\", \"first-of-type\", \"focus\",\n    \"focus-visible\", \"focus-within\", \"fullscreen\", \"has\", \"host\",\n    \"host-context\", \"hover\", \"in-range\", \"indeterminate\", \"invalid\",\n    \"is\", \"lang\", \"last-child\", \"last-of-type\", \"left\", \"link\", \"marker\",\n    \"modal\", \"not\", \"nth-child\", \"nth-last-child\", \"nth-last-of-type\",\n    \"nth-of-type\", \"only-child\", \"only-of-type\", \"optional\", \"out-of-range\",\n    \"part\", \"placeholder\", \"placeholder-shown\", \"read-only\", \"read-write\",\n    \"required\", \"right\", \"root\", \"scope\", \"selection\", \"slotted\", \"target\",\n    \"target-text\", \"valid\", \"visited\", \"where\"\n].map(name => ({ type: \"class\", label: name }));\nconst values = /*@__PURE__*/[\n    \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"after-white-space\",\n    \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\", \"always\",\n    \"antialiased\", \"appworkspace\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\",\n    \"avoid-page\", \"avoid-region\", \"axis-pan\", \"background\", \"backwards\", \"baseline\", \"below\",\n    \"bidi-override\", \"blink\", \"block\", \"block-axis\", \"bold\", \"bolder\", \"border\", \"border-box\",\n    \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"bullets\", \"button\", \"button-bevel\",\n    \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"capitalize\",\n    \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\", \"cell\", \"center\", \"checkbox\", \"circle\",\n    \"cjk-decimal\", \"clear\", \"clip\", \"close-quote\", \"col-resize\", \"collapse\", \"color\", \"color-burn\",\n    \"color-dodge\", \"column\", \"column-reverse\", \"compact\", \"condensed\", \"contain\", \"content\",\n    \"contents\", \"content-box\", \"context-menu\", \"continuous\", \"copy\", \"counter\", \"counters\", \"cover\",\n    \"crop\", \"cross\", \"crosshair\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n    \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\", \"destination-in\",\n    \"destination-out\", \"destination-over\", \"difference\", \"disc\", \"discard\", \"disclosure-closed\",\n    \"disclosure-open\", \"document\", \"dot-dash\", \"dot-dot-dash\", \"dotted\", \"double\", \"down\", \"e-resize\",\n    \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\", \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\",\n    \"ethiopic-abegede-gez\", \"ethiopic-halehame-aa-er\", \"ethiopic-halehame-gez\", \"ew-resize\", \"exclusion\",\n    \"expanded\", \"extends\", \"extra-condensed\", \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fill-box\",\n    \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\", \"forwards\", \"from\",\n    \"geometricPrecision\", \"graytext\", \"grid\", \"groove\", \"hand\", \"hard-light\", \"help\", \"hidden\", \"hide\",\n    \"higher\", \"highlight\", \"highlighttext\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"icon\", \"ignore\",\n    \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\", \"infobackground\", \"infotext\",\n    \"inherit\", \"initial\", \"inline\", \"inline-axis\", \"inline-block\", \"inline-flex\", \"inline-grid\",\n    \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\", \"italic\", \"justify\", \"keep-all\",\n    \"landscape\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\", \"line-through\", \"linear\",\n    \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\", \"local\", \"logical\", \"loud\", \"lower\",\n    \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\", \"lowercase\", \"ltr\", \"luminosity\", \"manipulation\",\n    \"match\", \"matrix\", \"matrix3d\", \"medium\", \"menu\", \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n    \"mix\", \"monospace\", \"move\", \"multiple\", \"multiple_mask_images\", \"multiply\", \"n-resize\", \"narrower\",\n    \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\", \"no-open-quote\", \"no-repeat\", \"none\",\n    \"normal\", \"not-allowed\", \"nowrap\", \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\",\n    \"oblique\", \"opacity\", \"open-quote\", \"optimizeLegibility\", \"optimizeSpeed\", \"outset\", \"outside\",\n    \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\", \"painted\", \"page\", \"paused\",\n    \"perspective\", \"pinch-zoom\", \"plus-darker\", \"plus-lighter\", \"pointer\", \"polygon\", \"portrait\",\n    \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\", \"progress\", \"push-button\", \"radial-gradient\", \"radio\",\n    \"read-only\", \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\", \"relative\", \"repeat\",\n    \"repeating-linear-gradient\", \"repeating-radial-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n    \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\", \"rotateZ\", \"round\",\n    \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\", \"s-resize\", \"sans-serif\", \"saturation\",\n    \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\", \"scroll\", \"scrollbar\", \"scroll-position\",\n    \"se-resize\", \"self-start\", \"self-end\", \"semi-condensed\", \"semi-expanded\", \"separate\", \"serif\", \"show\",\n    \"single\", \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n    \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\", \"small\", \"small-caps\",\n    \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"source-atop\", \"source-in\", \"source-out\",\n    \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\", \"start\",\n    \"static\", \"status-bar\", \"stretch\", \"stroke\", \"stroke-box\", \"sub\", \"subpixel-antialiased\", \"svg_masks\",\n    \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\", \"table-caption\", \"table-cell\",\n    \"table-column\", \"table-column-group\", \"table-footer-group\", \"table-header-group\", \"table-row\",\n    \"table-row-group\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thick\", \"thin\",\n    \"threeddarkshadow\", \"threedface\", \"threedhighlight\", \"threedlightshadow\", \"threedshadow\", \"to\", \"top\",\n    \"transform\", \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\", \"transparent\",\n    \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unidirectional-pan\", \"unset\", \"up\", \"upper-latin\",\n    \"uppercase\", \"url\", \"var\", \"vertical\", \"vertical-text\", \"view-box\", \"visible\", \"visibleFill\",\n    \"visiblePainted\", \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\", \"window\", \"windowframe\",\n    \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\", \"xx-large\", \"xx-small\"\n].map(name => ({ type: \"keyword\", label: name })).concat(/*@__PURE__*/[\n    \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n    \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n    \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n    \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n    \"darkgray\", \"darkgreen\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n    \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n    \"darkslateblue\", \"darkslategray\", \"darkturquoise\", \"darkviolet\",\n    \"deeppink\", \"deepskyblue\", \"dimgray\", \"dodgerblue\", \"firebrick\",\n    \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n    \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n    \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n    \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n    \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightpink\",\n    \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\",\n    \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n    \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n    \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n    \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n    \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n    \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n    \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n    \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n    \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n    \"slateblue\", \"slategray\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n    \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n    \"whitesmoke\", \"yellow\", \"yellowgreen\"\n].map(name => ({ type: \"constant\", label: name })));\nconst tags = /*@__PURE__*/[\n    \"a\", \"abbr\", \"address\", \"article\", \"aside\", \"b\", \"bdi\", \"bdo\", \"blockquote\", \"body\",\n    \"br\", \"button\", \"canvas\", \"caption\", \"cite\", \"code\", \"col\", \"colgroup\", \"dd\", \"del\",\n    \"details\", \"dfn\", \"dialog\", \"div\", \"dl\", \"dt\", \"em\", \"figcaption\", \"figure\", \"footer\",\n    \"form\", \"header\", \"hgroup\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hr\", \"html\", \"i\", \"iframe\",\n    \"img\", \"input\", \"ins\", \"kbd\", \"label\", \"legend\", \"li\", \"main\", \"meter\", \"nav\", \"ol\", \"output\",\n    \"p\", \"pre\", \"ruby\", \"section\", \"select\", \"small\", \"source\", \"span\", \"strong\", \"sub\", \"summary\",\n    \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"tr\", \"u\", \"ul\"\n].map(name => ({ type: \"type\", label: name }));\nconst identifier = /^(\\w[\\w-]*|-\\w[\\w-]*|)$/, variable = /^-(-[\\w-]*)?$/;\nfunction isVarArg(node, doc) {\n    var _a;\n    if (node.name == \"(\" || node.type.isError)\n        node = node.parent || node;\n    if (node.name != \"ArgList\")\n        return false;\n    let callee = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.firstChild;\n    if ((callee === null || callee === void 0 ? void 0 : callee.name) != \"Callee\")\n        return false;\n    return doc.sliceString(callee.from, callee.to) == \"var\";\n}\nconst VariablesByNode = /*@__PURE__*/new NodeWeakMap();\nconst declSelector = [\"Declaration\"];\nfunction astTop(node) {\n    for (let cur = node;;) {\n        if (cur.type.isTop)\n            return cur;\n        if (!(cur = cur.parent))\n            return node;\n    }\n}\nfunction variableNames(doc, node, isVariable) {\n    if (node.to - node.from > 4096) {\n        let known = VariablesByNode.get(node);\n        if (known)\n            return known;\n        let result = [], seen = new Set, cursor = node.cursor(IterMode.IncludeAnonymous);\n        if (cursor.firstChild())\n            do {\n                for (let option of variableNames(doc, cursor.node, isVariable))\n                    if (!seen.has(option.label)) {\n                        seen.add(option.label);\n                        result.push(option);\n                    }\n            } while (cursor.nextSibling());\n        VariablesByNode.set(node, result);\n        return result;\n    }\n    else {\n        let result = [], seen = new Set;\n        node.cursor().iterate(node => {\n            var _a;\n            if (isVariable(node) && node.matchContext(declSelector) && ((_a = node.node.nextSibling) === null || _a === void 0 ? void 0 : _a.name) == \":\") {\n                let name = doc.sliceString(node.from, node.to);\n                if (!seen.has(name)) {\n                    seen.add(name);\n                    result.push({ label: name, type: \"variable\" });\n                }\n            }\n        });\n        return result;\n    }\n}\n/**\nCreate a completion source for a CSS dialect, providing a\npredicate for determining what kind of syntax node can act as a\ncompletable variable. This is used by language modes like Sass and\nLess to reuse this package's completion logic.\n*/\nconst defineCSSCompletionSource = (isVariable) => context => {\n    let { state, pos } = context, node = syntaxTree(state).resolveInner(pos, -1);\n    let isDash = node.type.isError && node.from == node.to - 1 && state.doc.sliceString(node.from, node.to) == \"-\";\n    if (node.name == \"PropertyName\" ||\n        (isDash || node.name == \"TagName\") && /^(Block|Styles)$/.test(node.resolve(node.to).name))\n        return { from: node.from, options: properties(), validFor: identifier };\n    if (node.name == \"ValueName\")\n        return { from: node.from, options: values, validFor: identifier };\n    if (node.name == \"PseudoClassName\")\n        return { from: node.from, options: pseudoClasses, validFor: identifier };\n    if (isVariable(node) || (context.explicit || isDash) && isVarArg(node, state.doc))\n        return { from: isVariable(node) || isDash ? node.from : pos,\n            options: variableNames(state.doc, astTop(node), isVariable),\n            validFor: variable };\n    if (node.name == \"TagName\") {\n        for (let { parent } = node; parent; parent = parent.parent)\n            if (parent.name == \"Block\")\n                return { from: node.from, options: properties(), validFor: identifier };\n        return { from: node.from, options: tags, validFor: identifier };\n    }\n    if (!context.explicit)\n        return null;\n    let above = node.resolve(pos), before = above.childBefore(pos);\n    if (before && before.name == \":\" && above.name == \"PseudoClassSelector\")\n        return { from: pos, options: pseudoClasses, validFor: identifier };\n    if (before && before.name == \":\" && above.name == \"Declaration\" || above.name == \"ArgList\")\n        return { from: pos, options: values, validFor: identifier };\n    if (above.name == \"Block\" || above.name == \"Styles\")\n        return { from: pos, options: properties(), validFor: identifier };\n    return null;\n};\n/**\nCSS property, variable, and value keyword completion source.\n*/\nconst cssCompletionSource = /*@__PURE__*/defineCSSCompletionSource(n => n.name == \"VariableName\");\n\n/**\nA language provider based on the [Lezer CSS\nparser](https://github.com/lezer-parser/css), extended with\nhighlighting and indentation information.\n*/\nconst cssLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"css\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                Declaration: /*@__PURE__*/continuedIndent()\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                Block: foldInside\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { block: { open: \"/*\", close: \"*/\" } },\n        indentOnInput: /^\\s*\\}$/,\n        wordChars: \"-\"\n    }\n});\n/**\nLanguage support for CSS.\n*/\nfunction css() {\n    return new LanguageSupport(cssLanguage, cssLanguage.data.of({ autocomplete: cssCompletionSource }));\n}\n\nexport { css, cssCompletionSource, cssLanguage, defineCSSCompletionSource };\n", "import { ContextTracker, ExternalTokenizer, LRParser, LocalTokenGroup } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst noSemi = 302,\n  incdec = 1,\n  incdecPrefix = 2,\n  insertSemi = 303,\n  spaces = 305,\n  newline = 306,\n  LineComment = 3,\n  BlockComment = 4;\n\n/* Hand-written tokenizers for JavaScript tokens that can't be\n   expressed by lezer's built-in tokenizer. */\n\nconst space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200,\n               8201, 8202, 8232, 8233, 8239, 8287, 12288];\n\nconst braceR = 125, semicolon = 59, slash = 47, star = 42,\n      plus = 43, minus = 45;\n\nconst trackNewline = new ContextTracker({\n  start: false,\n  shift(context, term) {\n    return term == LineComment || term == BlockComment || term == spaces ? context : term == newline\n  },\n  strict: false\n});\n\nconst insertSemicolon = new ExternalTokenizer((input, stack) => {\n  let {next} = input;\n  if ((next == braceR || next == -1 || stack.context) && stack.canShift(insertSemi))\n    input.acceptToken(insertSemi);\n}, {contextual: true, fallback: true});\n\nconst noSemicolon = new ExternalTokenizer((input, stack) => {\n  let {next} = input, after;\n  if (space.indexOf(next) > -1) return\n  if (next == slash && ((after = input.peek(1)) == slash || after == star)) return\n  if (next != braceR && next != semicolon && next != -1 && !stack.context && stack.canShift(noSemi))\n    input.acceptToken(noSemi);\n}, {contextual: true});\n\nconst incdecToken = new ExternalTokenizer((input, stack) => {\n  let {next} = input;\n  if (next == plus || next == minus) {\n    input.advance();\n    if (next == input.next) {\n      input.advance();\n      let mayPostfix = !stack.context && stack.canShift(incdec);\n      input.acceptToken(mayPostfix ? incdec : incdecPrefix);\n    }\n  }\n}, {contextual: true});\n\nconst jsHighlight = styleTags({\n  \"get set async static\": tags.modifier,\n  \"for while do if else switch try catch finally return throw break continue default case\": tags.controlKeyword,\n  \"in of await yield void typeof delete instanceof\": tags.operatorKeyword,\n  \"let var const function class extends\": tags.definitionKeyword,\n  \"import export from\": tags.moduleKeyword,\n  \"with debugger as new\": tags.keyword,\n  TemplateString: tags.special(tags.string),\n  super: tags.atom,\n  BooleanLiteral: tags.bool,\n  this: tags.self,\n  null: tags.null,\n  Star: tags.modifier,\n  VariableName: tags.variableName,\n  \"CallExpression/VariableName TaggedTemplateExpression/VariableName\": tags.function(tags.variableName),\n  VariableDefinition: tags.definition(tags.variableName),\n  Label: tags.labelName,\n  PropertyName: tags.propertyName,\n  PrivatePropertyName: tags.special(tags.propertyName),\n  \"CallExpression/MemberExpression/PropertyName\": tags.function(tags.propertyName),\n  \"FunctionDeclaration/VariableDefinition\": tags.function(tags.definition(tags.variableName)),\n  \"ClassDeclaration/VariableDefinition\": tags.definition(tags.className),\n  PropertyDefinition: tags.definition(tags.propertyName),\n  PrivatePropertyDefinition: tags.definition(tags.special(tags.propertyName)),\n  UpdateOp: tags.updateOperator,\n  LineComment: tags.lineComment,\n  BlockComment: tags.blockComment,\n  Number: tags.number,\n  String: tags.string,\n  Escape: tags.escape,\n  ArithOp: tags.arithmeticOperator,\n  LogicOp: tags.logicOperator,\n  BitOp: tags.bitwiseOperator,\n  CompareOp: tags.compareOperator,\n  RegExp: tags.regexp,\n  Equals: tags.definitionOperator,\n  Arrow: tags.function(tags.punctuation),\n  \": Spread\": tags.punctuation,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace,\n  \"InterpolationStart InterpolationEnd\": tags.special(tags.brace),\n  \".\": tags.derefOperator,\n  \", ;\": tags.separator,\n  \"@\": tags.meta,\n\n  TypeName: tags.typeName,\n  TypeDefinition: tags.definition(tags.typeName),\n  \"type enum interface implements namespace module declare\": tags.definitionKeyword,\n  \"abstract global Privacy readonly override\": tags.modifier,\n  \"is keyof unique infer\": tags.operatorKeyword,\n\n  JSXAttributeValue: tags.attributeValue,\n  JSXText: tags.content,\n  \"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag\": tags.angleBracket,\n  \"JSXIdentifier JSXNameSpacedName\": tags.tagName,\n  \"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName\": tags.attributeName,\n  \"JSXBuiltin/JSXIdentifier\": tags.standard(tags.tagName)\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,export:14, as:19, from:27, default:30, async:35, function:36, extends:46, this:50, true:58, false:58, null:70, void:74, typeof:78, super:96, new:130, delete:146, yield:155, await:159, class:164, public:221, private:221, protected:221, readonly:223, instanceof:242, satisfies:245, in:246, const:248, import:280, keyof:335, unique:339, infer:345, is:381, abstract:401, implements:403, type:405, let:408, var:410, interface:417, enum:421, namespace:427, module:429, declare:433, global:437, for:456, of:465, while:468, with:472, do:476, if:480, else:482, switch:486, case:492, try:498, catch:502, finally:506, return:510, throw:514, break:518, continue:522, debugger:526};\nconst spec_word = {__proto__:null,async:117, get:119, set:121, declare:181, public:183, private:183, protected:183, static:185, abstract:187, override:189, readonly:195, accessor:197, new:385};\nconst spec_LessThan = {__proto__:null,\"<\":137};\nconst parser = LRParser.deserialize({\n  version: 14,\n  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\",\n  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|(_X![(_X!](_X!^(_X!x(_X!|(_X!}(_X#O(_X#P(_X#Q(_X#T(_X#U(_X'u(_X'v(_X'y(_X(U(_X(a(_X~O!]'^O!^'^O'u!iO~PCOO'p'jO'q'jO'r'lO~O[!yO'v'nO'w!yO'x'nO~O[!|O'x'nO'y'nO'z!|O~Oq#OO!O#PO(S#PO(T'rO~O!U'tO!S&|X!S'SX!V&|X!V'SX~P+sO!V'vO!S(XX~OP$YOX$aOk#}Oy#vOz#wO|#xO!V'vO!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!S(XX~PFrO!S'{O~O!S(eX!V(eX!a(eX!g(eX(b(eX~O#X(eX#d#]X!W(eX~PHxO#X'|O!S(gX!V(gX~O!V'}O!S(fX~O!S(QO~O#X$bO~PHxO!W(RO~P`Oy#vOz#wO|#xO!f#tO!h#uO(RVOP!jaX!jak!ja!V!ja!e!ja!l!ja#g!ja#h!ja#i!ja#j!ja#k!ja#l!ja#m!ja#n!ja#o!ja#q!ja#s!ja#u!ja#v!ja(b!ja(i!ja(j!ja~O^!ja'k!ja'i!ja!S!ja!g!jao!ja!X!ja%a!ja!a!ja~PJ`O!g(SO~O!a#rO#X(TO(b'bO!V(dX^(dX'k(dX~O!g(dX~PMOO|%vO!X%wO!x]O#b(YO#c(XO't%eO~O!V(ZO!g(cX~O!g(]O~O|%vO!X%wO#c(XO't%eO~OP(WXX(WXk(WXy(WXz(WX|(WX!V(WX!e(WX!f(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~O!a#rO!g(WX~PNlOy(^Oz(_O!f#tO!h#uO!x!wa|!wa~O!t!wa%`!wa!X!wa#b!wa#c!wa't!wa~P!!pO!t(cO~OPYOQYOa!gOb!fOikOkYOlkOmkOskOuYOwYO|WO!QkO!RkO!XXO!csO!hZO!kYO!lYO!mYO!otO!quO!t!eO$Q!hO$UfO't!bO'vTO'yUO(RVO(a[O(niO~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't(gO'vTO'yUO'}%OO(R$rO~O#d(iO~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(gO'vTO'yUO'}%OO(R$rO~Od([P~P!'^O!U(mO!g(]P~P%QO(U(oO(a[O~O|(qO!h#uO(U(oO(a[O~OP9lOQ9lOa;]Ob!fOikOk9lOlkOmkOskOu9lOw9lO|WO!QkO!RkO!X!cO!c9oO!hZO!k9lO!l9lO!m9lO!o9pO!q9qO!t!eO$Q!hO$UfO't)PO'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~\",\n  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\",\n  nodeNames: \"\u26A0 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\",\n  maxTerm: 364,\n  context: trackNewline,\n  nodeProps: [\n    [\"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\"],\n    [\"openedBy\", 31,\"InterpolationStart\",50,\"[\",54,\"{\",69,\"(\",143,\"JSXStartTag\",155,\"JSXStartTag JSXStartCloseTag\"],\n    [\"closedBy\", 33,\"InterpolationEnd\",44,\"]\",55,\"}\",70,\")\",144,\"JSXSelfCloseEndTag JSXEndTag\",160,\"JSXEndTag\"]\n  ],\n  propSources: [jsHighlight],\n  skippedNodes: [0,3,4,268],\n  repeatNodeCount: 33,\n  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\",\n  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)],\n  topRules: {\"Script\":[0,5],\"SingleExpression\":[1,266],\"SingleClassItem\":[2,267]},\n  dialects: {jsx: 12686, ts: 12688},\n  dynamicPrecedences: {\"76\":1,\"78\":1,\"163\":1,\"191\":1},\n  specialized: [{term: 312, get: value => spec_identifier[value] || -1},{term: 328, get: value => spec_word[value] || -1},{term: 67, get: value => spec_LessThan[value] || -1}],\n  tokenPrec: 12712\n});\n\nexport { parser };\n", "import { parser } from '@lezer/javascript';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, flatIndent, delimitedIndent, foldNodeProp, foldInside, defineLanguageFacet, sublanguageProp, LanguageSupport } from '@codemirror/language';\nimport { EditorSelection } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { snippetCompletion, ifNotIn, completeFromList } from '@codemirror/autocomplete';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\n/**\nA collection of JavaScript-related\n[snippets](https://codemirror.net/6/docs/ref/#autocomplete.snippet).\n*/\nconst snippets = [\n    /*@__PURE__*/snippetCompletion(\"function ${name}(${params}) {\\n\\t${}\\n}\", {\n        label: \"function\",\n        detail: \"definition\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\\n\\t${}\\n}\", {\n        label: \"for\",\n        detail: \"loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"for (let ${name} of ${collection}) {\\n\\t${}\\n}\", {\n        label: \"for\",\n        detail: \"of loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"do {\\n\\t${}\\n} while (${})\", {\n        label: \"do\",\n        detail: \"loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"while (${}) {\\n\\t${}\\n}\", {\n        label: \"while\",\n        detail: \"loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"try {\\n\\t${}\\n} catch (${error}) {\\n\\t${}\\n}\", {\n        label: \"try\",\n        detail: \"/ catch block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n}\", {\n        label: \"if\",\n        detail: \"block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n} else {\\n\\t${}\\n}\", {\n        label: \"if\",\n        detail: \"/ else block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"class ${name} {\\n\\tconstructor(${params}) {\\n\\t\\t${}\\n\\t}\\n}\", {\n        label: \"class\",\n        detail: \"definition\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"import {${names}} from \\\"${module}\\\"\\n${}\", {\n        label: \"import\",\n        detail: \"named\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"import ${name} from \\\"${module}\\\"\\n${}\", {\n        label: \"import\",\n        detail: \"default\",\n        type: \"keyword\"\n    })\n];\n\nconst cache = /*@__PURE__*/new NodeWeakMap();\nconst ScopeNodes = /*@__PURE__*/new Set([\n    \"Script\", \"Block\",\n    \"FunctionExpression\", \"FunctionDeclaration\", \"ArrowFunction\", \"MethodDeclaration\",\n    \"ForStatement\"\n]);\nfunction defID(type) {\n    return (node, def) => {\n        let id = node.node.getChild(\"VariableDefinition\");\n        if (id)\n            def(id, type);\n        return true;\n    };\n}\nconst functionContext = [\"FunctionDeclaration\"];\nconst gatherCompletions = {\n    FunctionDeclaration: /*@__PURE__*/defID(\"function\"),\n    ClassDeclaration: /*@__PURE__*/defID(\"class\"),\n    ClassExpression: () => true,\n    EnumDeclaration: /*@__PURE__*/defID(\"constant\"),\n    TypeAliasDeclaration: /*@__PURE__*/defID(\"type\"),\n    NamespaceDeclaration: /*@__PURE__*/defID(\"namespace\"),\n    VariableDefinition(node, def) { if (!node.matchContext(functionContext))\n        def(node, \"variable\"); },\n    TypeDefinition(node, def) { def(node, \"type\"); },\n    __proto__: null\n};\nfunction getScope(doc, node) {\n    let cached = cache.get(node);\n    if (cached)\n        return cached;\n    let completions = [], top = true;\n    function def(node, type) {\n        let name = doc.sliceString(node.from, node.to);\n        completions.push({ label: name, type });\n    }\n    node.cursor(IterMode.IncludeAnonymous).iterate(node => {\n        if (top) {\n            top = false;\n        }\n        else if (node.name) {\n            let gather = gatherCompletions[node.name];\n            if (gather && gather(node, def) || ScopeNodes.has(node.name))\n                return false;\n        }\n        else if (node.to - node.from > 8192) {\n            // Allow caching for bigger internal nodes\n            for (let c of getScope(doc, node.node))\n                completions.push(c);\n            return false;\n        }\n    });\n    cache.set(node, completions);\n    return completions;\n}\nconst Identifier = /^[\\w$\\xa1-\\uffff][\\w$\\d\\xa1-\\uffff]*$/;\nconst dontComplete = [\n    \"TemplateString\", \"String\", \"RegExp\",\n    \"LineComment\", \"BlockComment\",\n    \"VariableDefinition\", \"TypeDefinition\", \"Label\",\n    \"PropertyDefinition\", \"PropertyName\",\n    \"PrivatePropertyDefinition\", \"PrivatePropertyName\",\n    \".\", \"?.\"\n];\n/**\nCompletion source that looks up locally defined names in\nJavaScript code.\n*/\nfunction localCompletionSource(context) {\n    let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n    if (dontComplete.indexOf(inner.name) > -1)\n        return null;\n    let isWord = inner.name == \"VariableName\" ||\n        inner.to - inner.from < 20 && Identifier.test(context.state.sliceDoc(inner.from, inner.to));\n    if (!isWord && !context.explicit)\n        return null;\n    let options = [];\n    for (let pos = inner; pos; pos = pos.parent) {\n        if (ScopeNodes.has(pos.name))\n            options = options.concat(getScope(context.state.doc, pos));\n    }\n    return {\n        options,\n        from: isWord ? inner.from : context.pos,\n        validFor: Identifier\n    };\n}\nfunction pathFor(read, member, name) {\n    var _a;\n    let path = [];\n    for (;;) {\n        let obj = member.firstChild, prop;\n        if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"VariableName\") {\n            path.push(read(obj));\n            return { path: path.reverse(), name };\n        }\n        else if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"MemberExpression\" && ((_a = (prop = obj.lastChild)) === null || _a === void 0 ? void 0 : _a.name) == \"PropertyName\") {\n            path.push(read(prop));\n            member = obj;\n        }\n        else {\n            return null;\n        }\n    }\n}\n/**\nHelper function for defining JavaScript completion sources. It\nreturns the completable name and object path for a completion\ncontext, or null if no name/property completion should happen at\nthat position. For example, when completing after `a.b.c` it will\nreturn `{path: [\"a\", \"b\"], name: \"c\"}`. When completing after `x`\nit will return `{path: [], name: \"x\"}`. When not in a property or\nname, it will return null if `context.explicit` is false, and\n`{path: [], name: \"\"}` otherwise.\n*/\nfunction completionPath(context) {\n    let read = (node) => context.state.doc.sliceString(node.from, node.to);\n    let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n    if (inner.name == \"PropertyName\") {\n        return pathFor(read, inner.parent, read(inner));\n    }\n    else if ((inner.name == \".\" || inner.name == \"?.\") && inner.parent.name == \"MemberExpression\") {\n        return pathFor(read, inner.parent, \"\");\n    }\n    else if (dontComplete.indexOf(inner.name) > -1) {\n        return null;\n    }\n    else if (inner.name == \"VariableName\" || inner.to - inner.from < 20 && Identifier.test(read(inner))) {\n        return { path: [], name: read(inner) };\n    }\n    else if (inner.name == \"MemberExpression\") {\n        return pathFor(read, inner, \"\");\n    }\n    else {\n        return context.explicit ? { path: [], name: \"\" } : null;\n    }\n}\nfunction enumeratePropertyCompletions(obj, top) {\n    let options = [], seen = new Set;\n    for (let depth = 0;; depth++) {\n        for (let name of (Object.getOwnPropertyNames || Object.keys)(obj)) {\n            if (!/^[a-zA-Z_$][\\w$]*$/.test(name) || seen.has(name))\n                continue;\n            seen.add(name);\n            let value;\n            try {\n                value = obj[name];\n            }\n            catch (_) {\n                continue;\n            }\n            options.push({\n                label: name,\n                type: typeof value == \"function\" ? (/^[A-Z]/.test(name) ? \"class\" : top ? \"function\" : \"method\")\n                    : top ? \"variable\" : \"property\",\n                boost: -depth\n            });\n        }\n        let next = Object.getPrototypeOf(obj);\n        if (!next)\n            return options;\n        obj = next;\n    }\n}\n/**\nDefines a [completion source](https://codemirror.net/6/docs/ref/#autocomplete.CompletionSource) that\ncompletes from the given scope object (for example `globalThis`).\nWill enter properties of the object when completing properties on\na directly-named path.\n*/\nfunction scopeCompletionSource(scope) {\n    let cache = new Map;\n    return (context) => {\n        let path = completionPath(context);\n        if (!path)\n            return null;\n        let target = scope;\n        for (let step of path.path) {\n            target = target[step];\n            if (!target)\n                return null;\n        }\n        let options = cache.get(target);\n        if (!options)\n            cache.set(target, options = enumeratePropertyCompletions(target, !path.path.length));\n        return {\n            from: context.pos - path.name.length,\n            options,\n            validFor: Identifier\n        };\n    };\n}\n\n/**\nA language provider based on the [Lezer JavaScript\nparser](https://github.com/lezer-parser/javascript), extended with\nhighlighting and indentation information.\n*/\nconst javascriptLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"javascript\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                IfStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b)/ }),\n                TryStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|catch\\b|finally\\b)/ }),\n                LabeledStatement: flatIndent,\n                SwitchBody: context => {\n                    let after = context.textAfter, closed = /^\\s*\\}/.test(after), isCase = /^\\s*(case|default)\\b/.test(after);\n                    return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit;\n                },\n                Block: /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n                ArrowFunction: cx => cx.baseIndent + cx.unit,\n                \"TemplateString BlockComment\": () => null,\n                \"Statement Property\": /*@__PURE__*/continuedIndent({ except: /^{/ }),\n                JSXElement(context) {\n                    let closed = /^\\s*<\\//.test(context.textAfter);\n                    return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n                },\n                JSXEscape(context) {\n                    let closed = /\\s*\\}/.test(context.textAfter);\n                    return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n                },\n                \"JSXOpenTag JSXSelfClosingTag\"(context) {\n                    return context.column(context.node.from) + context.unit;\n                }\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                \"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType\": foldInside,\n                BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n            })\n        ]\n    }),\n    languageData: {\n        closeBrackets: { brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"] },\n        commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n        indentOnInput: /^\\s*(?:case |default:|\\{|\\}|<\\/)$/,\n        wordChars: \"$\"\n    }\n});\nconst jsxSublanguage = {\n    test: node => /^JSX/.test(node.name),\n    facet: /*@__PURE__*/defineLanguageFacet({ commentTokens: { block: { open: \"{/*\", close: \"*/}\" } } })\n};\n/**\nA language provider for TypeScript.\n*/\nconst typescriptLanguage = /*@__PURE__*/javascriptLanguage.configure({ dialect: \"ts\" }, \"typescript\");\n/**\nLanguage provider for JSX.\n*/\nconst jsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n    dialect: \"jsx\",\n    props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n});\n/**\nLanguage provider for JSX + TypeScript.\n*/\nconst tsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n    dialect: \"jsx ts\",\n    props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n}, \"typescript\");\nconst 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 => ({ label: kw, type: \"keyword\" }));\n/**\nJavaScript support. Includes [snippet](https://codemirror.net/6/docs/ref/#lang-javascript.snippets)\ncompletion.\n*/\nfunction javascript(config = {}) {\n    let lang = config.jsx ? (config.typescript ? tsxLanguage : jsxLanguage)\n        : config.typescript ? typescriptLanguage : javascriptLanguage;\n    return new LanguageSupport(lang, [\n        javascriptLanguage.data.of({\n            autocomplete: ifNotIn(dontComplete, completeFromList(snippets.concat(keywords)))\n        }),\n        javascriptLanguage.data.of({\n            autocomplete: localCompletionSource\n        }),\n        config.jsx ? autoCloseTags : [],\n    ]);\n}\nfunction findOpenTag(node) {\n    for (;;) {\n        if (node.name == \"JSXOpenTag\" || node.name == \"JSXSelfClosingTag\" || node.name == \"JSXFragmentTag\")\n            return node;\n        if (node.name == \"JSXEscape\" || !node.parent)\n            return null;\n        node = node.parent;\n    }\n}\nfunction elementName(doc, tree, max = doc.length) {\n    for (let ch = tree === null || tree === void 0 ? void 0 : tree.firstChild; ch; ch = ch.nextSibling) {\n        if (ch.name == \"JSXIdentifier\" || ch.name == \"JSXBuiltin\" || ch.name == \"JSXNamespacedName\" ||\n            ch.name == \"JSXMemberExpression\")\n            return doc.sliceString(ch.from, Math.min(ch.to, max));\n    }\n    return \"\";\n}\nfunction isEndTag(node) {\n    return node && (node.name == \"JSXEndTag\" || node.name == \"JSXSelfCloseEndTag\");\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\n/**\nExtension that will automatically insert JSX close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text) => {\n    if ((android ? view.composing : view.compositionStarted) || view.state.readOnly ||\n        from != to || (text != \">\" && text != \"/\") ||\n        !javascriptLanguage.isActiveAt(view.state, from, -1))\n        return false;\n    let { state } = view;\n    let changes = state.changeByRange(range => {\n        var _a;\n        let { head } = range, around = syntaxTree(state).resolveInner(head, -1), name;\n        if (around.name == \"JSXStartTag\")\n            around = around.parent;\n        if (around.name == \"JSXAttributeValue\" && around.to > head) ;\n        else if (text == \">\" && around.name == \"JSXFragmentTag\") {\n            return { range: EditorSelection.cursor(head + 1), changes: { from: head, insert: `></>` } };\n        }\n        else if (text == \"/\" && around.name == \"JSXFragmentTag\") {\n            let empty = around.parent, base = empty === null || empty === void 0 ? void 0 : empty.parent;\n            if (empty.from == head - 1 && ((_a = base.lastChild) === null || _a === void 0 ? void 0 : _a.name) != \"JSXEndTag\" &&\n                (name = elementName(state.doc, base === null || base === void 0 ? void 0 : base.firstChild, head))) {\n                let insert = `/${name}>`;\n                return { range: EditorSelection.cursor(head + insert.length), changes: { from: head, insert } };\n            }\n        }\n        else if (text == \">\") {\n            let openTag = findOpenTag(around);\n            if (openTag && !isEndTag(openTag.lastChild) &&\n                state.sliceDoc(head, head + 2) != \"</\" &&\n                (name = elementName(state.doc, openTag, head)))\n                return { range: EditorSelection.cursor(head + 1), changes: { from: head, insert: `></${name}>` } };\n        }\n        return { range };\n    });\n    if (changes.changes.empty)\n        return false;\n    view.dispatch(changes, { userEvent: \"input.type\", scrollIntoView: true });\n    return true;\n});\n\n/**\nConnects an [ESLint](https://eslint.org/) linter to CodeMirror's\n[lint](https://codemirror.net/6/docs/ref/#lint) integration. `eslint` should be an instance of the\n[`Linter`](https://eslint.org/docs/developer-guide/nodejs-api#linter)\nclass, and `config` an optional ESLint configuration. The return\nvalue of this function can be passed to [`linter`](https://codemirror.net/6/docs/ref/#lint.linter)\nto create a JavaScript linting extension.\n\nNote that ESLint targets node, and is tricky to run in the\nbrowser. The\n[eslint-linter-browserify](https://github.com/UziTech/eslint-linter-browserify)\npackage may help with that (see\n[example](https://github.com/UziTech/eslint-linter-browserify/blob/master/example/script.js)).\n*/\nfunction esLint(eslint, config) {\n    if (!config) {\n        config = {\n            parserOptions: { ecmaVersion: 2019, sourceType: \"module\" },\n            env: { browser: true, node: true, es6: true, es2015: true, es2017: true, es2020: true },\n            rules: {}\n        };\n        eslint.getRules().forEach((desc, name) => {\n            if (desc.meta.docs.recommended)\n                config.rules[name] = 2;\n        });\n    }\n    return (view) => {\n        let { state } = view, found = [];\n        for (let { from, to } of javascriptLanguage.findRegions(state)) {\n            let fromLine = state.doc.lineAt(from), offset = { line: fromLine.number - 1, col: from - fromLine.from, pos: from };\n            for (let d of eslint.verify(state.sliceDoc(from, to), config))\n                found.push(translateDiagnostic(d, state.doc, offset));\n        }\n        return found;\n    };\n}\nfunction mapPos(line, col, doc, offset) {\n    return doc.line(line + offset.line).from + col + (line == 1 ? offset.col - 1 : -1);\n}\nfunction translateDiagnostic(input, doc, offset) {\n    let start = mapPos(input.line, input.column, doc, offset);\n    let result = {\n        from: start,\n        to: input.endLine != null && input.endColumn != 1 ? mapPos(input.endLine, input.endColumn, doc, offset) : start,\n        message: input.message,\n        source: input.ruleId ? \"eslint:\" + input.ruleId : \"eslint\",\n        severity: input.severity == 1 ? \"warning\" : \"error\",\n    };\n    if (input.fix) {\n        let { range, text } = input.fix, from = range[0] + offset.pos - start, to = range[1] + offset.pos - start;\n        result.actions = [{\n                name: \"fix\",\n                apply(view, start) {\n                    view.dispatch({ changes: { from: start + from, to: start + to, insert: text }, scrollIntoView: true });\n                }\n            }];\n    }\n    return result;\n}\n\nexport { autoCloseTags, completionPath, esLint, javascript, javascriptLanguage, jsxLanguage, localCompletionSource, scopeCompletionSource, snippets, tsxLanguage, typescriptLanguage };\n", "import { parser, configureNesting } from '@lezer/html';\nimport { cssLanguage, css } from '@codemirror/lang-css';\nimport { typescriptLanguage, jsxLanguage, tsxLanguage, javascriptLanguage, javascript } from '@codemirror/lang-javascript';\nimport { EditorView } from '@codemirror/view';\nimport { EditorSelection } from '@codemirror/state';\nimport { syntaxTree, LRLanguage, indentNodeProp, foldNodeProp, bracketMatchingHandle, LanguageSupport } from '@codemirror/language';\n\nconst Targets = [\"_blank\", \"_self\", \"_top\", \"_parent\"];\nconst Charsets = [\"ascii\", \"utf-8\", \"utf-16\", \"latin1\", \"latin1\"];\nconst Methods = [\"get\", \"post\", \"put\", \"delete\"];\nconst Encs = [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"];\nconst Bool = [\"true\", \"false\"];\nconst S = {}; // Empty tag spec\nconst Tags = {\n    a: {\n        attrs: {\n            href: null, ping: null, type: null,\n            media: null,\n            target: Targets,\n            hreflang: null\n        }\n    },\n    abbr: S,\n    address: S,\n    area: {\n        attrs: {\n            alt: null, coords: null, href: null, target: null, ping: null,\n            media: null, hreflang: null, type: null,\n            shape: [\"default\", \"rect\", \"circle\", \"poly\"]\n        }\n    },\n    article: S,\n    aside: S,\n    audio: {\n        attrs: {\n            src: null, mediagroup: null,\n            crossorigin: [\"anonymous\", \"use-credentials\"],\n            preload: [\"none\", \"metadata\", \"auto\"],\n            autoplay: [\"autoplay\"],\n            loop: [\"loop\"],\n            controls: [\"controls\"]\n        }\n    },\n    b: S,\n    base: { attrs: { href: null, target: Targets } },\n    bdi: S,\n    bdo: S,\n    blockquote: { attrs: { cite: null } },\n    body: S,\n    br: S,\n    button: {\n        attrs: {\n            form: null, formaction: null, name: null, value: null,\n            autofocus: [\"autofocus\"],\n            disabled: [\"autofocus\"],\n            formenctype: Encs,\n            formmethod: Methods,\n            formnovalidate: [\"novalidate\"],\n            formtarget: Targets,\n            type: [\"submit\", \"reset\", \"button\"]\n        }\n    },\n    canvas: { attrs: { width: null, height: null } },\n    caption: S,\n    center: S,\n    cite: S,\n    code: S,\n    col: { attrs: { span: null } },\n    colgroup: { attrs: { span: null } },\n    command: {\n        attrs: {\n            type: [\"command\", \"checkbox\", \"radio\"],\n            label: null, icon: null, radiogroup: null, command: null, title: null,\n            disabled: [\"disabled\"],\n            checked: [\"checked\"]\n        }\n    },\n    data: { attrs: { value: null } },\n    datagrid: { attrs: { disabled: [\"disabled\"], multiple: [\"multiple\"] } },\n    datalist: { attrs: { data: null } },\n    dd: S,\n    del: { attrs: { cite: null, datetime: null } },\n    details: { attrs: { open: [\"open\"] } },\n    dfn: S,\n    div: S,\n    dl: S,\n    dt: S,\n    em: S,\n    embed: { attrs: { src: null, type: null, width: null, height: null } },\n    eventsource: { attrs: { src: null } },\n    fieldset: { attrs: { disabled: [\"disabled\"], form: null, name: null } },\n    figcaption: S,\n    figure: S,\n    footer: S,\n    form: {\n        attrs: {\n            action: null, name: null,\n            \"accept-charset\": Charsets,\n            autocomplete: [\"on\", \"off\"],\n            enctype: Encs,\n            method: Methods,\n            novalidate: [\"novalidate\"],\n            target: Targets\n        }\n    },\n    h1: S, h2: S, h3: S, h4: S, h5: S, h6: S,\n    head: {\n        children: [\"title\", \"base\", \"link\", \"style\", \"meta\", \"script\", \"noscript\", \"command\"]\n    },\n    header: S,\n    hgroup: S,\n    hr: S,\n    html: {\n        attrs: { manifest: null }\n    },\n    i: S,\n    iframe: {\n        attrs: {\n            src: null, srcdoc: null, name: null, width: null, height: null,\n            sandbox: [\"allow-top-navigation\", \"allow-same-origin\", \"allow-forms\", \"allow-scripts\"],\n            seamless: [\"seamless\"]\n        }\n    },\n    img: {\n        attrs: {\n            alt: null, src: null, ismap: null, usemap: null, width: null, height: null,\n            crossorigin: [\"anonymous\", \"use-credentials\"]\n        }\n    },\n    input: {\n        attrs: {\n            alt: null, dirname: null, form: null, formaction: null,\n            height: null, list: null, max: null, maxlength: null, min: null,\n            name: null, pattern: null, placeholder: null, size: null, src: null,\n            step: null, value: null, width: null,\n            accept: [\"audio/*\", \"video/*\", \"image/*\"],\n            autocomplete: [\"on\", \"off\"],\n            autofocus: [\"autofocus\"],\n            checked: [\"checked\"],\n            disabled: [\"disabled\"],\n            formenctype: Encs,\n            formmethod: Methods,\n            formnovalidate: [\"novalidate\"],\n            formtarget: Targets,\n            multiple: [\"multiple\"],\n            readonly: [\"readonly\"],\n            required: [\"required\"],\n            type: [\"hidden\", \"text\", \"search\", \"tel\", \"url\", \"email\", \"password\", \"datetime\", \"date\", \"month\",\n                \"week\", \"time\", \"datetime-local\", \"number\", \"range\", \"color\", \"checkbox\", \"radio\",\n                \"file\", \"submit\", \"image\", \"reset\", \"button\"]\n        }\n    },\n    ins: { attrs: { cite: null, datetime: null } },\n    kbd: S,\n    keygen: {\n        attrs: {\n            challenge: null, form: null, name: null,\n            autofocus: [\"autofocus\"],\n            disabled: [\"disabled\"],\n            keytype: [\"RSA\"]\n        }\n    },\n    label: { attrs: { for: null, form: null } },\n    legend: S,\n    li: { attrs: { value: null } },\n    link: {\n        attrs: {\n            href: null, type: null,\n            hreflang: null,\n            media: null,\n            sizes: [\"all\", \"16x16\", \"16x16 32x32\", \"16x16 32x32 64x64\"]\n        }\n    },\n    map: { attrs: { name: null } },\n    mark: S,\n    menu: { attrs: { label: null, type: [\"list\", \"context\", \"toolbar\"] } },\n    meta: {\n        attrs: {\n            content: null,\n            charset: Charsets,\n            name: [\"viewport\", \"application-name\", \"author\", \"description\", \"generator\", \"keywords\"],\n            \"http-equiv\": [\"content-language\", \"content-type\", \"default-style\", \"refresh\"]\n        }\n    },\n    meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } },\n    nav: S,\n    noscript: S,\n    object: {\n        attrs: {\n            data: null, type: null, name: null, usemap: null, form: null, width: null, height: null,\n            typemustmatch: [\"typemustmatch\"]\n        }\n    },\n    ol: { attrs: { reversed: [\"reversed\"], start: null, type: [\"1\", \"a\", \"A\", \"i\", \"I\"] },\n        children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n    optgroup: { attrs: { disabled: [\"disabled\"], label: null } },\n    option: { attrs: { disabled: [\"disabled\"], label: null, selected: [\"selected\"], value: null } },\n    output: { attrs: { for: null, form: null, name: null } },\n    p: S,\n    param: { attrs: { name: null, value: null } },\n    pre: S,\n    progress: { attrs: { value: null, max: null } },\n    q: { attrs: { cite: null } },\n    rp: S,\n    rt: S,\n    ruby: S,\n    samp: S,\n    script: {\n        attrs: {\n            type: [\"text/javascript\"],\n            src: null,\n            async: [\"async\"],\n            defer: [\"defer\"],\n            charset: Charsets\n        }\n    },\n    section: S,\n    select: {\n        attrs: {\n            form: null, name: null, size: null,\n            autofocus: [\"autofocus\"],\n            disabled: [\"disabled\"],\n            multiple: [\"multiple\"]\n        }\n    },\n    slot: { attrs: { name: null } },\n    small: S,\n    source: { attrs: { src: null, type: null, media: null } },\n    span: S,\n    strong: S,\n    style: {\n        attrs: {\n            type: [\"text/css\"],\n            media: null,\n            scoped: null\n        }\n    },\n    sub: S,\n    summary: S,\n    sup: S,\n    table: S,\n    tbody: S,\n    td: { attrs: { colspan: null, rowspan: null, headers: null } },\n    template: S,\n    textarea: {\n        attrs: {\n            dirname: null, form: null, maxlength: null, name: null, placeholder: null,\n            rows: null, cols: null,\n            autofocus: [\"autofocus\"],\n            disabled: [\"disabled\"],\n            readonly: [\"readonly\"],\n            required: [\"required\"],\n            wrap: [\"soft\", \"hard\"]\n        }\n    },\n    tfoot: S,\n    th: { attrs: { colspan: null, rowspan: null, headers: null, scope: [\"row\", \"col\", \"rowgroup\", \"colgroup\"] } },\n    thead: S,\n    time: { attrs: { datetime: null } },\n    title: S,\n    tr: S,\n    track: {\n        attrs: {\n            src: null, label: null, default: null,\n            kind: [\"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\"],\n            srclang: null\n        }\n    },\n    ul: { children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n    var: S,\n    video: {\n        attrs: {\n            src: null, poster: null, width: null, height: null,\n            crossorigin: [\"anonymous\", \"use-credentials\"],\n            preload: [\"auto\", \"metadata\", \"none\"],\n            autoplay: [\"autoplay\"],\n            mediagroup: [\"movie\"],\n            muted: [\"muted\"],\n            controls: [\"controls\"]\n        }\n    },\n    wbr: S\n};\nconst GlobalAttrs = {\n    accesskey: null,\n    class: null,\n    contenteditable: Bool,\n    contextmenu: null,\n    dir: [\"ltr\", \"rtl\", \"auto\"],\n    draggable: [\"true\", \"false\", \"auto\"],\n    dropzone: [\"copy\", \"move\", \"link\", \"string:\", \"file:\"],\n    hidden: [\"hidden\"],\n    id: null,\n    inert: [\"inert\"],\n    itemid: null,\n    itemprop: null,\n    itemref: null,\n    itemscope: [\"itemscope\"],\n    itemtype: null,\n    lang: [\"ar\", \"bn\", \"de\", \"en-GB\", \"en-US\", \"es\", \"fr\", \"hi\", \"id\", \"ja\", \"pa\", \"pt\", \"ru\", \"tr\", \"zh\"],\n    spellcheck: Bool,\n    autocorrect: Bool,\n    autocapitalize: Bool,\n    style: null,\n    tabindex: null,\n    title: null,\n    translate: [\"yes\", \"no\"],\n    rel: [\"stylesheet\", \"alternate\", \"author\", \"bookmark\", \"help\", \"license\", \"next\", \"nofollow\", \"noreferrer\", \"prefetch\", \"prev\", \"search\", \"tag\"],\n    role: /*@__PURE__*/\"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer\".split(\" \"),\n    \"aria-activedescendant\": null,\n    \"aria-atomic\": Bool,\n    \"aria-autocomplete\": [\"inline\", \"list\", \"both\", \"none\"],\n    \"aria-busy\": Bool,\n    \"aria-checked\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n    \"aria-controls\": null,\n    \"aria-describedby\": null,\n    \"aria-disabled\": Bool,\n    \"aria-dropeffect\": null,\n    \"aria-expanded\": [\"true\", \"false\", \"undefined\"],\n    \"aria-flowto\": null,\n    \"aria-grabbed\": [\"true\", \"false\", \"undefined\"],\n    \"aria-haspopup\": Bool,\n    \"aria-hidden\": Bool,\n    \"aria-invalid\": [\"true\", \"false\", \"grammar\", \"spelling\"],\n    \"aria-label\": null,\n    \"aria-labelledby\": null,\n    \"aria-level\": null,\n    \"aria-live\": [\"off\", \"polite\", \"assertive\"],\n    \"aria-multiline\": Bool,\n    \"aria-multiselectable\": Bool,\n    \"aria-owns\": null,\n    \"aria-posinset\": null,\n    \"aria-pressed\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n    \"aria-readonly\": Bool,\n    \"aria-relevant\": null,\n    \"aria-required\": Bool,\n    \"aria-selected\": [\"true\", \"false\", \"undefined\"],\n    \"aria-setsize\": null,\n    \"aria-sort\": [\"ascending\", \"descending\", \"none\", \"other\"],\n    \"aria-valuemax\": null,\n    \"aria-valuemin\": null,\n    \"aria-valuenow\": null,\n    \"aria-valuetext\": null\n};\nconst eventAttributes = /*@__PURE__*/(\"beforeunload copy cut dragstart dragover dragleave dragenter dragend \" +\n    \"drag paste focus blur change click load mousedown mouseenter mouseleave \" +\n    \"mouseup keydown keyup resize scroll unload\").split(\" \").map(n => \"on\" + n);\nfor (let a of eventAttributes)\n    GlobalAttrs[a] = null;\nclass Schema {\n    constructor(extraTags, extraAttrs) {\n        this.tags = Object.assign(Object.assign({}, Tags), extraTags);\n        this.globalAttrs = Object.assign(Object.assign({}, GlobalAttrs), extraAttrs);\n        this.allTags = Object.keys(this.tags);\n        this.globalAttrNames = Object.keys(this.globalAttrs);\n    }\n}\nSchema.default = /*@__PURE__*/new Schema;\nfunction elementName(doc, tree, max = doc.length) {\n    if (!tree)\n        return \"\";\n    let tag = tree.firstChild;\n    let name = tag && tag.getChild(\"TagName\");\n    return name ? doc.sliceString(name.from, Math.min(name.to, max)) : \"\";\n}\nfunction findParentElement(tree, skip = false) {\n    for (; tree; tree = tree.parent)\n        if (tree.name == \"Element\") {\n            if (skip)\n                skip = false;\n            else\n                return tree;\n        }\n    return null;\n}\nfunction allowedChildren(doc, tree, schema) {\n    let parentInfo = schema.tags[elementName(doc, findParentElement(tree))];\n    return (parentInfo === null || parentInfo === void 0 ? void 0 : parentInfo.children) || schema.allTags;\n}\nfunction openTags(doc, tree) {\n    let open = [];\n    for (let parent = findParentElement(tree); parent && !parent.type.isTop; parent = findParentElement(parent.parent)) {\n        let tagName = elementName(doc, parent);\n        if (tagName && parent.lastChild.name == \"CloseTag\")\n            break;\n        if (tagName && open.indexOf(tagName) < 0 && (tree.name == \"EndTag\" || tree.from >= parent.firstChild.to))\n            open.push(tagName);\n    }\n    return open;\n}\nconst identifier = /^[:\\-\\.\\w\\u00b7-\\uffff]*$/;\nfunction completeTag(state, schema, tree, from, to) {\n    let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n    let parent = findParentElement(tree, true);\n    return { from, to,\n        options: allowedChildren(state.doc, parent, schema).map(tagName => ({ label: tagName, type: \"type\" })).concat(openTags(state.doc, tree).map((tag, i) => ({ label: \"/\" + tag, apply: \"/\" + tag + end,\n            type: \"type\", boost: 99 - i }))),\n        validFor: /^\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeCloseTag(state, tree, from, to) {\n    let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n    return { from, to,\n        options: openTags(state.doc, tree).map((tag, i) => ({ label: tag, apply: tag + end, type: \"type\", boost: 99 - i })),\n        validFor: identifier };\n}\nfunction completeStartTag(state, schema, tree, pos) {\n    let options = [], level = 0;\n    for (let tagName of allowedChildren(state.doc, tree, schema))\n        options.push({ label: \"<\" + tagName, type: \"type\" });\n    for (let open of openTags(state.doc, tree))\n        options.push({ label: \"</\" + open + \">\", type: \"type\", boost: 99 - level++ });\n    return { from: pos, to: pos, options, validFor: /^<\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeAttrName(state, schema, tree, from, to) {\n    let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n    let localAttrs = info && info.attrs ? Object.keys(info.attrs) : [];\n    let names = info && info.globalAttrs === false ? localAttrs\n        : localAttrs.length ? localAttrs.concat(schema.globalAttrNames) : schema.globalAttrNames;\n    return { from, to,\n        options: names.map(attrName => ({ label: attrName, type: \"property\" })),\n        validFor: identifier };\n}\nfunction completeAttrValue(state, schema, tree, from, to) {\n    var _a;\n    let nameNode = (_a = tree.parent) === null || _a === void 0 ? void 0 : _a.getChild(\"AttributeName\");\n    let options = [], token = undefined;\n    if (nameNode) {\n        let attrName = state.sliceDoc(nameNode.from, nameNode.to);\n        let attrs = schema.globalAttrs[attrName];\n        if (!attrs) {\n            let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n            attrs = (info === null || info === void 0 ? void 0 : info.attrs) && info.attrs[attrName];\n        }\n        if (attrs) {\n            let base = state.sliceDoc(from, to).toLowerCase(), quoteStart = '\"', quoteEnd = '\"';\n            if (/^['\"]/.test(base)) {\n                token = base[0] == '\"' ? /^[^\"]*$/ : /^[^']*$/;\n                quoteStart = \"\";\n                quoteEnd = state.sliceDoc(to, to + 1) == base[0] ? \"\" : base[0];\n                base = base.slice(1);\n                from++;\n            }\n            else {\n                token = /^[^\\s<>='\"]*$/;\n            }\n            for (let value of attrs)\n                options.push({ label: value, apply: quoteStart + value + quoteEnd, type: \"constant\" });\n        }\n    }\n    return { from, to, options, validFor: token };\n}\nfunction htmlCompletionFor(schema, context) {\n    let { state, pos } = context, around = syntaxTree(state).resolveInner(pos), tree = around.resolve(pos, -1);\n    for (let scan = pos, before; around == tree && (before = tree.childBefore(scan));) {\n        let last = before.lastChild;\n        if (!last || !last.type.isError || last.from < last.to)\n            break;\n        around = tree = before;\n        scan = last.from;\n    }\n    if (tree.name == \"TagName\") {\n        return tree.parent && /CloseTag$/.test(tree.parent.name) ? completeCloseTag(state, tree, tree.from, pos)\n            : completeTag(state, schema, tree, tree.from, pos);\n    }\n    else if (tree.name == \"StartTag\") {\n        return completeTag(state, schema, tree, pos, pos);\n    }\n    else if (tree.name == \"StartCloseTag\" || tree.name == \"IncompleteCloseTag\") {\n        return completeCloseTag(state, tree, pos, pos);\n    }\n    else if (context.explicit && (tree.name == \"OpenTag\" || tree.name == \"SelfClosingTag\") || tree.name == \"AttributeName\") {\n        return completeAttrName(state, schema, tree, tree.name == \"AttributeName\" ? tree.from : pos, pos);\n    }\n    else if (tree.name == \"Is\" || tree.name == \"AttributeValue\" || tree.name == \"UnquotedAttributeValue\") {\n        return completeAttrValue(state, schema, tree, tree.name == \"Is\" ? pos : tree.from, pos);\n    }\n    else if (context.explicit && (around.name == \"Element\" || around.name == \"Text\" || around.name == \"Document\")) {\n        return completeStartTag(state, schema, tree, pos);\n    }\n    else {\n        return null;\n    }\n}\n/**\nHTML tag completion. Opens and closes tags and attributes in a\ncontext-aware way.\n*/\nfunction htmlCompletionSource(context) {\n    return htmlCompletionFor(Schema.default, context);\n}\n/**\nCreate a completion source for HTML extended with additional tags\nor attributes.\n*/\nfunction htmlCompletionSourceWith(config) {\n    let { extraTags, extraGlobalAttributes: extraAttrs } = config;\n    let schema = extraAttrs || extraTags ? new Schema(extraTags, extraAttrs) : Schema.default;\n    return (context) => htmlCompletionFor(schema, context);\n}\n\nconst defaultNesting = [\n    { tag: \"script\",\n        attrs: attrs => attrs.type == \"text/typescript\" || attrs.lang == \"ts\",\n        parser: typescriptLanguage.parser },\n    { tag: \"script\",\n        attrs: attrs => attrs.type == \"text/babel\" || attrs.type == \"text/jsx\",\n        parser: jsxLanguage.parser },\n    { tag: \"script\",\n        attrs: attrs => attrs.type == \"text/typescript-jsx\",\n        parser: tsxLanguage.parser },\n    { tag: \"script\",\n        attrs(attrs) {\n            return !attrs.type || /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type);\n        },\n        parser: javascriptLanguage.parser },\n    { tag: \"style\",\n        attrs(attrs) {\n            return (!attrs.lang || attrs.lang == \"css\") && (!attrs.type || /^(text\\/)?(x-)?(stylesheet|css)$/i.test(attrs.type));\n        },\n        parser: cssLanguage.parser }\n];\nconst defaultAttrs = /*@__PURE__*/[\n    { name: \"style\",\n        parser: /*@__PURE__*/cssLanguage.parser.configure({ top: \"Styles\" }) }\n].concat(/*@__PURE__*/eventAttributes.map(name => ({ name, parser: javascriptLanguage.parser })));\n/**\nA language provider based on the [Lezer HTML\nparser](https://github.com/lezer-parser/html), extended with the\nJavaScript and CSS parsers to parse the content of `<script>` and\n`<style>` tags.\n*/\nconst htmlPlain = /*@__PURE__*/LRLanguage.define({\n    name: \"html\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                Element(context) {\n                    let after = /^(\\s*)(<\\/)?/.exec(context.textAfter);\n                    if (context.node.to <= context.pos + after[0].length)\n                        return context.continue();\n                    return context.lineIndent(context.node.from) + (after[2] ? 0 : context.unit);\n                },\n                \"OpenTag CloseTag SelfClosingTag\"(context) {\n                    return context.column(context.node.from) + context.unit;\n                },\n                Document(context) {\n                    if (context.pos + /\\s*/.exec(context.textAfter)[0].length < context.node.to)\n                        return context.continue();\n                    let endElt = null, close;\n                    for (let cur = context.node;;) {\n                        let last = cur.lastChild;\n                        if (!last || last.name != \"Element\" || last.to != cur.to)\n                            break;\n                        endElt = cur = last;\n                    }\n                    if (endElt && !((close = endElt.lastChild) && (close.name == \"CloseTag\" || close.name == \"SelfClosingTag\")))\n                        return context.lineIndent(endElt.from) + context.unit;\n                    return null;\n                }\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                Element(node) {\n                    let first = node.firstChild, last = node.lastChild;\n                    if (!first || first.name != \"OpenTag\")\n                        return null;\n                    return { from: first.to, to: last.name == \"CloseTag\" ? last.from : node.to };\n                }\n            }),\n            /*@__PURE__*/bracketMatchingHandle.add({\n                \"OpenTag CloseTag\": node => node.getChild(\"TagName\")\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { block: { open: \"<!--\", close: \"-->\" } },\n        indentOnInput: /^\\s*<\\/\\w+\\W$/,\n        wordChars: \"-._\"\n    }\n});\n/**\nA language provider based on the [Lezer HTML\nparser](https://github.com/lezer-parser/html), extended with the\nJavaScript and CSS parsers to parse the content of `<script>` and\n`<style>` tags.\n*/\nconst htmlLanguage = /*@__PURE__*/htmlPlain.configure({\n    wrap: /*@__PURE__*/configureNesting(defaultNesting, defaultAttrs)\n});\n/**\nLanguage support for HTML, including\n[`htmlCompletion`](https://codemirror.net/6/docs/ref/#lang-html.htmlCompletion) and JavaScript and\nCSS support extensions.\n*/\nfunction html(config = {}) {\n    let dialect = \"\", wrap;\n    if (config.matchClosingTags === false)\n        dialect = \"noMatch\";\n    if (config.selfClosingTags === true)\n        dialect = (dialect ? dialect + \" \" : \"\") + \"selfClosing\";\n    if (config.nestedLanguages && config.nestedLanguages.length ||\n        config.nestedAttributes && config.nestedAttributes.length)\n        wrap = configureNesting((config.nestedLanguages || []).concat(defaultNesting), (config.nestedAttributes || []).concat(defaultAttrs));\n    let lang = wrap ? htmlPlain.configure({ wrap, dialect }) : dialect ? htmlLanguage.configure({ dialect }) : htmlLanguage;\n    return new LanguageSupport(lang, [\n        htmlLanguage.data.of({ autocomplete: htmlCompletionSourceWith(config) }),\n        config.autoCloseTags !== false ? autoCloseTags : [],\n        javascript().support,\n        css().support\n    ]);\n}\nconst selfClosers = /*@__PURE__*/new Set(/*@__PURE__*/\"area base br col command embed frame hr img input keygen link meta param source track wbr menuitem\".split(\" \"));\n/**\nExtension that will automatically insert close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text) => {\n    if (view.composing || view.state.readOnly || from != to || (text != \">\" && text != \"/\") ||\n        !htmlLanguage.isActiveAt(view.state, from, -1))\n        return false;\n    let { state } = view;\n    let changes = state.changeByRange(range => {\n        var _a, _b, _c;\n        let { head } = range, around = syntaxTree(state).resolveInner(head, -1), name;\n        if (around.name == \"TagName\" || around.name == \"StartTag\")\n            around = around.parent;\n        if (text == \">\" && around.name == \"OpenTag\") {\n            if (((_b = (_a = around.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != \"CloseTag\" &&\n                (name = elementName(state.doc, around.parent, head)) &&\n                !selfClosers.has(name)) {\n                let hasRightBracket = view.state.doc.sliceString(head, head + 1) === \">\";\n                let insert = `${hasRightBracket ? \"\" : \">\"}</${name}>`;\n                return { range: EditorSelection.cursor(head + 1), changes: { from: head + (hasRightBracket ? 1 : 0), insert } };\n            }\n        }\n        else if (text == \"/\" && around.name == \"OpenTag\") {\n            let empty = around.parent, base = empty === null || empty === void 0 ? void 0 : empty.parent;\n            if (empty.from == head - 1 && ((_c = base.lastChild) === null || _c === void 0 ? void 0 : _c.name) != \"CloseTag\" &&\n                (name = elementName(state.doc, base, head)) &&\n                !selfClosers.has(name)) {\n                let hasRightBracket = view.state.doc.sliceString(head, head + 1) === \">\";\n                let insert = `/${name}${hasRightBracket ? \"\" : \">\"}`;\n                let pos = head + insert.length + (hasRightBracket ? 1 : 0);\n                return { range: EditorSelection.cursor(pos), changes: { from: head, insert } };\n            }\n        }\n        return { range };\n    });\n    if (changes.changes.empty)\n        return false;\n    view.dispatch(changes, { userEvent: \"input.type\", scrollIntoView: true });\n    return true;\n});\n\nexport { autoCloseTags, html, htmlCompletionSource, htmlCompletionSourceWith, htmlLanguage, htmlPlain };\n", "import { LRLanguage, LanguageSupport } from '@codemirror/language';\nimport { html } from '@codemirror/lang-html';\nimport { javascriptLanguage } from '@codemirror/lang-javascript';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { parseMixed } from '@lezer/common';\nimport { ExternalTokenizer, LRParser } from '@lezer/lr';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst Text = 1,\n  attributeContentSingle = 33,\n  attributeContentDouble = 34,\n  scriptAttributeContentSingle = 35,\n  scriptAttributeContentDouble = 36;\n\nconst text = /*@__PURE__*/new ExternalTokenizer(input => {\n    let start = input.pos;\n    for (;;) {\n        if (input.next == 10 /* Ch.Newline */) {\n            input.advance();\n            break;\n        }\n        else if (input.next == 123 /* Ch.BraceL */ && input.peek(1) == 123 /* Ch.BraceL */ || input.next < 0) {\n            break;\n        }\n        input.advance();\n    }\n    if (input.pos > start)\n        input.acceptToken(Text);\n});\nfunction attrContent(quote, token, script) {\n    return new ExternalTokenizer(input => {\n        let start = input.pos;\n        while (input.next != quote && input.next >= 0 &&\n            (script || input.next != 38 /* Ch.Ampersand */ && (input.next != 123 /* Ch.BraceL */ || input.peek(1) != 123 /* Ch.BraceL */)))\n            input.advance();\n        if (input.pos > start)\n            input.acceptToken(token);\n    });\n}\nconst attrSingle = /*@__PURE__*/attrContent(39 /* Ch.SingleQuote */, attributeContentSingle, false);\nconst attrDouble = /*@__PURE__*/attrContent(34 /* Ch.DoubleQuote */, attributeContentDouble, false);\nconst scriptAttrSingle = /*@__PURE__*/attrContent(39 /* Ch.SingleQuote */, scriptAttributeContentSingle, true);\nconst scriptAttrDouble = /*@__PURE__*/attrContent(34 /* Ch.DoubleQuote */, scriptAttributeContentDouble, true);\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = /*@__PURE__*/LRParser.deserialize({\n  version: 14,\n  states: \"(jOVOqOOOeQpOOOvO!bO'#CaOOOP'#Cx'#CxQVOqOOO!OQpO'#CfO!WQpO'#ClO!]QpO'#CrO!bQpO'#CsOOQO'#Cv'#CvQ!gQpOOQ!lQpOOQ!qQpOOOOOV,58{,58{O!vOpO,58{OOOP-E6v-E6vO!{QpO,59QO#TQpO,59QOOQO,59W,59WO#YQpO,59^OOQO,59_,59_O#_QpOOO#_QpOOO#gQpOOOOOV1G.g1G.gO#oQpO'#CyO#tQpO1G.lOOQO1G.l1G.lO#|QpO1G.lOOQO1G.x1G.xO$UO`O'#DUO$ZOWO'#DUOOQO'#Co'#CoQOQpOOOOQO'#Cu'#CuO$`OtO'#CwO$qOrO'#CwOOQO,59e,59eOOQO-E6w-E6wOOQO7+$W7+$WO%SQpO7+$WO%[QpO7+$WOOOO'#Cp'#CpO%aOpO,59pOOOO'#Cq'#CqO%fOpO,59pOOOS'#Cz'#CzO%kOtO,59cOOQO,59c,59cOOOQ'#C{'#C{O%|OrO,59cO&_QpO<<GrOOQO<<Gr<<GrOOQO1G/[1G/[OOOS-E6x-E6xOOQO1G.}1G.}OOOQ-E6y-E6yOOQOAN=^AN=^\",\n  stateData: \"&d~OvOS~OPROSQOVROWRO~OZTO[XO^VOaUOhWO~OR]OU^O~O[`O^aO~O[bO~O[cO~O[dO~ObeO~ObfO~ObgO~ORhO~O]kOwiO~O[lO~O_mO~OynOzoO~OysOztO~O[uO~O]wOwiO~O_yOwiO~OtzO~Os|O~OSQOV!OOW!OOr!OOy!QO~OSQOV!ROW!ROq!ROz!QO~O_!TOwiO~O]!UO~Oy!VO~Oz!VO~OSQOV!OOW!OOr!OOy!XO~OSQOV!ROW!ROq!ROz!XO~O]!ZO~O\",\n  goto: \"#dyPPPPPzPPPP!WPPPPP!WPP!Z!^!a!d!dP!g!j!m!p!v#Q#WPPPPPPPP#^SROSS!Os!PT!Rt!SRYPRqeR{nR}oRZPRqfR[PRqgQSOR_SQj`SvjxRxlQ!PsR!W!PQ!StR!Y!SQpeRrf\",\n  nodeNames: \"\u26A0 Text Content }} {{ Interpolation InterpolationContent Entity InvalidEntity Attribute BoundAttributeName [ Identifier ] ( ) ReferenceName # Is ExpressionAttributeValue AttributeInterpolation AttributeInterpolation EventName DirectiveName * StatementAttributeValue AttributeName AttributeValue\",\n  maxTerm: 42,\n  nodeProps: [\n    [\"openedBy\", 3,\"{{\",15,\"(\"],\n    [\"closedBy\", 4,\"}}\",14,\")\"],\n    [\"isolate\", -4,5,19,25,27,\"\"]\n  ],\n  skippedNodes: [0],\n  repeatNodeCount: 4,\n  tokenData: \"0r~RyOX#rXY$mYZ$mZ]#r]^$m^p#rpq$mqr#rrs%jst&Qtv#rvw&hwx)zxy*byz*xz{+`{}#r}!O+v!O!P-]!P!Q#r!Q![+v![!]+v!]!_#r!_!`-s!`!c#r!c!}+v!}#O.Z#O#P#r#P#Q.q#Q#R#r#R#S+v#S#T#r#T#o+v#o#p/X#p#q#r#q#r0Z#r%W#r%W;'S+v;'S;:j-V;:j;=`$g<%lO+vQ#wTUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rQ$ZSO#q#r#r;'S#r;'S;=`$g<%lO#rQ$jP;=`<%l#rR$t[UQvPOX#rXY$mYZ$mZ]#r]^$m^p#rpq$mq#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR%qTyPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR&XTaPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR&oXUQWPOp'[pq#rq!]'[!]!^#r!^#q'[#q#r(d#r;'S'[;'S;=`)t<%lO'[R'aXUQOp'[pq#rq!]'[!]!^'|!^#q'[#q#r(d#r;'S'[;'S;=`)t<%lO'[R(TTVPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR(gXOp'[pq#rq!]'[!]!^'|!^#q'[#q#r)S#r;'S'[;'S;=`)t<%lO'[P)VUOp)Sq!])S!]!^)i!^;'S)S;'S;=`)n<%lO)SP)nOVPP)qP;=`<%l)SR)wP;=`<%l'[R*RTzPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR*iT^PUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR+PT_PUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR+gThPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR+}b[PUQO}#r}!O+v!O!Q#r!Q![+v![!]+v!]!c#r!c!}+v!}#R#r#R#S+v#S#T#r#T#o+v#o#q#r#q#r$W#r%W#r%W;'S+v;'S;:j-V;:j;=`$g<%lO+vR-YP;=`<%l+vR-dTwPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR-zTUQbPO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR.bTZPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR.xT]PUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR/^VUQO#o#r#o#p/s#p#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR/zTSPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#r~0^TO#q#r#q#r0m#r;'S#r;'S;=`$g<%lO#r~0rOR~\",\n  tokenizers: [text, attrSingle, attrDouble, scriptAttrSingle, scriptAttrDouble, 0, 1],\n  topRules: {\"Content\":[0,2],\"Attribute\":[1,9]},\n  tokenPrec: 0\n});\n\nconst exprParser = /*@__PURE__*/javascriptLanguage.parser.configure({\n    top: \"SingleExpression\"\n});\nconst baseParser = /*@__PURE__*/parser.configure({\n    props: [\n        /*@__PURE__*/styleTags({\n            Text: tags.content,\n            Is: tags.definitionOperator,\n            AttributeName: tags.attributeName,\n            \"AttributeValue ExpressionAttributeValue StatementAttributeValue\": tags.attributeValue,\n            Entity: tags.character,\n            InvalidEntity: tags.invalid,\n            \"BoundAttributeName/Identifier\": tags.attributeName,\n            \"EventName/Identifier\": /*@__PURE__*/tags.special(tags.attributeName),\n            \"ReferenceName/Identifier\": tags.variableName,\n            \"DirectiveName/Identifier\": tags.keyword,\n            \"{{ }}\": tags.brace,\n            \"( )\": tags.paren,\n            \"[ ]\": tags.bracket,\n            \"# '*'\": tags.punctuation\n        })\n    ]\n});\nconst exprMixed = { parser: exprParser }, statementMixed = { parser: javascriptLanguage.parser };\nconst textParser = /*@__PURE__*/baseParser.configure({\n    wrap: /*@__PURE__*/parseMixed((node, input) => node.name == \"InterpolationContent\" ? exprMixed : null),\n});\nconst attrParser = /*@__PURE__*/baseParser.configure({\n    wrap: /*@__PURE__*/parseMixed((node, input) => {\n        var _a;\n        return node.name == \"InterpolationContent\" ? exprMixed\n            : node.name != \"AttributeInterpolation\" ? null\n                : ((_a = node.node.parent) === null || _a === void 0 ? void 0 : _a.name) == \"StatementAttributeValue\" ? statementMixed : exprMixed;\n    }),\n    top: \"Attribute\"\n});\nconst textMixed = { parser: textParser }, attrMixed = { parser: attrParser };\nconst baseHTML = /*@__PURE__*/html();\nfunction mkAngular(language) {\n    return language.configure({ wrap: parseMixed(mixAngular) }, \"angular\");\n}\n/**\nA language provider for Angular Templates.\n*/\nconst angularLanguage = /*@__PURE__*/mkAngular(baseHTML.language);\nfunction mixAngular(node, input) {\n    switch (node.name) {\n        case \"Attribute\":\n            return /^[*#(\\[]|\\{\\{/.test(input.read(node.from, node.to)) ? attrMixed : null;\n        case \"Text\":\n            return textMixed;\n    }\n    return null;\n}\n/**\nAngular Template language support.\n*/\nfunction angular(config = {}) {\n    let base = baseHTML;\n    if (config.base) {\n        if (config.base.language.name != \"html\" || !(config.base.language instanceof LRLanguage))\n            throw new RangeError(\"The base option must be the result of calling html(...)\");\n        base = config.base;\n    }\n    return new LanguageSupport(base.language == baseHTML.language ? angularLanguage : mkAngular(base.language), [base.support, base.language.data.of({\n            closeBrackets: { brackets: [\"[\", \"{\", '\"'] },\n            indentOnInput: /^\\s*[\\}\\]]$/\n        })]);\n}\n\nexport { angular, angularLanguage };\n", "import { ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst RawString = 1,\n  templateArgsEndFallback = 2,\n  MacroName = 3;\n\nconst R = 82, L = 76, u = 117, U = 85,\n      a = 97, z = 122, A = 65, Z = 90, Underscore = 95,\n      Zero = 48,\n      Quote = 34,\n      ParenL = 40, ParenR = 41,\n      Space = 32, GreaterThan = 62;\n\nconst rawString = new ExternalTokenizer(input => {\n  // Raw string literals can start with: R, LR, uR, UR, u8R\n  if (input.next == L || input.next == U) {\n    input.advance();\n  } else if (input.next == u) {\n    input.advance();\n    if (input.next == Zero + 8) input.advance();\n  }\n  if (input.next != R) return\n  input.advance();\n  if (input.next != Quote) return\n  input.advance();\n\n  let marker = \"\";\n  while (input.next != ParenL) {\n    if (input.next == Space || input.next <= 13 || input.next == ParenR) return\n    marker += String.fromCharCode(input.next);\n    input.advance();\n  }\n  input.advance();\n\n  for (;;) {\n    if (input.next < 0)\n      return input.acceptToken(RawString)\n    if (input.next == ParenR) {\n      let match = true;\n      for (let i = 0; match && i < marker.length; i++)\n        if (input.peek(i + 1) != marker.charCodeAt(i)) match = false;\n      if (match && input.peek(marker.length + 1) == Quote)\n        return input.acceptToken(RawString, 2 + marker.length)\n    }\n    input.advance();\n  }\n});\n\nconst fallback = new ExternalTokenizer(input => {\n  if (input.next == GreaterThan) {\n    // Provide a template-args-closing token when the next characters\n    // are \">>\", in which case the regular tokenizer will only see a\n    // bit shift op.\n    if (input.peek(1) == GreaterThan)\n      input.acceptToken(templateArgsEndFallback, 1);\n  } else {\n    // Notice all-uppercase identifiers\n    let sawLetter = false, i = 0;\n    for (;; i++) {\n      if (input.next >= A && input.next <= Z) sawLetter = true;\n      else if (input.next >= a && input.next <= z) return\n      else if (input.next != Underscore && !(input.next >= Zero && input.next <= Zero + 9)) break\n      input.advance();\n    }\n    if (sawLetter && i > 1) input.acceptToken(MacroName);\n  }\n}, {extend: true});\n\nconst cppHighlighting = styleTags({\n  \"typedef struct union enum class typename decltype auto template operator friend noexcept namespace using requires concept import export module __attribute__ __declspec __based\": tags.definitionKeyword,\n  \"extern MsCallModifier MsPointerModifier extern static register thread_local inline const volatile restrict _Atomic mutable constexpr constinit consteval virtual explicit VirtualSpecifier Access\": tags.modifier,\n  \"if else switch for while do case default return break continue goto throw try catch\": tags.controlKeyword,\n  \"co_return co_yield co_await\": tags.controlKeyword,\n  \"new sizeof delete static_assert\": tags.operatorKeyword,\n  \"NULL nullptr\": tags.null,\n  this: tags.self,\n  \"True False\": tags.bool,\n  \"TypeSize PrimitiveType\": tags.standard(tags.typeName),\n  TypeIdentifier: tags.typeName,\n  FieldIdentifier: tags.propertyName,\n  \"CallExpression/FieldExpression/FieldIdentifier\": tags.function(tags.propertyName),\n  \"ModuleName/Identifier\": tags.namespace,\n  \"PartitionName\": tags.labelName,\n  StatementIdentifier: tags.labelName,\n  \"Identifier DestructorName\": tags.variableName,\n  \"CallExpression/Identifier\": tags.function(tags.variableName),\n  \"CallExpression/ScopedIdentifier/Identifier\": tags.function(tags.variableName),\n  \"FunctionDeclarator/Identifier FunctionDeclarator/DestructorName\": tags.function(tags.definition(tags.variableName)),\n  NamespaceIdentifier: tags.namespace,\n  OperatorName: tags.operator,\n  ArithOp: tags.arithmeticOperator,\n  LogicOp: tags.logicOperator,\n  BitOp: tags.bitwiseOperator,\n  CompareOp: tags.compareOperator,\n  AssignOp: tags.definitionOperator,\n  UpdateOp: tags.updateOperator,\n  LineComment: tags.lineComment,\n  BlockComment: tags.blockComment,\n  Number: tags.number,\n  String: tags.string,\n  \"RawString SystemLibString\": tags.special(tags.string),\n  CharLiteral: tags.character,\n  EscapeSequence: tags.escape,\n  \"UserDefinedLiteral/Identifier\": tags.literal,\n  PreProcArg: tags.meta,\n  \"PreprocDirectiveName #include #ifdef #ifndef #if #define #else #endif #elif\": tags.processingInstruction,\n  MacroName: tags.special(tags.name),\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace,\n  \"< >\": tags.angleBracket,\n  \". ->\": tags.derefOperator,\n  \", ;\": tags.separator\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,bool:34, char:34, int:34, float:34, double:34, void:34, size_t:34, ssize_t:34, intptr_t:34, uintptr_t:34, charptr_t:34, int8_t:34, int16_t:34, int32_t:34, int64_t:34, uint8_t:34, uint16_t:34, uint32_t:34, uint64_t:34, char8_t:34, char16_t:34, char32_t:34, char64_t:34, const:68, volatile:70, restrict:72, _Atomic:74, mutable:76, constexpr:78, constinit:80, consteval:82, struct:86, __declspec:90, final:148, override:148, public:152, private:152, protected:152, virtual:154, extern:160, static:162, register:164, inline:166, thread_local:168, __attribute__:172, __based:178, __restrict:180, __uptr:180, __sptr:180, _unaligned:180, __unaligned:180, noexcept:194, requires:198, TRUE:786, true:786, FALSE:788, false:788, typename:218, class:220, template:234, throw:248, __cdecl:256, __clrcall:256, __stdcall:256, __fastcall:256, __thiscall:256, __vectorcall:256, try:260, catch:264, export:284, import:288, case:298, default:300, if:310, else:316, switch:320, do:324, while:326, for:332, return:336, break:340, continue:344, goto:348, co_return:352, co_yield:356, using:364, typedef:368, namespace:382, new:400, delete:402, co_await:404, concept:408, enum:412, static_assert:416, friend:424, union:426, explicit:432, operator:446, module:458, signed:520, unsigned:520, long:520, short:520, decltype:530, auto:532, sizeof:568, NULL:574, nullptr:588, this:590};\nconst spec_ = {__proto__:null,\"<\":131};\nconst spec_templateArgsEnd = {__proto__:null,\">\":135};\nconst spec_scopedIdentifier = {__proto__:null,operator:390, new:578, delete:584};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"$;fQ!QQVOOP'gOUOOO(XOWO'#CdO,RQUO'#CgO,]QUO'#FkO-sQbO'#CwO.UQUO'#CwO0TQUO'#K[O0[QUO'#CvO0gOpO'#DvO0oQ!dO'#D]OOQR'#JP'#JPO5XQVO'#GVO5fQUO'#JWOOQQ'#JW'#JWO8zQUO'#KnO<eQUO'#KnO>{QVO'#E^O?]QUO'#E^OOQQ'#Ed'#EdOOQQ'#Ee'#EeO?bQVO'#EfO@XQVO'#EiOBUQUO'#FPOBvQUO'#FiOOQR'#Fk'#FkOB{QUO'#FkOOQR'#LR'#LROOQR'#LQ'#LQOETQVO'#KROFxQUO'#LWOGVQUO'#KrOGkQUO'#LWOH]QUO'#LYOOQR'#HV'#HVOOQR'#HW'#HWOOQR'#HX'#HXOOQR'#K}'#K}OOQR'#J`'#J`Q!QQVOOOHkQVO'#F^OIWQUO'#EhOI_QUOOOKZQVO'#HhOKkQUO'#HhONVQUO'#KrONaQUO'#KrOOQQ'#Kr'#KrO!!_QUO'#KrOOQQ'#Jr'#JrO!!lQUO'#HyOOQQ'#K['#K[O!&^QUO'#K[O!&zQUO'#KRO!(zQVO'#I^O!(zQVO'#IaOCQQUO'#KROOQQ'#Iq'#IqOOQQ'#KR'#KRO!,}QUO'#K[OOQR'#KZ'#KZO!-UQUO'#DYO!/mQUO'#KoOOQQ'#Ko'#KoO!/tQUO'#KoO!/{QUO'#ETO!0QQUO'#EWO!0VQUO'#FRO8zQUO'#FPO!QQVO'#F_O!0[Q#vO'#FaO!0gQUO'#FlO!0oQUO'#FqO!0tQVO'#FsO!0oQUO'#FvO!3sQUO'#FwO!3xQVO'#FyO!4SQUO'#F{O!4XQUO'#F}O!4^QUO'#GPO!4cQVO'#GRO!(zQVO'#GTO!4jQUO'#GqO!4xQUO'#GZO!(zQVO'#FfO!6VQUO'#FfO!6[QVO'#GaO!6cQUO'#GbO!6nQUO'#GoO!6sQUO'#GsO!6xQUO'#G{O!7jQ&lO'#HjO!:mQUO'#GvO!:}QUO'#HYO!;YQUO'#H[O!;bQUO'#DWO!;bQUO'#HvO!;bQUO'#HwO!;yQUO'#HxO!<[QUO'#H}O!=PQUO'#IOO!>uQVO'#IcO!(zQVO'#IeO!?PQUO'#IhO!?WQVO'#IkP!@}{,UO'#CbP!6n{,UO'#CbP!AY{7[O'#CbP!6n{,UO'#CbP!A_{,UO'#CbP!AjOSO'#I{POOO)CEo)CEoOOOO'#I}'#I}O!AtOWO,59OOOQR,59O,59OO!(zQVO,59UOOQQ,59W,59WO!(zQVO,5;ROOQR,5<V,5<VO!BPQUO,59YO!(zQVO,5>rOOQR'#IY'#IYOOQR'#IZ'#IZOOQR'#I['#I[OOQR'#I]'#I]O!(zQVO,5>sO!(zQVO,5>sO!(zQVO,5>sO!(zQVO,5>sO!(zQVO,5>sO!(zQVO,5>sO!(zQVO,5>sO!(zQVO,5>sO!(zQVO,5>sO!(zQVO,5>sO!DOQVO,5>{OOQQ,5?X,5?XO!EqQVO'#ChO!IjQUO'#CyOOQQ,59c,59cOOQQ,59b,59bOOQQ,5=O,5=OO!IwQ&lO,5=nO!?PQUO,5?SO!LkQVO,5?VO!LrQbO,59cO!L}QVO'#FYOOQQ,5?Q,5?QO!M_QVO,59VO!MfO`O,5:bO!MkQbO'#D^O!M|QbO'#K_O!N[QbO,59wO!NdQbO'#CwO!NuQUO'#CwO!NzQUO'#K[O# UQUO'#CvOOQR-E<}-E<}O# aQUO,5ApO# hQVO'#EfO@XQVO'#EiOBUQUO,5;kOOQR,5<q,5<qO#$aQUO'#KRO#$hQUO'#KRO!(zQVO'#IVO8zQUO,5;kO#${Q&lO'#HjO#(SQUO'#CsO#*wQbO'#CwO#*|QUO'#CvO#.jQUO'#K[OOQQ-E=U-E=UO#0}QUO,5AYO#1XQUO'#K[O#1cQUO,5AYOOQR,5Ap,5ApOOQQ,5>m,5>mO#3gQUO'#CgO#4]QUO,5>qO#6OQUO'#IfOOQR'#JO'#JOO#6WQUO,5:xO#6tQUO,5:xO#7eQUO,5:xO#8YQUO'#CtO!0QQUO'#ClOOQQ'#JX'#JXO#6tQUO,5:xO#8bQUO,5;QO!4xQUO'#C}O#9kQUO,5;QO#9pQUO,5>RO#:|QUO'#C}O#;dQUO,5>|O#;iQUO'#KxO#<rQUO,5;TO#<zQVO,5;TO#=UQUO,5;TOOQQ,5;T,5;TO#>}QUO'#L]O#?UQUO,5>VO#?ZQbO'#CwO#?fQUO'#GdO#?kQUO'#E^O#@[QUO,5;kO#@sQUO'#LOO#@{QUO,5;rOKkQUO'#HgOBUQUO'#HhO#AQQUO'#KrO!6nQUO'#HkO#AxQUO'#CtO!0tQVO,5<TOOQQ'#Cg'#CgOOQR'#Ji'#JiO#A}QVO,5=aOOQQ,5?[,5?[O#DWQbO'#CwO#DcQUO'#GdOOQQ'#Jj'#JjOOQQ-E=h-E=hOGVQUO,5ArOGkQUO,5ArO#DhQUO,5AtO#DsQUO'#G}OOQR,5Ar,5ArO#DhQUO,5ArO#EOQUO'#HPO#EWQUO,5AtOOQR,5At,5AtOOQR,5Au,5AuO#EfQVO,5AuOOQR-E=^-E=^O#G`QVO,5;xOOQR,5;j,5;jO#IaQUO'#EjO#JfQUO'#EwO#K]QVO'#ExO#MoQUO'#EvO#MwQUO'#EyO#NvQUO'#EzOOQQ'#K{'#K{O$ mQUO,5;SO$!sQUO'#EvOOQQ,5;S,5;SO$#pQUO,5;SO$%cQUO,5:yO$'|QVO,5>QO$(WQUO'#E[O$(eQUO,5>SOOQQ,5>T,5>TO$,RQVO'#C{OOQQ-E=p-E=pOOQQ,5>e,5>eOOQQ,59`,59`O$,]QUO,5>xO$.]QUO,5>{O!6nQUO,59tO$.pQUO,5;qO$.}QUO,5<|O!0QQUO,5:oOOQQ,5:r,5:rO$/YQUO,5;mO$/_QUO'#KnOBUQUO,5;kOOQR,5;y,5;yO$0OQUO'#FcO$0^QUO'#FcO$0cQUO,5;{O$3|QVO'#FnO!0tQVO,5<WO!0oQUO,5<WO!0VQUO,5<]O$4TQVO'#GVO$7PQUO,5<_O!0tQVO,5<bO$:gQVO,5<cO$:tQUO,5<eOOQR,5<e,5<eO$;}QUO,5<eOOQR,5<g,5<gOOQR,5<i,5<iOOQQ'#Fj'#FjO$<SQUO,5<kO$<XQUO,5<mOOQR,5<m,5<mO$=_QUO,5<oO$>eQUO,5<sO$>pQUO,5=]O$>uQUO,5=]O!4xQUO,5<uO$>}QUO,5<uO$?cQUO,5<QO$@iQVO,5<QO$BzQUO,5<{OOQR,5<{,5<{O$DQQVO'#F^OOQR,5<|,5<|O$>uQUO,5<|O$DXQUO,5<|O$DdQUO,5=ZO!(zQVO,5=_O!(zQVO,5=gO#NeQUO,5=nOOQQ,5>U,5>UO$FiQUO,5>UO$FsQUO,5>UO$FxQUO,5>UO$F}QUO,5>UO!6nQUO,5>UO$H{QUO'#K[O$ISQUO,5=pO$I_QUO,5=bOKkQUO,5=pO$JXQUO,5=tOOQR,5=t,5=tO$JaQUO,5=tO$LlQVO'#H]OOQQ,5=v,5=vO!;]QUO,5=vO%#gQUO'#KkO%#nQUO'#K]O%$SQUO'#KkO%$^QUO'#DyO%$oQUO'#D|O%'lQUO'#K]OOQQ'#K]'#K]O%)_QUO'#K]O%#nQUO'#K]O%)dQUO'#K]OOQQ,59r,59rOOQQ,5>b,5>bOOQQ,5>c,5>cO%)lQUO'#H{O%)tQUO,5>dOOQQ,5>d,5>dO%-`QUO,5>dO%-kQUO,5>iO%1VQVO,5>jO%1^QUO,5>}O# hQVO'#EfO%4dQUO,5>}OOQQ,5>},5>}O%5TQUO,5?PO%7XQUO,5?SO!<[QUO,5?SO%9TQUO,5?VO%<pQVO,5?VP!A_{,UO,58|P%<w{,UO,58|P%=V{7[O,58|P%=]{,UO,58|PO{O'#Jv'#JvP%=b{,UO'#LdPOOO'#Ld'#LdP%=h{,UO'#LdPOOO,58|,58|POOO,5?g,5?gP%=mOSO,5?gOOOO-E<{-E<{OOQR1G.j1G.jO%=tQUO1G.pO%>zQUO1G0mOOQQ1G0m1G0mO%@WQUO'#CoO%BgQbO'#CwO%BrQUO'#CrO%BwQUO'#CrO%B|QUO1G.tO#AxQUO'#CqOOQQ1G.t1G.tO%EPQUO1G4^O%FVQUO1G4_O%GxQUO1G4_O%IkQUO1G4_O%K^QUO1G4_O%MPQUO1G4_O%NrQUO1G4_O&!eQUO1G4_O&$WQUO1G4_O&%yQUO1G4_O&'lQUO1G4_O&)_QUO1G4_O&+QQUO'#KQO&,ZQUO'#KQO&,cQUO,59SOOQQ,5=Q,5=QO&.kQUO,5=QO&.uQUO,5=QO&.zQUO,5=QO&/PQUO,5=QO!6nQUO,5=QO#NeQUO1G3YO&/ZQUO1G4nO!<[QUO1G4nO&1VQUO1G4qO&2xQVO1G4qOOQQ1G.}1G.}OOQQ1G.|1G.|OOQQ1G2j1G2jO!IwQ&lO1G3YO&3PQUO'#LPO@XQVO'#EiO&4YQUO'#F]OOQQ'#Jb'#JbO&4_QUO'#FZO&4jQUO'#LPO&4rQUO,5;tO&4wQUO1G.qOOQQ1G.q1G.qOOQR1G/|1G/|O&6jQ!dO'#JQO&6oQbO,59xO&9QQ!eO'#D`O&9XQ!dO'#JSO&9^QbO,5@yO&9^QbO,5@yOOQR1G/c1G/cO&9iQbO1G/cO&9nQ&lO'#GfO&:lQbO,59cOOQR1G7[1G7[O#@[QUO1G1VO&:wQUO1G1^OBUQUO1G1VO&=YQUO'#CyO#*wQbO,59cO&@{QUO1G6tOOQR-E<|-E<|O&B_QUO1G0dO#6WQUO1G0dOOQQ-E=V-E=VO#6tQUO1G0dOOQQ1G0l1G0lO&CSQUO,59iOOQQ1G3m1G3mO&CjQUO,59iO&DQQUO,59iO!M_QVO1G4hO!(zQVO'#JZO&DlQUO,5AdOOQQ1G0o1G0oO!(zQVO1G0oO!6nQUO'#JoO&DtQUO,5AwOOQQ1G3q1G3qOOQR1G1V1G1VO&J]QVO'#FOO!M_QVO,5;sOOQQ,5;s,5;sOBUQUO'#JdO&JmQUO,5AjO&JuQVO'#E[OOQR1G1^1G1^O&MdQUO'#L]OOQR1G1o1G1oOOQR-E=g-E=gOOQR1G7^1G7^O#DhQUO1G7^OGVQUO1G7^O#DhQUO1G7`OOQR1G7`1G7`O&MlQUO'#HOO&MtQUO'#LXOOQQ,5=i,5=iO&NSQUO,5=kO&NXQUO,5=lOOQR1G7a1G7aO#EfQVO1G7aO&N^QUO1G7aO' dQVO,5=lOOQR1G1U1G1UO$.vQUO'#E]O'!YQUO'#E]OOQQ'#Kz'#KzO'!sQUO'#KyO'#OQUO,5;UO'#WQUO'#ElO'#kQUO'#ElO'$OQUO'#EtOOQQ'#J]'#J]O'$TQUO,5;cO'$zQUO,5;cO'%uQUO,5;dO'&{QVO,5;dOOQQ,5;d,5;dO''VQVO,5;dO'&{QVO,5;dO''^QUO,5;bO'(ZQUO,5;eO'(fQUO'#KqO'(nQUO,5:vO'(sQUO,5;fOOQQ1G0n1G0nOOQQ'#J^'#J^O''^QUO,5;bO!4xQUO'#E}OOQQ,5;b,5;bO')nQUO'#E`O'+hQUO'#E{OHrQUO1G0nO'+mQUO'#EbOOQQ'#JY'#JYO'-VQUO'#KsOOQQ'#Ks'#KsO'.PQUO1G0eO'.wQUO1G3lO'/}QVO1G3lOOQQ1G3l1G3lO'0XQVO1G3lO'0`QUO'#L`O'1lQUO'#KYO'1zQUO'#KXO'2VQUO,59gO'2_QUO1G/`O'2dQUO'#FPOOQR1G1]1G1]OOQR1G2h1G2hO$>uQUO1G2hO'2nQUO1G2hO'2yQUO1G0ZOOQR'#Ja'#JaO'3OQVO1G1XO'8wQUO'#FTO'8|QUO1G1VO!6nQUO'#JeO'9[QUO,5;}O$0^QUO,5;}OOQQ'#Fd'#FdOOQQ,5;},5;}O'9jQUO1G1gOOQR1G1g1G1gO'9rQUO,5<YO$.vQUO'#FWOBUQUO'#FWO'9yQUO,5<YO!(zQVO,5<YO':RQUO,5<YO':WQVO1G1rO!0tQVO1G1rOOQR1G1w1G1wO'?vQUO1G1yOOQR1G1|1G1|O'?{QUO1G1}OBUQUO1G2^O'AUQVO1G1}O'CjQUO1G1}O'CoQUO'#GXO8zQUO1G2^OOQR1G2P1G2POOQR1G2V1G2VOOQR1G2X1G2XOOQR1G2Z1G2ZO'CtQUO1G2_O!4xQUO1G2_OOQR1G2w1G2wO'C|QUO1G2wO$>}QUO1G2aOOQQ'#Cu'#CuO'DRQUO'#G]O'D|QUO'#G]O'ERQUO'#LSO'EaQUO'#G`OOQQ'#LT'#LTO'EoQUO1G2aO'EtQVO1G1lO'HVQVO'#GVOBUQUO'#FWOOQR'#Jf'#JfO'EtQVO1G1lO'HaQUO'#FwOOQR1G2g1G2gOOQR,5;x,5;xO'HfQVO,5;xO'HmQUO1G2hO'HrQUO'#JhO'2nQUO1G2hO!(zQVO1G2uO'HzQUO1G2yO'JTQUO1G3RO'KZQUO1G3YOOQQ1G3p1G3pO'KoQUO1G3pOOQR1G3[1G3[O'KtQUO'#K[O'2dQUO'#LUOGkQUO'#LWOOQR'#Gz'#GzO#DhQUO'#LYOOQR'#HR'#HRO'LOQUO'#GwO'$OQUO'#GvOOQR1G2|1G2|O'L{QUO1G2|O'MrQUO1G3[O'M}QUO1G3`O'NSQUO1G3`OOQR1G3`1G3`O'N[QUO'#H^OOQR'#H^'#H^O( eQUO'#H^O!(zQVO'#HaO!(zQVO'#H`OOQR'#L['#L[O( jQUO'#L[OOQR'#Jl'#JlO( oQVO,5=wOOQQ,5=w,5=wO( vQUO'#H_O(!OQUO'#H[OOQQ1G3b1G3bO(!YQUO,5@wOOQQ,5@w,5@wO%)_QUO,5@wO%)dQUO,5@wO%$^QUO,5:eO(%wQUO'#KlO(&VQUO'#KlOOQQ,5:e,5:eOOQQ'#JT'#JTO(&bQUO'#D}O(&lQUO'#KrOGkQUO'#LWO('hQUO'#D}OOQQ'#Hq'#HqOOQQ'#Hs'#HsOOQQ'#Ht'#HtOOQQ'#Km'#KmOOQQ'#JV'#JVO('rQUO,5:hOOQQ,5:h,5:hO((oQUO'#LWO((|QUO'#HuO()dQUO,5@wO()kQUO'#H|O()vQUO'#L_O(*OQUO,5>gO(*TQUO'#L^OOQQ1G4O1G4OO(-zQUO1G4OO(.RQUO1G4OO(.YQUO1G4UO(/`QUO1G4UO(/eQUO,5A}O!6nQUO1G4iO!(zQVO'#IjOOQQ1G4n1G4nO(/jQUO1G4nO(1mQVO1G4qPOOO1G.h1G.hP!A_{,UO1G.hP(3mQUO'#LfP(3x{,UO1G.hP(3}{7[O1G.hPO{O-E=t-E=tPOOO,5BO,5BOP(4V{,UO,5BOPOOO1G5R1G5RO!(zQVO7+$[O(4[QUO'#CyOOQQ,59^,59^O(4gQbO,59cO(4rQbO,59^OOQQ,59],59]OOQQ7+)x7+)xO!M_QVO'#JuO(4}QUO,5@lOOQQ1G.n1G.nOOQQ1G2l1G2lO(5VQUO1G2lO(5[QUO7+(tOOQQ7+*Y7+*YO(7pQUO7+*YO(7wQUO7+*YO(1mQVO7+*]O#NeQUO7+(tO(8UQVO'#JcO(8iQUO,5AkO(8qQUO,5;vOOQQ'#Co'#CoOOQQ,5;w,5;wO!(zQVO'#F[OOQQ-E=`-E=`O!M_QVO,5;uOOQQ1G1`1G1`OOQQ,5?l,5?lOOQQ-E=O-E=OOOQR'#Dg'#DgOOQR'#Di'#DiOOQR'#Dl'#DlO(9zQ!eO'#K`O(:RQMkO'#K`O(:YQ!eO'#K`OOQR'#K`'#K`OOQR'#JR'#JRO(:aQ!eO,59zOOQQ,59z,59zO(:hQbO,5?nOOQQ-E=Q-E=QO(:vQbO1G6eOOQR7+$}7+$}OOQR7+&q7+&qOOQR7+&x7+&xO'8|QUO7+&qO(;RQUO7+&OO#6WQUO7+&OO(;vQUO1G/TO(<^QUO1G/TO(<xQUO7+*SOOQQ7+*W7+*WO(>kQUO,5?uOOQQ-E=X-E=XO(?tQUO7+&ZOOQQ,5@Z,5@ZOOQQ-E=m-E=mO(?yQUO'#LPO@XQVO'#EiO(AVQUO1G1_OOQQ1G1_1G1_O(B`QUO,5@OOOQQ,5@O,5@OOOQQ-E=b-E=bO(BtQUO'#KqOOQR7+,x7+,xO#DhQUO7+,xOOQR7+,z7+,zO(CRQUO,5=jO#DsQUO'#JkO(CdQUO,5AsOOQR1G3V1G3VOOQR1G3W1G3WO(CrQUO7+,{OOQR7+,{7+,{O(EjQUO,5:wO(GXQUO'#EwO!(zQVO,5;VO(GzQUO,5:wO(HUQUO'#EpO(HgQUO'#EzOOQQ,5;Z,5;ZO#K]QVO'#ExO(H}QUO,5:wO(IUQUO'#EyO#GgQUO'#J[O(JnQUO,5AeOOQQ1G0p1G0pO(JyQUO,5;WO!<[QUO,5;^O(KdQUO,5;_O(KrQUO,5;WO(NUQUO,5;`OOQQ-E=Z-E=ZO(N^QUO1G0}OOQQ1G1O1G1OO) XQUO1G1OO)!_QVO1G1OO)!fQVO1G1OO)!pQUO1G0|OOQQ1G0|1G0|OOQQ1G1P1G1PO)#mQUO'#JpO)#wQUO,5A]OOQQ1G0b1G0bOOQQ-E=[-E=[O)$PQUO,5;iO!<[QUO,5;iO)$|QVO,5:zO)%TQUO,5;gO$ mQUO7+&YOOQQ7+&Y7+&YO!(zQVO'#EfO)%[QUO,5:|OOQQ'#Kt'#KtOOQQ-E=W-E=WOOQQ,5A_,5A_OOQQ'#Jm'#JmO))PQUO7+&PPOQQ7+&P7+&POOQQ7+)W7+)WO))wQUO7+)WO)*}QVO7+)WOOQQ,5>n,5>nO$)YQVO'#JtO)+UQUO,5@sOOQQ1G/R1G/ROOQQ7+$z7+$zO)+aQUO7+(SO)+fQUO7+(SOOQR7+(S7+(SO$>uQUO7+(SOOQQ7+%u7+%uOOQR-E=_-E=_O!0VQUO,5;oOOQQ,5@P,5@POOQQ-E=c-E=cO$0^QUO1G1iOOQQ1G1i1G1iOOQR7+'R7+'ROOQR1G1t1G1tOBUQUO,5;rO),SQUO,5<ZO),ZQUO1G1tO)-dQUO1G1tO!0tQVO7+'^O)-iQVO7+'^O)3XQUO7+'eO)3^QVO7+'iO)5rQUO7+'xO)5|QUO7+'iO)7SQVO7+'iOKkQUO7+'xO$>hQUO,5<sO!4xQUO7+'yO)7ZQUO7+'yOOQR7+(c7+(cO)7`QUO7+'{O)7eQUO,5<wO'DRQUO,5<wO)8]QUO,5<wO'DRQUO,5<wOOQQ,5<x,5<xO)8nQVO,5<yO'EaQUO'#JgO)8xQUO,5AnO)9QQUO,5<zOOQR7+'{7+'{O)9]QVO7+'WO)5uQUO'#LOOOQR-E=d-E=dO);nQVO,5<cOOQR1G1d1G1dOOQQ,5@S,5@SO!6nQUO,5@SOOQQ-E=f-E=fO)>VQUO7+(aO)?]QUO7+(eO)?bQVO7+(eOOQQ7+(m7+(mOOQQ7+)[7+)[O)?jQUO'#KkO)?tQUO'#KkOOQR,5=c,5=cO)@RQUO,5=cO!;bQUO,5=cO!;bQUO,5=cO!;bQUO,5=cOOQR7+(h7+(hOOQR7+(v7+(vOOQR7+(z7+(zOOQR,5=x,5=xO)@WQUO,5={O)A^QUO,5=zOOQR,5Av,5AvOOQR-E=j-E=jOOQQ1G3c1G3cO)BdQUO,5=yO)BiQVO'#EfOOQQ1G6c1G6cO%)_QUO1G6cO%)dQUO1G6cOOQQ1G0P1G0POOQQ-E=R-E=RO)EQQUO,5AWO(%wQUO'#JUO)E]QUO,5AWO)E]QUO,5AWO)EeQUO,5:iO8zQUO,5:iOOQQ,5>^,5>^O)EoQUO,5ArO)EvQUO'#EVO)GQQUO'#EVO)GkQUO,5:iO)GuQUO'#HmO)GuQUO'#HnOOQQ'#Kp'#KpO)HdQUO'#KpO!(zQVO'#HoOOQQ,5:i,5:iO)IUQUO,5:iO!M_QVO,5:iOOQQ-E=T-E=TOOQQ1G0S1G0SOOQQ,5>a,5>aO)IZQUO1G6cO!(zQVO,5>hO)LxQUO'#JsO)MTQUO,5AyOOQQ1G4R1G4RO)M]QUO,5AxOOQQ,5Ax,5AxOOQQ7+)j7+)jO*!zQUO7+)jOOQQ7+)p7+)pO*'yQVO1G7iO*){QUO7+*TO**QQUO,5?UO*+WQUO7+*]POOO7+$S7+$SP*,yQUO'#LgP*-RQUO,5BQP*-W{,UO7+$SPOOO1G7j1G7jO*-]QUO<<GvOOQQ1G.x1G.xOOQQ'#IU'#IUO*/OQUO,5@aOOQQ,5@a,5@aOOQQ-E=s-E=sOOQQ7+(W7+(WOOQQ<<Mt<<MtO*0XQUO<<MtO*2[QUO<<MwO*3}QUO<<L`O*4cQUO,5?}OOQQ,5?},5?}OOQQ-E=a-E=aOOQQ1G1b1G1bO*5lQUO,5;vO*6rQUO1G1aOOQQ1G1a1G1aOOQR,5@z,5@zO*7{Q!eO,5@zO*8SQMkO,5@zO*8ZQ!eO,5@zOOQR-E=P-E=POOQQ1G/f1G/fO*8bQ!eO'#DwOOQQ1G5Y1G5YOOQR<<J]<<J]O*8iQUO<<IjO*9^QUO7+$oOOQQ<<Iu<<IuO(8UQVO,5;ROOQR<=!d<=!dOOQQ1G3U1G3UOOQQ,5@V,5@VOOQQ-E=i-E=iOOQR<=!g<=!gO*:ZQUO1G0cO*:bQUO'#EzO*:rQUO1G0cO*:yQUO'#JOO*<aQUO1G0qO!(zQVO1G0qOOQQ,5;[,5;[OOQQ,5;],5;]OOQQ,5?v,5?vOOQQ-E=Y-E=YO!<[QUO1G0xO*=pQUO1G0xOOQQ1G0y1G0yO*>RQUO'#ElOOQQ1G0z1G0zOOQQ7+&j7+&jO*>gQUO7+&jO*?mQVO7+&jOOQQ7+&h7+&hOOQQ,5@[,5@[OOQQ-E=n-E=nO*@iQUO1G1TO*@sQUO1G1TO*A^QUO1G0fOOQQ1G0f1G0fO*BdQUO'#K|O*BlQUO1G1ROOQQ<<It<<ItOOQQ'#Hc'#HcO'+mQUO,5=|OOQQ'#He'#HeO'+mQUO,5>OOOQQ-E=k-E=kPOQQ<<Ik<<IkPOQQ-E=l-E=lOOQQ<<Lr<<LrO*BqQUO'#LbO*C}QUO'#LaOOQQ,5@`,5@`OOQQ-E=r-E=rOOQR<<Kn<<KnO$>uQUO<<KnO*D]QUO<<KnOOQR1G1Z1G1ZOOQQ7+'T7+'TO!M_QVO1G1uO*DbQUO1G1uOOQR7+'`7+'`OOQR<<Jx<<JxO!0tQVO<<JxOOQR<<KP<<KPO*DmQUO<<KTO*EsQVO<<KTOKkQUO<<KdO!M_QVO<<KdO*EzQUO<<KTO!0tQVO<<KTO*GTQUO<<KTO*GYQUO<<KdO*GeQUO<<KeOOQR<<Ke<<KeOOQR<<Kg<<KgO*GjQUO1G2cO)7eQUO1G2cO'DRQUO1G2cO*G{QUO1G2eO*IRQVO1G2eOOQQ1G2e1G2eO*I]QVO1G2eO*IdQUO,5@ROOQQ-E=e-E=eOOQQ1G2f1G2fO*IrQUO1G1}O*J{QVO1G1}O*KSQUO1G1}OOQQ1G5n1G5nOOQR<<K{<<K{OOQR<<LP<<LPO*KXQVO<<LPO*KdQUO<<LPOOQR1G2}1G2}O*KiQUO1G2}O*KpQUO1G3fOOQR1G3e1G3eOOQQ7++}7++}O%)_QUO7++}O*K{QUO1G6rO*K{QUO1G6rO(%wQUO,5?pO*LTQUO,5?pOOQQ-E=S-E=SO*L`QUO1G0TOOQQ1G0T1G0TO*LjQUO1G0TO!M_QVO1G0TO*LoQUO1G0TOOQQ1G3x1G3xO*LyQUO,5:qO)EvQUO,5:qO*MgQUO,5:qO)EvQUO,5:qO$#uQUO,5:uO*NUQVO,5>WO)GuQUO'#JqO*N`QUO1G0TO*NqQVO1G0TOOQQ1G3v1G3vO*NxQUO,5>XO+ TQUO,5>YO+ rQUO,5>ZO+!xQUO1G0TO%)dQUO7++}O+$OQUO1G4SOOQQ,5@_,5@_OOQQ-E=q-E=qOOQQ<<MU<<MUOOQQ<<Mo<<MoO+%XQUO1G4pP+'[QUO'#JwP+'dQUO,5BRPO{O1G7l1G7lPOOO<<Gn<<GnOOQQANC`ANC`OOQR1G6f1G6fO+'lQ!eO,5:cOOQQ,5:c,5:cO+'sQUO1G0mO+)PQUO7+&]O+*`QUO7+&dO+*qQUO,5;WOOQQ<<JU<<JUO++PQUO7+&oOOQQ7+&Q7+&QO!4xQUO'#J_O++zQUO,5AhOOQQ7+&m7+&mOOQQ1G3h1G3hO+,SQUO1G3jOOQQ,5>o,5>oO+/wQUOANAYOOQRANAYANAYO+/|QUO7+'aOOQRAN@dAN@dO+1YQVOAN@oO+1aQUOAN@oO!0tQVOAN@oO+2jQUOAN@oO+2oQUOANAOO+2zQUOANAOO+4QQUOANAOOOQRAN@oAN@oO!M_QVOANAOOOQRANAPANAPO+4VQUO7+'}O)7eQUO7+'}OOQQ7+(P7+(PO+4hQUO7+(PO+5nQVO7+(PO+5uQVO7+'iO+5|QUOANAkOOQR7+(i7+(iOOQR7+)Q7+)QO+6RQUO7+)QO+6WQUO7+)QOOQQ<= i<= iO+6`QUO7+,^O+6hQUO1G5[OOQQ1G5[1G5[O+6sQUO7+%oOOQQ7+%o7+%oO+7UQUO7+%oO*NqQVO7+%oOOQQ7+)b7+)bO+7ZQUO7+%oO+8aQUO7+%oO!M_QVO7+%oO+8kQUO1G0]O*LyQUO1G0]O)EvQUO1G0]OOQQ1G0a1G0aO+9YQUO1G3rO+:`QVO1G3rOOQQ1G3r1G3rO+:jQVO1G3rO+:qQUO,5@]OOQQ-E=o-E=oOOQQ1G3s1G3sO%)_QUO<= iOOQQ7+*[7+*[POQQ,5@c,5@cPOQQ-E=u-E=uOOQQ1G/}1G/}OOQQ,5?y,5?yOOQQ-E=]-E=]OOQRG26tG26tO+;YQUOG26ZO!0tQVOG26ZO+<cQUOG26ZOOQRG26ZG26ZO!M_QVOG26jO!0tQVOG26jO+<hQUOG26jO+=nQUOG26jO+=sQUO<<KiOOQQ<<Kk<<KkOOQRG27VG27VOOQR<<Ll<<LlO+>UQUO<<LlOOQQ7+*v7+*vOOQQ<<IZ<<IZO+>ZQUO<<IZO!M_QVO<<IZO+>`QUO<<IZO+?fQUO<<IZO*NqQVO<<IZOOQQ<<L|<<L|O+?wQUO7+%wO*LyQUO7+%wOOQQ7+)^7+)^O+@fQUO7+)^O+AlQVO7+)^OOQQANETANETO!0tQVOLD+uOOQRLD+uLD+uO+AsQUOLD,UO+ByQUOLD,UOOQRLD,ULD,UO!0tQVOLD,UOOQRANBWANBWOOQQAN>uAN>uO+COQUOAN>uO+DUQUOAN>uO!M_QVOAN>uO+DZQUO<<IcOOQQ<<Lx<<LxOOQR!$( a!$( aO!0tQVO!$( pOOQR!$( p!$( pOOQQG24aG24aO+DxQUOG24aO+FOQUOG24aOOQR!)9E[!)9E[OOQQLD){LD){O+FTQUO'#CgO(dQUO'#CgO+JQQUO'#CyO+LqQUO'#CyO!E{QUO'#CyO+MjQUO'#CyO+M}QUO'#CyO,#pQUO'#CyO,$QQUO'#CyO,$_QUO'#CyO,$jQbO,59cO,$uQbO,59cO,%QQbO,59cO,%]QbO'#CwO,%nQbO'#CwO,&PQbO'#CwO,&bQUO'#CgO,(uQUO'#CgO,)SQUO'#CgO,+wQUO'#CgO,.zQUO'#CgO,/[QUO'#CgO,3TQUO'#CgO,3[QUO'#CgO,4[QUO'#CgO,6eQUO,5:xO#?kQUO,5:xO#?kQUO,5:xO#=ZQUO'#L]O,7RQbO'#CwO,7^QbO'#CwO,7iQbO'#CwO,7tQbO'#CwO#6tQUO'#E^O,8PQUO'#E^O,9^QUO'#HhO,:OQbO'#CwO,:ZQbO'#CwO,:fQUO'#CvO,:kQUO'#CvO,:pQUO'#CoO,;OQbO,59cO,;ZQbO,59cO,;fQbO,59cO,;qQbO,59cO,;|QbO,59cO,<XQbO,59cO,<dQbO,59cO,6eQUO1G0dO,<oQUO1G0dO#?kQUO1G0dO,8PQUO1G0dO,>|QUO'#K[O,?^QUO'#CyO,?lQbO,59cO,6eQUO7+&OO,<oQUO7+&OO,?wQUO'#EwO,@jQUO'#EzO,AZQUO'#E^O,A`QUO'#GdO,AeQUO'#CvO,AjQUO'#CwO,AoQUO'#CwO,AtQUO'#CvO,AyQUO'#GdO,BOQUO'#K[O,BlQUO'#K[O,BvQUO'#CvO,CRQUO'#CvO,C^QUO'#CvO,<oQUO,5:xO,8PQUO,5:xO,8PQUO,5:xO,CiQUO'#K[O,C|QbO'#CwO,DXQUO'#CrO,D^QUO'#E^\",\n  stateData: \",ES~O(oOSSOSTOSRPQVPQ'fPQ'hPQ'iPQ'jPQ'kPQ'lPQ'mPQ'nPQ~O*[OS~OPmO]eOa!]Od!POlTOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O{#RO}!_O!TxO!VfO!X!XO!Y!WO!i!YO!opO!r!`O!s!aO!t!aO!u!bO!v!aO!x!cO!{!dO#V#QO#a#VO#b#TO#i#OO#p!xO#t!fO#v!eO$S!gO$U!hO$Z!vO$[!wO$a!iO$f!jO$h!kO$i!lO$l!mO$n!nO$p!oO$r!pO$t!qO$v!rO$x!sO$|!tO%O!uO%V!yO%`#ZO%a#[O%b#YO%d!zO%f#UO%h!{O%m#SO%p!|O%w!}O%}#PO&n!RO&s#WO&t!TO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(sRO)QYO)TaO)V|O)W{O)XiO)Y!ZO)ZXO)icO)jdO~OR#bOV#]O'f#^O'h#_O'i#`O'j#`O'k#aO'l#aO'm#_O'n#_O~OX#dO(q#dO(r#fO~O]ZX]iXdiXlgXpZXpiXriXsiXtiXuiXviXwiXxiXyiX}iX!TiX!VZX!ViX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!cZX!eZX!fZX!gZX!hZX!riX!siX!tiX!uiX!viX!xiX!{iX%wiX&siX&tiX(siX(vZX(w$^X(xZX(yZX)TZX)TiX)UZX)VZX)ViX)WZX)WiX)XZX)YZX)kZX~O)XiX!UZX~P(dO]#}O!V#lO!X#{O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(v#gO(x#kO(y#kO)T#mO)U#oO)V#nO)W#pO)X#jO)Y#|O~Od$RO%Z$SO']$TO'`$UO(z$OO~Ol$VO~O!T$WO])OXd)OXr)OXs)OXt)OXu)OXv)OXw)OXx)OXy)OX})OX!V)OX!r)OX!s)OX!t)OX!u)OX!v)OX!x)OX!{)OX%w)OX&s)OX&t)OX(s)OX)T)OX)V)OX)W)OX)X)OX~Ol$VO~P.ZOl$VO!g$YO)k$YO~OX$ZO)[$ZO~O!R$[O)Y)RP)^)RP~OPmO]$eOa!]Or!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O{#RO}!_O!TxO!V$fO!X!XO!Y!WO!i!YO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#V#QO#a#VO#b#TO#v!eO$Z!vO$[!wO$a!iO$f!jO$h!kO$i!lO$l!mO$n!nO$p!oO$r!pO$t!qO$v!rO$x!sO%`#ZO%a#[O%b#YO%f#UO%m#SO%w$mO&n!RO&s#WO&t!TO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO)QYO)T$kO)W$kO)XiO)Y!ZO)ZXO)icO)jdO~Ol$_O#t$lO(sRO~P0zO](^Xa'zXd(^Xl'zXl(^Xr'zXr(^Xs'zXs(^Xt'zXt(^Xu'zXu(^Xv'zXv(^Xw'zXw(^Xx'zXx(^Xy'zXy(^X{'zX}'zX!V(^X!o(^X!r'zX!r(^X!s'zX!s(^X!t'zX!t(^X!u'zX!u(^X!v'zX!v(^X!x'zX!x(^X!{(^X#a'zX#b'zX%f'zX%m'zX%p(^X%w(^X&n'zX&s'zX&t'zX(s'zX(s(^X)T(^X)V(^X)W(^X~Oa!TOl$oOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O{#RO}!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#a#VO#b#TO%f#UO%m#SO&n!RO&s#WO&t!TO(s$nO~Or!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O}!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO&s#WO&t$wO])bXd)bXl)bX!V)bX!{)bX%w)bX(s)bX)T)bX)V)bX)W)bX~O)X$vO~P:nOPmO]eOd!POr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!VfO!X!XO!Y!WO!i!YO!{!dO#V#QO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO)TaO)V|O)W{O)Y!ZO)ZXO)icO)jdO~Oa%QOl;OO!|%RO(s$xO~P<lO)T%SO~Oa!]Ol$_O{#RO#a#VO#b#TO%f#UO%m#SO&n!RO&s#WO&t!TO(s;RO~P<lOPmO]$eOa%QOl;OO!V$fO!W%_O!X!XO!Y!WO!i!YO#V#QO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s$xO)T$kO)W%]O)Y!ZO)ZXO)icO)jdO)k%[O~O]%hOd!POl%bO!V%kO!{!dO%w$mO(s;SO)T%dO)V%iO)W%iO~O(w%mO~O)X#jO~O(s%nO](uX!V(uX!X(uX!Y(uX![(uX!^(uX!_(uX!a(uX!b(uX!c(uX!e(uX!f(uX!h(uX(v(uX(x(uX(y(uX)T(uX)U(uX)V(uX)W(uX)X(uX)Y(uX!g(uX)k(uX!O(uX!W(uX(w(uX!U(uXQ(uX!d(uX~OP%oO(pQO~PCQO]%hOd!POr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!V%kO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO!{!dO%p!|O%w!}O)T;dO)V|O)W|O~Ol%rO!o%wO(s$xO~PE_O!TxO#v!eO(w%yO)k%|O])fX!V)fX~O]%hOd!POl%rO!V%kO!{!dO%w!}O(s$xO)T;dO)V|O)W|O~O!TxO#v!eO)X&PO)k&QO~O!U&TO~P!QO]&YO!TxO!V&WO)T&VO)V&ZO)W&ZO~Op&UO~PHrO]&cO!V&bO~OPmO]eOd!PO!VfO!X!XO!Y!WO!i!YO!{!dO#V#QO%`#ZO%a#[O%b#YO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO)TaO)V|O)W{O)Y!ZO)ZXO)icO)jdO~Oa%QOl;OO%w$mO(s$xO~PIgO]%hOd!POl;`O!V%kO!{!dO%w$mO(s$xO)T;dO)V|O)W|O~Op&fO](uX])fX!V(uX!V)fX!X(uX!Y(uX![(uX!^(uX!_(uX!a(uX!b(uX!c(uX!e(uX!f(uX!h(uX(v(uX(x(uX(y(uX)T(uX)U(uX)V(uX)W(uX)X(uX)Y(uX!O(uX!O)fX!U(uX~O!g$YO)k$YO~PL]O!g(uX)k(uX~PL]O](uX!V(uX!X(uX!Y(uX![(uX!^(uX!_(uX!a(uX!b(uX!c(uX!e(uX!f(uX!h(uX(v(uX(x(uX(y(uX)T(uX)U(uX)V(uX)W(uX)X(uX)Y(uX!g(uX)k(uX!O(uX!U(uX~O])fX!V)fX!O)fX~PNkOa&hO&n!RO]&mXd&mXl&mXr&mXs&mXt&mXu&mXv&mXw&mXx&mXy&mX}&mX!V&mX!r&mX!s&mX!t&mX!u&mX!v&mX!x&mX!{&mX%w&mX&s&mX&t&mX(s&mX)T&mX)V&mX)W&mX)X&mX!O&mX!T&mX!X&mX!Y&mX![&mX!^&mX!_&mX!a&mX!b&mX!c&mX!e&mX!f&mX!h&mX(v&mX(x&mX(y&mX)U&mX)Y&mX!g&mX)k&mX!W&mXQ&mX!d&mX(w&mX!U&mX#v&mX~Op&fOl)OX!O)OXQ)OX!d)OX!h)OX)Y)OX)k)OX~P.ZO!g$YO)k$YO](uX!V(uX!X(uX!Y(uX![(uX!^(uX!_(uX!a(uX!b(uX!c(uX!e(uX!f(uX!h(uX(v(uX(x(uX(y(uX)T(uX)U(uX)V(uX)W(uX)X(uX)Y(uX!O(uX!W(uX(w(uX!U(uXQ(uX!d(uX~OPmO]$eOa%QOl;OO!V$fO!X!XO!Y!WO!i!YO#V#QO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s$xO)T$kO)W$kO)Y!ZO)ZXO)icO)jdO~O])OXd)OXl)OXr)OXs)OXt)OXu)OXv)OXw)OXx)OXy)OX})OX!V)OX!r)OX!s)OX!t)OX!u)OX!v)OX!x)OX!{)OX%w)OX&s)OX&t)OX(s)OX)T)OX)V)OX)W)OX)X)OX!O)OXQ)OX!d)OX!h)OX)Y)OX)k)OX~O]#}O~P!*qO]&lO~O])cXa)cXd)cXl)cXr)cXs)cXt)cXu)cXv)cXw)cXx)cXy)cX{)cX})cX!V)cX!o)cX!r)cX!s)cX!t)cX!u)cX!v)cX!x)cX!{)cX#a)cX#b)cX%f)cX%m)cX%p)cX%w)cX&n)cX&s)cX&t)cX(s)cX)T)cX)V)cX)W)cX~O(pQO~P!-ZO%V&nO~P!-ZO]&oO~O]#}O~O!TxO~O$X&wO(s%nO(w&vO~O]&xOw&zO~O]&xO~OPmO]$eOa%QOl;OO!TxO!V$fO!X!XO!Y!WO!i!YO#V#QO#p!xO#v!eO$Z!vO$[!wO$a!iO$f!jO$h!kO$i!lO$l!mO$n!nO$p!oO$r!pO$t!qO$v!rO$x!sO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s:qO)QYO)T$kO)W$kO)XiO)Y!ZO)ZXO)icO)jdO~O]'PO~O!T$WO)X'RO~P!(zO)X'TO~O)X'UO~O(s'VO~O)X'YO~P!(zOl;bO%V'^O%f'^O(s;TO~Oa!TOl$oOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O{#RO#a#VO#b#TO%f#UO%m#SO&n!RO&s#WO&t!TO(s$nO~O(w'bO~O)X'dO~P!(zO!T'eO(s%nO)k'gO~O(s%nO~O]'jO~O]'kOd%oXl%oX!V%oX!{%oX%w%oX(s%oX)T%oX)V%oX)W%oX~O]'oO!V'pO!X'mO!g'mO%['mO%]'mO%^'mO%_'mO%`'qO%a'qO%b'mO(y'nO)k'mO)y'rO~P8zO]%hOa!TOd!POr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O{#RO}!_O!V%kO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO!{!dO#a#VO#b#TO%f#UO%m#SO&n!RO&s#WO&t!TO)T;dO)V|O)W|O~Ol;cOp&UO%w$mO(s;UO~P!8jO(s%nO(w'wO)X'xO~O]&cO!T'zO~Ol$oO}!_O!T(RO!l(WO(s$nO(w(QO)QYO~Ol$oO{(_O!T([O#b(_O(s$nO~Oa!TOl$oO{#RO#a#VO#b#TO%f#UO%m#SO&n!RO&s#WO&t!TO(s$nO~O](aO~OPmOa%QOl;OO!V$fO!X!XO!Y!WO!i!YO#V#QO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s$xO)T$kO)W$kO)ZXO)icO)jdO~O](cO)Y(dO~P!=UO]#}O~P!<[OPmO]$eOa%QOl;OO!V(jO!X!XO!Y!WO!i!YO#V#QO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s$xO)T$kO)W$kO)Y!ZO)ZXO)icO)jdO~OY(kO(pQO(s%nO~O'g(nO~OS(rOT(oO*X(qO~O]#}O(o(uO~Q'oXX#dO(q#dO(r(wO~Od)ROl(|O&s#WO(s({O~O!Y'Ta!['Ta!^'Ta!_'Ta!a'Ta!b'Ta!c'Ta!e'Ta!f'Ta!h'Ta(v'Ta)T'Ta)U'Ta)V'Ta)W'Ta)X'Ta)Y'Ta!g'Ta)k'Ta!O'Ta!W'Ta(w'Ta!U'TaQ'Ta!d'Ta~OPmOa%QOl;OO!i!YO#V#QO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s$xO)ZXO)icO)jdO]'Ta!V'Ta!X'Ta(x'Ta(y'Ta~P!B_O!T$WO!O(tP~P!(zO]nX]%XXdnXlmXpnXp%XXrnXsnXtnXunXvnXwnXxnXynX}nX!TnX!VnX!V%XX!X%XX!Y%XX![%XX!^%XX!_%XX!a%XX!b%XX!c%XX!e%XX!f%XX!gmX!h%XX!rnX!snX!tnX!unX!vnX!xnX!{nX%wnX&snX&tnX(snX(v%XX(x%XX(y%XX)TnX)T%XX)U%XX)VnX)V%XX)WnX)W%XX)X%XX)Y%XX)kmX!O%XX~O)XnX!OnX!U%XX~P!E{O])eO!V)fO!X)cO!g)cO%[)cO%])cO%^)cO%_)cO%`)gO%a)gO%b)cO(y)dO)k)cO)y)hO~P8zOPmO]$eOa%QOl;OO!X!XO!Y!WO!i!YO#V#QO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s$xO)T$kO)W$kO)Y!ZO)ZXO)icO)jdO~O!V)mO~P!JwOd)pO%Z)qO(z$OO~O!T$WO!V)sO(x)tO!U)sP~P!JwO!T$WO~P!(zO)]){O~Ol)|O]!QX!h!QX)Y!QX)^!QX~O]*OO!h*PO)Y)RX)^)RX~O)Y*TO)^*SO~Od$RO%Z*UO']$TO'`$UO(z$OO~Ol*VO~Ol*VO!O)OX~P.ZOl*VO!g$YO)k$YO~O)X*WO~P:nOPmO]$eOa!]Ol$_Or!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O{#RO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%`#ZO%a#[O%b#YO%f#UO%m#SO%w$mO&n!RO&s#WO&t!TO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s;RO)T$kO)W$kO)Y!ZO)ZXO)icO)jdO~Op&fO~P!&zOp&fO!W(uX(w(uXQ(uX!d(uX~PNkO]'oO!V'pO!X'mO!g'mO%['mO%]'mO%^'mO%_'mO%`'qO%a'qO%b'mO(y'nO)k'mO)y'rO~O]iXdiXlgXpiXriXsiXtiXuiXviXwiXxiXyiX}iX!ViX!riX!siX!tiX!uiX!viX!xiX!{iX%wiX&siX&tiX(siX)TiX)ViX)WiX!TiX!hiX)YiX)kiX!OiX~O!liX(wiX)XiX!XiX!YiX![iX!^iX!_iX!aiX!biX!ciX!eiX!fiX(viX(xiX(yiX)UiX!giX!WiXQiX!diX!UiX#viX#TiX#ViX#piXaiX{iX!oiX#aiX#biX#iiX#tiX$|iX%diX%fiX%liX%miX%piX&niX)QiX~P#%yO(z*[O~Ol*]O~O])OXd)OXr)OXs)OXt)OXu)OXv)OXw)OXx)OXy)OX})OX!V)OX!r)OX!s)OX!t)OX!u)OX!v)OX!x)OX!{)OX%w)OX&s)OX&t)OX(s)OX)T)OX)V)OX)W)OX)X)OX!T)OX!X)OX!Y)OX![)OX!^)OX!_)OX!a)OX!b)OX!c)OX!e)OX!f)OX!h)OX(v)OX(x)OX(y)OX)U)OX)Y)OX!g)OX)k)OX!O)OX!W)OXQ)OX!d)OX(w)OX!U)OX#v)OX~Ol*]O~P#+ROr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O}!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO])bad)bal)ba!V)ba!{)ba%w)ba(s)ba)T)ba)V)ba)W)baQ)ba!d)ba!h)ba)Y)ba)k)ba!O)ba!T)ba(w)ba)X)ba~O&s#WO&t$wO~P#.qOp&fOl)OX~P#+RO&s)ba~P#.qO]ZXlgXpZXpiX!TiX!VZX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!cZX!eZX!fZX!gZX!hZX(vZX(xZX(yZX)TZX)UZX)VZX)WZX)XZX)YZX)kZX!OZX~O!WZX(wZX!UZXQZX!dZX~P#1jO]#}O!V#lO!X#{O(x#kO(y#kO~O!Y&ya![&ya!^&ya!_&ya!a&ya!b&ya!c&ya!e&ya!f&ya!g&ya!h&ya(v&ya)T&ya)U&ya)V&ya)W&ya)X&ya)Y&ya)k&ya!O&ya!W&ya(w&ya!U&yaQ&ya!d&ya~P#3zOl;lO!T$WO~Or!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O~PKkOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!|%RO~PKkO]&cO!V&bO!O#Qa!T#Qa!h#Qa#v#Qa)X#Qa)k#QaQ#Qa!d#Qa(w#Qa~Op&fO!T$WO~O!O*dO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!O*dO~O]&cO!O*fO!V&bO~O]&YOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!V&WO&s#WO&t$wO)T&VO)V&ZO)W&ZO~O!OqXQqX!dqX!hqX)YqX)XqX~P#9{O!O*iO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h*jO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!W)lX~P#3zO!W*lO!h*mO~O!W*lO!h*mO~P!(zO!W*lO~Op&fO!g$YO!h*nO)k$YO](uX!V(uX!W(uX!W*PX!X(uX!Y(uX![(uX!^(uX!_(uX!a(uX!b(uX!c(uX!e(uX!f(uX(v(uX(x(uX(y(uX)T(uX)U(uX)V(uX)W(uX)Y(uX~O!h(uX~P#=ZO!W*pO~Od$RO%Z*UO(z:vO~Ol;oO~Or!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!|%RO~PBUO]*wO!T*rO!V&bO!h*uO#v!eO)k*sO)X)rX~O!h*uO)X)rX~O)X*xO~Op&fO])fX!T)fX!V)fX!h)fX#v)fX)X)fX)k)fX!O)fXQ)fX!d)fX(w)fX~Op&fO~OP%oO(pQO]%ia!V%ia!X%ia!Y%ia![%ia!^%ia!_%ia!a%ia!b%ia!c%ia!e%ia!f%ia!h%ia(s%ia(v%ia(x%ia(y%ia)T%ia)U%ia)V%ia)W%ia)X%ia)Y%ia!g%ia)k%ia!O%ia!W%ia(w%ia!U%iaQ%ia!d%ia~Od$RO%Z$SO(z:sO~Ol:{O~O!TxO#v!eO)k%|O~Ol<`O&s#WO(s;kO~O$[+UO%a+VO~O!TxO#v!eO)X+WO)k+XO~OPmO]$eOa%QOl;OO!V$fO!X!XO!Y!WO!i!YO#V#QO$[+UO%`#ZO%a+ZO%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s$xO)T$kO)W$kO)Y!ZO)ZXO)icO)jdO~O!U+[O~P!QOa!TOl$oOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O{#RO}!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#a+bO#b+cO#i+dO%f#UO%m#SO&n!RO&s#WO&t!TO(s$nO)QYO~OQ)mP!d)mP~P#GgO]&YOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!V&WO)T&VO)V&ZO)W&ZO~O!O#kX!T#kX#v#kX)X#kX)k#kXQ#kX!d#kX!h#kX)Y#kX!x#kX(w#kX~P#IkOPmO]$eOa%QOl;OOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!V$fO!W+jO!X!XO!Y!WO!i!YO#V#QO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s$xO)T+kO)W$kO)Y!ZO)ZXO)icO)jdO~O]&cO!V+lO~O]&YO!V&WO)QYO)T&VO)V&ZO)W&ZO)Y+oO!O)eP~P8zO]&YO!V&WO)T&VO)V&ZO)W&ZO~O!O#nX!T#nX#v#nX)X#nX)k#nXQ#nX!d#nX!h#nX)Y#nX!x#nX(w#nX~P#NeO!TxO])oX!V)oX~Or!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O#T+wO#p+xO(y+uO)V+sO)W+sO~O]#jX!T#jX!V#jX!O#jX#v#jX)X#jX)k#jXQ#jX!d#jX!h#jX)Y#jX!x#jX(w#jX~P$ xO#V+zO~Or!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!l+{O#T+wO#V+zO#p+xO(y+uO)V+{O)W+{O])gP!T)gP!V)gP#v)gP(w)gP)k)gP!O)gP!h)gP)X)gP~O!x)gPQ)gP!d)gP~P$#uOPmO]$eOa%QOl;OOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!V$fO!X!XO!Y!WO!i!YO#V#QO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s$xO)W$kO)Y!ZO)ZXO)icO)jdO~O!W,RO)T,SO~P$%pO)QYO)Y+oO!O)eP~P8zO]&cO!V&bO!O&[a!T&[a!h&[a#v&[a)X&[a)k&[aQ&[a!d&[a(w&[a~OPmO]$eOa!]Ol;QOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O{#RO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%`#ZO%a#[O%b#YO%f#UO%m#SO%w$mO&n!RO&s#WO&t!TO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s;VO)T$kO)W$kO)Y!ZO)ZXO)icO)jdO~OQ({P!d({P~P$)YO]#}O!V#lO(x#kO(y#kO!X'Qa!Y'Qa!['Qa!^'Qa!_'Qa!a'Qa!b'Qa!c'Qa!e'Qa!f'Qa!h'Qa(v'Qa)T'Qa)U'Qa)V'Qa)W'Qa)X'Qa)Y'Qa!g'Qa)k'Qa!O'Qa!W'Qa(w'Qa!U'QaQ'Qa!d'Qa~O]#}O!V#lO!X#{O(x#kO(y#kO~P!B_O!T'eO#t!fO)QYO~P8zO!T'eO(s%nO)k,]O~O#x,bO~OQ)bX!d)bX!h)bX)Y)bX)k)bX!O)bX!T)bX(w)bX)X)bX~P:nO(w,fO(x,dO)Q$VX)X$VX~O(s,gO~O)QYO)X,jO~OPmO]$eOa!]Ol;POr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O{#RO}!_O!V$fO!X!XO!Y!WO!i!YO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#V#QO#a#VO#b#TO%`#ZO%a#[O%b#YO%f#UO%m#SO%w$mO&n!RO&s#WO&t!TO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO)QYO)T$kO)W$kO)XiO)Y!ZO)ZXO)icO)jdO~O(s;WO~P$0kOPmO]$eOa%QOl;OO!TxO!V$fO!X!XO!Y!WO!i!YO#V#QO#v!eO$Z!vO$[!wO$a!iO$f!jO$h!kO$i!lO$l!mO$n!nO$p!oO$r!pO$t!qO$v!rO$x!sO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s:qO)QYO)T$kO)W$kO)XiO)Y!ZO)ZXO)icO)jdO~O$i,tO~OPmO]$eOa!]Ol;POr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O{#RO}!_O!V$fO!X!XO!Y!WO!i!YO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#V#QO#a#VO#b#TO%O!uO%`#ZO%a#[O%b#YO%f#UO%m#SO%w$mO&n!RO&s#WO&t!TO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO)QYO)T$kO)W$kO)Y!ZO)ZXO)icO)jdO~O$|,zO(s;RO)X,xO~P$7UO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(v#gO)T#mO)U#oO)V#nO)W#pO)X,|O)Y#|O~P#3zO)X,|O~O)X,}O~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)X-OO)Y#|O~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)X-PO)Y#|O~P#3zOp&fO)QYO)k-RO~O)X-SO~Ol;bO(s;TO~O]-ZO!{!dO&s#WO&t$wO(s-VO)T-WO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO(w-^O)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!TxO$a!iO$f!jO$h!kO$i!lO$l-cO$n!nO$p!oO$r!pO$t!qO$v!rO$x!sO%O!uO(s:rOd$Ya!o$Ya!{$Ya#i$Ya#p$Ya#t$Ya#v$Ya$S$Ya$U$Ya$Z$Ya$[$Ya$|$Ya%V$Ya%d$Ya%h$Ya%p$Ya%}$Ya(l$Ya)V$Ya!U$Ya$d$Ya~P$0kO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)X-dO)Y#|O~P#3zO!U-eO~P!QOl-hO!T'eO)k,]O~O)k-jO~O]&^a!X&^a!Y&^a![&^a!^&^a!_&^a!a&^a!b&^a!c&^a!e&^a!f&^a!h&^a(v&^a(x&^a(y&^a)U&^a)V&^a)W&^a)X&^a)Y&^a!g&^a)k&^a!O&^a!W&^a!T&^a#v&^a(w&^a!U&^aQ&^a!d&^a~O)T-nO!V&^a~P$DiO!O-nO~O!W-nO~O!V-oO)T&^a~P$DiO])OXd)OXr)OXs)OXt)OXu)OXv)OXw)OXx)OXy)OX})OX!V)OX!r)OX!s)OX!t)OX!u)OX!v)OX!x)OX!{)OX%w)OX&s)OX&t)OX(s)OX)T)OX)V)OX)W)OX~Ol;qO~P$GXO]&cO!V&bO)X-pO~Ol;gO!o-sO#V+zO#i-xO#t!fO$|,zO%d!zO%l-wO%p!|O%w!}O(s;XO)QYO~P!8jO!n-|O(s,gO~O)QYO)X.OO~OPmO]$eOa%QOl;OO!T.TO!V$fO!X!XO!Y!WO!i!YO#V.[O#a.ZO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s$xO(y.SO)T$kO)W$kO)X.QO)Y!ZO)ZXO)icO)jdO~O!U.YO~P$JiO])_Xd)_Xr)_Xs)_Xt)_Xu)_Xv)_Xw)_Xx)_Xy)_X})_X!T)_X!V)_X!l)_X!r)_X!s)_X!t)_X!u)_X!v)_X!x)_X!{)_X%w)_X&s)_X&t)_X(s)_X(w)_X)T)_X)V)_X)W)_X)X)_X!O)_X!h)_X)Y)_X!X)_X!Y)_X![)_X!^)_X!_)_X!a)_X!b)_X!c)_X!e)_X!f)_X(v)_X(x)_X(y)_X)U)_X!g)_X)k)_X!W)_XQ)_X!d)_X#T)_X#V)_X#p)_X#v)_Xa)_X{)_X!o)_X#a)_X#b)_X#i)_X#t)_X$|)_X%d)_X%f)_X%l)_X%m)_X%p)_X&n)_X)Q)_X!U)_X~Ol*]O~P$LsOl$oO!T(RO!l.aO(s$nO(w(QO)QYO~Op&fOl)_X~P$LsOl$oO!n.fO!o.fO(s$nO)QYO~Ol;hO!U.qO!n.sO!o.rO#i-xO$|!tO%O!uO%h!{O%l-wO%p!|O%w!}O(s;ZO)QYO~P!8jO!T(RO!l.aO(w(QO])PXd)PXl)PXr)PXs)PXt)PXu)PXv)PXw)PXx)PXy)PX})PX!V)PX!r)PX!s)PX!t)PX!u)PX!v)PX!x)PX!{)PX%w)PX&s)PX&t)PX(s)PX)T)PX)V)PX)W)PX~O)X)PX!O)PX!X)PX!Y)PX![)PX!^)PX!_)PX!a)PX!b)PX!c)PX!e)PX!f)PX!h)PX(v)PX(x)PX(y)PX)U)PX)Y)PX!g)PX)k)PX!W)PXQ)PX!d)PX!U)PX#v)PX~P%%lO!T(RO~O!T(RO(w(QO~O(s%nO!U*RP~O!T([O(w.xO]&lad&lal&lar&las&lat&lau&lav&law&lax&lay&la}&la!V&la!r&la!s&la!t&la!u&la!v&la!x&la!{&la%w&la&s&la&t&la(s&la)T&la)V&la)W&la)X&la!O&la!X&la!Y&la![&la!^&la!_&la!a&la!b&la!c&la!e&la!f&la!h&la(v&la(x&la(y&la)U&la)Y&la!g&la)k&la!W&laQ&la!d&la!U&la#v&la~Ol$oO!T([O(s$nO~O&s#WO&t$wO]&qad&qal&qar&qas&qat&qau&qav&qaw&qax&qay&qa}&qa!V&qa!r&qa!s&qa!t&qa!u&qa!v&qa!x&qa!{&qa%w&qa(s&qa)T&qa)V&qa)W&qa)X&qa!O&qa!T&qa!X&qa!Y&qa![&qa!^&qa!_&qa!a&qa!b&qa!c&qa!e&qa!f&qa!h&qa(v&qa(x&qa(y&qa)U&qa)Y&qa!g&qa)k&qa!W&qaQ&qa!d&qa(w&qa!U&qa#v&qa~O&t.}O~P!(zO!Y#qO![#rO!f#zO)T#mO!^'Va!_'Va!a'Va!b'Va!c'Va!e'Va!h'Va(v'Va)U'Va)V'Va)W'Va)X'Va)Y'Va!g'Va)k'Va!O'Va!W'Va(w'Va!U'VaQ'Va!d'Va~P#3zO!V'eX!X'eX!Y'eX!['eX!^'eX!_'eX!a'eX!b'eX!c'eX!e'eX!f'eX!h'eX(v'eX(x'eX(y'eX)T'eX)U'eX)V'eX)W'eX)Y'eX!O'eX~O]/PO)X'eX!g'eX)k'eX!W'eX(w'eX!U'eXQ'eX!d'eX~P%3PO!Y#qO![#rO!f#zO)T#mO!^'Xa!_'Xa!a'Xa!b'Xa!c'Xa!e'Xa!h'Xa(v'Xa)U'Xa)V'Xa)W'Xa)X'Xa)Y'Xa!g'Xa)k'Xa!O'Xa!W'Xa(w'Xa!U'XaQ'Xa!d'Xa~P#3zO]#}O!T$WO!V/QO&s#WO&t$wO~O!X'[a!Y'[a!['[a!^'[a!_'[a!a'[a!b'[a!c'[a!e'[a!f'[a!h'[a(v'[a(x'[a(y'[a)T'[a)U'[a)V'[a)W'[a)X'[a)Y'[a!g'[a)k'[a!O'[a!W'[a(w'[a!U'[aQ'[a!d'[a~P%6vO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h'_a)X'_a!g'_a)k'_a!O'_a!W'_a(w'_a!U'_aQ'_a!d'_a~P#3zOPmO]$eOa%QOl;OO!V$fO!X!XO!Y!WO!i!YO#V#QO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s$xO)T$kO)W%]O)Y!ZO)ZXO)icO)jdO)k%[O~O!W/TO~P%:vOS(rOT(oO]#}O*X(qO~O]/WO'g/XO*X/UO~OS/]OT(oO*X/[O~O]#}O~Q'oa!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO(w/_O)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O)X#Zi!O#Zi~P#3zO]cXlgXpcXpiX!VcX!XcX!YcX![cX!^cX!_cX!acX!bcX!ccX!ecX!fcX!gcX!hcX(vcX(xcX(ycX)TcX)UcX)VcX)WcX)XcX)YcX)kcX!OcX!WcX(wcX!TcX#vcX!UcXQcX!dcX~Od/aO%Z*UO(z/`O~Ol/bO~Ol/cO~Op&fO]bi!Vbi!Xbi!Ybi![bi!^bi!_bi!abi!bbi!cbi!ebi!fbi!gbi!hbi(vbi(xbi(ybi)Tbi)Ubi)Vbi)Wbi)Xbi)Ybi)kbi!Obi!Wbi(wbi!UbiQbi!dbi~O!W/eO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO![#rO)T#mO!Y&{i!^&{i!_&{i!a&{i!b&{i!c&{i!e&{i!f&{i!h&{i(v&{i)U&{i)V&{i)W&{i)X&{i)Y&{i!g&{i)k&{i!O&{i!W&{i(w&{i!U&{iQ&{i!d&{i~P#3zO!Y&{i![&{i!^&{i!_&{i!a&{i!b&{i!c&{i!e&{i!f&{i!h&{i(v&{i)T&{i)U&{i)V&{i)W&{i)X&{i)Y&{i!g&{i)k&{i!O&{i!W&{i(w&{i!U&{iQ&{i!d&{i~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO)W#pO!h&{i(v&{i)U&{i)V&{i)X&{i)Y&{i!g&{i)k&{i!O&{i!W&{i(w&{i!U&{iQ&{i!d&{i~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO)V#nO)W#pO!h&{i(v&{i)U&{i)X&{i)Y&{i!g&{i)k&{i!O&{i!W&{i(w&{i!U&{iQ&{i!d&{i~P#3zO!Y#qO![#rO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO)W#pO!^&{i!h&{i(v&{i)U&{i)V&{i)X&{i)Y&{i!g&{i)k&{i!O&{i!W&{i(w&{i!U&{iQ&{i!d&{i~P#3zO!Y#qO![#rO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO)W#pO!^&{i!_&{i!h&{i(v&{i)U&{i)V&{i)X&{i)Y&{i!g&{i)k&{i!O&{i!W&{i(w&{i!U&{iQ&{i!d&{i~P#3zO!Y#qO![#rO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO!^&{i!_&{i!h&{i(v&{i)U&{i)V&{i)W&{i)X&{i)Y&{i!g&{i)k&{i!O&{i!W&{i(w&{i!U&{iQ&{i!d&{i~P#3zO!Y#qO![#rO!b#yO!c#yO!e#yO!f#zO)T#mO!^&{i!_&{i!a&{i!h&{i(v&{i)U&{i)V&{i)W&{i)X&{i)Y&{i!g&{i)k&{i!O&{i!W&{i(w&{i!U&{iQ&{i!d&{i~P#3zO!Y#qO![#rO!f#zO)T#mO!^&{i!_&{i!a&{i!b&{i!c&{i!e&{i!h&{i(v&{i)U&{i)V&{i)W&{i)X&{i)Y&{i!g&{i)k&{i!O&{i!W&{i(w&{i!U&{iQ&{i!d&{i~P#3zO!Y#qO![#rO)T#mO!^&{i!_&{i!a&{i!b&{i!c&{i!e&{i!f&{i!h&{i(v&{i)U&{i)V&{i)W&{i)X&{i)Y&{i!g&{i)k&{i!O&{i!W&{i(w&{i!U&{iQ&{i!d&{i~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO)U#oO)V#nO)W#pO!h&{i(v&{i)X&{i)Y&{i!g&{i)k&{i!O&{i!W&{i(w&{i!U&{iQ&{i!d&{i~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h/fO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!O(tX~P#3zO!h/fO!O(tX~O!O/hO~O]%Yap%Ya!X%Ya!Y%Ya![%Ya!^%Ya!_%Ya!a%Ya!b%Ya!c%Ya!e%Ya!f%Ya!h%Ya(v%Ya(x%Ya(y%Ya)U%Ya)V%Ya)W%Ya)X%Ya)Y%Ya!g%Ya)k%Ya!O%Ya!W%Ya!T%Ya#v%Ya(w%Ya!U%YaQ%Ya!d%Ya~O)T/iO!V%Ya~P&,hO!O/iO~O!W/iO~O!V/jO)T%Ya~P&,hO!X'[i!Y'[i!['[i!^'[i!_'[i!a'[i!b'[i!c'[i!e'[i!f'[i!h'[i(v'[i(x'[i(y'[i)T'[i)U'[i)V'[i)W'[i)X'[i)Y'[i!g'[i)k'[i!O'[i!W'[i(w'[i!U'[iQ'[i!d'[i~P%6vO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h'_i)X'_i!g'_i)k'_i!O'_i!W'_i(w'_i!U'_iQ'_i!d'_i~P#3zO!W/oO~P%:vO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h/qO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!U)sX~P#3zO(s/tO~O!V/vO(x)tO)k/xO~O!h/qO!U)sX~O!U/yO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO)T#mO)U#oO)V#nO)W#pO)Y#|O!h_i(v_i)X_i!g_i)k_i!O_i!W_i(w_i!U_iQ_i!d_i~P#3zO!R/zO~Ol)|O]!Qa!h!Qa)Y!Qa)^!Qa~OP0SO]0ROl0SO!R0SO!T0PO!V0QO!X0SO!Y0SO![0SO!^0SO!_0SO!a0SO!b0SO!c0SO!e0SO!f0SO!g0SO!h0SO!i0SO(pQO(w0SO(x0SO(y0SO)T/|O)U/}O)V/}O)W0OO)X0SO)Y0SO)ZXO~O!O0VO~P&7QO!R$[O~O!h*PO)Y)Ra)^)Ra~O)^0ZO~O])eO!V)fO!X)cO!g)cO%[)cO%])cO%^)cO%_)cO%`)gO%a)gO%b)cO(y)dO)k)cO)y)hO~Od)pO%Z*UO(z$OO~O)X0]O~O]nXdnXlmXpnXrnXsnXtnXunXvnXwnXxnXynX}nX!VnX!rnX!snX!tnX!unX!vnX!xnX!{nX%wnX&snX&tnX(snX)TnX)VnX)WnX!TnX!hnX)YnX!OnXQnX!dnX~O!lnX(wnX)XnX!XnX!YnX![nX!^nX!_nX!anX!bnX!cnX!enX!fnX(vnX(xnX(ynX)UnX!gnX)knX!WnX!UnX#vnX#TnX#VnX#pnXanX{nX!onX#anX#bnX#inX#tnX$|nX%dnX%fnX%lnX%mnX%pnX&nnX)QnX~P&:|Or!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O}!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO~O])bid)bil)bi!V)bi!{)bi%w)bi(s)bi)T)bi)V)bi)W)biQ)bi!d)bi!h)bi)Y)bi)k)bi!O)bi!T)bi&s)bi(w)bi)X)bi~P&?zO]&cO!V&bO!O#Qi!T#Qi!h#Qi#v#Qi)X#Qi)k#QiQ#Qi!d#Qi(w#Qi~O!OqaQqa!dqa!hqa)Yqa)Xqa~P#9{O!OqaQqa!dqa!hqa)Yqa)Xqa~P#IkO]&cO!V+lO!OqaQqa!dqa!hqa)Yqa)Xqa~O!h*jO!W)la~O!h*nO!W*Pa~OPmO]eOa!]Od!POlTOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O{#RO}!_O!X!XO!Y!WO!i!YO!opO!r!`O!s!aO!t!aO!u!bO!v!aO!x!cO!{!dO#V#QO#a#VO#b#TO#i#OO#p!xO#t!fO#v!eO$S!gO$U!hO$Z!vO$[!wO$a!iO$f!jO$h!kO$i!lO$l!mO$n!nO$p!oO$r!pO$t!qO$v!rO$x!sO$|!tO%O!uO%V!yO%`#ZO%a#[O%b#YO%d!zO%f#UO%h!{O%m#SO%p!|O%w!}O%}#PO&n!RO&s#WO&t!TO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(sRO)QYO)TaO)V|O)W{O)XiO)Y!ZO)ZXO)icO)jdO~O!T*rO!U&TO!V0kO(x)tO~P&D|O!h*uO)X)ra~OPmO]$eOa!]Ol;QO{#RO!T$WO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%`#ZO%a#[O%b#YO%f#UO%m#SO%w$mO&n!RO&s#WO&t!TO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s;YO)QYO)T$kO)W$kO)Y0qO)ZXO)icO)jdO!O(tP!O)eP~P&?zO!h*nO!W*PX~O]#}O!T$WO~O!h0vO!T){X#v){X)k){X~O)X0xO~O)X0yO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)X0{O)Y#|O~P#3zO)X0yO~P!?WO]1VOd!POl%bO!V1TO!{!dO%w$mO(s$xO)T0}O)Y1QO~O)V1RO)W1RO)k1OOQ#PX!d#PX!h#PX!O#PX~P' kO!h1WOQ)mX!d)mX~OQ1YO!d1YO~O)Y1]O)k1[OQ#`X!d#`X!h#`X~P!<[O)Y1]O)k1[OQ#`X!d#`X!h#`X~P!;bOp&UO~O!O#ka!T#ka#v#ka)X#ka)k#kaQ#ka!d#ka!h#ka)Y#ka!x#ka(w#ka~P#IkO]&cO!V+lO!O#ka!T#ka#v#ka)X#ka)k#kaQ#ka!d#ka!h#ka)Y#ka!x#ka(w#ka~O!W1bO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W1bO)T1dO~P$%pO!W1bO~P!(zO]#ja!T#ja!V#ja!O#ja#v#ja)X#ja)k#jaQ#ja!d#ja!h#ja)Y#ja!x#ja(w#ja~P$ xO]&cO!O1hO!V+lO~O!h1iO!O)eX~O!O1kO~O]&cO!V+lO!O#na!T#na#v#na)X#na)k#naQ#na!d#na!h#na)Y#na!x#na(w#na~O]1oOr#SXs#SXt#SXu#SXv#SXw#SXx#SXy#SX!T#SX!V#SX#T#SX#p#SX(y#SX)V#SX)W#SX!l#SX!x#SX#V#SX#v#SX(w#SX)k#SX!O#SX!h#SX)X#SXQ#SX!d#SX)Y#SX~O]1pO~O]1sOl$oO!V$fO#V#QO(s$nO)icO)jdO~Or!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!l+{O#T+wO#V+zO#p+xO(y+uO)V+{O)W+{O~O])gX!T)gX!V)gX!x)gX#v)gX(w)gX)k)gX!O)gX!h)gX)X)gXQ)gX!d)gX~P',UO!x!cO]#Ri!T#Ri!V#Ri#v#Ri(w#Ri)k#Ri!O#Ri!h#Ri)X#RiQ#Ri!d#Ri~O!W1{O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W1{O)T1}O~P$%pO!W1{O~P!(zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|OQ*SX!d*SX!h*SX~P#3zO)Y2OOQ(|X!d(|X!h(|X~O!h2POQ({X!d({X~OQ2RO!d2RO~O!O2SO~O#t$lO)QYO~P8zOl-hO!T'eO)k2WO~O!O2XO~O#x,bOP#ui]#uia#uid#uil#uir#uis#uit#uiu#uiv#uiw#uix#uiy#ui{#ui}#ui!T#ui!V#ui!X#ui!Y#ui!i#ui!o#ui!r#ui!s#ui!t#ui!u#ui!v#ui!x#ui!{#ui#V#ui#a#ui#b#ui#i#ui#p#ui#t#ui#v#ui$S#ui$U#ui$Z#ui$[#ui$a#ui$f#ui$h#ui$i#ui$l#ui$n#ui$p#ui$r#ui$t#ui$v#ui$x#ui$|#ui%O#ui%V#ui%`#ui%a#ui%b#ui%d#ui%f#ui%h#ui%m#ui%p#ui%w#ui%}#ui&n#ui&s#ui&t#ui'R#ui'S#ui'W#ui'Z#ui'b#ui'c#ui(l#ui(p#ui(s#ui)Q#ui)T#ui)V#ui)W#ui)X#ui)Y#ui)Z#ui)i#ui)j#ui!U#ui$d#ui!n#ui%l#ui~O]&cO~O]&cO!TxO!V&bO#v!eO~O(w2^O(x,dO)Q$Va)X$Va~O)QYO)X2`O~O!O2aO~P,]O!O2aO)X#jO~O!O2aO~O$d2fOP$`i]$`ia$`id$`il$`ir$`is$`it$`iu$`iv$`iw$`ix$`iy$`i{$`i}$`i!T$`i!V$`i!X$`i!Y$`i!i$`i!o$`i!r$`i!s$`i!t$`i!u$`i!v$`i!x$`i!{$`i#V$`i#a$`i#b$`i#i$`i#p$`i#t$`i#v$`i$S$`i$U$`i$Z$`i$[$`i$a$`i$f$`i$h$`i$i$`i$l$`i$n$`i$p$`i$r$`i$t$`i$v$`i$x$`i$|$`i%O$`i%V$`i%`$`i%a$`i%b$`i%d$`i%f$`i%h$`i%m$`i%p$`i%w$`i%}$`i&n$`i&s$`i&t$`i'R$`i'S$`i'W$`i'Z$`i'b$`i'c$`i(l$`i(p$`i(s$`i)Q$`i)T$`i)V$`i)W$`i)X$`i)Y$`i)Z$`i)i$`i)j$`i!U$`i~O]1sO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(v#gO)T#mO)U#oO)V#nO)W#pO)X2iO)Y#|O~P#3zOPmO]$eOa!]Ol;PO{#RO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%`#ZO%a#[O%b#YO%f#UO%m#SO%w$mO&n!RO&s#WO&t!TO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s;RO)T$kO)W$kO)X2lO)Y!ZO)ZXO)icO)jdO~P&?zO)X2iO~O(s-VO~O)QYO)k2oO~O)X2qO~O]-ZOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!{!dO!|%RO(s-VO)T-WO~O)T2vO~O]&cO!V2xO!h2yO)X)vX~O]-ZO!{!dO(s-VO)T-WO~O)X2|O~O!TxO$a!iO$f!jO$h!kO$i!lO$l-cO$n!nO$p!oO$r!pO$t!qO$v!rO$x!sO%O!uO(s:rOd$Yi!o$Yi!{$Yi#i$Yi#p$Yi#t$Yi#v$Yi$S$Yi$U$Yi$Z$Yi$[$Yi$|$Yi%V$Yi%d$Yi%h$Yi%p$Yi%}$Yi(l$Yi)V$Yi!U$Yi$d$Yi~P$0kOl;PO(s:rO~P0zO]3QO~O!U3RO~P!QO)X2VO~O!u3TO(s%nO~O!O3WO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h3XO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!O3YO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO]&cO!V+lO!T%vi#v%vi)X%vi)k%vi~O!W3ZO~Ol:}O)X)OX~P$GXOa!TOl$oO{3aO#a#VO#b3`O#t!fO%f#UO%m3bO&n!RO&s#WO&t!TO(s$nO)QYO~P&?zOl;gO!o-sO#i-xO#t!fO$|,zO%d!zO%l-wO%p!|O%w!}O(s;XO)QYO~P!8jO]&cO!V&bO)X3dO~O)X3eO~O)QYO)X3eO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(v#gO)T#mO)U#oO)V#nO)W#pO)X3fO)Y#|O~P#3zO)X3fO~O)X3iO~O!U3kO~P$JiOl$oO(s$nO~O]3mO!T'zO~P'+pO!T(RO!l3pO(w(QO])Pad)Pal)Par)Pas)Pat)Pau)Pav)Paw)Pax)Pay)Pa})Pa!V)Pa!r)Pa!s)Pa!t)Pa!u)Pa!v)Pa!x)Pa!{)Pa%w)Pa&s)Pa&t)Pa(s)Pa)T)Pa)V)Pa)W)Pa)X)Pa!O)Pa!X)Pa!Y)Pa![)Pa!^)Pa!_)Pa!a)Pa!b)Pa!c)Pa!e)Pa!f)Pa!h)Pa(v)Pa(x)Pa(y)Pa)U)Pa)Y)Pa!g)Pa)k)Pa!W)PaQ)Pa!d)Pa!U)Pa#v)Pa~Ol$oO!n.fO!o.fO(s$nO~O!h3tO)Y3vO!T)`X~O!o3xO)QYO~P8zO)X3yO~PGVO]4OOl(|O!T$WO!{!dO%w$mO&s#WO(s({O(w4SO)T3{O)V4PO)W4PO~O)X4TO)k4VO~P(&sOl;hO!U4XO!n.sO!o.rO#i-xO$|!tO%O!uO%h!{O%l-wO%p!|O%w!}O(s;ZO)QYO~P!8jOl;hO%w!}O(s;ZO~P!8jO(w4YO~Ol$oO!T(RO(s$nO(w(QO)QYO~O!l3pO~P()RO)k4[O!U&pX!h&pX~O!h4]O!U*RX~O!U4_O~Oa4aOl$oO&n!RO(s$nO~O!T([O]&lid&lil&lir&lis&lit&liu&liv&liw&lix&liy&li}&li!V&li!r&li!s&li!t&li!u&li!v&li!x&li!{&li%w&li&s&li&t&li(s&li)T&li)V&li)W&li)X&li!O&li!X&li!Y&li![&li!^&li!_&li!a&li!b&li!c&li!e&li!f&li!h&li(v&li(x&li(y&li)U&li)Y&li!g&li)k&li!W&liQ&li!d&li!U&li#v&li~O(w&li~P(*cO(w.xO~P(*cO!O4dO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!O4dO~O!O4eO~O]#}O!T$WO!V'[i!X'[i!Y'[i!['[i!^'[i!_'[i!a'[i!b'[i!c'[i!e'[i!f'[i!h'[i(v'[i(x'[i(y'[i)T'[i)U'[i)V'[i)W'[i)X'[i)Y'[i!g'[i)k'[i!O'[i!W'[i(w'[i!U'[iQ'[i!d'[i~OPmOa%QOl;OO!X!XO!Y!WO!i!YO#V#QO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s$xO)Y!ZO)ZXO)icO)jdO]#]ap#]a!T#]a!V#]a)T#]a)V#]a)W#]a~O(s%nO)Y4jO!O*ZP~O*X4iO~O'g4lO*X4iO~O*X4mO~OlmXpnXp&xX~Od4oO%Z*UO(z/`O~Od4oO%Z*UO(z4pO~O!h/fO!O(ta~O!W4tO~O]&cO!V+lO!T%vq#v%vq)X%vq)k%vq~O]#}O!T$WO!X'[q!Y'[q!['[q!^'[q!_'[q!a'[q!b'[q!c'[q!e'[q!f'[q!h'[q(v'[q(x'[q(y'[q)T'[q)U'[q)V'[q)W'[q)X'[q)Y'[q!g'[q)k'[q!O'[q!W'[q(w'[q!U'[qQ'[q!d'[q~O!V'[q~P(5pO!V/QO&s#WO&t$wO~P(5pO!T$WO!V)sO(x)tO!U(VX!h(VX~P!JwO!h/qO!U)sa~O!W4|O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h*jO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!U5QO~P&7QO!W5QO~P&7QO!O5QO~P&7QO!O5VO~P&7QO]5WO!h'va)Y'va)^'va~O!h*PO)Y)Ri)^)Ri~O]&cO!V&bO!O#Qq!T#Qq!h#Qq#v#Qq)X#Qq)k#QqQ#Qq!d#Qq(w#Qq~O!OqiQqi!dqi!hqi)Yqi)Xqi~P#IkO]&cO!V+lO!OqiQqi!dqi!hqi)Yqi)Xqi~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h'Uq)X'Uq!g'Uq)k'Uq!O'Uq!W'Uq(w'Uq!U'UqQ'Uq!d'Uq~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!W'}a!h'}a~P#3zO!W5]O~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h5^O(v#gO)T#mO)U#oO)V#nO)W#pO)X#jO)Y#|O!U)sX~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h#{i)X#{i~P#3zO]*wO!T$WO!V&bO)k*sO!h(Wa)X(Wa~O!h1iO]'eX!O)eX~P%3PO)Y5`O!T%ra!h%ra#v%ra)k%ra~O!h0vO!T){a#v){a)k){a~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)X5cO)Y#|O~P#3zO]1VOd!POl;`O!V1TO!{!dO%w$mO(s$xO)T;|O)V5eO)W5eO~OQ#Pa!d#Pa!h#Pa!O#Pa~P(DxO]1VOd!POr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!V1TO!{!dO!|%RO%w$mO(s$xOQ#kX!d#kX!h#kX!O#kX~Ol%bO)T0}O)V;}O)W;}O~P(EzO]&cOQ#Pa!d#Pa!h#Pa!O#Pa~O!V&bO)k5iO~P(GiO(s%nOQ#dX!d#dX!h#dX!O#dX~O)V;}O)W;}OQ#nX!d#nX!h#nX!O#nX~P' kO!V+lO~P(GiO]1VOa!TOd!POl;aO{#RO!V1TO!{!dO#a#VO#b#TO%f#UO%m#SO%w$mO&n!RO&s#WO&t!TO(s;UO)QYO)T;|O)V5eO)W5eO)Y+oO!O)eP~P&?zO!h1WOQ)ma!d)ma~Op&fO)k5nOQ#`al)OX!d#`a!h#`a)Y)OX~P$GXO(s-VOQ#ga!d#ga!h#ga~Op&fO)k5nOQ#`a])_Xd)_Xl)_Xr)_Xs)_Xt)_Xu)_Xv)_Xw)_Xx)_Xy)_X})_X!T)_X!V)_X!d#`a!h#`a!l)_X!r)_X!s)_X!t)_X!u)_X!v)_X!x)_X!{)_X%w)_X&s)_X&t)_X(s)_X(w)_X)T)_X)V)_X)W)_X)Y)_X~O#a5qO#b5qO~O]&cO!V+lO!O#ki!T#ki#v#ki)X#ki)k#kiQ#ki!d#ki!h#ki)Y#ki!x#ki(w#ki~O!W5sO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W5sO~P!(zO!W5sO)T5uO~P$%pO]#ji!T#ji!V#ji!O#ji#v#ji)X#ji)k#jiQ#ji!d#ji!h#ji)Y#ji!x#ji(w#ji~P$ xO)QYO)Y5wO~P8zO!h1iO!O)ea~O&s#WO&t$wO!T#qa!x#qa#v#qa(w#qa)k#qa!O#qa!h#qa)X#qaQ#qa!d#qa)Y#qa~P#NeO!O5|O~P!(zO!O)pP~P!4xO)U6SO)V6QO]#Ua!T#Ua!V#Ua)T#Ua)W#Uar#Uas#Uat#Uau#Uav#Uaw#Uax#Uay#Ua!l#Ua!x#Ua#T#Ua#V#Ua#p#Ua#v#Ua(w#Ua(y#Ua)k#Uaa#Uad#Ual#Ua{#Ua}#Ua!o#Ua!r#Ua!s#Ua!t#Ua!u#Ua!v#Ua!{#Ua#a#Ua#b#Ua#i#Ua#t#Ua$|#Ua%d#Ua%f#Ua%l#Ua%m#Ua%p#Ua%w#Ua&n#Ua&s#Ua&t#Ua(s#Ua)Q#Ua)X#Ua!O#Ua!h#UaQ#Ua!d#Ua~O!x!cO]#Rq!T#Rq!V#Rq#v#Rq(w#Rq)k#Rq!O#Rq!h#Rq)X#RqQ#Rq!d#Rq~O!W6XO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W6XO~P!(zO!h2POQ({a!d({a~O)X6^O~Ol-hO!T'eO)k6_O~O]*wO!T$WO!V&bO!h*uO)X)rX~O)k6cO~P)+qO!O6eO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!O6eO~O$d6gOP$`q]$`qa$`qd$`ql$`qr$`qs$`qt$`qu$`qv$`qw$`qx$`qy$`q{$`q}$`q!T$`q!V$`q!X$`q!Y$`q!i$`q!o$`q!r$`q!s$`q!t$`q!u$`q!v$`q!x$`q!{$`q#V$`q#a$`q#b$`q#i$`q#p$`q#t$`q#v$`q$S$`q$U$`q$Z$`q$[$`q$a$`q$f$`q$h$`q$i$`q$l$`q$n$`q$p$`q$r$`q$t$`q$v$`q$x$`q$|$`q%O$`q%V$`q%`$`q%a$`q%b$`q%d$`q%f$`q%h$`q%m$`q%p$`q%w$`q%}$`q&n$`q&s$`q&t$`q'R$`q'S$`q'W$`q'Z$`q'b$`q'c$`q(l$`q(p$`q(s$`q)Q$`q)T$`q)V$`q)W$`q)X$`q)Y$`q)Z$`q)i$`q)j$`q!U$`q~O)X6hO~OPmO]$eOa!]Ol;PO{#RO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%`#ZO%a#[O%b#YO%f#UO%m#SO%w$mO&n!RO&s#WO&t!TO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s;RO)T$kO)W$kO)X6jO)Y!ZO)ZXO)icO)jdO~P&?zO(w6lO)k*sO~P)+qO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)X6jO)Y#|O~P#3zO!O6nO~P!(zO)X6rO~O)X6sO~O]-ZOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!{!dO(s-VO)T-WO~O]&cO!V2xO!h%Pa)X%Pa!O%Pa~O!W6yO)T6zO~P$%pO!h2yO)X)va~O]&cO!O6}O!V2xO~O!TxO$a!iO$f!jO$h!kO$i!lO$l-cO$n!nO$p!oO$r!pO$t!qO$v!rO$x!sO%O!uO(s:rOd$Yq!o$Yq!{$Yq#i$Yq#p$Yq#t$Yq#v$Yq$S$Yq$U$Yq$Z$Yq$[$Yq$|$Yq%V$Yq%d$Yq%h$Yq%p$Yq%}$Yq(l$Yq)V$Yq!U$Yq$d$Yq~P$0kOPmO]$eOa!]Ol;PO{#RO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%`#ZO%a#[O%b#YO%f#UO%m#SO%w$mO&n!RO&s#WO&t!TO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s;RO)QYO)T$kO)W$kO)X7PO)Y!ZO)ZXO)icO)jdO~P&?zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)X7SO)Y#|O~P#3zO)X7TO~OP7UO(pQO~Ol*]O)X)_X~P$GXOp&fOl)OX)X)_X~P$GXO)X7WO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O)X&Ta~P#3zO!U7YO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO)X7ZO~OPmO]$eOa!]Ol;QO{#RO!V$fO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%`#ZO%a#[O%b#YO%f#UO%m#SO%w$mO&n!RO&s#WO&t!TO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s;YO)QYO)T$kO)W$kO)Y0qO)ZXO)icO)jdO!O)eP~P&?zO!h3tO)Y7_O!T)`a~O!h3tO!T)`a~O)X7dO)k7fO~P(&sO)X7hO~PGVO]4OOl(|Or!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!{!dO!|%RO%w$mO&s#WO(s({O)T3{O)V4PO)W4PO~O)T7lO~O]&cO!T*rO!V7nO!h7oO#v!eO(w4SO~O)X7dO)k7qO~P)GVO]4OOl(|O!{!dO%w$mO&s#WO(s({O)T3{O)V4PO)W4PO~Op&fO])dX!T)dX!V)dX!h)dX#v)dX(w)dX)X)dX)k)dX!O)dX~O)X7dO~O!T(RO!l7wO(w(QO])Pid)Pil)Pir)Pis)Pit)Piu)Piv)Piw)Pix)Piy)Pi})Pi!V)Pi!r)Pi!s)Pi!t)Pi!u)Pi!v)Pi!x)Pi!{)Pi%w)Pi&s)Pi&t)Pi(s)Pi)T)Pi)V)Pi)W)Pi)X)Pi!O)Pi!X)Pi!Y)Pi![)Pi!^)Pi!_)Pi!a)Pi!b)Pi!c)Pi!e)Pi!f)Pi!h)Pi(v)Pi(x)Pi(y)Pi)U)Pi)Y)Pi!g)Pi)k)Pi!W)PiQ)Pi!d)Pi!U)Pi#v)Pi~O(s%nO!U(gX!h(gX~O!h4]O!U*Ra~Op&fO]*Qad*Qal*Qar*Qas*Qat*Qau*Qav*Qaw*Qax*Qay*Qa}*Qa!T*Qa!V*Qa!r*Qa!s*Qa!t*Qa!u*Qa!v*Qa!x*Qa!{*Qa%w*Qa&s*Qa&t*Qa(s*Qa)T*Qa)V*Qa)W*Qa)X*Qa!O*Qa!X*Qa!Y*Qa![*Qa!^*Qa!_*Qa!a*Qa!b*Qa!c*Qa!e*Qa!f*Qa!h*Qa(v*Qa(x*Qa(y*Qa)U*Qa)Y*Qa!g*Qa)k*Qa!W*QaQ*Qa!d*Qa(w*Qa!U*Qa#v*Qa~O!T([O]&lqd&lql&lqr&lqs&lqt&lqu&lqv&lqw&lqx&lqy&lq}&lq!V&lq!r&lq!s&lq!t&lq!u&lq!v&lq!x&lq!{&lq%w&lq&s&lq&t&lq(s&lq)T&lq)V&lq)W&lq)X&lq!O&lq!X&lq!Y&lq![&lq!^&lq!_&lq!a&lq!b&lq!c&lq!e&lq!f&lq!h&lq(v&lq(x&lq(y&lq)U&lq)Y&lq!g&lq)k&lq!W&lqQ&lq!d&lq(w&lq!U&lq#v&lq~OPmOa%QOl;OO!T$WO!i!YO#V#QO%`#ZO%a#[O%b#YO%w$mO'R!WO'S!WO'W#XO'Z![O'b![O'c![O(pQO(s$xO)ZXO)icO)jdO~O]*Vi!V*Vi!X*Vi!Y*Vi![*Vi!^*Vi!_*Vi!a*Vi!b*Vi!c*Vi!e*Vi!f*Vi!h*Vi(v*Vi(x*Vi(y*Vi)T*Vi)U*Vi)V*Vi)W*Vi)X*Vi)Y*Vi!g*Vi)k*Vi!O*Vi!W*Vi(w*Vi!U*ViQ*Vi!d*Vi~P*&fO!O7|O~O!W7}O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h'_q)X'_q!g'_q)k'_q!O'_q!W'_q(w'_q!U'_qQ'_q!d'_q~P#3zO!h8OO!O*ZX~O!O8QO~O*X8RO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h^y)X^y!g^y)k^y!O^y!W^y(w^y!U^yQ^y!d^y~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!O(ia!h(ia~P#3zO]#}O!T$WO!V'[y!X'[y!Y'[y!['[y!^'[y!_'[y!a'[y!b'[y!c'[y!e'[y!f'[y!h'[y(v'[y(x'[y(y'[y)T'[y)U'[y)V'[y)W'[y)X'[y)Y'[y!g'[y)k'[y!O'[y!W'[y(w'[y!U'[yQ'[y!d'[y~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!h'_y)X'_y!g'_y)k'_y!O'_y!W'_y(w'_y!U'_yQ'_y!d'_y~P#3zO]&cO!V+lO!T%vy#v%vy)X%vy)k%vy~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!U(Va!h(Va~P#3zO!W4|O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!U#}i!h#}i~P#3zO!U8TO~P&7QO!W8TO~P&7QO!O8TO~P&7QO!O8VO~P&7QO]&cO!V&bO!O#Qy!T#Qy!h#Qy#v#Qy)X#Qy)k#QyQ#Qy!d#Qy(w#Qy~O]&cO!V+lO!OqqQqq!dqq!hqq)Yqq)Xqq~O]&cOQ#Pi!d#Pi!h#Pi!O#Pi~O!V+lO~P*9xOQ#nX!d#nX!h#nX!O#nX~P(DxO!V&bO~P*9xOQ(PX](PXd'rXl'rXr(PXs(PXt(PXu(PXv(PXw(PXx(PXy(PX!V(PX!d(PX!h(PX!{'rX%w'rX(s'rX)T(PX)V(PX)W(PX!O(PX~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|OQ#_i!d#_i!h#_i!O#_i~P#3zO&s#WO&t$wOQ#fi!d#fi!h#fi~O(s-VO)Y1]O)k1[OQ#`X!d#`X!h#`X~O!W8[O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W8[O~P!(zO!T#qi!x#qi#v#qi(w#qi)k#qi!O#qi!h#qi)X#qiQ#qi!d#qi)Y#qi~O]&cO!V+lO~P*?tO]&YO!V&WO&s#WO&t$wO)T&VO)V&ZO)W&ZO~P*?tO!O8^O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!h8_O!O)pX~O!O8aO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|OQ*UX!d*UX!h*UX~P#3zO)Y8dOQ*TX!d*TX!h*TX~O)X8fO~O!O$ci!h#{a)X#{a~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)X8iO)Y#|O~P#3zO!O8kO~P!(zO!O8kO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!O8kO~O]&cO!V&bO(w8qO~O)X8rO~O]&cO!V2xO!h%Pi)X%Pi!O%Pi~O!W8uO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W8uO)T8wO~P$%pO!W8uO~P!(zO]&cO!V2xO!h(Za)X(Za~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(v#gO)T#mO)U#oO)V#nO)W#pO)X8xO)Y#|O~P#3zO)X2lO~P!(zO)X8xO~OP%oO!O8yO(pQO~O!O8yO~O)X8zO~P%%lO#T8}O(y.SO)X8{O~O!h3tO!T)`i~O)Y9RO!T'xa!h'xa~O)X9TO)k9VO~P)GVO)X9TO~O)X9TO)k9ZO~P(&sOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O~P)GuO]&cO!V7nO!T!ya!h!ya#v!ya(w!ya)X!ya)k!ya!O!ya~O!W9bO)T9cO~P$%pO!T$WO!h7oO(w4SO)X9TO)k9ZO~O!T$WO~P#EfO]&cO!O9fO!V7nO~O]&cO!V7nO!T&ba!h&ba#v&ba(w&ba)X&ba)k&ba!O&ba~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O)X&ca~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)X9TO)Y#|O~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!U&pi!h&pi~P#3zO!V/QO]'^i!T'^i!X'^i!Y'^i!['^i!^'^i!_'^i!a'^i!b'^i!c'^i!e'^i!f'^i!h'^i(v'^i(x'^i(y'^i)T'^i)U'^i)V'^i)W'^i)X'^i)Y'^i!g'^i)k'^i!O'^i!W'^i(w'^i!U'^iQ'^i!d'^i~O(s%nO)Y9iO~O!h8OO!O*Za~O!O9kO~P&7QO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!U(Va)X#Zi~P#3zO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|OQ#_q!d#_q!h#_q!O#_q~P#3zO&s#WO&t$wOQ#fq!d#fq!h#fq~O)k5nOQ#`a!d#`a!h#`a~O]&cO!V+lO!T#qq!x#qq#v#qq(w#qq)k#qq!O#qq!h#qq)X#qqQ#qq!d#qq)Y#qq~O!h8_O!O)pa~O)V6QO]&Wi!T&Wi!V&Wi)T&Wi)U&Wi)W&Wir&Wis&Wit&Wiu&Wiv&Wiw&Wix&Wiy&Wi!l&Wi!x&Wi#T&Wi#V&Wi#p&Wi#v&Wi(w&Wi(y&Wi)k&Wia&Wid&Wil&Wi{&Wi}&Wi!o&Wi!r&Wi!s&Wi!t&Wi!u&Wi!v&Wi!{&Wi#a&Wi#b&Wi#i&Wi#t&Wi$|&Wi%d&Wi%f&Wi%l&Wi%m&Wi%p&Wi%w&Wi&n&Wi&s&Wi&t&Wi(s&Wi)Q&Wi)X&Wi!O&Wi!h&WiQ&Wi!d&Wi~O)X9nO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O!O$cq!h#{i)X#{i~P#3zO!O9pO~P!(zO!O9pO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!O9pO~O]&cO!V&bO(w9sO~O!O9tO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!O9tO~O]&cO!V2xO!h%Pq)X%Pq!O%Pq~O!W9xO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W9xO~P!(zO)X6jO~P!(zO)X9yO~O)X9zO~O(y.SO)X9zO~O!h3tO!T)`q~O)Y9|O!T'xi!h'xi~O!T$WO!h7oO(w4SO)X9}O)k:PO~O)X9}O~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)X9}O)Y#|O~P#3zO)X9}O)k:SO~P)GVO]&cO!V7nO!T!yi!h!yi#v!yi(w!yi)X!yi)k!yi!O!yi~O!W:WO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W:WO)T:YO~P$%pO!W:WO~P!(zO]&cO!V7nO!T(ea!h(ea(w(ea)X(ea)k(ea~O!O:[O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO!h#iO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!O:[O~O!O:aO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!O:aO~O]&cO!V2xO!h%Py)X%Py!O%Py~O)X:bO~O)X:cO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)X:cO)Y#|O~P#3zO!T$WO!h7oO(w4SO)X:cO)k:fO~O]&cO!V7nO!T!yq!h!yq#v!yq(w!yq)X!yq)k!yq!O!yq~O!W:hO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!W:hO~P!(zO!O:jO!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)Y#|O~P#3zO!O:jO~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)X:lO)Y#|O~P#3zO)X:lO~O]&cO!V7nO!T!yy!h!yy#v!yy(w!yy)X!yy)k!yy!O!yy~O!Y#qO![#rO!^#uO!_#vO!a#xO!b#yO!c#yO!e#yO!f#zO(v#gO)T#mO)U#oO)V#nO)W#pO)X:pO)Y#|O~P#3zO)X:pO~O]ZXlgXpZXpiX!TiX!VZX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!cZX!eZX!fZX!gZX!hZX(vZX(w$^X(xZX(yZX)TZX)UZX)VZX)WZX)XZX)YZX)kZX~O]%XXlmXpnXp%XX!TnX!V%XX!X%XX!Y%XX![%XX!^%XX!_%XX!a%XX!b%XX!c%XX!e%XX!f%XX!gmX!h%XX(v%XX(x%XX(y%XX)T%XX)U%XX)V%XX)W%XX)Y%XX)kmX!O%XXQ%XX!d%XX~O)X%XX!W%XX(w%XX!U%XX~P+HQO]nX]%XXdnXlmXpnXp%XXrnXsnXtnXunXvnXwnXxnXynX}nX!VnX!V%XX!rnX!snX!tnX!unX!vnX!xnX!{nX%wnX&snX&tnX(snX)TnX)VnX)WnX!OnX!O%XX!hnX)YnX~O)XnX)knX~P+JbO]%XXlmXpnXp%XX!V%XX!h%XXQ%XX!d%XX!O%XX~O!T%XX#v%XX)X%XX)k%XX(w%XX~P+L{OQnXQ%XX!TnX!X%XX!Y%XX![%XX!^%XX!_%XX!a%XX!b%XX!c%XX!dnX!d%XX!e%XX!f%XX!gmX!h%XX(v%XX(x%XX(y%XX)T%XX)U%XX)V%XX)W%XX)Y%XX)kmX~P+JbO]nX]%XXlmXpnXp%XXrnXsnXtnXunXvnXwnXxnXynX}nX!V%XX!rnX!snX!tnX!unX!vnX!xnX!{nX%wnX&snX&tnX(snX)TnX)VnX)WnX~O!TnX(wnX)XnX)knX~P, sOdnX!VnX)X%XX~P, sOlmXpnX)X%XX~Od)pO%Z)qO(z:sO~Od)pO%Z)qO(z:xO~Od)pO%Z)qO(z:tO~Od$RO%Z*UO']$TO'`$UO(z:sO~Od$RO%Z*UO']$TO'`$UO(z:uO~Od$RO%Z*UO']$TO'`$UO(z:wO~O]iXriXsiXtiXuiXviXwiXxiXyiX!OiX!ViX&siX&tiX)TiX)ViX)WiXdiX}iX!riX!siX!tiX!uiX!viX!xiX!{iX%wiX(siX~P#1jO]ZXlgXpZXpiX!VZX!hZX)XZX)kZX~O!TZX#vZX(wZX~P,(ZOlgXpiX)QiX)XZX)kiX~O]ZX]iXdiXlgXpZXpiXriXsiXtiXuiXviXwiXxiXyiX}iX!VZX!ViX!riX!siX!tiX!uiX!viX!xiX!{iX%wiX&siX&tiX(siX)TiX)ViX)WiX!OZX!OiX!hiX)YiX)kiX~O)XZX~P,)eO]ZX]iXlgXpZXpiXriXsiXtiXuiXviXwiXxiXyiX!TiX!VZX!ViX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!cZX!eZX!fZX!gZX!hZX!hiX&siX&tiX(vZX(xZX(yZX)TZX)TiX)UZX)VZX)ViX)WZX)WiX)YZX)YiX)kZX~OQZXQiX!dZX!diX~P,,OO]iXdiXriXsiXtiXuiXviXwiXxiXyiX}iX!ViX!riX!siX!tiX!uiX!viX!xiX!{iX%wiX&siX&tiX(siX)TiX)ViX)WiX~P#1jO]ZX]iXdiXlgXpZXpiXriXsiXtiXuiXviXwiXxiXyiX}iX!VZX!ViX!riX!siX!tiX!uiX!viX!xiX!{iX%wiX&siX&tiX(siX)TiX)ViX)WiX~O)XiX~P,1QOdiX}iX!OZX!OiX!riX!siX!tiX!uiX!viX!xiX!{iX%wiX(siX)kiX~P,,OO]ZX]iXlgXpZXpiXriXsiXtiXuiXviXwiXxiXyiX}iX!TiX!VZX!riX!siX!tiX!uiX!viX!xiX!{iX%wiX&siX&tiX(siX(wiX)TiX)ViX)WiX)XiX)kiX~Or!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O~PBUOd$RO%Z*UO(z:sO~Od$RO%Z*UO(z:tO~Od$RO%Z*UO(z:zO~Od$RO%Z*UO(z:yO~O]%hOd!POl%bOr!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O!V%kO!{!dO!|%RO%w$mO(s$xO)T;eO)V;fO)W;fO~O]%hOd!POl%bO!V%kO!{!dO%w$mO(s$xO)T;eO)V;fO)W;fO~Od$RO%Z$SO(z:tO~Od$RO%Z$SO(z:xO~Ol:}O~Ol:|O~O]cXlgXpiX!TcX~Od)pO%Z*UO(z:sO~Od)pO%Z*UO(z:tO~Od)pO%Z*UO(z:uO~Od)pO%Z*UO(z:vO~Od)pO%Z*UO(z:wO~Od)pO%Z*UO(z:yO~Od)pO%Z*UO(z:zO~Or!^Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^O~P,9^O])OXr)OXs)OXt)OXu)OXv)OXw)OXx)OXy)OX})OX!r)OX!s)OX!t)OX!u)OX!v)OX!x)OX!{)OX%w)OX&s)OX&t)OX(s)OX)T)OX)V)OX)W)OX)k)OX~Ol:|O!T)OX(w)OX)X)OX~P,=]O]&xXlmXpnX!T&xX~Od4oO%Z*UO(z;xO~Ol;`O)T;|O)V5eO)W5eO~P(EzOd!POl%bO!{!dO%w$mO(s$xO~O]1VO!V1TO)T0}O)V;}O)W;}OQ#nX!d#nX!h#nX!O#nX~P,@XO)T;^O~Ol;lO~Ol;mO~Ol;nO~Ol;pO~Ol;qO~Ol;rO~Ol;pO!T$WOQ)OX!d)OX!h)OX)Y)OX!O)OX)k)OX~P$GXOl;nO!T$WO~P$GXOl;lO!g$YO)k$YO~Ol;nO!g$YO)k$YO~Ol;pO!g$YO)k$YO~Ol;mO!O)OX!h)OX)Y)OX)k)OX~P$GXOd/aO%Z*UO(z;xO~Ol;yO~O)T<^O~OV'f'i'j'h(p)Z!R(sST%[!Y!['kd%]!i'S!f]'g*['l(x!^!_'m'n'm~\",\n  goto: \"%8]*[PPPPPP*]P*`PP.W4nP7o7o:{P:{>XP>r?U?jFdMf!&l!-UP!4Q!4u!5jP!6UPPPPPPPP!6oP!8ZPP!9n!;YP!;`PPPPPP!;cP!;cPP!;cPPPPPPPPP!;o!?XP!?[PP!?x!@mPPPPP!@qP>u!BUPP>u!D_!F`!Fn!HV!IxP!JTP!Jd!Jd!Mv##X#$q#(P#+]!F`#+gPP!F`#+n#+t#+g#+g#+wP#+{#,j#,j#,j#,j!IxP#-T#-f#/lP#0SP#1qP#1u#2P#2v#3R#5a#5i#5i#5p#1uP#1uP#6U#6[P#6fPP#7T#7t#8h#7TP#9[#9hP#7TP#7TPP#7T#7TP#7TP#7TP#7TP#7TP#7TP#7TP#9k#6f#:ZP#:rP#;Z#;Z#;Z#;Z#;h#1uP#<Q#AO#AmPPPPPPPP#BeP#BuP#BuP#CT#Fd#:hPP#Bo#FxP#G_#Gj#Gp#Gp#Bo#HfP#1u#1u#1u#1u#1uP!Jd#IS#IZ#IZ#IZ#I_!Mp#Ii!Mp#Im!Fn!Fn!Fn#Ip#N[!Fn>u>u>u$%V!@m!@m!@m!@m!@m!@m!6o!6o!6o$%jP$'X$'g!6o$'mPP!6o$)}$*Q#B[$*T:{7o$-]$/W$0w$2g7oPP7o$4Z7oP7o7oP7oP$7c7oP7oPP7o$7oPPPPPPPPP*]P$:y$;P$=h$?p$?v$@^$@h$@s$AS$AY$Bj$Ci$Cp$Cw$C}$DV$Da$Dg$Dv$D|$EV$E_$Ej$Ep$Ez$FQ$F[$Fc$Ft$Fz$GQP$GW$G`$Gg$Gu$Ie$Ik$Iq$Ix$JRPPPPPPPP$JX$J]PPPPP%#a$)}%#d%&n%(xP%)V%)YPPPPPPPPPP%)f%*i%*o%*s%,l%-{%.n%.u%1W%1^PPP%1h%1s%1v%1|%3T%3W%3d%3n%3r%4x%5m%5s#BeP%6^%6p%6s%7V%7e%7i%7o%7u$)}$*Q$*Q%7x%7{P%8V%8YR#cP'dmO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'e'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-f-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:jU%om%p7UQ&m!`Q(k#]d0S*O0P0Q0R0U5R5S5T5W8UR7U3Xf}Oaewx{!g&S'e*r-f&v$i[!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&W&b&f&x&y&|'O'P'b'j'k'z(a(c(j)m)s*i*j*m*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-j.S.T.X/Q/T/_/f/o/q/v/x1O1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:jS%`f0k#d%jgnp|#O$g$|$}%S%d%h%i%w&s'u'v(R*Z*a*c*u+^,m,w-`-s-z.i.p.r0`0|0}1R1V2b2m5e6k;[;];^;d;e;f;s;t;u;v;z;{;|;}<[<]<^S%qm!YS&u!h#PQ']!tQ'h!yQ'i!zQ(k#`Q(l#]Q(m#^Q*y%kQ,X&lQ,^&nQ-T'^Q-g'gQ-n'rS.u([4]Q/i)hQ0h*nQ2T,]Q2[,dQ3S-hQ4f/PQ4j/WQ5j1QQ6`2WQ7R3TQ8e6_Q9i8OR;_1T$|#hS!]$y%Q%T%Z&j&k'Q'X'Z'a'c(b(f(i(x(y)S)T)U)V)W)X)Y)Z)[)])^)_)`)l)r)y+Y+h,P,T,k,v-k-l.P.|/s0c0e0j0l0z1c1|2d2k3V3g3h4g4h4n4q4w4y4}5O5h5t5{6Y6i6m6w7O7u7v7x8W8X8g8j8n8v9X9`9o9u:Q:X:^:d:mQ&p!dQ(h#ZQ(t#bQ)k$T[*t%e*X0n2c2j3OQ,_&oQ/R(gQ/V(lQ/^(uS/l)j/SQ0u+RS4u/m/nR8S4v'e![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'e'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-f-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:j'e!VO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'e'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-f-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:jQ)P#kS+R%y0vQ/u)tk4R.j3w3{4O4P7g7i7j7l7o9]9^:VQ)R#kk4Q.j3w3{4O4P7g7i7j7l7o9]9^:Vl)Q#k.j3w3{4O4P7g7i7j7l7o9]9^:VT+R%y0v`UOwx!g&S'e*r-fW$`[e$e(c#l$p_!f!u!}#R#S#T#U#V#Z$S$T$l%U&U&Y&c&m'_(O(Q(V(_(h)k)q+]+b+c+u+z,Y,l,{-R-r-w.Z.[.b.c.g.t.x1W1[1i1n1p2o3`3a3b3t3x5n6R6T7`8_![%cg$g%d%i&s*Z*u+^,m,w-`0}1R2b;[;];^;e;f;s;t;u;v;z;{;}<[<]<^Y%snp%w-s.il(}#k.j3w3{4O4P7g7i7j7l7o9]9^:VS;i'u-zU;j(R.p.r&|<Paf{|!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$f$k$|$}%S%]%h%m&Q&W&b&y&|'O'j'k'v'z(a(j)m)s*a*c*i*j*m*s+X+Z+i+k+l,Q,S,o,r-j.S.T.X/Q/T/_/f/o/q/v/x0`0k0|1O1T1d1e1o1s1}2f2l2m2x4S4V4[4e5^5e5i5u6c6g6j6k6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:j;d;|Q<Q1Vd<R&x'P'b,x-^-_-b2i2}3QW<S&f*w2P3mQ<T#O[<U!t'^'g,]2W6_T<a%y0v`VOwx!g&S'e*r-fW$a[e$e(cQ$p.x!j$q_!f!u!}#V#Z$S$T$l%U&U&Y&c&m'_(h)k)q+]+b+u,Y,l,{-R-r.g1W1[1i1n1p2o3x5n8_&^$zaf{!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$f$k%]%m&Q&W&b&y&|'O'j'k'z(a(j)m)s*i*j*m*s+X+Z+i+k+l,Q,S,o,r-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2f2l2x4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:j![%cg$g%d%i&s*Z*u+^,m,w-`0}1R2b;[;];^;e;f;s;t;u;v;z;{;}<[<]<^Y%snp%w-s.iQ's#O|'}#R#S#T#U(O(Q(V(_+c+z.Z.[.b.c.t3`3a3b3t6R6T7`l(}#k.j3w3{4O4P7g7i7j7l7o9]9^:VS-q'u-zQ3[-wU;w(R.p.rn<P|$|$}%S%h'v*a*c0`0|2m5e6k;d;|[<U!t'^'g,]2W6_W<V&f*w2P3md<W&x'P'b,x-^-_-b2i2}3QQ<_1VT<a%y0v!U!UO[ewx!g$e&S&f&x'P'b'e(c*r*w,x-^-_-b-f2P2i2}3Q3m!v$t_!f!u!}#O#V#Z$S$T$l%U&U&Y&c&m'_'u(R(h)k)q+]+u,Y,l,{-R-r-z.g.p.r1V1W1[1i1n1p2o3x5n8_&^%Paf{!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$f$k%]%m&Q&W&b&y&|'O'j'k'z(a(j)m)s*i*j*m*s+X+Z+i+k+l,Q,S,o,r-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2f2l2x4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:j$Q%lgnp|#k$g$|$}%S%d%h%i%w%y&s'^'g'v*Z*a*c*u+^,],m,w-`-s.i.j0`0v0|0}1R2W2b2m3w3{4O4P5e6_6k7g7i7j7l7o9]9^:V;[;];^;d;e;f;s;t;u;v;z;{;|;}<[<]<^Q'[!tz(P#R#S#T#U(O(Q(V(_+z.Z.[.b.c.t3`3a3b3t6R6T7`f-['`-U-W-Z2s2t2v2y6u6v8tQ1Z+bQ1^+cQ2n,zQ3]-wQ4`.xQ5p1]R8Z5q!U!UO[ewx!g$e&S&f&x'P'b'e(c*r*w,x-^-_-b-f2P2i2}3Q3m!x$t_!f!u!}#O#V#Z$S$T$l%U&U&Y&c&m'_'u(R(h)k)q+]+b+u,Y,l,{-R-r-z.g.p.r1V1W1[1i1n1p2o3x5n8_&^%Paf{!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$f$k%]%m&Q&W&b&y&|'O'j'k'z(a(j)m)s*i*j*m*s+X+Z+i+k+l,Q,S,o,r-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2f2l2x4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:j$S%lgnp|!t#k$g$|$}%S%d%h%i%w%y&s'^'g'v*Z*a*c*u+^,],m,w-`-s.i.j0`0v0|0}1R2W2b2m3w3{4O4P5e6_6k7g7i7j7l7o9]9^:V;[;];^;d;e;f;s;t;u;v;z;{;|;}<[<]<^|(P#R#S#T#U(O(Q(V(_+c+z.Z.[.b.c.t3`3a3b3t6R6T7`Q3]-wR4`.x`WOwx!g&S'e*r-fW$b[e$e(c#l$p_!f!u!}#R#S#T#U#V#Z$S$T$l%U&U&Y&c&m'_(O(Q(V(_(h)k)q+]+b+c+u+z,Y,l,{-R-r-w.Z.[.b.c.g.t.x1W1[1i1n1p2o3`3a3b3t3x5n6R6T7`8_![%cg$g%d%i&s*Z*u+^,m,w-`0}1R2b;[;];^;e;f;s;t;u;v;z;{;}<[<]<^Y%snp%w-s.il(}#k.j3w3{4O4P7g7i7j7l7o9]9^:VS;i'u-zU;j(R.p.rn<P|$|$}%S%h'v*a*c0`0|2m5e6k;d;|Q<Q1VQ<T#O[<U!t'^'g,]2W6_&^<Xaf{!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$f$k%]%m&Q&W&b&y&|'O'j'k'z(a(j)m)s*i*j*m*s+X+Z+i+k+l,Q,S,o,r-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2f2l2x4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:jd<Y&x'P'b,x-^-_-b2i2}3QW<Z&f*w2P3mT<a%y0vp$PT$_$o%b%r(|;O;P;Q;`;a;b;c;g;h<`o)n$V*V*]/b:{:|:};l;m;n;o;p;q;r;yp$QT$_$o%b%r(|;O;P;Q;`;a;b;c;g;h<`o)o$V*V*]/b:{:|:};l;m;n;o;p;q;r;y^&e}!O$i$j%`%j;_d&i!U$t%P%l'[(P1Z1^3]4`V/d)P)Q4RS%Ye$eQ,U&fQ/O(cQ2p-RQ5}1pQ6Z2PQ6q2oR9l8_$R!TO[_ewx!f!g!u!}#O#V#Z$S$T$e$l%U&S&U&Y&c&f&m&x'P'_'b'e'u(R(c(h)k)q*r*w+]+b+u,Y,l,x,{-R-^-_-b-f-r-w-z.g.p.r1V1W1[1i1n1p2P2i2o2}3Q3m3x5n8_#`^O[_`wx!f!g!}#O$S$d$l$s$u&S&U&Y&c&m&r&x'P'b'e'u(R)q*^*r*w+],Y,l,x,{-^-_-b-f-r-w-z.g.p.r1V1W1i2i2}3Q3m3x_(V#R#S#T+c3`3a3b$RZO[wx!g!k#R#S#T%m&S&U&Y&c&m&w&x&y&|'O'P'['b'e'u'y(O(Q(R(V*r*w+]+c,Y,i,l,r-Q-^-_-b-f-r-w-z-}.b.g.p.t1V1W1i2f2n2}3Q3`3a3b3m6g6n8k9p9t:[:a:jQ$]YR0W*PR*R$]e0S*O0P0Q0R0U5R5S5T5W8U'd!YO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'e'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-f-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:je0S*O0P0Q0R0U5R5S5T5W8UR5X0W^(U#R#S#T+c3`3a3bY.`(O(S(V(W7XU3o.^.a.tS7]3p4ZR9g7w^(T#R#S#T+c3`3a3b[._(O(S(U(V(W7XW3n.^.`.a.tU7[3o3p4ZS9O7]7wR:Z9gT.n(R.ph]Owx!g&S'e'u(R*r-f-z.p!v^[_`!f!}#O$S$d$l$s$u&U&Y&c&m&r&x'P'b)q*^*w+],Y,l,x,{-^-_-b-r-w.g.r1V1W1i2i2}3Q3m3xQ%tnT1x,O1y!nbOaenpwx{|!g#O$|$}%S%h%w&S'e'u'v(R*a*c*r-f-s-z.i.p.r0`0|1V2m5e6k;d;|f-X'`-U-W-Z2s2t2v2y6u6v8tj3|.j3w3{4O4P7g7i7j7l7o9]9^:Vr<Og$g%d%i&s*Z*u,m,w-`2b;[;];^;s;u;zi<b+^0}1R;e;f;t;v;{;}<[<]<^!O&^y%X&V&Y&Z'l)i*e*g+^+f+y/p0a0|0}1R1V1m5e5z;|;}z&az%O%W%e&d't*X*`,c-{0^0_0n1P2c2j3O5Z5f6p8mS'|#Q.[n+m&X*h+g+n+q-m/k0b1U1a4x5[5d5y8]Q2Z,b^2w-Y2u2{6t6{8s9we7m3}7c7k7s7t9Y9[9d:U:gS+_&U1WY+o&Y&c*w1V3mR5w1i#{!POaegnpwx{|!g#O$g$|$}%S%d%h%i%w&S&s'e'u'v(R*Z*a*c*r*u+^,m,w-`-f-s-z.i.p.r0`0|0}1R1V2b2m5e6k;[;];^;d;e;f;s;t;u;v;z;{;|;}<[<]<^doOwx!g&S'e'u*r-f-z#U!Paeg{|#O$g$|$}%S%d%h%i&s'v*Z*a*c*u+^,m,w-`0`0|0}1R1V2b2m5e6k;[;];^;d;e;f;s;t;u;v;z;{;|;}<[<]<^U%vnp-sQ+O%wS.h(R.pT3z.i.rW+s&^+m+t1fV+{&a+|7mQ+y&`U+{&a+|7mQ-z'uT.V'z.X'd![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'e'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-f-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:jX1u+z.[6R6T'[!VO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'e'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-f-j.S.T.X/Q/_/f/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:jW1u+z.[6R6TR2h,t![jO[wx!g!k%m&S&y&|'O'b'e*r,r-^-_-b-f2f2}6g6n8k9p9t:[:a:jY%Ve$e(c1s3mQ'S!nS(z#i5^Q,n&xQ,y'PS.R'z.XQ2e,oQ6o2lQ7Q3QQ8l6jR9q8i'[![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'e'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-f-j.S.T.X/Q/_/f/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:jX1u+z.[6R6T'eyO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'e'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l+z,Q,S,o,r,x-^-_-b-f-j.S.T.X.[/Q/_/f/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[5^5i5u6R6T6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:jQ&`yS'u#O-xR1_+dS+_&U1WR5r1_Q1S+^R5k1RR1S+^T+_&U1Wz&[%X&V&Y&Z'l)i*e*g+^+f/p0a0|0}1R1V1m5e5z;|;}Q&]yR1q+y!P&[y%X&V&Y&Z'l)i*e*g+^+f+y/p0a0|0}1R1V1m5e5z;|;}Q+v&^S+}&a7mS1g+m+tQ1w+|R5v1f![kO[wx!g!k%m&S&y&|'O'b'e*r,r-^-_-b-f2f2}6g6n8k9p9t:[:a:jS%zo.hS&Oq-uQ&_yQ&q!eQ*q%eU*|%v%{3zS+Q%x%}Q+r&]Q,s&{S0[*X,cS0r*}+OQ0t+PQ1r+yQ5Y0^Q5_0sQ6P1qQ6a2ZQ7r3}Q9W7cR:T9Y`uOwx!g&S'e*r-fQ,Z&mQ-y'uQ3^-wR3c-z|lOwx!g!k%m&S&y'O'e*r,r-f2f6g6n8k9p9t:[:a:jU$h[&|-_S%zo.hS&Oq-uQ*q%eU*|%v%{3zS+Q%x%}S0[*X,cS0r*}+OQ0t+PQ5Y0^Q5_0sQ7r3}Q9W7cR:T9YT,`&q,aauOwx!g&S'e*r-f`uOwx!g&S'e*r-fQ,Z&mQ,o&xQ,x'PW-a'b-^-b2}Q-y'uQ3^-wQ3c-zR7P3Q[%fg$g,m,w-`2bR0o*u^$XV!U$a$z%P<V<WQ'S!nS)a#}*wS)w$W*rQ)z$YY*t%e*X0n2j3OQ/R(gS/l)j/SS0d*i4eS0m*s6cQ0u+RQ4U.jQ4r/fS4u/m/nS4z/q5^Q5P/xQ6d2cU7e3w3}4VQ8S4vQ8o6lY9U7c7f7g7p7qQ9v8qW:O9S9V9Y9ZQ:_9sU:e:P:R:SR:n:fS)w$W*rT4z/q5^Z)u$W)v*r/q5^Q&t!gQ'f!yQ,Z&mS,[&n'hS2V,^-iR6^2UQ&w!hR'y#PS,h&v'wQ2_,fR6b2^|lOwx!g!k%m&S&y'O'e*r,r-f2f6g6n8k9p9t:[:a:jV$h[&|-_!]kO[wx!g!k%m&S&y&|'O'b'e*r,r-^-_-b-f2f2}6g6n8k9p9t:[:a:j![hO[wx!g!k%m&S&y&|'O'b'e*r,r-^-_-b-f2f2}6g6n8k9p9t:[:a:jR'W!q![kO[wx!g!k%m&S&y&|'O'b'e*r,r-^-_-b-f2f2}6g6n8k9p9t:[:a:jR,o&xQ&y!iQ&{!jQ'O!lR,r&zR,p&x|lOwx!g!k%m&S&y'O'e*r,r-f2f6g6n8k9p9t:[:a:jX-a'b-^-b2}`uOwx!g&S'e*r-fQ,{'PQ-y'uS.n(R.pR3c-z`uOwx!g&S'e*r-fQ,{'PW-a'b-^-b2}T.n(R.pg-['`-U-W-Z2s2t2v2y6u6v8t}lOwx!g!k%m&S&y'O'e*r,r-f2f6g6n8k9p9t:[:a:jf!OOaewx{!g&S'e*r-f&|$j[f!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&W&b&f&x&y&|'O'P'b'j'k'z(a(c(j)m)s*i*j*m*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:j#d%jgnp|#O$g$|$}%S%d%h%i%w&s'u'v(R*Z*a*c*u+^,m,w-`-s-z.i.p.r0`0|0}1R1V2b2m5e6k;[;];^;d;e;f;s;t;u;v;z;{;|;}<[<]<^Q']!tQ-T'^Q-g'gQ2T,]Q6`2WR8e6_j$RT$_%b%r;O;P;Q;`;a;b;c;g;hi)p$V*V:{:|:};l;m;n;o;p;q;rj$RT$_%b%r;O;P;Q;`;a;b;c;g;hh)p$V*V:{:|:};l;m;n;o;p;q;rS/a(|<`V4o/b/c;y`uOwx!g&S'e*r-fQ-y'uR3c-z`uOwx!g&S'e*r-fT.n(R.p'd!YO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'e'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-f-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:jR7V3X`uOwx!g&S'e*r-fQ-y'uS.n(R.pR3c-z`pOwx!g&S'e*r-fQ%wnS-s'u-zT.i(R.pS%{o.hS*}%v3zR0s+OQ+S%yR5a0vS%zo.hS&Oq-uU*|%v%{3zS+Q%x%}S0r*}+OQ0t+PQ5_0sQ7r3}Q9W7cR:T9YdqOwx!g&S'e(R*r-f.pS%xn-sU%}p.i.rQ+P%wT-u'u-zS'{#Q.[R.]'|T.U'z.XS.V'z.XQ8|7YR9{8}T6R1t8cR6T1t#d!Pgnp|#O$g$|$}%S%d%h%i%w&s'u'v(R*Z*a*c*u+^,m,w-`-s-z.i.p.r0`0|0}1R1V2b2m5e6k;[;];^;d;e;f;s;t;u;v;z;{;|;}<[<]<^f!QOaewx{!g&S'e*r-f&}![[f!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&W&b&f&x&y&|'O'P'b'j'k'z(a(c(j)m)s*i*j*m*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:j#d!Pgnp|#O$g$|$}%S%d%h%i%w&s'u'v(R*Z*a*c*u+^,m,w-`-s-z.i.p.r0`0|0}1R1V2b2m5e6k;[;];^;d;e;f;s;t;u;v;z;{;|;}<[<]<^f!QOaewx{!g&S'e*r-f&|![[f!W!X!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#{#}$U$W$Y$e$f$k%]%m&Q&W&b&f&x&y&|'O'P'b'j'k'z(a(c(j)m)s*i*j*m*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[4e5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:jk4Q.j3w3{4O4P7g7i7j7l7o9]9^:VQ4U.jS7e3w3}U9U7c7g7pS:O9S9YR:e:R$Q!TO[_ewx!f!g!u!}#O#V#Z$S$T$e$l%U&S&U&Y&c&f&m&x'P'_'b'e'u(R(c(h)k)q*r*w+]+b+u,Y,l,x,{-R-^-_-b-f-r-w-z.g.p.r1V1W1[1i1n1p2P2i2o2}3Q3m3x5n8_R4a.xQ(^#US.y(](_S4b.z.{R7{4cQ.v([R7y4]$Q!TO[_ewx!f!g!u!}#O#V#Z$S$T$e$l%U&S&U&Y&c&f&m&x'P'_'b'e'u(R(c(h)k)q*r*w+]+b+u,Y,l,x,{-R-^-_-b-f-r-w-z.g.p.r1V1W1[1i1n1p2P2i2o2}3Q3m3x5n8_p$w`$d$s%X&r'`(`(g)j*e-U/n1m5o5z8Yq)O#k%y.j0v3w3{4O4P7g7i7j7l7o9]9^:VR,V&fR6[2P']!VO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'e'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-f-j.S.T.X/Q/_/f/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:j$q#rS%T%Z'Q'X'Z'a'c(b(f(i(x(y)S)T)V)W)X)Y)Z)[)])^)_)`)l)r)y+Y+h,P,T,k,v-k-l.P.|/s0c0e0j0l0z1c1|2d2k3V3g3h4g4h4n4q4w4y4}5O5h5t5{6Y6i6m6w7O7u7v7x8W8X8g8j8n8v9X9`9o9u:Q:X:^:d:m$]#sS%T%Z'Q'X'Z'a'c(i(x(y)S)W)_)`)l)r)y+Y+h,P,T,k,v-k-l.P.|/s0c0e0j0l0z1c1|2d2k3V3g3h4g4h4n4q4w4y4}5O5h5t5{6Y6i6m6w7O7u7v7x8W8X8g8j8n8v9X9`9o9u:Q:X:^:d:m$Z#tS%T%Z'Q'X'Z'a'c(i(x(y)S)_)`)l)r)y+Y+h,P,T,k,v-k-l.P.|/s0c0e0j0l0z1c1|2d2k3V3g3h4g4h4n4q4w4y4}5O5h5t5{6Y6i6m6w7O7u7v7x8W8X8g8j8n8v9X9`9o9u:Q:X:^:d:m$c#wS%T%Z'Q'X'Z'a'c(i(x(y)S)V)W)X)Y)_)`)l)r)y+Y+h,P,T,k,v-k-l.P.|/s0c0e0j0l0z1c1|2d2k3V3g3h4g4h4n4q4w4y4}5O5h5t5{6Y6i6m6w7O7u7v7x8W8X8g8j8n8v9X9`9o9u:Q:X:^:d:m']![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'e'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-f-j.S.T.X/Q/_/f/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:jQ/S(gQ/m)jQ4v/nR9h7}'a![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#i#l#q#r#s#t#u#v#w#x#y#z#}$U$W$Y$e$f$k%]%m&Q&S&W&b&f&x&y&|'O'P'b'e'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-f-j.S.T.X/Q/T/_/f/o/q/v/x0k1O1T1d1e1o1s1}2P2f2i2l2x2}3Q3m4S4V4[5^5i5u6c6g6j6l6n6x6z7P7f7n7q8i8k8q8w8x9V9Z9a9c9p9s9t:P:S:Y:[:a:f:jQ#eQR(v#eU$|a;d;|b%Ue$e&f(c-R1p2P2o8_Q'_!u!Q*_$|%U'_*a*g+i,Q0`0a1e2s6u6x7i8t9]9a:V;[;s;t;z;{<[S*a$}%SQ*g%XS+i&W1TQ,Q&bQ0`*cQ0a*eQ1e+lQ2s-WS6u2t2vQ6x2xQ7i3{Q8t6vS9]7j7lQ9a7nQ:V9^Q;[%dS;s;];^S;t<]<^Q;z;uQ;{;vT<[0};e`[Owx!g&S'e*r-fl$c[&|(O+],Y,i,l-Q-_-r-}.b.g.tl&|!k%m&y'O,r2f6g6n8k9p9t:[:a:j^(O#R#S#T+c3`3a3b`+]&U&Y&c*w1V1W1i3mS,Y&m-wQ,i&wU,l&x'P3QS-Q'[2nW-_'b-^-b2}S-r'u-zQ-}'yQ.b(QS.g(R.pR.t(VQ)}$[R/{)}Q0U*OQ5R0PQ5S0QQ5T0RY5U0U5R5S5T8UR8U5WQ*Q$]S0X*Q0YR0Y*RS.c(Q.bS3r.c7`R7`3tQ3u.dS7^3s3vU7b3u7^9PR9P7_Q.p(RR4W.p#Q_O[wx!f!g!}#O$S$l&S&U&Y&c&m&x'P'b'e'u(R)q*r*w+],Y,l,x,{-^-_-b-f-r-w-z.g.p.r1V1W1i2i2}3Q3m3xU$r_$u*^U$u`$d&rR*^$sU$}a;d;|d*b$}*c2t6v7j9^;];u;v<]Q*c%SQ2t-WQ6v2vQ7j3{Q9^7lQ;]%dQ;u;^Q;v<^T<]0};eS+|&a7mR1v+|S*k%Z/sR0f*kQ1X+`R5m1XU+f&V0};|R1`+fQ+t&^Q1f+mT1l+t1fQ8`5}R9m8`QwOU&Rw&S-fS&Sx*rR-f'eQ,a&qR2Y,aW)v$W*r/q5^R/w)vU/r)r)w0jR4{/r[*v%e%f*X2c2j3OR0p*vQ,e&uR2],eQ-b'bQ2}-^T3P-b2}Q2z-YR6|2zQ-i'hQ2U,^T3U-i2US%pm7UR*{%phnOwx!g&S'e'u(R*r-f-z.pR%unQ0w+SR5b0wQ.X'zR3j.XQ1y,OR6U1yU*o%`*y;_R0i*oS1j+o0qR5x1jQ7p3}Q9S7cU9e7p9S:RR:R9Y$S!SO[_ewx!f!g!u!}#O#V#Z$S$T$e$l%U&S&U&Y&c&f&m&x'P'_'b'e'u(R(c(h)k)q*r*w+]+b+u,Y,l,x,{-R-^-_-b-f-r-w-z.g.p.r.x1V1W1[1i1n1p2P2i2o2}3Q3m3x5n8_R&g!SQ4^.vR7z4^Q2Q,VR6]2QS/g)`)aR4s/gW(p#a(k(l/VR/Z(pQ8P4jR9j8PT)b#}*w!YSO[wx!g!k%m&S&y&|'O'b'e,r-^-_-b-f2f2}6g6n8k9p9t:[:a:jj$ya{$k%]+k,S1d1}5u6z8w9c:YY%Te$e(c1s3mY%Zf$f(j)m*mQ&j!WQ&k!XQ'Q!nQ'X!rQ'Z!sQ'a!vQ'c!xQ(b#XQ(f#YS(i#[+ZQ(x#gQ(y#iQ)S#lQ)T#qQ)U#rQ)V#sQ)W#tQ)X#uQ)Y#vQ)Z#wQ)[#xQ)]#yQ)^#zQ)_#{S)`#}*wQ)l$UQ)r$WQ)y$YQ+Y&QS+h&W1TQ,P&bQ,T&fQ,k&xQ,v'PQ-k'jQ-l'kS.P'z.XQ.|(aS/s)s0kS0c*i4eQ0e*jQ0j*rQ0l*sQ0z+XS1c+i+lQ1|,QQ2d,oS2k,x7PQ3V-jQ3g.SQ3h.TQ4g/QQ4h/TQ4n/_Q4q/fQ4w/oQ4y/qQ4}/vQ5O/xQ5h1OQ5t1eQ5{1oQ6Y2PS6i2i8xQ6m2lQ6w2xQ7O3QQ7u4SQ7v4VQ7x4[Q8W5^Q8X5iQ8g6cQ8j6jQ8n6lQ8v6xS9X7f7qQ9`7nQ9o8iQ9u8qS:Q9V9ZQ:X9aQ:^9sS:d:P:SR:m:fR,W&fh]Owx!g&S'e'u(R*r-f-z.p!v^[_`!f!}#O$S$d$l$s$u&U&Y&c&m&r&x'P'b)q*^*w+],Y,l,x,{-^-_-b-r-w.g.r1V1W1i2i2}3Q3m3x#r${ae!u$e$|$}%S%U%X%d&W&b&f'_(c*a*c*e*g+i+l,Q-R-W0`0a1T1e1p2P2o2s2t2v2x3{6u6v6x7i7j7l7n8_8t9]9^9a:V;[;];^;d;e;s;t;u;v;z;{<[<]<^Q%tnS+e&V+fW+s&^+m+t1fU+{&a+|7mQ1n+uT5g0};|d`Owx!g&S'e'u*r-f-zS$d[-rQ$s_b%Xe$e&f(c-R1p2P2o8_!h&r!f!}#O$S$l&U&Y&c&m&x'P'b(R)q*w+],Y,l,x,{-^-_-b-w.g.p.r1V1W1i2i2}3Q3m3xQ'`!uS(`#V+bQ(g#ZS)j$T(hQ*e%UQ-U'_Q/n)kQ1m+uQ5o1[Q5z1nR8Y5nS(X#R3aS(Y#S3bV(Z#T+c3`R$^Ye0T*O0P0Q0R0U5R5S5T5W8UW(S#R#S#T+cQ(]#US.^(O(VS.d(Q.bQ.{(_W1u+z.[6R6TQ3_-wQ3l.ZQ3s.cQ4Z.tU7X3`3a3bQ7a3tR9Q7`Q.e(QR3q.bT.o(R.phgOwx!g&S&m'e'u*r-f-w-zU$g[,Y-rQ&s!fQ'l!}Q'v#OQ)i$SQ*Z$l`+^&U&Y&c*w1V1W1i3mQ,m&xQ,w'PY-`'b-^-b2}3QS.j(R.pQ/p)qQ0|+]S2b,l-_S2m,x,{S3w.g.rQ6k2iR7g3xh]Owx!g&S'e'u(R*r-f-z.p!v^[_`!f!}#O$S$d$l$s$u&U&Y&c&m&r&x'P'b)q*^*w+],Y,l,x,{-^-_-b-r-w.g.r1V1W1i2i2}3Q3m3xR%tnQ3}.jQ7c3wQ7k3{Q7s4OQ7t4PQ9Y7gU9[7i7j7lQ9d7oS:U9]9^R:g:VZ+p&Y&c*w1V3mtzOnpwx!g%w&S'e'u(R*r-f-s-z.i.p.r[%Oa%d0};d;e;|U%We%h1VQ%eg^&d{|%i1R5e;f;}Q't#OQ*X$gb*`$|$}%S;[;];^<[<]<^Q,c&sQ-{'vQ0^*Z[0_*a*c;s;t;u;vQ0n*uQ1P+^Q2c,mQ2j,wS3O-`2bU5Z0`;z;{Q5f0|Q6p2mR8m6kQ,O&aR9_7mS1t+z.[Q8b6RR8c6T[%^f$f(j)m)s0kR0g*mR+a&UQ+`&UR5l1WS&Xy+yQ*h%XU+g&V0};|S+n&Y1VW+q&Z1R5e;}Q-m'lQ/k)iS0b*e*gQ1U+^Q1a+fQ4x/pQ5[0aQ5d0|Q5y1mR8]5zR6O1p^vOwx&S'e*r-fR&t!gW%gg,m,w-`T*Y$g2bT)x$W*r`uOwx!g&S'e*r-fQ&}!kQ*z%mQ,q&yQ,u'OQ2g,rQ6f2fQ8h6gQ8p6nQ9r8kQ:]9pQ:`9tQ:i:[Q:k:aR:o:j|lOwx!g!k%m&S&y'O'e*r,r-f2f6g6n8k9p9t:[:a:jU$h[&|-_X-a'b-^-b2}Q-]'`R2r-US-Y'`-UQ2u-WQ2{-ZU6t2s2t2vQ6{2yS8s6u6vR9w8t`rOwx!g&S'e*r-fS-t'u-zT.k(R.pR+T%y`sOwx!g&S'e*r-fS-v'u-zT.l(R.p`tOwx!g&S'e*r-fT.m(R.pT.W'z.XX%af%k0k1TQ.z(]R4c.{R.w([R(e#XQ(s#aS/U(k(lR4i/VR/Y(mR4k/W\",\n  nodeNames: \"\u26A0 RawString > MacroName LineComment BlockComment PreprocDirective #include String EscapeSequence SystemLibString Identifier ArgumentList ( ConditionalExpression AssignmentExpression CallExpression PrimitiveType FieldExpression FieldIdentifier DestructorName TemplateMethod ScopedFieldIdentifier NamespaceIdentifier TemplateType TypeIdentifier ScopedTypeIdentifier ScopedNamespaceIdentifier :: NamespaceIdentifier TypeIdentifier TemplateArgumentList < TypeDescriptor const volatile restrict _Atomic mutable constexpr constinit consteval StructSpecifier struct MsDeclspecModifier __declspec ) Attribute AttributeName Identifier AttributeArgs { } [ ] UpdateOp ArithOp ArithOp ArithOp LogicOp BitOp BitOp BitOp CompareOp CompareOp CompareOp > CompareOp BitOp UpdateOp , Number CharLiteral AttributeArgs VirtualSpecifier BaseClassClause Access virtual FieldDeclarationList FieldDeclaration extern static register inline thread_local AttributeSpecifier __attribute__ PointerDeclarator MsBasedModifier __based MsPointerModifier FunctionDeclarator ParameterList ParameterDeclaration PointerDeclarator FunctionDeclarator Noexcept noexcept RequiresClause requires True False ParenthesizedExpression CommaExpression LambdaExpression LambdaCaptureSpecifier TemplateParameterList OptionalParameterDeclaration TypeParameterDeclaration typename class VariadicParameterDeclaration VariadicDeclarator ReferenceDeclarator OptionalTypeParameterDeclaration VariadicTypeParameterDeclaration TemplateTemplateParameterDeclaration template AbstractFunctionDeclarator AbstractPointerDeclarator AbstractArrayDeclarator AbstractParenthesizedDeclarator AbstractReferenceDeclarator ThrowSpecifier throw TrailingReturnType CompoundStatement FunctionDefinition MsCallModifier TryStatement try CatchClause catch LinkageSpecification Declaration InitDeclarator InitializerList InitializerPair SubscriptDesignator FieldDesignator DeclarationList ExportDeclaration export ImportDeclaration import ModuleName PartitionName HeaderName CaseStatement case default LabeledStatement StatementIdentifier ExpressionStatement IfStatement if ConditionClause Declaration else SwitchStatement switch DoStatement do while WhileStatement ForStatement for ReturnStatement return BreakStatement break ContinueStatement continue GotoStatement goto CoReturnStatement co_return CoYieldStatement co_yield AttributeStatement ForRangeLoop AliasDeclaration using TypeDefinition typedef PointerDeclarator FunctionDeclarator ArrayDeclarator ParenthesizedDeclarator ThrowStatement NamespaceDefinition namespace ScopedIdentifier Identifier OperatorName operator ArithOp BitOp CompareOp LogicOp new delete co_await ConceptDefinition concept UsingDeclaration enum StaticAssertDeclaration static_assert ConcatenatedString TemplateDeclaration FriendDeclaration friend union FunctionDefinition ExplicitFunctionSpecifier explicit FieldInitializerList FieldInitializer DefaultMethodClause DeleteMethodClause FunctionDefinition OperatorCast operator TemplateInstantiation FunctionDefinition FunctionDefinition Declaration ModuleDeclaration module RequiresExpression RequirementList SimpleRequirement TypeRequirement CompoundRequirement ReturnTypeRequirement ConstraintConjuction LogicOp ConstraintDisjunction LogicOp ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator TemplateFunction OperatorName StructuredBindingDeclarator ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator BitfieldClause FunctionDefinition FunctionDefinition Declaration FunctionDefinition Declaration AccessSpecifier UnionSpecifier ClassSpecifier EnumSpecifier SizedTypeSpecifier TypeSize EnumeratorList Enumerator DependentType Decltype decltype auto PlaceholderTypeSpecifier ParameterPackExpansion ParameterPackExpansion FieldIdentifier PointerExpression SubscriptExpression BinaryExpression ArithOp LogicOp LogicOp BitOp UnaryExpression LogicOp BitOp UpdateExpression CastExpression SizeofExpression sizeof CoAwaitExpression CompoundLiteralExpression NULL NewExpression new NewDeclarator DeleteExpression delete ParameterPackExpansion nullptr this UserDefinedLiteral ParamPack #define PreprocArg #if #ifdef #ifndef #else #endif #elif PreprocDirectiveName Macro Program\",\n  maxTerm: 426,\n  nodeProps: [\n    [\"group\", -35,1,8,11,14,15,16,18,71,72,100,101,102,104,192,209,230,243,244,271,272,273,278,281,282,283,285,286,287,288,291,293,294,295,296,297,\"Expression\",-13,17,24,25,26,42,256,257,258,259,263,264,266,267,\"Type\",-19,126,129,148,151,153,154,159,161,164,165,167,169,171,173,175,177,179,180,189,\"Statement\"]\n  ],\n  propSources: [cppHighlighting],\n  skippedNodes: [0,3,4,5,6,7,10,298,299,300,301,302,303,304,305,306,307,348,349],\n  repeatNodeCount: 41,\n  tokenData: \"&*r7ZR!UOX$eXY({YZ.gZ]$e]^+P^p$epq({qr.}rs0}st2ktu$euv!7dvw!9bwx!;exy!<Yyz!=Tz{!>O{|!?R|}!AV}!O!BQ!O!P!DX!P!Q#+y!Q!R#Az!R![$(x![!]$Ag!]!^$Cc!^!_$D^!_!`%1W!`!a%2X!a!b%5_!b!c$e!c!n%6Y!n!o%7q!o!w%6Y!w!x%7q!x!}%6Y!}#O%:n#O#P%<g#P#Q%Kz#Q#R%Ms#R#S%6Y#S#T$e#T#i%6Y#i#j%Nv#j#o%6Y#o#p&!e#p#q&#`#q#r&%f#r#s&&a#s;'S$e;'S;=`(u<%lO$e&t$nY)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e&r%eW)[W'g&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^&j&SU'g&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&j&kX'g&jOY%}YZ%}Z]%}]^'W^#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&j']V'g&jOY%}YZ%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&j'uP;=`<%l%}&r'{P;=`<%l%^&l(VW(qQ'g&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O&l(rP;=`<%l(O&t(xP;=`<%l$e7Z)Y`)[W(qQ(o.o'g&j*[)`OX$eXY({YZ*[Z]$e]^+P^p$epq({qr$ers%^sw$ewx(Ox#O$e#O#P,^#P;'S$e;'S;=`(u<%lO$e.o*aT(o.oXY*[YZ*[]^*[pq*[#O#P*p.o*sQYZ*[]^*y.o*|PYZ*[4e+[`)[W(qQ(o.o'g&jOX$eXY+PYZ*[Z]$e]^+P^p$epq+Pqr$ers%^sw$ewx(Ox#O$e#O#P,^#P;'S$e;'S;=`(u<%lO$e4Z,cX'g&jOY%}YZ-OZ]%}]^-{^#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}4Z-V[(o.o'g&jOX%}XY-OYZ*[Z]%}]^-O^p%}pq-Oq#O%}#O#P,^#P;'S%};'S;=`'r<%lO%}4Z.QV'g&jOY%}YZ-OZ#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}7P.nT*X)`(o.oXY*[YZ*[]^*[pq*[#O#P*p3o/[[%_!b'RP)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`0Q!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o0_Y%^!b!a,g)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e6e1YY)[W(rQ(p/]'g&jOY%^Zr%^rs1xsw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^(U2RW)y!b)[W'g&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^4e2tf)[W(qQ'g&jOX$eXY2kZp$epq2kqr$ers%^sw$ewx(Ox!c$e!c!}4Y!}#O$e#O#P&f#P#T$e#T#W4Y#W#X5m#X#Y>u#Y#]4Y#]#^NZ#^#o4Y#o;'S$e;'S;=`(u<%lO$e4e4eb)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e5xd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y7W#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e7cd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z8q#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4e8|d)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#]4Y#]#^:[#^#o4Y#o;'S$e;'S;=`(u<%lO$e4e:gd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#b4Y#b#c;u#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e<Qd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y=`#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e=mb)[W(qQ'f.o'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e?Qf)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#`4Y#`#a@f#a#b4Y#b#cHV#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e@qf)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#]4Y#]#^BV#^#g4Y#g#hEV#h#o4Y#o;'S$e;'S;=`(u<%lO$e4eBbd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#ZCp#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4eC}b)[W(qQ'g&j'm.o'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4eEbd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#YFp#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4eF}b)[W(qQ'k.o'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4eHbd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#XIp#X#o4Y#o;'S$e;'S;=`(u<%lO$e4eI{d)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#]4Y#]#^KZ#^#o4Y#o;'S$e;'S;=`(u<%lO$e4eKfd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#ZLt#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4eMRb)[W(qQ'g&j'l.o'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4eNff)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z! z#Z#b4Y#b#c!.[#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e!!Xf)[W(qQ'h.o'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#X!#m#X#b4Y#b#c!(W#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e!#xd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y!%W#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e!%cd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z!&q#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4e!'Ob)[W(qQ'i.o'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e!(cd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#X!)q#X#o4Y#o;'S$e;'S;=`(u<%lO$e4e!)|d)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y!+[#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e!+gd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z!,u#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4e!-Sb)[W(qQ'j.o'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e!.gd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#V4Y#V#W!/u#W#o4Y#o;'S$e;'S;=`(u<%lO$e4e!0Qd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#`4Y#`#a!1`#a#o4Y#o;'S$e;'S;=`(u<%lO$e4e!1kd)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#i4Y#i#j!2y#j#o4Y#o;'S$e;'S;=`(u<%lO$e4e!3Ud)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#X!4d#X#o4Y#o;'S$e;'S;=`(u<%lO$e4e!4od)[W(qQ'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y!5}#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e!6[b)[W(qQV.o'g&j'n.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e3o!7q[)[W(qQ%[!b![,g'g&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!8rY!g-y)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!9o])W,g)[W(qQ%]!b'g&jOY$eZr$ers%^sv$evw!:hwx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!:uY)V,g%_!b)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2X!;pW)]S(qQ)Z,g'g&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O6i!<eY)[W(qQ]6_'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e'V!=`Y!Oa)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!>][)T,g)[W(qQ%[!b'g&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!?`^)[W(qQ%[!b!Y,g'g&jOY$eZr$ers%^sw$ewx(Ox{$e{|!@[|!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!@gY)[W!X-y(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!AbY!h,k)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!B__)[W(qQ%[!b!Y,g'g&jOY$eZr$ers%^sw$ewx(Ox}$e}!O!@[!O!_$e!_!`!8g!`!a!C^!a#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!CiY(y-y)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!Dd^)[W(qQ'g&j(x,gOY$eZr$ers%^sw$ewx(Ox!O$e!O!P!E`!P!Q$e!Q![!GY![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!Ei[)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox!O$e!O!P!F_!P#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!FjY)Y,k)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]!Gen)[W(qQ!i,g'g&jOY$eZr$ers%^sw$ewx!Icx!Q$e!Q![!GY![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2T!IjY(qQ'g&jOY(OZr(Ors%}s!Q(O!Q![!JY![#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O2T!Jcn(qQ!i,g'g&jOY(OZr(Ors%}sw(Owx!Icx!Q(O!Q![!JY![!g(O!g!h!La!h!i##`!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#X(O#X#Y!La#Y#Z##`#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T!Ljl(qQ!i,g'g&jOY(OZr(Ors%}s{(O{|!Nb|}(O}!O!Nb!O!Q(O!Q![# e![!c(O!c!h# e!h!i# e!i!n(O!n!o##`!o!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#Y# e#Y#Z# e#Z#`(O#`#a##`#a#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T!Ni^(qQ'g&jOY(OZr(Ors%}s!Q(O!Q![# e![!c(O!c!i# e!i#O(O#O#P&f#P#T(O#T#Z# e#Z;'S(O;'S;=`(o<%lO(O2T# nj(qQ!i,g'g&jOY(OZr(Ors%}sw(Owx!Nbx!Q(O!Q![# e![!c(O!c!h# e!h!i# e!i!n(O!n!o##`!o!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#Y# e#Y#Z# e#Z#`(O#`#a##`#a#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T##id(qQ!i,g'g&jOY(OZr(Ors%}s!h(O!h!i##`!i!n(O!n!o##`!o!w(O!w!x##`!x#O(O#O#P&f#P#Y(O#Y#Z##`#Z#`(O#`#a##`#a#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2]#%Sn)[W(qQ!i,g'g&jOY$eZr$ers%^sw$ewx(Ox{$e{|#'Q|}$e}!O#'Q!O!Q$e!Q![#(]![!c$e!c!h#(]!h!i#(]!i!n$e!n!o#*Y!o!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#Y#(]#Y#Z#(]#Z#`$e#`#a#*Y#a#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]#'Z`)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![#(]![!c$e!c!i#(]!i#O$e#O#P&f#P#T$e#T#Z#(]#Z;'S$e;'S;=`(u<%lO$e2]#(hj)[W(qQ!i,g'g&jOY$eZr$ers%^sw$ewx!Nbx!Q$e!Q![#(]![!c$e!c!h#(]!h!i#(]!i!n$e!n!o#*Y!o!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#Y#(]#Y#Z#(]#Z#`$e#`#a#*Y#a#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]#*ef)[W(qQ!i,g'g&jOY$eZr$ers%^sw$ewx(Ox!h$e!h!i#*Y!i!n$e!n!o#*Y!o!w$e!w!x#*Y!x#O$e#O#P&f#P#Y$e#Y#Z#*Y#Z#`$e#`#a#*Y#a#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e7Z#,W`)[W(qQ%[!b![,g'g&jOY$eZr$ers%^sw$ewx(Oxz$ez{#-Y{!P$e!P!Q#:s!Q!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z#-c])[W(qQ'g&jOY#-YYZ#.[Zr#-Yrs#/csw#-Ywx#5wxz#-Yz{#8j{#O#-Y#O#P#2`#P;'S#-Y;'S;=`#:m<%lO#-Y1e#._TOz#.[z{#.n{;'S#.[;'S;=`#/]<%lO#.[1e#.qVOz#.[z{#.n{!P#.[!P!Q#/W!Q;'S#.[;'S;=`#/]<%lO#.[1e#/]OT1e1e#/`P;=`<%l#.[7X#/jZ)[W'g&jOY#/cYZ#.[Zw#/cwx#0]xz#/cz{#4O{#O#/c#O#P#2`#P;'S#/c;'S;=`#5q<%lO#/c7P#0bX'g&jOY#0]YZ#.[Zz#0]z{#0}{#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#1SZ'g&jOY#0]YZ#.[Zz#0]z{#0}{!P#0]!P!Q#1u!Q#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#1|UT1e'g&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}7P#2eZ'g&jOY#0]YZ#0]Z]#0]]^#3W^z#0]z{#0}{#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#3]X'g&jOY#0]YZ#0]Zz#0]z{#0}{#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#3{P;=`<%l#0]7X#4V])[W'g&jOY#/cYZ#.[Zw#/cwx#0]xz#/cz{#4O{!P#/c!P!Q#5O!Q#O#/c#O#P#2`#P;'S#/c;'S;=`#5q<%lO#/c7X#5XW)[WT1e'g&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^7X#5tP;=`<%l#/c7R#6OZ(qQ'g&jOY#5wYZ#.[Zr#5wrs#0]sz#5wz{#6q{#O#5w#O#P#2`#P;'S#5w;'S;=`#8d<%lO#5w7R#6x](qQ'g&jOY#5wYZ#.[Zr#5wrs#0]sz#5wz{#6q{!P#5w!P!Q#7q!Q#O#5w#O#P#2`#P;'S#5w;'S;=`#8d<%lO#5w7R#7zW(qQT1e'g&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O7R#8gP;=`<%l#5w7Z#8s_)[W(qQ'g&jOY#-YYZ#.[Zr#-Yrs#/csw#-Ywx#5wxz#-Yz{#8j{!P#-Y!P!Q#9r!Q#O#-Y#O#P#2`#P;'S#-Y;'S;=`#:m<%lO#-Y7Z#9}Y)[W(qQT1e'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z#:pP;=`<%l#-Y7Z#;OY)[W(qQS1e'g&jOY#:sZr#:srs#;nsw#:swx#@{x#O#:s#O#P#<z#P;'S#:s;'S;=`#At<%lO#:s7X#;wW)[WS1e'g&jOY#;nZw#;nwx#<ax#O#;n#O#P#<z#P;'S#;n;'S;=`#@u<%lO#;n7P#<hUS1e'g&jOY#<aZ#O#<a#O#P#<z#P;'S#<a;'S;=`#>[<%lO#<a7P#=RXS1e'g&jOY#<aYZ%}Z]#<a]^#=n^#O#<a#O#P#>b#P;'S#<a;'S;=`#>[<%lO#<a7P#=uVS1e'g&jOY#<aYZ%}Z#O#<a#O#P#<z#P;'S#<a;'S;=`#>[<%lO#<a7P#>_P;=`<%l#<a7P#>i]S1e'g&jOY#<aYZ%}Z]#<a]^#=n^#O#<a#O#P#>b#P#b#<a#b#c#<a#c#f#<a#f#g#?b#g;'S#<a;'S;=`#>[<%lO#<a7P#?iUS1e'g&jOY#<aZ#O#<a#O#P#?{#P;'S#<a;'S;=`#>[<%lO#<a7P#@SZS1e'g&jOY#<aYZ%}Z]#<a]^#=n^#O#<a#O#P#>b#P#b#<a#b#c#<a#c;'S#<a;'S;=`#>[<%lO#<a7X#@xP;=`<%l#;n7R#AUW(qQS1e'g&jOY#@{Zr#@{rs#<as#O#@{#O#P#<z#P;'S#@{;'S;=`#An<%lO#@{7R#AqP;=`<%l#@{7Z#AwP;=`<%l#:s2]#BVt)[W(qQ!i,g'g&jOY$eZr$ers%^sw$ewx#Dgx!O$e!O!P$ m!P!Q$e!Q![$(x![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#U$e#U#V$+X#V#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j#l$e#l#m$=`#m;'S$e;'S;=`(u<%lO$e2T#DnY(qQ'g&jOY(OZr(Ors%}s!Q(O!Q![#E^![#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O2T#Egp(qQ!i,g'g&jOY(OZr(Ors%}sw(Owx#Dgx!O(O!O!P#Gk!P!Q(O!Q![#E^![!g(O!g!h!La!h!i##`!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#X(O#X#Y!La#Y#Z##`#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T#Gtn(qQ!i,g'g&jOY(OZr(Ors%}s!Q(O!Q![#Ir![!c(O!c!g#Ir!g!h#MS!h!i#Ir!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X#Ir#X#Y#MS#Y#Z#Ir#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T#I{p(qQ!i,g'g&jOY(OZr(Ors%}sw(Owx#LPx!Q(O!Q![#Ir![!c(O!c!g#Ir!g!h#MS!h!i#Ir!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X#Ir#X#Y#MS#Y#Z#Ir#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T#LW^(qQ'g&jOY(OZr(Ors%}s!Q(O!Q![#Ir![!c(O!c!i#Ir!i#O(O#O#P&f#P#T(O#T#Z#Ir#Z;'S(O;'S;=`(o<%lO(O2T#M]t(qQ!i,g'g&jOY(OZr(Ors%}sw(Owx#LPx{(O{|!Nb|}(O}!O!Nb!O!Q(O!Q![#Ir![!c(O!c!g#Ir!g!h#MS!h!i#Ir!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X#Ir#X#Y#MS#Y#Z#Ir#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2]$ xp)[W(qQ!i,g'g&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![$#|![!c$e!c!g$#|!g!h$&]!h!i$#|!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$#|#X#Y$&]#Y#Z$#|#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$$Xp)[W(qQ!i,g'g&jOY$eZr$ers%^sw$ewx#LPx!Q$e!Q![$#|![!c$e!c!g$#|!g!h$&]!h!i$#|!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$#|#X#Y$&]#Y#Z$#|#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$&ht)[W(qQ!i,g'g&jOY$eZr$ers%^sw$ewx#LPx{$e{|#'Q|}$e}!O#'Q!O!Q$e!Q![$#|![!c$e!c!g$#|!g!h$&]!h!i$#|!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$#|#X#Y$&]#Y#Z$#|#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$)Tp)[W(qQ!i,g'g&jOY$eZr$ers%^sw$ewx#Dgx!O$e!O!P$ m!P!Q$e!Q![$(x![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$+b_)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox!O$e!O!P$,a!P!Q$e!Q!R$-`!R![$(x![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$,j[)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![!GY![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$-kt)[W(qQ!i,g'g&jOY$eZr$ers%^sw$ewx#Dgx!O$e!O!P$ m!P!Q$e!Q![$(x![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#U$e#U#V$/{#V#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j#l$e#l#m$0z#m;'S$e;'S;=`(u<%lO$e2]$0U[)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![$(x![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$1T`)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![$2V![!c$e!c!i$2V!i#O$e#O#P&f#P#T$e#T#Z$2V#Z;'S$e;'S;=`(u<%lO$e2]$2br)[W(qQ!i,g'g&jOY$eZr$ers%^sw$ewx$4lx!O$e!O!P$ m!P!Q$e!Q![$2V![!c$e!c!g$2V!g!h$:p!h!i$2V!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$2V#X#Y$:p#Y#Z$2V#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2T$4s^(qQ'g&jOY(OZr(Ors%}s!Q(O!Q![$5o![!c(O!c!i$5o!i#O(O#O#P&f#P#T(O#T#Z$5o#Z;'S(O;'S;=`(o<%lO(O2T$5xr(qQ!i,g'g&jOY(OZr(Ors%}sw(Owx$4lx!O(O!O!P#Gk!P!Q(O!Q![$5o![!c(O!c!g$5o!g!h$8S!h!i$5o!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X$5o#X#Y$8S#Y#Z$5o#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T$8]u(qQ!i,g'g&jOY(OZr(Ors%}sw(Owx$4lx{(O{|!Nb|}(O}!O!Nb!O!P#Gk!P!Q(O!Q![$5o![!c(O!c!g$5o!g!h$8S!h!i$5o!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X$5o#X#Y$8S#Y#Z$5o#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2]$:{u)[W(qQ!i,g'g&jOY$eZr$ers%^sw$ewx$4lx{$e{|#'Q|}$e}!O#'Q!O!P$ m!P!Q$e!Q![$2V![!c$e!c!g$2V!g!h$:p!h!i$2V!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$2V#X#Y$:p#Y#Z$2V#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$=ic)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox!O$e!O!P$,a!P!Q$e!Q!R$>t!R![$2V![!c$e!c!i$2V!i#O$e#O#P&f#P#T$e#T#Z$2V#Z;'S$e;'S;=`(u<%lO$e2]$?Pv)[W(qQ!i,g'g&jOY$eZr$ers%^sw$ewx$4lx!O$e!O!P$ m!P!Q$e!Q![$2V![!c$e!c!g$2V!g!h$:p!h!i$2V!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#U$2V#U#V$2V#V#X$2V#X#Y$:p#Y#Z$2V#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j#l$e#l#m$0z#m;'S$e;'S;=`(u<%lO$e4e$Ar[(w-X)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox![$e![!]$Bh!]#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3s$BsYl-})[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$CnY)X,g)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7V$Dk_p,g%^!b)[W(qQ'g&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!^$Ej!^!_%+w!_!`%.U!`!a%0]!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej*[$Es])[W(qQ'g&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!`$Ej!`!a%*t!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ejp$FoTO!`$Fl!`!a$GO!a;'S$Fl;'S;=`$GT<%lO$Flp$GTO$Xpp$GWP;=`<%l$Fl*Y$GbZ)[W'g&jOY$GZYZ$FlZw$GZwx$HTx!`$GZ!`!a%(U!a#O$GZ#O#P$Ib#P;'S$GZ;'S;=`%(y<%lO$GZ*Q$HYX'g&jOY$HTYZ$FlZ!`$HT!`!a$Hu!a#O$HT#O#P$Ib#P;'S$HT;'S;=`$Mx<%lO$HT*Q$IOU$XpY#t'g&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}*Q$Ig['g&jOY$HTYZ$HTZ]$HT]^$J]^!`$HT!`!a$NO!a#O$HT#O#P%&n#P;'S$HT;'S;=`%'f;=`<%l%$z<%lO$HT*Q$JbX'g&jOY$HTYZ$J}Z!`$HT!`!a$Hu!a#O$HT#O#P$Ib#P;'S$HT;'S;=`$Mx<%lO$HT'[$KSX'g&jOY$J}YZ$FlZ!`$J}!`!a$Ko!a#O$J}#O#P$LY#P;'S$J};'S;=`$Mr<%lO$J}'[$KvU$Xp'g&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}'[$L_Z'g&jOY$J}YZ$J}Z]$J}]^$MQ^!`$J}!`!a$Ko!a#O$J}#O#P$LY#P;'S$J};'S;=`$Mr<%lO$J}'[$MVX'g&jOY$J}YZ$J}Z!`$J}!`!a$Ko!a#O$J}#O#P$LY#P;'S$J};'S;=`$Mr<%lO$J}'[$MuP;=`<%l$J}*Q$M{P;=`<%l$HT*Q$NVW$Xp'g&jOY$NoZ!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`$NtW'g&jOY$NoZ!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`% eUY#t'g&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%})`% |Y'g&jOY$NoYZ$NoZ]$No]^%!l^#O$No#O#P%#d#P;'S$No;'S;=`%$[;=`<%l%$z<%lO$No)`%!qX'g&jOY$NoYZ%}Z!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`%#aP;=`<%l$No)`%#iZ'g&jOY$NoYZ%}Z]$No]^%!l^!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`%$_XOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h;=`<%l$No<%lO%$z#t%$}WOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h<%lO%$z#t%%lOY#t#t%%oRO;'S%$z;'S;=`%%x;=`O%$z#t%%{XOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h;=`<%l%$z<%lO%$z#t%&kP;=`<%l%$z*Q%&sZ'g&jOY$HTYZ$J}Z]$HT]^$J]^!`$HT!`!a$Hu!a#O$HT#O#P$Ib#P;'S$HT;'S;=`$Mx<%lO$HT*Q%'iXOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h;=`<%l$HT<%lO%$z*Y%(aW$XpY#t)[W'g&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^*Y%(|P;=`<%l$GZ*S%)WZ(qQ'g&jOY%)PYZ$FlZr%)Prs$HTs!`%)P!`!a%)y!a#O%)P#O#P$Ib#P;'S%)P;'S;=`%*n<%lO%)P*S%*UW$XpY#t(qQ'g&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O*S%*qP;=`<%l%)P*[%+RY$XpY#t)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e*[%+tP;=`<%l$Ej7V%,U^)[W(qQ%]!b!f,g'g&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!_$Ej!_!`%-Q!`!a%*t!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej7V%-]]!g-y)[W(qQ'g&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!`$Ej!`!a%*t!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej7V%.c]%^!b!b,g)[W(qQ'g&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!`$Ej!`!a%/[!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej7V%/mY%^!b!b,g$XpY#t)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e)j%0hYY#t)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%1c[)k!c)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`0Q!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%2f]%^!b)[W(qQ!d,g'g&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`%3_!`!a%4[!a#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%3lY%^!b!b,g)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%4i[)[W(qQ%]!b!f,g'g&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e&u%5jY(vP)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z%6ib)[W(zS(qQ!R,f(s%y'g&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![%6Y![!c$e!c!}%6Y!}#O$e#O#P&f#P#R$e#R#S%6Y#S#T$e#T#o%6Y#o;'S$e;'S;=`(u<%lO$e7Z%8Qb)[W(zS(qQ!R,f(s%y'g&jOY$eZr$ers%9Ysw$ewx%9{x!Q$e!Q![%6Y![!c$e!c!}%6Y!}#O$e#O#P&f#P#R$e#R#S%6Y#S#T$e#T#o%6Y#o;'S$e;'S;=`(u<%lO$e5P%9cW)[W(p/]'g&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^2T%:UW(qQ)Z,g'g&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O3o%:yZ!V-y)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox!}$e!}#O%;l#O#P&f#P;'S$e;'S;=`(u<%lO$e&u%;wY)QP)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e4e%<la'g&jOY%=qYZ%>[Z]%=q]^%?Z^!Q%=q!Q![%?w![!w%=q!w!x%AX!x#O%=q#O#P%H_#P#i%=q#i#j%Ds#j#l%=q#l#m%IR#m;'S%=q;'S;=`%Kt<%lO%=q&t%=xUXY'g&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}4e%>e[XY(o.o'g&jOX%}XY-OYZ*[Z]%}]^-O^p%}pq-Oq#O%}#O#P,^#P;'S%};'S;=`'r<%lO%}4e%?bVXY'g&jOY%}YZ-OZ#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%@OWXY'g&jOY%}Z!Q%}!Q![%@h![#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%@oWXY'g&jOY%}Z!Q%}!Q![%=q![#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%A^['g&jOY%}Z!Q%}!Q![%BS![!c%}!c!i%BS!i#O%}#O#P&f#P#T%}#T#Z%BS#Z;'S%};'S;=`'r<%lO%}&t%BX['g&jOY%}Z!Q%}!Q![%B}![!c%}!c!i%B}!i#O%}#O#P&f#P#T%}#T#Z%B}#Z;'S%};'S;=`'r<%lO%}&t%CS['g&jOY%}Z!Q%}!Q![%Cx![!c%}!c!i%Cx!i#O%}#O#P&f#P#T%}#T#Z%Cx#Z;'S%};'S;=`'r<%lO%}&t%C}['g&jOY%}Z!Q%}!Q![%Ds![!c%}!c!i%Ds!i#O%}#O#P&f#P#T%}#T#Z%Ds#Z;'S%};'S;=`'r<%lO%}&t%Dx['g&jOY%}Z!Q%}!Q![%En![!c%}!c!i%En!i#O%}#O#P&f#P#T%}#T#Z%En#Z;'S%};'S;=`'r<%lO%}&t%Es['g&jOY%}Z!Q%}!Q![%Fi![!c%}!c!i%Fi!i#O%}#O#P&f#P#T%}#T#Z%Fi#Z;'S%};'S;=`'r<%lO%}&t%Fn['g&jOY%}Z!Q%}!Q![%Gd![!c%}!c!i%Gd!i#O%}#O#P&f#P#T%}#T#Z%Gd#Z;'S%};'S;=`'r<%lO%}&t%Gi['g&jOY%}Z!Q%}!Q![%=q![!c%}!c!i%=q!i#O%}#O#P&f#P#T%}#T#Z%=q#Z;'S%};'S;=`'r<%lO%}&t%HfXXY'g&jOY%}YZ%}Z]%}]^'W^#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%IW['g&jOY%}Z!Q%}!Q![%I|![!c%}!c!i%I|!i#O%}#O#P&f#P#T%}#T#Z%I|#Z;'S%};'S;=`'r<%lO%}&t%JR['g&jOY%}Z!Q%}!Q![%Jw![!c%}!c!i%Jw!i#O%}#O#P&f#P#T%}#T#Z%Jw#Z;'S%};'S;=`'r<%lO%}&t%KO[XY'g&jOY%}Z!Q%}!Q![%Jw![!c%}!c!i%Jw!i#O%}#O#P&f#P#T%}#T#Z%Jw#Z;'S%};'S;=`'r<%lO%}&t%KwP;=`<%l%=q2a%LVZ!W,V)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P#Q%Lx#Q;'S$e;'S;=`(u<%lO$e'Y%MTY)^d)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%NQ[)[W(qQ%]!b'g&j!_,gOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z& Vd)[W(zS(qQ!R,f(s%y'g&jOY$eZr$ers%9Ysw$ewx%9{x!Q$e!Q!Y%6Y!Y!Z%7q!Z![%6Y![!c$e!c!}%6Y!}#O$e#O#P&f#P#R$e#R#S%6Y#S#T$e#T#o%6Y#o;'S$e;'S;=`(u<%lO$e2]&!pY!T,g)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o&#m^)[W(qQ%]!b'g&j!^,gOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P#p$e#p#q&$i#q;'S$e;'S;=`(u<%lO$e3o&$vY)U,g%_!b)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e'V&%qY!Ua)[W(qQ'g&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e(]&&nc)[W(qQ%]!b'SP'g&jOX$eXY&'yZp$epq&'yqr$ers%^sw$ewx(Ox!c$e!c!}&)_!}#O$e#O#P&f#P#R$e#R#S&)_#S#T$e#T#o&)_#o;'S$e;'S;=`(u<%lO$e&y&(Sc)[W(qQ'g&jOX$eXY&'yZp$epq&'yqr$ers%^sw$ewx(Ox!c$e!c!}&)_!}#O$e#O#P&f#P#R$e#R#S&)_#S#T$e#T#o&)_#o;'S$e;'S;=`(u<%lO$e&y&)jb)[W(qQdT'g&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![&)_![!c$e!c!}&)_!}#O$e#O#P&f#P#R$e#R#S&)_#S#T$e#T#o&)_#o;'S$e;'S;=`(u<%lO$e\",\n  tokenizers: [rawString, fallback, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n  topRules: {\"Program\":[0,308]},\n  dynamicPrecedences: {\"87\":1,\"94\":1,\"119\":1,\"185\":1,\"188\":-10,\"241\":-10,\"242\":1,\"245\":-1,\"247\":-10,\"248\":1,\"263\":-1,\"268\":2,\"269\":2,\"307\":-10,\"366\":3,\"418\":1,\"419\":3,\"420\":1,\"421\":1},\n  specialized: [{term: 357, get: value => spec_identifier[value] || -1},{term: 32, get: value => spec_[value] || -1},{term: 66, get: value => spec_templateArgsEnd[value] || -1},{term: 364, get: value => spec_scopedIdentifier[value] || -1}],\n  tokenPrec: 24905\n});\n\nexport { parser };\n", "import { parser } from '@lezer/cpp';\nimport { LRLanguage, indentNodeProp, continuedIndent, flatIndent, delimitedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nA language provider based on the [Lezer C++\nparser](https://github.com/lezer-parser/cpp), extended with\nhighlighting and indentation information.\n*/\nconst cppLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"cpp\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                IfStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b)/ }),\n                TryStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|catch)\\b/ }),\n                LabeledStatement: flatIndent,\n                CaseStatement: context => context.baseIndent + context.unit,\n                BlockComment: () => null,\n                CompoundStatement: /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n                Statement: /*@__PURE__*/continuedIndent({ except: /^{/ })\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                \"DeclarationList CompoundStatement EnumeratorList FieldDeclarationList InitializerList\": foldInside,\n                BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n        indentOnInput: /^\\s*(?:case |default:|\\{|\\})$/,\n        closeBrackets: { stringPrefixes: [\"L\", \"u\", \"U\", \"u8\", \"LR\", \"UR\", \"uR\", \"u8R\", \"R\"] }\n    }\n});\n/**\nLanguage support for C++.\n*/\nfunction cpp() {\n    return new LanguageSupport(cppLanguage);\n}\n\nexport { cpp, cppLanguage };\n", "import { LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\nconst javaHighlighting = styleTags({\n  null: tags.null,\n    instanceof: tags.operatorKeyword,\n  this: tags.self,\n  \"new super assert open to with void\": tags.keyword,\n  \"class interface extends implements enum var\": tags.definitionKeyword,\n  \"module package import\": tags.moduleKeyword,\n  \"switch while for if else case default do break continue return try catch finally throw\": tags.controlKeyword,\n  [\"requires exports opens uses provides public private protected static transitive abstract final \" +\n   \"strictfp synchronized native transient volatile throws\"]: tags.modifier,\n  IntegerLiteral: tags.integer,\n  FloatingPointLiteral: tags.float,\n  \"StringLiteral TextBlock\": tags.string,\n  CharacterLiteral: tags.character,\n  LineComment: tags.lineComment,\n  BlockComment: tags.blockComment,\n  BooleanLiteral: tags.bool,\n  PrimitiveType: tags.standard(tags.typeName),\n  TypeName: tags.typeName,\n  Identifier: tags.variableName,\n  \"MethodName/Identifier\": tags.function(tags.variableName),\n  Definition: tags.definition(tags.variableName),\n  ArithOp: tags.arithmeticOperator,\n  LogicOp: tags.logicOperator,\n  BitOp: tags.bitwiseOperator,\n  CompareOp: tags.compareOperator,\n  AssignOp: tags.definitionOperator,\n  UpdateOp: tags.updateOperator,\n  Asterisk: tags.punctuation,\n  Label: tags.labelName,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace,\n  \".\": tags.derefOperator,\n  \", ;\": tags.separator\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,true:34, false:34, null:42, void:46, byte:48, short:48, int:48, long:48, char:48, float:48, double:48, boolean:48, extends:62, super:64, class:76, this:78, new:84, public:100, protected:102, private:104, abstract:106, static:108, final:110, strictfp:112, default:114, synchronized:116, native:118, transient:120, volatile:122, throws:150, implements:160, interface:166, enum:176, instanceof:236, open:265, module:267, requires:272, transitive:274, exports:276, to:278, opens:280, uses:282, provides:284, with:286, package:290, import:294, if:306, else:308, while:312, for:316, var:323, assert:330, switch:334, case:340, do:344, break:348, continue:352, return:356, throw:362, try:366, catch:370, finally:378};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"#!hQ]QPOOO&tQQO'#H[O(xQQO'#CbOOQO'#Cb'#CbO)PQPO'#CaO)XOSO'#CpOOQO'#Ha'#HaOOQO'#Cu'#CuO*tQPO'#D_O+_QQO'#HkOOQO'#Hk'#HkO-sQQO'#HfO-zQQO'#HfOOQO'#Hf'#HfOOQO'#He'#HeO0OQPO'#DUO0]QPO'#GlO3TQPO'#D_O3[QPO'#DzO)PQPO'#E[O3}QPO'#E[OOQO'#DV'#DVO5]QQO'#H_O7dQQO'#EeO7kQPO'#EdO7pQPO'#EfOOQO'#H`'#H`O5sQQO'#H`O8sQQO'#FgO8zQPO'#EwO9PQPO'#E|O9PQPO'#FOOOQO'#H_'#H_OOQO'#HW'#HWOOQO'#Gf'#GfOOQO'#HV'#HVO:aQPO'#FhOOQO'#HU'#HUOOQO'#Ge'#GeQ]QPOOOOQO'#Hq'#HqO:fQPO'#HqO:kQPO'#D{O:kQPO'#EVO:kQPO'#EQO:sQPO'#HnO;UQQO'#EfO)PQPO'#C`O;^QPO'#C`O)PQPO'#FbO;cQPO'#FdO;nQPO'#FjO;nQPO'#FmO:kQPO'#FrO;sQPO'#FoO9PQPO'#FvO;nQPO'#FxO]QPO'#F}O;xQPO'#GPO<TQPO'#GRO<`QPO'#GTO;nQPO'#GVO9PQPO'#GWO<gQPO'#GYOOQO'#H['#H[O=WQQO,58{OOQO'#HY'#HYOOOO'#Gg'#GgO>yOSO,59[OOQO,59[,59[OOQO'#Hg'#HgO?jQPO,59eO@lQPO,59yOOQO-E:d-E:dO)PQPO,58zOA`QPO,58zO)PQPO,5;|OAeQPO'#DQOAjQPO'#DQOOQO'#Gi'#GiOBjQQO,59jOOQO'#Dm'#DmODRQPO'#HsOD]QPO'#DlODkQPO'#HrODsQPO,5<^ODxQPO,59^OEcQPO'#CxOOQO,59c,59cOEjQPO,59bOGrQQO'#H[OJVQQO'#CbOJmQPO'#D_OKrQQO'#HkOLSQQO,59pOLZQPO'#DvOLiQPO'#HzOLqQPO,5:`OLvQPO,5:`OM^QPO,5;mOMiQPO'#IROMtQPO,5;dOMyQPO,5=WOOQO-E:j-E:jOOQO,5:f,5:fO! aQPO,5:fO! hQPO,5:vO! mQPO,5<^O)PQPO,5:vO:kQPO,5:gO:kQPO,5:qO:kQPO,5:lO:kQPO,5<^O!!^QPO,59qO9PQPO,5:}O!!eQPO,5;QO9PQPO,59TO!!sQPO'#DXOOQO,5;O,5;OOOQO'#El'#ElOOQO'#En'#EnO9PQPO,5;UO9PQPO,5;UO9PQPO,5;UO9PQPO,5;UO9PQPO,5;UO9PQPO,5;UO9PQPO,5;eOOQO,5;h,5;hOOQO,5<R,5<RO!!zQPO,5;aO!#]QPO,5;cO!!zQPO'#CyO!#dQQO'#HkO!#rQQO,5;jO]QPO,5<SOOQO-E:c-E:cOOQO,5>],5>]O!%SQPO,5:gO!%bQPO,5:qO!%jQPO,5:lO!%uQPO,5>YOLZQPO,5>YO! {QPO,59UO!&QQQO,58zO!&YQQO,5;|O!&bQQO,5<OO)PQPO,5<OO9PQPO'#DUO]QPO,5<UO]QPO,5<XO!&jQPO'#FqO]QPO,5<ZO]QPO,5<`O!&zQQO,5<bO!'UQPO,5<dO!'ZQPO,5<iOOQO'#Fi'#FiOOQO,5<k,5<kO!'`QPO,5<kOOQO,5<m,5<mO!'eQPO,5<mO!'jQQO,5<oOOQO,5<o,5<oO<jQPO,5<qO!'qQQO,5<rO!'xQPO'#GcO!)OQPO,5<tO<jQPO,5<|O)PQPO,58}O!,|QPO'#ChOOQO1G.k1G.kOOOO-E:e-E:eOOQO1G.v1G.vO!-WQPO,59jO!&QQQO1G.fO)PQPO1G.fO!-eQQO1G1hOOQO,59l,59lO!-mQPO,59lOOQO-E:g-E:gO!-rQPO,5>_O!.ZQPO,5:WO:kQPO'#GnO!.bQPO,5>^OOQO1G1x1G1xOOQO1G.x1G.xO!.{QPO'#CyO!/kQPO'#HkO!/uQPO'#CzO!0TQPO'#HjO!0]QPO,59dOOQO1G.|1G.|OEjQPO1G.|O!0sQPO,59eO!1QQQO'#H[O!1cQQO'#CbOOQO,5:b,5:bO:kQPO,5:cOOQO,5:a,5:aO!1tQQO,5:aOOQO1G/[1G/[O!1yQPO,5:bO!2[QPO'#GqO!2oQPO,5>fOOQO1G/z1G/zO!2wQPO'#DvO!3YQPO'#D_O!3aQPO1G/zO!!zQPO'#GoO!3fQPO1G1XO9PQPO1G1XO:kQPO'#GwO!3nQPO,5>mOOQO1G1O1G1OOOQO1G0Q1G0QO!3vQPO'#E]OOQO1G0b1G0bO!4gQPO1G1xO! hQPO1G0bO!%SQPO1G0RO!%bQPO1G0]O!%jQPO1G0WOOQO1G/]1G/]O!4lQQO1G.pO7kQPO1G0jO)PQPO1G0jO:sQPO'#HnO!6`QQO1G.pOOQO1G.p1G.pO!6eQQO1G0iOOQO1G0l1G0lO!6lQPO1G0lO!6wQQO1G.oO!7_QQO'#HoO!7lQPO,59sO!8{QQO1G0pO!:dQQO1G0pO!;rQQO1G0pO!<PQQO1G0pO!=UQQO1G0pO!=lQQO1G0pO!=vQQO1G1PO!=}QQO'#HkOOQO1G0{1G0{O!?QQQO1G0}OOQO1G0}1G0}OOQO1G1n1G1nO! pQPO'#DqO!ARQPO'#D[O!!zQPO'#D|O!!zQPO'#D}OOQO1G0R1G0RO!AYQPO1G0RO!A_QPO1G0RO!AgQPO1G0RO!ArQPO'#EXOOQO1G0]1G0]O!BVQPO1G0]O!B[QPO'#ETO!!zQPO'#ESOOQO1G0W1G0WO!CUQPO1G0WO!CZQPO1G0WO!CcQPO'#EhO!CjQPO'#EhOOQO'#Gv'#GvO!CrQQO1G0mO!EcQQO1G3tO7kQPO1G3tO!GbQPO'#FWOOQO1G.f1G.fOOQO1G1h1G1hO!GiQPO1G1jOOQO1G1j1G1jO!GtQQO1G1jO!G|QPO1G1pOOQO1G1s1G1sO)aQPO'#D_O+_QQO,5<aO!KtQPO,5<aO!LVQPO,5<]O!L^QPO,5<]OOQO1G1u1G1uOOQO1G1z1G1zOOQO1G1|1G1|O9PQPO1G1|O#!QQPO'#FzOOQO1G2O1G2OO;nQPO1G2TOOQO1G2V1G2VOOQO1G2X1G2XOOQO1G2Z1G2ZOOQO1G2]1G2]OOQO1G2^1G2^O#!XQQO'#H[O##SQQO'#CbO+_QQO'#HkO##}QQOOO#$kQQO'#EeO#$YQQO'#H`OLZQPO'#GdO#$rQPO,5<}OOQO'#HO'#HOO#$zQPO1G2`O#(xQPO'#G[O<jQPO'#G`OOQO1G2`1G2`O#(}QPO1G2hOOQO1G.i1G.iO#.SQQO'#EeO#.dQQO'#H^O#.tQPO'#FSOOQO'#H^'#H^O#/OQPO'#H^O#/mQPO'#IUO#/uQPO,59SOOQO7+$Q7+$QO!&QQQO7+$QOOQO7+'S7+'SOOQO1G/W1G/WO#/zQPO'#DoO#0UQQO'#HtOOQO'#Ht'#HtOOQO1G/r1G/rOOQO,5=Y,5=YOOQO-E:l-E:lO#0fQWO,58{O#0mQPO,59fOOQO,59f,59fO!!zQPO'#HmOD}QPO'#GhO#0{QPO,5>UOOQO1G/O1G/OOOQO7+$h7+$hOOQO1G/{1G/{O#1TQQO1G/{OOQO1G/}1G/}O#1YQPO1G/{OOQO1G/|1G/|O:kQPO1G/}OOQO,5=],5=]OOQO-E:o-E:oOOQO7+%f7+%fOOQO,5=Z,5=ZOOQO-E:m-E:mO9PQPO7+&sOOQO7+&s7+&sOOQO,5=c,5=cOOQO-E:u-E:uO#1_QPO'#EUO#1mQPO'#EUOOQO'#Gu'#GuO#2UQPO,5:wOOQO,5:w,5:wOOQO7+'d7+'dOOQO7+%|7+%|OOQO7+%m7+%mO!AYQPO7+%mO!A_QPO7+%mO!AgQPO7+%mOOQO7+%w7+%wO!BVQPO7+%wOOQO7+%r7+%rO!CUQPO7+%rO!CZQPO7+%rOOQO7+&U7+&UOOQO'#Ee'#EeO7kQPO7+&UO7kQPO,5>YO#2uQPO7+$[OOQO7+&T7+&TOOQO7+&W7+&WO9PQPO'#GjO#3TQPO,5>ZOOQO1G/_1G/_O9PQPO7+&kO#3`QQO,59eO#4cQPO'#DrO! pQPO'#DrO#4nQPO'#HwO#4vQPO,5:]O#5aQQO'#HgO#5|QQO'#CuO! mQPO'#HvO#6lQPO'#DpO#6vQPO'#HvO#7XQPO'#DpO#7aQPO'#IPO#7fQPO'#E`OOQO'#Hp'#HpOOQO'#Gk'#GkO#7nQPO,59vOOQO,59v,59vO#7uQPO'#HqOOQO,5:h,5:hO#9]QPO'#H|OOQO'#EP'#EPOOQO,5:i,5:iO#9hQPO'#EYO:kQPO'#EYO#9yQPO'#H}O#:UQPO,5:sO! mQPO'#HvO!!zQPO'#HvO#:^QPO'#DpOOQO'#Gs'#GsO#:eQPO,5:oOOQO,5:o,5:oOOQO,5:n,5:nOOQO,5;S,5;SO#;_QQO,5;SO#;fQPO,5;SOOQO-E:t-E:tOOQO7+&X7+&XOOQO7+)`7+)`O#;mQQO7+)`OOQO'#Gz'#GzO#=ZQPO,5;rOOQO,5;r,5;rO#=bQPO'#FXO)PQPO'#FXO)PQPO'#FXO)PQPO'#FXO#=pQPO7+'UO#=uQPO7+'UOOQO7+'U7+'UO]QPO7+'[O#>QQPO1G1{O! mQPO1G1{O#>`QQO1G1wO!!sQPO1G1wO#>gQPO1G1wO#>nQQO7+'hOOQO'#G}'#G}O#>uQPO,5<fOOQO,5<f,5<fO#>|QPO'#HqO9PQPO'#F{O#?UQPO7+'oO#?ZQPO,5=OO! mQPO,5=OO#?`QPO1G2iO#@iQPO1G2iOOQO1G2i1G2iOOQO-E:|-E:|OOQO7+'z7+'zO!2[QPO'#G^O<jQPO,5<vOOQO,5<z,5<zO#@qQPO7+(SOOQO7+(S7+(SO#DoQPO,59TO#DvQPO'#ITO#EOQPO,5;nO)PQPO'#GyO#ETQPO,5>pOOQO1G.n1G.nOOQO<<Gl<<GlO#E]QPO'#HuO#EeQPO,5:ZOOQO1G/Q1G/QOOQO,5>X,5>XOOQO,5=S,5=SOOQO-E:f-E:fO#EjQPO7+%gOOQO7+%g7+%gOOQO7+%i7+%iOOQO<<J_<<J_O#FQQPO'#H[O#FXQPO'#CbO#F`QPO,5:pO#FeQPO,5:xO#1_QPO,5:pOOQO-E:s-E:sOOQO1G0c1G0cOOQO<<IX<<IXO!AYQPO<<IXO!A_QPO<<IXOOQO<<Ic<<IcOOQO<<I^<<I^O!CUQPO<<I^OOQO<<Ip<<IpO#FjQQO<<GvO7kQPO<<IpO)PQPO<<IpOOQO<<Gv<<GvO#H^QQO,5=UOOQO-E:h-E:hO#HkQQO<<JVOOQO,5:^,5:^O!!zQPO'#DsO#IRQPO,5:^O! pQPO'#GpO#I^QPO,5>cOOQO1G/w1G/wO#IfQPO'#HsO#ImQPO,59xO#IrQPO,5>bO! mQPO,59xO#I}QPO,5:[O#7fQPO,5:zO! mQPO,5>bO!!zQPO,5>bO#7aQPO,5>kOOQO,5:[,5:[OLvQPO'#DtOOQO,5>k,5>kO#JVQPO'#EaOOQO,5:z,5:zO#MWQPO,5:zO!!zQPO'#DxOOQO-E:i-E:iOOQO1G/b1G/bOOQO,5:y,5:yO!!zQPO'#GrO#M]QPO,5>hOOQO,5:t,5:tO#MhQPO,5:tO#MvQPO,5:tO#NXQPO'#GtO#NoQPO,5>iO#NzQPO'#EZOOQO1G0_1G0_O$ RQPO1G0_O! mQPO,5:pOOQO-E:q-E:qOOQO1G0Z1G0ZOOQO1G0n1G0nO$ WQQO1G0nOOQO<<Lz<<LzOOQO-E:x-E:xOOQO1G1^1G1^O$ _QQO,5;sOOQO'#G{'#G{O#=bQPO,5;sOOQO'#IV'#IVO$ gQQO,5;sO$ xQQO,5;sOOQO<<Jp<<JpO$!QQPO<<JpOOQO<<Jv<<JvO9PQPO7+'gO$!VQPO7+'gO!!sQPO7+'cO$!eQPO7+'cO$!jQQO7+'cOOQO<<KS<<KSOOQO-E:{-E:{OOQO1G2Q1G2QOOQO,5<g,5<gO$!qQQO,5<gOOQO<<KZ<<KZO9PQPO1G2jO$!xQPO1G2jOOQO,5=l,5=lOOQO7+(T7+(TO$!}QPO7+(TOOQO-E;O-E;OO$$lQWO'#HfO$$WQWO'#HfO$$sQPO'#G_O:kQPO,5<xOLZQPO,5<xOOQO1G2b1G2bOOQO<<Kn<<KnO$%UQQO1G.oOOQO1G1Z1G1ZO$%`QPO'#GxO$%mQPO,5>oOOQO1G1Y1G1YO$%uQPO'#FTOOQO,5=e,5=eOOQO-E:w-E:wO$%zQPO'#GmO$&XQPO,5>aOOQO1G/u1G/uOOQO<<IR<<IROOQO1G0[1G0[O$&aQPO1G0dO$&fQPO1G0[O$&kQPO1G0dOOQOAN>sAN>sO!AYQPOAN>sOOQOAN>xAN>xOOQOAN?[AN?[O7kQPOAN?[O$&pQPO,5:_OOQO1G/x1G/xOOQO,5=[,5=[OOQO-E:n-E:nO$&{QPO,5>eOOQO1G/d1G/dOOQO1G3|1G3|O$'^QPO1G/dOOQO1G/v1G/vOOQO1G0f1G0fO#MWQPO1G0fO#7aQPO'#HyO$'cQPO1G3|O! mQPO1G3|OOQO1G4V1G4VOK^QPO'#DvOJmQPO'#D_OOQO,5:{,5:{O$'nQPO,5:{O$'nQPO,5:{O$'uQQO'#H_O$'|QQO'#H`O$(WQQO'#EbO$(cQPO'#EbOOQO,5:d,5:dOOQO,5=^,5=^OOQO-E:p-E:pOOQO1G0`1G0`O$(kQPO1G0`OOQO,5=`,5=`OOQO-E:r-E:rO$(yQPO,5:uOOQO7+%y7+%yOOQO7+&Y7+&YOOQO1G1_1G1_O$)QQQO1G1_OOQO-E:y-E:yO$)YQQO'#IWO$)TQPO1G1_O$ mQPO1G1_O)PQPO1G1_OOQOAN@[AN@[O$)eQQO<<KRO9PQPO<<KRO$)lQPO<<J}OOQO<<J}<<J}O!!sQPO<<J}OOQO1G2R1G2RO$)qQQO7+(UO9PQPO7+(UOOQO<<Ko<<KoP!'xQPO'#HQOLZQPO'#HPO$){QPO,5<yO$*WQPO1G2dO:kQPO1G2dOOQO,5=d,5=dOOQO-E:v-E:vO#DoQPO,5;oOOQO,5=X,5=XOOQO-E:k-E:kO$*]QPO7+&OOOQO7+%v7+%vO$*kQPO7+&OOOQOG24_G24_OOQOG24vG24vO$*pQPO1G/yO$*{QPO1G4POOQO7+%O7+%OOOQO7+&Q7+&QOOQO7+)h7+)hO$+^QPO7+)hO!0bQPO,5:aOOQO1G0g1G0gO$+iQPO1G0gO$+pQPO,59qO$,UQPO,5:|O7kQPO,5:|OOQO7+%z7+%zOOQO7+&y7+&yO)PQPO'#G|O$,ZQPO,5>rO$,cQPO7+&yO$,hQQO'#IXOOQOAN@mAN@mO$,sQQOAN@mOOQOAN@iAN@iO$,zQPOAN@iO$-PQQO<<KpO$-ZQPO,5=kOOQO-E:}-E:}OOQO7+(O7+(OO$-lQPO7+(OO$-qQPO<<IjOOQO<<Ij<<IjO#DoQPO<<IjO$-qQPO<<IjOOQO<<MS<<MSOOQO7+&R7+&RO$.PQPO1G0jO$.[QQO1G0hOOQO1G0h1G0hO$.dQPO1G0hO$.iQQO,5=hOOQO-E:z-E:zOOQO<<Je<<JeO$.tQPO,5>sOOQOG26XG26XOOQOG26TG26TOOQO<<Kj<<KjOOQOAN?UAN?UO#DoQPOAN?UO$.|QPOAN?UO$/RQPOAN?UO7kQPO7+&SO$/aQPO7+&SOOQO7+&S7+&SO$/fQPOG24pOOQOG24pG24pO#DoQPOG24pO$/kQPO<<InOOQO<<In<<InOOQOLD*[LD*[O$/pQPOLD*[OOQOAN?YAN?YOOQO!$'Mv!$'MvO)PQPO'#CaO$/uQQO'#H[O$0YQQO'#CbO!!zQPO'#Cy\",\n  stateData: \"$0u~OPOSQOS%wOS~OZ_O_UO`UOaUObUOcUOeUOg]Oh]Op!OOvzOwjOz}O}bO!PuO!SxO!TxO!UxO!VxO!WxO!XxO!YxO!ZyO![!_O!]xO!^xO!_xO!u|O!z{O#eoO#qnO#soO#toO#x!QO#y!PO$V!RO$X!SO$_!TO$b!UO$d!WO$g!VO$k!XO$m!YO$r!ZO$t![O$v!]O$x!^O${!`O$}!aO%{SO%}QO&PPO&VTO&rcO~OWiXW&OXZ&OXuiXu&OX!P&OX!b&OX#]&OX#_&OX#a&OX#c&OX#d&OX#e&OX#f&OX#g&OX#h&OX#j&OX#n&OX#q&OX%{iX%}iX&PiX&[&OX&]iX&]&OX&l&OX&tiX&t&OX&v!aX~O#o$]X~P$wOWUXW&ZXZUXuUXu&ZX!PUX!bUX#]UX#_UX#aUX#cUX#dUX#eUX#fUX#gUX#hUX#jUX#nUX#qUX%{&ZX%}&ZX&P&ZX&[UX&]UX&]&ZX&lUX&tUX&t&ZX&v!aX~O#o$]X~P&{O%}RO&P!bO~O&U!gO&W!eO~Og]Oh]O!SxO!TxO!UxO!VxO!WxO!XxO!YxO!ZyO!]xO!^xO!_xO%{SO%}!hO&PVOg!RXh!RX$g!RX%}!RX&P!RX~O#x!mO#y!lO$V!nOv!RX!u!RX!z!RX&r!RX~P)aOW!xOu!oO%{SO%}!sO&P!sO&t&_X~OW!{Ou&YX%{&YX%}&YX&P&YX&t&YXY&YXw&YX&l&YX&o&YXZ&YXq&YX&[&YX!P&YX#_&YX#a&YX#c&YX#d&YX#e&YX#f&YX#g&YX#h&YX#j&YX#n&YX#q&YX}&YX!r&YX#o&YXs&YX|&YX~O&]!yO~P+sO&]&YX~P+sOZ_O_UO`UOaUObUOcUOeUOg]Oh]Op!OOwjOz}O!SxO!TxO!UxO!VxO!WxO!XxO!YxO!ZyO!]xO!^xO!_xO#eoO#qnO#soO#toO%{SO&VTO~O%}!}O&P!|OY&nP~P.RO%{SOg%`Xh%`Xv%`X!S%`X!T%`X!U%`X!V%`X!W%`X!X%`X!Y%`X!Z%`X!]%`X!^%`X!_%`X!u%`X!z%`X$g%`X%}%`X&P%`X&r%`X&]%`X~O!SxO!TxO!UxO!VxO!WxO!XxO!YxO!ZyO!]xO!^xO!_xOg!RXh!RXv!RX!u!RX!z!RX%}!RX&P!RX&r!RX&]!RX~O$g!RX~P1sO|#[O~P]Og]Oh]Ov#aO!u#cO!z#bO%}!hO&PVO&r#`O~O$g#dO~P3cOu#fO&t#gO!P&RX#_&RX#a&RX#c&RX#d&RX#e&RX#f&RX#g&RX#h&RX#j&RX#n&RX#q&RX&[&RX&]&RX&l&RX~OW#eOY&RX#o&RXs&RXq&RX|&RX~P4UO!b#hO#]#hOW&SXu&SX!P&SX#_&SX#a&SX#c&SX#d&SX#e&SX#f&SX#g&SX#h&SX#j&SX#n&SX#q&SX&[&SX&]&SX&l&SX&t&SXY&SX#o&SXs&SXq&SX|&SX~OZ#XX~P5sOZ#iO~O&t#gO~O#_#mO#a#nO#c#oO#d#oO#e#pO#f#qO#g#rO#h#rO#j#vO#n#sO#q#tO&[#kO&]#kO&l#lO~O!P#uO~P7uO&v#wO~OZ_O_UO`UOaUObUOcUOeUOg]Oh]Op!OOwjOz}O#eoO#qnO#soO#toO%{SO%}0iO&P0hO&VTO~O#o#{O~O![#}O~O%}!sO&P!sO~Og]Oh]O%}!hO&PVO&]!yO~OW$TO&t#gO~O#y!lO~O!W$XO%}RO&P!bO~OZ$YO~OZ$]O~O!P$dO%}$cO&P$cO~O!P$fO%}$cO&P$cO~O!P$iO~P9POZ$lO}bO~OW$oOZ$pOgTahTa%{Ta%}Ta&PTa~OvTa!STa!TTa!UTa!VTa!WTa!XTa!YTa!ZTa!]Ta!^Ta!_Ta!uTa!zTa#xTa#yTa$VTa$gTa&rTauTaYTa&]TaqTa|Ta!PTa~P<oO&U$sO&W!eO~Ou!oO%{SOqma&[maYma&lma!Pma~O&tma}ma!rma~P?RO!SxO!TxO!UxO!VxO!WxO!XxO!YxO!ZyO!]xO!^xO!_xO~Og!Rah!Rav!Ra!u!Ra!z!Ra$g!Ra%}!Ra&P!Ra&r!Ra&]!Ra~P?wO#y$vO~Os$xO~Ou$yO%{SO~Ou!oO%{ra%}ra&Pra&traYrawra&lra&ora!Pra&[raqra~OWra#_ra#ara#cra#dra#era#fra#gra#hra#jra#nra#qra&]ra#orasra|ra~PArOu!oO%{SOq&gX!P&gX!b&gX~OY&gX#o&gX~PCpO!b$|Oq!`X!P!`XY!`X~Oq$}O!P&fX~O!P%PO~Ov%QO~Og]Oh]O%{0gO%}!hO&PVO&`%TO~O&[&^P~PD}O%{SO%}!hO&PVO~OWiXW&OXY&OXZ&OXuiXu&OX!b&OX#]&OX#_&OX#a&OX#c&OX#d&OX#e&OX#f&OX#g&OX#h&OX#j&OX#n&OX#q&OX%{iX%}iX&PiX&[&OX&]iX&]&OX&l&OX&tiX&t&OX&v!aX~OYiXY!aXq!aXwiX&liX&oiX~PEuOWUXW&ZXYUXZUXuUXu&ZX!bUX#]UX#_UX#aUX#cUX#dUX#eUX#fUX#gUX#hUX#jUX#nUX#qUX%{&ZX%}&ZX&P&ZX&[UX&]UX&]&ZX&lUX&tUX&t&ZX&v!aX~OY!aXY&ZXq!aXw&ZX&l&ZX&o&ZX~PHYOg]Oh]O%{SO%}!hO&PVOg!RXh!RX%}!RX&P!RX~P?wOu!oOw%_O%{SO%}%[O&P%ZO&o%^O~OW!xOY&_X&l&_X&t&_X~PK^OY%aO~P7uOg]Oh]O%}!hO&PVO~Oq%cOY&nX~OY%eO~Og]Oh]O%{SO%}!hO&PVOY&nP~P?wOY%kO&l%iO&t#gO~Oq%lO&v#wOY&uX~OY%nO~O%{SOg%`ah%`av%`a!S%`a!T%`a!U%`a!V%`a!W%`a!X%`a!Y%`a!Z%`a!]%`a!^%`a!_%`a!u%`a!z%`a$g%`a%}%`a&P%`a&r%`a&]%`a~O|%oO~P]O}%pO~Ou!oO%{SO%}!sO&P!sO~Op%|Ow%}O%}RO&P!bO&]!yO~Oz%{O~P! {Oz&PO%}RO&P!bO&]!yO~OY&cP~P9POg]Oh]O%{SO%}!hO&PVO~O}bO~P9POW!xOu!oO%{SO&t&_X~O#q#tO!P#ra#_#ra#a#ra#c#ra#d#ra#e#ra#f#ra#g#ra#h#ra#j#ra#n#ra&[#ra&]#ra&l#raY#ra#o#ras#raq#ra|#ra~Oo&dO}&cO!r&eO&]&bO~O}&jO!r&eO~Oo&nO}&mO&]&bO~OZ#iOu&rO%{SO~OW$oO}&xO~OW$oO!P&zO~OW&{O!P&|O~O$g!VO%}0iO&P0hO!P&cP~P.RO!P'XO#o'YO~P7uO}'ZO~O$b']O~O!P'^O~O!P'_O~O!P'`O~P7uO!P'bO~P7uOZ$YO_UO`UOaUObUOcUOeUOg]Oh]Op!OOwjOz}O%{SO%}'dO&P'cO&VTO~P?wO%P'mO%T'nOZ$|a_$|a`$|aa$|ab$|ac$|ae$|ag$|ah$|ap$|av$|aw$|az$|a}$|a!P$|a!S$|a!T$|a!U$|a!V$|a!W$|a!X$|a!Y$|a!Z$|a![$|a!]$|a!^$|a!_$|a!u$|a!z$|a#e$|a#q$|a#s$|a#t$|a#x$|a#y$|a$V$|a$X$|a$_$|a$b$|a$d$|a$g$|a$k$|a$m$|a$r$|a$t$|a$v$|a$x$|a${$|a$}$|a%u$|a%{$|a%}$|a&P$|a&V$|a&r$|a|$|a$`$|a$p$|a~O}'tOY&xP~P9PO}ra!rra&|ra~PArOW$oO!P'{O~Os'|O~Ou!oO%{SOq&ga!P&ga!b&gaY&ga#o&ga~O}'}O~P9POq$}O!P&fa~Og]Oh]O%{0gO%}!hO&PVO~O&`(UO~P!.jOu!oO%{SOq&_X&[&_XY&_X&l&_X!P&_X~O}&_X!r&_X~P!/SOo(WOp(WOqnX&[nX~Oq(XO&[&^X~O&[(ZO~Ou!oOw(]O%{SO%}RO&P!bO~OYma&lma&tma~P!0bOW&OXY!aXq!aXu!aX%{!aX~OWUXY!aXq!aXu!aX%{!aX~OW(`O~Ou!oO%{SO%}!sO&P!sO&o(bO~Og]Oh]O%{SO%}!hO&PVO~P?wOq%cOY&na~Ou!oO%{SO%}!sO&P!sO&o%^O~O%{SO~P1sOY(eO~OY(hO&l%iO~Oq%lOY&ua~Og]Oh]OvzO|(pO!u|O%{SO%}!hO&PVO&rcO~P?wO!P(qO~OW^iZ#XXu^i!P^i!b^i#]^i#_^i#a^i#c^i#d^i#e^i#f^i#g^i#h^i#j^i#n^i#q^i&[^i&]^i&l^i&t^iY^i#o^is^iq^i|^i~OW)QO~Os)RO~P7uOz)SO%}RO&P!bO~O!P]iY]i#o]is]iq]i|]i~P7uOq)TOY&cX!P&cX~P7uOY)VO~O#q#tO!P#^i#_#^i#a#^i#c#^i#d#^i#e#^i#f#^i#j#^i#n#^i&[#^i&]#^i&l#^iY#^i#o#^is#^iq#^i|#^i~O#g#rO#h#rO~P!7qO#_#mO#f#qO#g#rO#h#rO#j#vO#q#tO&[#kO&]#kO!P#^i#a#^i#c#^i#d#^i#n#^i&l#^iY#^i#o#^is#^iq#^i|#^i~O#e#pO~P!9VO#_#mO#f#qO#g#rO#h#rO#j#vO#q#tO&[#kO&]#kO!P#^i#c#^i#d#^i#n#^iY#^i#o#^is#^iq#^i|#^i~O#a#nO#e#pO&l#lO~P!:kO#e#^i~P!9VO#q#tO!P#^i#a#^i#c#^i#d#^i#e#^i#f#^i#n#^i&l#^iY#^i#o#^is#^iq#^i|#^i~O#_#mO#g#rO#h#rO#j#vO&[#kO&]#kO~P!<WO#g#^i#h#^i~P!7qO#o)WO~P7uO#_&_X#a&_X#c&_X#d&_X#e&_X#f&_X#g&_X#h&_X#j&_X#n&_X#q&_X&]&_X#o&_Xs&_X|&_X~P!/SO!P#kiY#ki#o#kis#kiq#ki|#ki~P7uOg]Oh]OvzO}bO!P)fO!SxO!TxO!UxO!VxO!W)jO!XxO!YxO!ZyO!]xO!^xO!_xO!u|O!z{O%{SO%})^O&P)_O&]&bO&rcO~O|)iO~P!?hO}&cO~O}&cO!r&eO~Oo&dO}&cO!r&eO~O%{SO%}!sO&P!sO|&qP!P&qP~P?wO}&jO~Og]Oh]OvzO|)xO!P)vO!u|O!z{O%{SO%}!hO&PVO&]&bO&rcO~P?wO}&mO~Oo&nO}&mO~Os)zO~P9POu)|O%{SO~Ou&rO}'}O%{SOW#Zi!P#Zi#_#Zi#a#Zi#c#Zi#d#Zi#e#Zi#f#Zi#g#Zi#h#Zi#j#Zi#n#Zi#q#Zi&[#Zi&]#Zi&l#Zi&t#ZiY#Zi#o#Zis#Ziq#Zi|#Zi~O}&cOW&biu&bi!P&bi#_&bi#a&bi#c&bi#d&bi#e&bi#f&bi#g&bi#h&bi#j&bi#n&bi#q&bi&[&bi&]&bi&l&bi&t&biY&bi#o&bis&biq&bi|&bi~O#|*UO$O*VO$Q*VO$R*WO$S*XO~O|*TO~P!GPO$Y*YO%}RO&P!bO~OW*ZO!P*[O~O$`*]OZ$^i_$^i`$^ia$^ib$^ic$^ie$^ig$^ih$^ip$^iv$^iw$^iz$^i}$^i!P$^i!S$^i!T$^i!U$^i!V$^i!W$^i!X$^i!Y$^i!Z$^i![$^i!]$^i!^$^i!_$^i!u$^i!z$^i#e$^i#q$^i#s$^i#t$^i#x$^i#y$^i$V$^i$X$^i$_$^i$b$^i$d$^i$g$^i$k$^i$m$^i$r$^i$t$^i$v$^i$x$^i${$^i$}$^i%u$^i%{$^i%}$^i&P$^i&V$^i&r$^i|$^i$p$^i~Og]Oh]O$g#dO%}!hO&PVO~O!P*aO~P9PO!P*bO~OZ_O_UO`UOaUObUOcUOeUOg]Oh]Op!OOvzOwjOz}O}bO!PuO!SxO!TxO!UxO!VxO!WxO!XxO!YxO!Z*gO![!_O!]xO!^xO!_xO!u|O!z{O#eoO#qnO#soO#toO#x!QO#y!PO$V!RO$X!SO$_!TO$b!UO$d!WO$g!VO$k!XO$m!YO$p*hO$r!ZO$t![O$v!]O$x!^O${!`O$}!aO%{SO%}QO&PPO&VTO&rcO~O|*fO~P!LcOWiXW&OXY&OXZ&OXuiXu&OX!P&OX%{iX%}iX&PiX&]iX&tiX&t&OX~OWUXW&ZXYUXZUXuUXu&ZX!PUX%{&ZX%}&ZX&P&ZX&]&ZX&tUX&t&ZX~OW#eOu#fO&t#gO~OW&SXY%WXu&SX!P%WX&t&SX~OZ#XX~P#$YOY*nO!P*lO~O%P'mO%T'nOZ$|i_$|i`$|ia$|ib$|ic$|ie$|ig$|ih$|ip$|iv$|iw$|iz$|i}$|i!P$|i!S$|i!T$|i!U$|i!V$|i!W$|i!X$|i!Y$|i!Z$|i![$|i!]$|i!^$|i!_$|i!u$|i!z$|i#e$|i#q$|i#s$|i#t$|i#x$|i#y$|i$V$|i$X$|i$_$|i$b$|i$d$|i$g$|i$k$|i$m$|i$r$|i$t$|i$v$|i$x$|i${$|i$}$|i%u$|i%{$|i%}$|i&P$|i&V$|i&r$|i|$|i$`$|i$p$|i~OZ*qO~O%P'mO%T'nOZ%Ui_%Ui`%Uia%Uib%Uic%Uie%Uig%Uih%Uip%Uiv%Uiw%Uiz%Ui}%Ui!P%Ui!S%Ui!T%Ui!U%Ui!V%Ui!W%Ui!X%Ui!Y%Ui!Z%Ui![%Ui!]%Ui!^%Ui!_%Ui!u%Ui!z%Ui#e%Ui#q%Ui#s%Ui#t%Ui#x%Ui#y%Ui$V%Ui$X%Ui$_%Ui$b%Ui$d%Ui$g%Ui$k%Ui$m%Ui$r%Ui$t%Ui$v%Ui$x%Ui${%Ui$}%Ui%u%Ui%{%Ui%}%Ui&P%Ui&V%Ui&r%Ui|%Ui$`%Ui$p%Ui~OW&SXu&SX#_&SX#a&SX#c&SX#d&SX#e&SX#f&SX#g&SX#h&SX#j&SX#n&SX#q&SX&[&SX&]&SX&l&SX&t&SX~O!b*vO#]#hOY&SXZ#XX~P#,{OY&QXq&QX|&QX!P&QX~P7uO}'tO|&wP~P9POY&QXg%YXh%YX%{%YX%}%YX&P%YXq&QX|&QX!P&QX~Oq*yOY&xX~OY*{O~O}'}O|&iP~P9POq&hX!P&hX|&hXY&hX~P7uO&`Ta~P<oOo(WOp(WOqna&[na~Oq(XO&[&^a~OW+TO~Ow+UO~Ou!oO%{SO%}+YO&P+XO~Og]Oh]Ov#aO!u#cO%}!hO&PVO&r#`O~Og]Oh]OvzO|+_O!u|O%{SO%}!hO&PVO&rcO~P?wOw+jO%}RO&P!bO&]!yO~Oq)TOY&ca!P&ca~O#_ma#ama#cma#dma#ema#fma#gma#hma#jma#nma#qma&]ma#omasma|ma~P?ROo+oOq!fX&[!fX~Oq+qO&[&kX~O&[+sO~OW&ZXu&ZX%{&ZX%}&ZX&P&ZX&]&ZX~OZ!aX~P#4{OWiXuiX%{iX%}iX&PiX&]iX~OZ!aX~P#5hOg]Oh]Ov#aO!u#cO!z#bO&]&bO&r#`O~O%})^O&P)_O~P#6TOg]Oh]O%{SO%})^O&P)_O~O}bO!P+}O~OZ,OO~O},QO!m,TO~O|,VO~P!?hO}bOg&eXh&eXv&eX!S&eX!T&eX!U&eX!V&eX!W&eX!X&eX!Y&eX!Z&eX!]&eX!^&eX!_&eX!u&eX!z&eX%{&eX%}&eX&P&eX&]&eX&r&eX~Oq,XO}&pX!P&pX~OZ#iO}&cOq!|X|!|X!P!|X~Oq,^O|&qX!P&qX~O|,aO!P,`O~O&]&bO~P3cOg]Oh]OvzO|,eO!P)vO!u|O!z{O%{SO%}!hO&PVO&]&bO&rcO~P?wOs,fO~P7uOs,fO~P9PO}&cOW&bqu&bq!P&bq#_&bq#a&bq#c&bq#d&bq#e&bq#f&bq#g&bq#h&bq#j&bq#n&bq#q&bq&[&bq&]&bq&l&bq&t&bqY&bq#o&bqs&bqq&bq|&bq~O|,jO~P!GPO!W,nO#},nO%}RO&P!bO~O!P,qO~O$Y,rO%}RO&P!bO~O!b$|O#o,tOq!`X!P!`X~O!P,vO~P7uO!P,vO~P9PO!P,yO~P7uO|,{O~P!LcO![#}O#o,|O~O!P-OO~O!b-PO~OY-SOZ$YO_UO`UOaUObUOcUOeUOg]Oh]Op!OOwjOz}O%{SO%}'dO&P'cO&VTO~P?wOY-SO!P-TO~O%P'mO%T'nOZ%Uq_%Uq`%Uqa%Uqb%Uqc%Uqe%Uqg%Uqh%Uqp%Uqv%Uqw%Uqz%Uq}%Uq!P%Uq!S%Uq!T%Uq!U%Uq!V%Uq!W%Uq!X%Uq!Y%Uq!Z%Uq![%Uq!]%Uq!^%Uq!_%Uq!u%Uq!z%Uq#e%Uq#q%Uq#s%Uq#t%Uq#x%Uq#y%Uq$V%Uq$X%Uq$_%Uq$b%Uq$d%Uq$g%Uq$k%Uq$m%Uq$r%Uq$t%Uq$v%Uq$x%Uq${%Uq$}%Uq%u%Uq%{%Uq%}%Uq&P%Uq&V%Uq&r%Uq|%Uq$`%Uq$p%Uq~O}'tO~P9POq-`O|&wX~O|-bO~Oq*yOY&xa~Oq-fO|&iX~O|-hO~Ow-iO~Oq!aXu!aX!P!aX!b!aX%{!aX~OZ&OX~P#EoOZUX~P#EoO!P-jO~OZ-kO~OW^yZ#XXu^y!P^y!b^y#]^y#_^y#a^y#c^y#d^y#e^y#f^y#g^y#h^y#j^y#n^y#q^y&[^y&]^y&l^y&t^yY^y#o^ys^yq^y|^y~OY%^aq%^a!P%^a~P7uO!P#myY#my#o#mys#myq#my|#my~P7uOo+oOq!fa&[!fa~Oq+qO&[&ka~OZ,OO~PCpO!P-xO~O!m,TO}&ja!P&ja~O}bO!P-{O~OZ_O_UO`UOaUObUOcUOeUOg]Oh]Op.ZOvzOw.YOz}O|.UO}bO!PuO![!_O!u|O!z{O#eoO#qnO#soO#toO#x!QO#y!PO$V!RO$X!SO$_!TO$b!UO$d!WO$g!VO$k!XO$m!YO$r!ZO$t![O$v!]O$x!^O${!`O$}!aO%{SO%}QO&PPO&VTO&]!yO&rcO~P?wO},QO~Oq,XO}&pa!P&pa~O}&cOq!|a|!|a!P!|a~OZ#iO}&cOq!|a|!|a!P!|a~O%{SO%}!sO&P!sOq%hX|%hX!P%hX~P?wOq,^O|&qa!P&qa~O|!}X~P!?hO|.eO~Os.fO~P7uOW$oO!P.gO~OW$oO$P.lO%}RO&P!bO!P&zP~OW$oO$T.mO~O!P.nO~O!b$|O#o.pOq!`X!P!`X~OY.rO~O!P.sO~P7uO#o.tO~P7uO!b.vO~OY.wOZ$YO_UO`UOaUObUOcUOeUOg]Oh]Op!OOwjOz}O%{SO%}'dO&P'cO&VTO~P?wOW!{Ou&YX%{&YX%}&YX&P&YX&|&YX~O&]!yO~P$$WOu!oO%{SO&|.yO%}%RX&P%RX~OY&QXq&QX~P7uO}'tOq%lX|%lX~P9POq-`O|&wa~O!b/PO~O}'}Oq%aX|%aX~P9POq-fO|&ia~OY/SO~O!P/TO~OZ/UO~O&l%iOq!ga&[!ga~Ou!oO%{SO}&ma!P&ma!m&ma~O!P/ZO~O!m,TO}&ji!P&ji~O|/`O~P]OW/bO~P4UOZ#iO!P&SX~P#,{OW$TOZ#iO&t#gO~Op/dOw/dO~O}&cOq!|i|!|i!P!|i~O|!}a~P!?hOW$oO!P/fO~OW$oOq/gO!P&zX~OY/kO~P7uOY/mO~OY%Wq!P%Wq~P7uO&|.yO%}%Ra&P%Ra~OY/rO~Ou!oO!P/uO!Z/vO%{SO~OY/wO~O&l%iOq!gi&[!gi~Ou!oO%{SO}&mi!P&mi!m&mi~O!m,TO}&jq!P&jq~O|/yO~P]Op/{Ow%}Oz%{O%}RO&P!bO&]!yO~O!P/|O~Oq/gO!P&za~O!P0QO~OW$oOq/gO!P&{X~OY0SO~P7uOY0TO~OY%Wy!P%Wy~P7uOu!oO%{SO%}%sa&P%sa&|%sa~OY0UO~Ou!oO!P0VO!Z0WO%{SO~Op0ZO%}RO&P!bO~OW)QOZ#iO~O!P0]O~OW$oOq%pa!P%pa~Oq/gO!P&{a~O!P0_O~Ou!oO!P0_O!Z0`O%{SO~O!P0bO~O!P0cO~O!P0eO~O!P0fO~O#o&OXY&OXs&OXq&OX|&OX~P$wO#oUXYUXsUXqUX|UX~P&{O`Q_P#f&Vc~\",\n  goto: \"#(V&|PPPP&}'b*q-tP'bPP.Y.^/rPPPPP1^P2vPP4`7P9j<T<m>bPPP>hP@|PPPAv2vPCoPPDjPEaEgPPPPPPPPPPPPFpGXPJ_JgJqKZKaKgMVMZMZMcPMrNx! k! uP!![NxP!!b!!l!!{!#TP!#r!#|!$SNx!$V!$]EaEa!$a!$k!$n2v!&Y2v2v!(RP.^P!(VP!(vPPPPPP.^P.^!)d.^PP.^P.^PP.^!*x!+SPP!+Y!+cPPPPPPPP&}P&}PP!+g!+g!+z!+gPP!+gP!+gP!,e!,hP!+g!-O!+gP!+gP!-R!-UP!+gP!+gP!+gP!+gP!+g!+gP!+gP!-YP!-`!-c!-iP!+g!-u!-x!.Q!.d!2a!2g!2m!3s!3y!4T!5X!5_!5e!5o!5u!5{!6R!6X!6_!6e!6k!6q!6w!6}!7T!7Z!7e!7k!7u!7{PPP!8R!+g!8vP!<XP!=]P!?n!@U!CQ2vPPP!Dn!HY!JwPP!Mb!MeP# n# t##b##q##w#$w#%a#&[#&e#&h#&tP#&w#'TP#'[#'cP#'fP#'oP#'r#'u#'x#'|#(SssObw!Z#]#{$Z$[$^$_'Z*]*e,Q.V.W/a'kqOWX_`bnow!X!Z!^!`!i!p!t!y!{#O#P#U#Y#]#_#f#h#i#m#n#o#p#q#r#s#v#w#x#y#{$R$Y$Z$[$]$^$_$l$p${$|%R%S%X%Y%b%c%f%g%i%k%p&]&b&c&d&e&j&m&n&r&s&u'Q'R'T'Y'Z'e't'}(W(X(h(l(o)T)W)X)Z)`)b)h)s)t)w)|*]*_*a*b*e*h*k*l*q*v+]+o+q+t+w+z+{,O,Q,T,X,^,`,c,t,v-P-T-X-`-f-w.Q.S.T.V.W.d.p.s.v.x/P/S/Y/_/a/p/t/v/w0W0Y0`0j#rgO_bnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*v,Q,t,v-P-`-f.V.W.p.s.v/P/a/v0W0`t!dS!P!R!S!l!n$X$v*U*V*W*X,m,o.l.m/g0gQ#^cS%`#P.SQ%s#`U%x#e$T/bQ&P#gW'g$l*l-T.xU'q$o&{*ZQ'r$pS(^%Y/_U(}%z+i/zQ)S&QQ+[(lQ+g)QQ-c*yR-m+]u!dS!P!R!S!l!n$X$v*U*V*W*X,m,o.l.m/g0gT$q!c(T#upO_bnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$p$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*v,Q,t,v-P-`-f.V.W.p.s.v/P/a/v0W0`#tkO_bnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$p$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*v,Q,t,v-P-`-f.V.W.p.s.v/P/a/v0W0`X'h$l*l-T.x#}UO_bnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$l$p$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*l*v,Q,t,v-P-T-`-f.V.W.p.s.v.x/P/a/v0W0`#}jO_bnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$l$p$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*l*v,Q,t,v-P-T-`-f.V.W.p.s.v.x/P/a/v0W0`%tZOW_bdnow}!X!Z!^!`!y#O#R#U#]#f#h#i#m#n#o#p#q#r#s#v#w#x#{$S$Y$Z$[$]$^$_$l$p$|%R%c%i%k%p%{&c&d&e&m&n&r'Q'S'T'Y'Z'i't'}(W(X(h(m(o)T)W)a)b)h)t)u)w)|*]*a*b*e*h*l*v+o+{,O,Q,T,X,`,t,v-P-T-`-f.T.V.W.d.p.s.v.x/P/a/v0W0`0jQ%W!{Q([%XV-V*q-Z.y%tZOW_bdnow}!X!Z!^!`!y#O#R#U#]#f#h#i#m#n#o#p#q#r#s#v#w#x#{$S$Y$Z$[$]$^$_$l$p$|%R%c%i%k%p%{&c&d&e&m&n&r'Q'S'T'Y'Z'i't'}(W(X(h(m(o)T)W)a)b)h)t)u)w)|*]*a*b*e*h*l*v+o+{,O,Q,T,X,`,t,v-P-T-`-f.T.V.W.d.p.s.v.x/P/a/v0W0`0jV-V*q-Z.y%t[OW_bdnow}!X!Z!^!`!y#O#R#U#]#f#h#i#m#n#o#p#q#r#s#v#w#x#{$S$Y$Z$[$]$^$_$l$p$|%R%c%i%k%p%{&c&d&e&m&n&r'Q'S'T'Y'Z'i't'}(W(X(h(m(o)T)W)a)b)h)t)u)w)|*]*a*b*e*h*l*v+o+{,O,Q,T,X,`,t,v-P-T-`-f.T.V.W.d.p.s.v.x/P/a/v0W0`0jV-W*q-Z.yS!zZ-VS$S}%{S%z#e$TQ&Q#gQ+i)QQ.[,QR/z/b$eYO_bnow!X!Z!^!`!y#]#f#h#i#m#n#o#p#q#r#s#v#w#{$Y$Z$[$]$^$_$l$p$|%i%k&d&e&n&r'T'Y'Z't'}(W(X(h)T)W)|*]*a*b*e*h*l*v+o,Q,T,X,t,v-P-T-`-f.V.W.p.s.v.x/P/a/v0W0`Q%U!yR+R(X%u^OW_bdnow!X!Z!^!`!y#O#R#U#]#f#h#i#m#n#o#p#q#r#s#v#w#x#{$Y$Z$[$]$^$_$l$p$|%R%c%i%k%p&c&d&e&m&n&r'Q'S'T'Y'Z'i't'}(W(X(h(m(o)T)W)a)b)h)t)u)w)|*]*a*b*e*h*l*q*v+o+{,O,Q,T,X,`,t,v-P-T-Z-`-f.T.V.W.d.p.s.v.x.y/P/a/v0W0`0j!o!qX!i!r!t#P#_#y$t${%S%Y%b%f&]'R'e(l)X)`)s*_*k+]+t+w+z,c-X-w.Q.S/S/Y/_/p/t/w0Y#|jO_bnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$l$p$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*l*v,Q,t,v-P-T-`-f.V.W.p.s.v.x/P/a/v0W0`Q$Z!TQ$[!UQ$a!YQ$j!_R*i']Q#jhS&v$R)PQ(|%yQ*Q&wQ+f)OQ,[)oQ-q+hQ.a,]Q/W-rS/c.Y.ZQ/}/dQ0[/{R0a0ZQ&f$OW(s%t&g&h&iQ*P&vU+`(t(u(vQ,Z)oQ,h*QS-n+a+bS.`,[,]Q/V-oR/e.aX)f&c)h,`.drdObw!Z#]#{$Z$[$^$_'Z*]*e,Q.V.W/aW#R_#U%c,OQ'S$]W'i$l*l-T.xS(m%p(oW)a&c)h,`.dS)p&j,^S)u&m)wR-Z*qh!vX!V#_#d'R(l)`)s*_+]+w,cQ(R$}Q(_%^R+V(b#rmObnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$p$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*v,Q,t,v-P-`-f.V.W.p.s.v/P/a/v0W0`v!tX!V#P#_#d$}%^%b%f'R'e(b(l*_*k+]-Y.S.|Q#W_Q$OzQ$P{Q$Q|Q%t#aQ%u#bQ%v#cQ(j%lS)Y&b+qY)d&c)a)h,`.dS)o&j,^Q+p)ZW+t)`)s+w,cQ+|)bQ,])pT.O+z.QU(P$|'}-fR*O&uW)f&c)h,`.dT)v&m)wQ&i$OQ&q$QQ(v%tQ({%vY)b&c)a)h,`.dV)t&m)u)wQ)[&bR-u+qQ+n)YR-t+p#tmO_bnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$p$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*v,Q,t,v-P-`-f.V.W.p.s.v/P/a/v0W0`Q,P)dS-w+t.OR.R+|T#U_,OU#S_#U,OR(c%cQ,S)eQ-y+vQ-}+yQ/].PR/x/^ruObw!Z#]#{$Z$[$^$_'Z*]*e,Q.V.W/aQ$m!aQ&`#wQ'a$jQ'p$nW)f&c)h,`.dQ*s'nQ+})cQ,W)jQ-[*rR-{+xrsObw!Z#]#{$Z$[$^$_'Z*]*e,Q.V.W/aS(n%p(oW)f&c)h,`.dT)v&m)wQ&h$OS(u%t&iR+b(vQ&g$OQ&l$PU(t%t&h&iQ(x%uS+a(u(vR-o+bQ)n&eR)y&nQ&p$QS(z%v&qR+e({Q&o$QU(y%v&p&qS+d(z({R-p+eS(n%p(oT)v&m)wrsObw!Z#]#{$Z$[$^$_'Z*]*e,Q.V.W/aW)f&c)h,`.dT)v&m)wQ&k$PS(w%u&lR+c(xQ)q&jR.b,^R,b)rQ%q#^R(r%sT(n%p(oQ,R)eS-|+y,SR/[-}R.W,QWj$l*l-T.x#ukO_bnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$p$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*v,Q,t,v-P-`-f.V.W.p.s.v/P/a/v0W0`#|hO_bnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$l$p$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*l*v,Q,t,v-P-T-`-f.V.W.p.s.v.x/P/a/v0W0`U%y#e$T/bS)O%z/zQ+h)QR-r+iT&t$R&u!]#ml#Q$`$h$k&O&R&S&V&W&X&Y&[&_'s(O){*`*c+k+m,g,x,}-^.o.u/l/o!V#nl#Q$`$h$k&O&R&S&W&[&_'s(O){*`*c+k+m,g,x,}-^.o.u/l/o#umO_bnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$p$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*v,Q,t,v-P-`-f.V.W.p.s.v/P/a/v0W0`a'u$p't*v-`/P/v0W0`Q'w$pR-d*yQ&y$UQ'y$uR*|'zT*R&x*SsuObw!Z#]#{$Z$[$^$_'Z*]*e,Q.V.W/artObw!Z#]#{$Z$[$^$_'Z*]*e,Q.V.W/aQ$e![R$g!]R$^!WruObw!Z#]#{$Z$[$^$_'Z*]*e,Q.V.W/aR'T$]R$_!WR'[$aT*d'Z*eX'k$m'l'p*tR*r'mQ-Y*qR.|-ZQ'o$mQ*p'lQ*u'pR-]*tR$n!aQ'j$lV-R*l-T.xQwOQ#]bW#|w#].V/aQ.V,QR/a.WrWObw!Z#]#{$Z$[$^$_'Z*]*e,Q.V.W/al!kW!p#O#Y#x%R%X%g&s'Q)Z+{.T0j!j!pX!i!t#P#_#y${%S%Y%b%f&]'R'e(l)X)`)s*_*k+]+t+w+z,c-X-w.Q.S/S/Y/_/p/t/w0YQ#O_Q#Y`#^#xno!X!^!`#f#h#i#m#n#o#p#q#r#s#w$Y$p$|%i%k&d&e&n&r'T'Y't'}(W(h)T)W)|*a*b*h*v+o,T,X,t,v-P-`-f.p.s.v/P/v0W0`S%R!y(XQ%X!{j%g#U%c%p&c&j&m(o)h)w*q,^,`.dS&s$R&uY'Q$]$l*l-T.xS)Z&b+qS+{)b)tQ.T,OR0j#vQ!fTR$r!fQ(Y%UR+S(Y^!rX#P#y&]'R'e)Xx$t!i#_%S%Y%b%f(l)`)s*_*k+]+w+z,c-X.Q.S/_/p[$z!r$t${/Y/t0YS${!t+tQ/Y-wQ/t/SR0Y/wQ)U&SR+l)UQ)h&cS,U)h.dR.d,`!laO_bw!Z#U#]#{$Z$[$]$^$_$l%c%p&c&j&m'Z(o)h)w*]*e*l*q,O,Q,^,`-T.V.W.d.x/aY!jW#O%g'Q.TT#Za!jQ-g*}R/R-gQ%O!vR(S%OQ%j#VS(g%j/XR/X-sQ+r)[R-v+rQ%d#SR(d%dQ,Y)lR._,YQ)w&mR,d)wQ,_)qR.c,_Q(o%pR+^(oQ&u$RR)}&uQ%m#WR(k%mQ-a*wR/O-aQ*z'wR-e*zQ*S&xR,i*SQ,m*UR.i,mQ/h.jS0P/h0RR0R/jQ*e'ZR,z*eQ'l$mS*o'l*tR*t'pQ.z-XR/q.zQ*m'jR-U*m`vObw#],Q.V.W/aQ$b!ZQ&a#{Q'O$ZQ'P$[Q'V$^Q'W$_S*d'Z*eR,s*]'YrOWX_`bnow!X!Z!^!`!i!p!t!y!{#O#P#U#Y#]#_#f#h#i#m#n#o#p#q#r#s#v#w#x#y#{$R$Y$Z$[$]$^$_$l${$|%R%S%X%Y%b%c%f%g%i%k%p&]&b&c&d&e&j&m&n&r&s&u'Q'R'T'Y'Z'e'}(W(X(h(l(o)T)W)X)Z)`)b)h)s)t)w)|*]*_*a*b*e*h*k*l*q+]+o+q+t+w+z+{,O,Q,T,X,^,`,c,t,v-P-T-X-f-w.Q.S.T.V.W.d.p.s.v.x/S/Y/_/a/p/t/w0Y0ja'v$p't*v-`/P/v0W0`Q!cSQ$U!PQ$V!RQ$W!SQ$u!lQ$w!nQ&}$XQ'z$vQ(T0gS,k*U*WQ,o*VQ,p*XQ.h,mS.j,o.lQ/j.mR0O/g%oROS_bcnow!P!R!S!X!Z!^!`!l!n#P#]#`#e#f#g#h#i#m#n#o#p#q#r#s#w#{$T$X$Y$Z$[$]$^$_$l$o$p$v$|%Y%k%z&Q&r&{'T'Y'Z't'}(h(l)Q)T)W)|*U*V*W*X*Z*]*a*b*e*h*l*v*y+]+i,Q,m,o,t,v-P-T-`-f.S.V.W.l.m.p.s.v.x/P/_/a/b/g/v/z0W0`0gQ'x$pQ*w'tS-_*v/PQ.}-`Q0X/vQ0^0WR0d0`rlObw!Z#]#{$Z$[$^$_'Z*]*e,Q.V.W/aS#Q_$YQ#tnQ#zoQ$`!XQ$h!^Q$k!`Q&O#fQ&R#hY&S#i$]*a,v.sQ&U#mQ&V#nQ&W#oQ&X#pQ&Y#qQ&Z#rQ&[#sQ&_#w^'s$p't-`/P/v0W0`U(O$|'}-fQ(i%kQ){&rQ*`'TQ*c'YQ+W(hQ+k)TQ+m)WQ,g)|Q,x*bQ,}*hQ-^*vQ.o,tQ.u-PQ/l.pR/o.v#rfO_bnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$p$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*v,t,v-P-`-f.V.W.p.s.v/P/a/v0W0`W'f$l*l-T.xR.X,QrXObw!Z#]#{$Z$[$^$_'Z*]*e,Q.V.W/aW!iW#x%R'QQ#P_Q#_d!|#yno!X!^!`#f#h#i#m#n#o#p#q#r#s#w$Y$p$|%k&r'T'Y't'}(h)T)W)|*a*b*h*v,t,v-P-`-f.p.s.v/P/v0W0`d%S!y%i&d&e&n(W(X+o,T,XQ%Y#OQ%b#RS%f#U%cQ&]#vQ'R$]W'e$l*l-T.xS(l%p(oQ)X0jW)`&c)h,`.dS)s&m)wQ*_'SQ*k'iQ+](mQ+w)aS+z)b)tQ,c)uS-X*q-ZQ.Q+{Q.S,OQ/_.TR/p.y%t^OW_bdnow!X!Z!^!`!y#O#R#U#]#f#h#i#m#n#o#p#q#r#s#v#w#x#{$Y$Z$[$]$^$_$l$p$|%R%c%i%k%p&c&d&e&m&n&r'Q'S'T'Y'Z'i't'}(W(X(h(m(o)T)W)a)b)h)t)u)w)|*]*a*b*e*h*l*q*v+o+{,O,Q,T,X,`,t,v-P-T-Z-`-f.T.V.W.d.p.s.v.x.y/P/a/v0W0`0jQ$R}Q&w$SR)P%{&PVOW_bdnow}!X!Z!^!`!y!{#O#R#U#]#f#h#i#m#n#o#p#q#r#s#v#w#x#{$S$Y$Z$[$]$^$_$l$p$|%R%X%c%i%k%p%{&c&d&e&m&n&r'Q'S'T'Y'Z'i't'}(W(X(h(m(o)T)W)a)b)h)t)u)w)|*]*a*b*e*h*l*q*v+o+{,O,Q,T,X,`,t,v-P-T-Z-`-f.T.V.W.d.p.s.v.x.y/P/a/v0W0`0jR%V!y#ziObnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$l$p$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*l*v,Q,t,v-P-T-`-f.V.W.p.s.v.x/P/a/v0W0`Q#V_Q%U!yQ&^#vQ(f%iQ)k&dU)l&e&n,TQ+Q(WQ+R(XQ-s+oR.^,XQ(V%TR+P(U#|eO_bnow!X!Z!^!`#]#f#h#i#m#n#o#p#q#r#s#w#{$Y$Z$[$]$^$_$l$p$|%k&r'T'Y'Z't'}(h)T)W)|*]*a*b*e*h*l*v,Q,t,v-P-T-`-f.V.W.p.s.v.x/P/a/v0W0`T%w#e/bQ&T#iQ'U$]Q,w*aQ.q,vR/n.sX)g&c)h,`.d!{`OW_abw!Z!j#O#U#]#{$Z$[$]$^$_$l%c%g%p&c&j&m'Q'Z(o)h)w*]*e*l*q,O,Q,^,`-T.T.V.W.d.x/aU!wX!V'RU%r#_#d*_S+Z(l)sQ+u)`S-l+],cR-z+wj!uX!V#_#d$}%^(b(l)`)s+]+w,cU%]#P%f.SQ(a%bQ*^'RQ*j'eQ,u*_Q-Q*kQ.{-YR/s.|Q(Q$|Q*}'}R/Q-fR+O'}[)c&c&m)h)w,`.dT+x)a)uR)]&bW+v)`)s+w,cQ.P+zR/^.QS#T_,OR%h#US)m&e&nR.],TR)r&jW)e&c)h,`.dR+y)aR#X_R*x'tR'x$pT,l*U,mQ.k,oR/i.lR/i.m\",\n  nodeNames: \"\u26A0 LineComment BlockComment Program ModuleDeclaration MarkerAnnotation Identifier ScopedIdentifier . Annotation ) ( AnnotationArgumentList AssignmentExpression FieldAccess IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral TextBlock null ClassLiteral void PrimitiveType TypeName ScopedTypeName GenericType TypeArguments AnnotatedType Wildcard extends super , ArrayType ] Dimension [ class this ParenthesizedExpression ObjectCreationExpression new ArgumentList } { ClassBody ; FieldDeclaration Modifiers public protected private abstract static final strictfp default synchronized native transient volatile VariableDeclarator Definition AssignOp ArrayInitializer MethodDeclaration TypeParameters TypeParameter TypeBound FormalParameters ReceiverParameter FormalParameter SpreadParameter Throws throws Block ClassDeclaration Superclass SuperInterfaces implements InterfaceTypeList InterfaceDeclaration interface ExtendsInterfaces InterfaceBody ConstantDeclaration EnumDeclaration enum EnumBody EnumConstant EnumBodyDeclarations AnnotationTypeDeclaration AnnotationTypeBody AnnotationTypeElementDeclaration StaticInitializer ConstructorDeclaration ConstructorBody ExplicitConstructorInvocation ArrayAccess MethodInvocation MethodName MethodReference ArrayCreationExpression Dimension AssignOp BinaryExpression CompareOp CompareOp LogicOp BitOp BitOp LogicOp ArithOp ArithOp ArithOp BitOp InstanceofExpression instanceof LambdaExpression InferredParameters TernaryExpression LogicOp : UpdateExpression UpdateOp UnaryExpression LogicOp BitOp CastExpression ElementValueArrayInitializer ElementValuePair open module ModuleBody ModuleDirective requires transitive exports to opens uses provides with PackageDeclaration package ImportDeclaration import Asterisk ExpressionStatement LabeledStatement Label IfStatement if else WhileStatement while ForStatement for ForSpec LocalVariableDeclaration var EnhancedForStatement ForSpec AssertStatement assert SwitchStatement switch SwitchBlock SwitchLabel case DoStatement do BreakStatement break ContinueStatement continue ReturnStatement return SynchronizedStatement ThrowStatement throw TryStatement try CatchClause catch CatchFormalParameter CatchType FinallyClause finally TryWithResourcesStatement ResourceSpecification Resource\",\n  maxTerm: 274,\n  nodeProps: [\n    [\"group\", -26,4,47,76,77,82,87,92,144,146,149,150,152,155,157,160,162,164,166,171,173,175,177,179,180,182,190,\"Statement\",-25,6,13,14,15,16,17,18,19,20,21,22,39,40,41,99,100,102,103,106,117,119,121,124,126,129,\"Expression\",-7,23,24,25,26,27,29,34,\"Type\"],\n    [\"openedBy\", 10,\"(\",44,\"{\"],\n    [\"closedBy\", 11,\")\",45,\"}\"]\n  ],\n  propSources: [javaHighlighting],\n  skippedNodes: [0,1,2],\n  repeatNodeCount: 28,\n  tokenData: \"#$`_R!_OX%QXY'fYZ)bZ^'f^p%Qpq'fqr*|rs,^st%Qtu4euv5qvw7Rwx8ixy@zyzAhz{BU{|Bz|}Db}!OEO!O!PFi!P!Q! c!Q!R!,X!R![!0P![!]!>a!]!^!?q!^!_!@_!_!`!Ax!`!a!Bl!a!b!DY!b!c!Dx!c!}!Kt!}#O!MQ#O#P%Q#P#Q!Mn#Q#R!N[#R#S4e#S#T%Q#T#o4e#o#p# O#p#q# l#q#r##U#r#s##r#s#y%Q#y#z'f#z$f%Q$f$g'f$g#BY%Q#BY#BZ'f#BZ$IS%Q$IS$I_'f$I_$I|%Q$I|$JO'f$JO$JT%Q$JT$JU'f$JU$KV%Q$KV$KW'f$KW&FU%Q&FU&FV'f&FV;'S%Q;'S;=`&s<%lO%QS%VV&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QS%qO&WSS%tVOY&ZYZ%lZr&Zrs&ys;'S&Z;'S;=`'`<%lO&ZS&^VOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QS&vP;=`<%l%QS&|UOY&ZYZ%lZr&Zs;'S&Z;'S;=`'`<%lO&ZS'cP;=`<%l&Z_'mk&WS%wZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qs#y%Q#y#z'f#z$f%Q$f$g'f$g#BY%Q#BY#BZ'f#BZ$IS%Q$IS$I_'f$I_$I|%Q$I|$JO'f$JO$JT%Q$JT$JU'f$JU$KV%Q$KV$KW'f$KW&FU%Q&FU&FV'f&FV;'S%Q;'S;=`&s<%lO%Q_)iY&WS%wZX^*Xpq*X#y#z*X$f$g*X#BY#BZ*X$IS$I_*X$I|$JO*X$JT$JU*X$KV$KW*X&FU&FV*XZ*^Y%wZX^*Xpq*X#y#z*X$f$g*X#BY#BZ*X$IS$I_*X$I|$JO*X$JT$JU*X$KV$KW*X&FU&FV*XV+TX#sP&WSOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QU+wV#_Q&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT,aXOY,|YZ%lZr,|rs3Ys#O,|#O#P2d#P;'S,|;'S;=`3S<%lO,|T-PXOY-lYZ%lZr-lrs.^s#O-l#O#P.x#P;'S-l;'S;=`2|<%lO-lT-qX&WSOY-lYZ%lZr-lrs.^s#O-l#O#P.x#P;'S-l;'S;=`2|<%lO-lT.cVcPOY&ZYZ%lZr&Zrs&ys;'S&Z;'S;=`'`<%lO&ZT.}V&WSOY-lYZ/dZr-lrs1]s;'S-l;'S;=`2|<%lO-lT/iW&WSOY0RZr0Rrs0ns#O0R#O#P0s#P;'S0R;'S;=`1V<%lO0RP0UWOY0RZr0Rrs0ns#O0R#O#P0s#P;'S0R;'S;=`1V<%lO0RP0sOcPP0vTOY0RYZ0RZ;'S0R;'S;=`1V<%lO0RP1YP;=`<%l0RT1`XOY,|YZ%lZr,|rs1{s#O,|#O#P2d#P;'S,|;'S;=`3S<%lO,|T2QUcPOY&ZYZ%lZr&Zs;'S&Z;'S;=`'`<%lO&ZT2gVOY-lYZ/dZr-lrs1]s;'S-l;'S;=`2|<%lO-lT3PP;=`<%l-lT3VP;=`<%l,|T3_VcPOY&ZYZ%lZr&Zrs3ts;'S&Z;'S;=`'`<%lO&ZT3yR&USXY4SYZ4`pq4SP4VRXY4SYZ4`pq4SP4eO&VP_4la%}Z&WSOY%QYZ%lZr%Qrs%qst%Qtu4eu!Q%Q!Q![4e![!c%Q!c!}4e!}#R%Q#R#S4e#S#T%Q#T#o4e#o;'S%Q;'S;=`&s<%lO%QU5xX#gQ&WSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6e!`;'S%Q;'S;=`&s<%lO%QU6lV#]Q&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV7YZ&lR&WSOY%QYZ%lZr%Qrs%qsv%Qvw7{w!_%Q!_!`6e!`;'S%Q;'S;=`&s<%lO%QU8SV#aQ&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT8nZ&WSOY9aYZ%lZr9ars:Xsw9awx%Qx#O9a#O#P<a#P;'S9a;'S;=`>t<%lO9aT9fZ&WSOY9aYZ%lZr9ars:Xsw9awx;sx#O9a#O#P<a#P;'S9a;'S;=`>t<%lO9aT:[ZOY:}YZ%lZr:}rs>zsw:}wx?px#O:}#O#P@[#P;'S:};'S;=`@t<%lO:}T;QZOY9aYZ%lZr9ars:Xsw9awx;sx#O9a#O#P<a#P;'S9a;'S;=`>t<%lO9aT;zVbP&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT<fV&WSOY9aYZ<{Zr9ars:Xs;'S9a;'S;=`>t<%lO9aT=QW&WSOY=jZw=jwx>Vx#O=j#O#P>[#P;'S=j;'S;=`>n<%lO=jP=mWOY=jZw=jwx>Vx#O=j#O#P>[#P;'S=j;'S;=`>n<%lO=jP>[ObPP>_TOY=jYZ=jZ;'S=j;'S;=`>n<%lO=jP>qP;=`<%l=jT>wP;=`<%l9aT>}ZOY:}YZ%lZr:}rs=jsw:}wx?px#O:}#O#P@[#P;'S:};'S;=`@t<%lO:}T?uVbPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT@_VOY9aYZ<{Zr9ars:Xs;'S9a;'S;=`>t<%lO9aT@wP;=`<%l:}_ARVZZ&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVAoVYR&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVB_X$YP&WS#fQOY%QYZ%lZr%Qrs%qs!_%Q!_!`6e!`;'S%Q;'S;=`&s<%lO%QVCRZ#eR&WSOY%QYZ%lZr%Qrs%qs{%Q{|Ct|!_%Q!_!`6e!`;'S%Q;'S;=`&s<%lO%QVC{V#qR&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVDiVqR&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVEV[#eR&WSOY%QYZ%lZr%Qrs%qs}%Q}!OCt!O!_%Q!_!`6e!`!aE{!a;'S%Q;'S;=`&s<%lO%QVFSV&vR&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_FpZWY&WSOY%QYZ%lZr%Qrs%qs!O%Q!O!PGc!P!Q%Q!Q![Hq![;'S%Q;'S;=`&s<%lO%QVGhX&WSOY%QYZ%lZr%Qrs%qs!O%Q!O!PHT!P;'S%Q;'S;=`&s<%lO%QVH[V&oR&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTHxc&WS`POY%QYZ%lZr%Qrs%qs!Q%Q!Q![Hq![!f%Q!f!gJT!g!hJq!h!iJT!i#R%Q#R#SNk#S#W%Q#W#XJT#X#YJq#Y#ZJT#Z;'S%Q;'S;=`&s<%lO%QTJ[V&WS`POY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTJv]&WSOY%QYZ%lZr%Qrs%qs{%Q{|Ko|}%Q}!OKo!O!Q%Q!Q![La![;'S%Q;'S;=`&s<%lO%QTKtX&WSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![La![;'S%Q;'S;=`&s<%lO%QTLhc&WS`POY%QYZ%lZr%Qrs%qs!Q%Q!Q![La![!f%Q!f!gJT!g!h%Q!h!iJT!i#R%Q#R#SMs#S#W%Q#W#XJT#X#Y%Q#Y#ZJT#Z;'S%Q;'S;=`&s<%lO%QTMxZ&WSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![La![#R%Q#R#SMs#S;'S%Q;'S;=`&s<%lO%QTNpZ&WSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Hq![#R%Q#R#SNk#S;'S%Q;'S;=`&s<%lO%Q_! j]&WS#fQOY%QYZ%lZr%Qrs%qsz%Qz{!!c{!P%Q!P!Q!)U!Q!_%Q!_!`6e!`;'S%Q;'S;=`&s<%lO%Q_!!hX&WSOY!!cYZ!#TZr!!crs!$psz!!cz{!&O{;'S!!c;'S;=`!'d<%lO!!c_!#YT&WSOz!#iz{!#{{;'S!#i;'S;=`!$j<%lO!#iZ!#lTOz!#iz{!#{{;'S!#i;'S;=`!$j<%lO!#iZ!$OVOz!#iz{!#{{!P!#i!P!Q!$e!Q;'S!#i;'S;=`!$j<%lO!#iZ!$jOQZZ!$mP;=`<%l!#i_!$sXOY!%`YZ!#TZr!%`rs!'jsz!%`z{!(Y{;'S!%`;'S;=`!)O<%lO!%`_!%cXOY!!cYZ!#TZr!!crs!$psz!!cz{!&O{;'S!!c;'S;=`!'d<%lO!!c_!&TZ&WSOY!!cYZ!#TZr!!crs!$psz!!cz{!&O{!P!!c!P!Q!&v!Q;'S!!c;'S;=`!'d<%lO!!c_!&}V&WSQZOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!'gP;=`<%l!!c_!'mXOY!%`YZ!#TZr!%`rs!#isz!%`z{!(Y{;'S!%`;'S;=`!)O<%lO!%`_!(]ZOY!!cYZ!#TZr!!crs!$psz!!cz{!&O{!P!!c!P!Q!&v!Q;'S!!c;'S;=`!'d<%lO!!c_!)RP;=`<%l!%`_!)]V&WSPZOY!)UYZ%lZr!)Urs!)rs;'S!)U;'S;=`!*x<%lO!)U_!)wVPZOY!*^YZ%lZr!*^rs!+Os;'S!*^;'S;=`!,R<%lO!*^_!*cVPZOY!)UYZ%lZr!)Urs!)rs;'S!)U;'S;=`!*x<%lO!)U_!*{P;=`<%l!)U_!+TVPZOY!*^YZ%lZr!*^rs!+js;'S!*^;'S;=`!,R<%lO!*^Z!+oSPZOY!+jZ;'S!+j;'S;=`!+{<%lO!+jZ!,OP;=`<%l!+j_!,UP;=`<%l!*^T!,`u&WS_POY%QYZ%lZr%Qrs%qs!O%Q!O!P!.s!P!Q%Q!Q![!0P![!d%Q!d!e!3Z!e!f%Q!f!gJT!g!hJq!h!iJT!i!n%Q!n!o!1u!o!q%Q!q!r!5X!r!z%Q!z!{!7P!{#R%Q#R#S!2c#S#U%Q#U#V!3Z#V#W%Q#W#XJT#X#YJq#Y#ZJT#Z#`%Q#`#a!1u#a#c%Q#c#d!5X#d#l%Q#l#m!7P#m;'S%Q;'S;=`&s<%lO%QT!.za&WS`POY%QYZ%lZr%Qrs%qs!Q%Q!Q![Hq![!f%Q!f!gJT!g!hJq!h!iJT!i#W%Q#W#XJT#X#YJq#Y#ZJT#Z;'S%Q;'S;=`&s<%lO%QT!0Wi&WS_POY%QYZ%lZr%Qrs%qs!O%Q!O!P!.s!P!Q%Q!Q![!0P![!f%Q!f!gJT!g!hJq!h!iJT!i!n%Q!n!o!1u!o#R%Q#R#S!2c#S#W%Q#W#XJT#X#YJq#Y#ZJT#Z#`%Q#`#a!1u#a;'S%Q;'S;=`&s<%lO%QT!1|V&WS_POY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT!2hZ&WSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!0P![#R%Q#R#S!2c#S;'S%Q;'S;=`&s<%lO%QT!3`Y&WSOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!4O!R!S!4O!S;'S%Q;'S;=`&s<%lO%QT!4V`&WS_POY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!4O!R!S!4O!S!n%Q!n!o!1u!o#R%Q#R#S!3Z#S#`%Q#`#a!1u#a;'S%Q;'S;=`&s<%lO%QT!5^X&WSOY%QYZ%lZr%Qrs%qs!Q%Q!Q!Y!5y!Y;'S%Q;'S;=`&s<%lO%QT!6Q_&WS_POY%QYZ%lZr%Qrs%qs!Q%Q!Q!Y!5y!Y!n%Q!n!o!1u!o#R%Q#R#S!5X#S#`%Q#`#a!1u#a;'S%Q;'S;=`&s<%lO%QT!7U_&WSOY%QYZ%lZr%Qrs%qs!O%Q!O!P!8T!P!Q%Q!Q![!:c![!c%Q!c!i!:c!i#T%Q#T#Z!:c#Z;'S%Q;'S;=`&s<%lO%QT!8Y]&WSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!9R![!c%Q!c!i!9R!i#T%Q#T#Z!9R#Z;'S%Q;'S;=`&s<%lO%QT!9Wc&WSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!9R![!c%Q!c!i!9R!i!r%Q!r!sJq!s#R%Q#R#S!8T#S#T%Q#T#Z!9R#Z#d%Q#d#eJq#e;'S%Q;'S;=`&s<%lO%QT!:ji&WS_POY%QYZ%lZr%Qrs%qs!O%Q!O!P!<X!P!Q%Q!Q![!:c![!c%Q!c!i!:c!i!n%Q!n!o!1u!o!r%Q!r!sJq!s#R%Q#R#S!=c#S#T%Q#T#Z!:c#Z#`%Q#`#a!1u#a#d%Q#d#eJq#e;'S%Q;'S;=`&s<%lO%QT!<^a&WSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!9R![!c%Q!c!i!9R!i!r%Q!r!sJq!s#T%Q#T#Z!9R#Z#d%Q#d#eJq#e;'S%Q;'S;=`&s<%lO%QT!=h]&WSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!:c![!c%Q!c!i!:c!i#T%Q#T#Z!:c#Z;'S%Q;'S;=`&s<%lO%QV!>hX#oR&WSOY%QYZ%lZr%Qrs%qs![%Q![!]!?T!];'S%Q;'S;=`&s<%lO%QV!?[V&tR&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!?xV!PR&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!@fY&]Z&WSOY%QYZ%lZr%Qrs%qs!^%Q!^!_!AU!_!`+p!`;'S%Q;'S;=`&s<%lO%QU!A]X#hQ&WSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6e!`;'S%Q;'S;=`&s<%lO%QV!BPX!bR&WSOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QV!BsY&[R&WSOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`!a!Cc!a;'S%Q;'S;=`&s<%lO%QU!CjY#hQ&WSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6e!`!a!AU!a;'S%Q;'S;=`&s<%lO%Q_!DcV&`X#nQ&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!EPX%{Z&WSOY%QYZ%lZr%Qrs%qs#]%Q#]#^!El#^;'S%Q;'S;=`&s<%lO%QV!EqX&WSOY%QYZ%lZr%Qrs%qs#b%Q#b#c!F^#c;'S%Q;'S;=`&s<%lO%QV!FcX&WSOY%QYZ%lZr%Qrs%qs#h%Q#h#i!GO#i;'S%Q;'S;=`&s<%lO%QV!GTX&WSOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!Gp#Y;'S%Q;'S;=`&s<%lO%QV!GuX&WSOY%QYZ%lZr%Qrs%qs#f%Q#f#g!Hb#g;'S%Q;'S;=`&s<%lO%QV!HgX&WSOY%QYZ%lZr%Qrs%qs#Y%Q#Y#Z!IS#Z;'S%Q;'S;=`&s<%lO%QV!IXX&WSOY%QYZ%lZr%Qrs%qs#T%Q#T#U!It#U;'S%Q;'S;=`&s<%lO%QV!IyX&WSOY%QYZ%lZr%Qrs%qs#V%Q#V#W!Jf#W;'S%Q;'S;=`&s<%lO%QV!JkX&WSOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!KW#Y;'S%Q;'S;=`&s<%lO%QV!K_V&rR&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!K{a&PZ&WSOY%QYZ%lZr%Qrs%qst%Qtu!Ktu!Q%Q!Q![!Kt![!c%Q!c!}!Kt!}#R%Q#R#S!Kt#S#T%Q#T#o!Kt#o;'S%Q;'S;=`&s<%lO%Q_!MXVuZ&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!MuVsR&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QU!NcX#cQ&WSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6e!`;'S%Q;'S;=`&s<%lO%QV# VV}R&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_# uZ&|X#cQ&WSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6e!`#p%Q#p#q#!h#q;'S%Q;'S;=`&s<%lO%QU#!oV#dQ&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV##]V|R&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT##yV#tP&WSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q\",\n  tokenizers: [0, 1, 2, 3],\n  topRules: {\"Program\":[0,3]},\n  dynamicPrecedences: {\"27\":1,\"230\":-1,\"241\":-1},\n  specialized: [{term: 229, get: value => spec_identifier[value] || -1}],\n  tokenPrec: 7067\n});\n\nexport { parser };\n", "import { parser } from '@lezer/java';\nimport { LRLanguage, indentNodeProp, continuedIndent, flatIndent, delimitedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nA language provider based on the [Lezer Java\nparser](https://github.com/lezer-parser/java), extended with\nhighlighting and indentation information.\n*/\nconst javaLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"java\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                IfStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b)/ }),\n                TryStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|catch|finally)\\b/ }),\n                LabeledStatement: flatIndent,\n                SwitchBlock: context => {\n                    let after = context.textAfter, closed = /^\\s*\\}/.test(after), isCase = /^\\s*(case|default)\\b/.test(after);\n                    return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit;\n                },\n                Block: /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n                BlockComment: () => null,\n                Statement: /*@__PURE__*/continuedIndent({ except: /^{/ })\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                [\"Block SwitchBlock ClassBody ElementValueArrayInitializer ModuleBody EnumBody \" +\n                    \"ConstructorBody InterfaceBody ArrayInitializer\"]: foldInside,\n                BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n        indentOnInput: /^\\s*(?:case |default:|\\{|\\})$/\n    }\n});\n/**\nJava language support.\n*/\nfunction java() {\n    return new LanguageSupport(javaLanguage);\n}\n\nexport { java, javaLanguage };\n", "import { NodeType, NodeProp, NodeSet, Tree, Parser, parseMixed } from '@lezer/common';\nimport { styleTags, tags, Tag } from '@lezer/highlight';\n\nclass CompositeBlock {\n    constructor(type, \n    // Used for indentation in list items, markup character in lists\n    value, from, hash, end, children, positions) {\n        this.type = type;\n        this.value = value;\n        this.from = from;\n        this.hash = hash;\n        this.end = end;\n        this.children = children;\n        this.positions = positions;\n        this.hashProp = [[NodeProp.contextHash, hash]];\n    }\n    static create(type, value, from, parentHash, end) {\n        let hash = (parentHash + (parentHash << 8) + type + (value << 4)) | 0;\n        return new CompositeBlock(type, value, from, hash, end, [], []);\n    }\n    addChild(child, pos) {\n        if (child.prop(NodeProp.contextHash) != this.hash)\n            child = new Tree(child.type, child.children, child.positions, child.length, this.hashProp);\n        this.children.push(child);\n        this.positions.push(pos);\n    }\n    toTree(nodeSet, end = this.end) {\n        let last = this.children.length - 1;\n        if (last >= 0)\n            end = Math.max(end, this.positions[last] + this.children[last].length + this.from);\n        let tree = new Tree(nodeSet.types[this.type], this.children, this.positions, end - this.from).balance({\n            makeTree: (children, positions, length) => new Tree(NodeType.none, children, positions, length, this.hashProp)\n        });\n        return tree;\n    }\n}\nvar Type;\n(function (Type) {\n    Type[Type[\"Document\"] = 1] = \"Document\";\n    Type[Type[\"CodeBlock\"] = 2] = \"CodeBlock\";\n    Type[Type[\"FencedCode\"] = 3] = \"FencedCode\";\n    Type[Type[\"Blockquote\"] = 4] = \"Blockquote\";\n    Type[Type[\"HorizontalRule\"] = 5] = \"HorizontalRule\";\n    Type[Type[\"BulletList\"] = 6] = \"BulletList\";\n    Type[Type[\"OrderedList\"] = 7] = \"OrderedList\";\n    Type[Type[\"ListItem\"] = 8] = \"ListItem\";\n    Type[Type[\"ATXHeading1\"] = 9] = \"ATXHeading1\";\n    Type[Type[\"ATXHeading2\"] = 10] = \"ATXHeading2\";\n    Type[Type[\"ATXHeading3\"] = 11] = \"ATXHeading3\";\n    Type[Type[\"ATXHeading4\"] = 12] = \"ATXHeading4\";\n    Type[Type[\"ATXHeading5\"] = 13] = \"ATXHeading5\";\n    Type[Type[\"ATXHeading6\"] = 14] = \"ATXHeading6\";\n    Type[Type[\"SetextHeading1\"] = 15] = \"SetextHeading1\";\n    Type[Type[\"SetextHeading2\"] = 16] = \"SetextHeading2\";\n    Type[Type[\"HTMLBlock\"] = 17] = \"HTMLBlock\";\n    Type[Type[\"LinkReference\"] = 18] = \"LinkReference\";\n    Type[Type[\"Paragraph\"] = 19] = \"Paragraph\";\n    Type[Type[\"CommentBlock\"] = 20] = \"CommentBlock\";\n    Type[Type[\"ProcessingInstructionBlock\"] = 21] = \"ProcessingInstructionBlock\";\n    // Inline\n    Type[Type[\"Escape\"] = 22] = \"Escape\";\n    Type[Type[\"Entity\"] = 23] = \"Entity\";\n    Type[Type[\"HardBreak\"] = 24] = \"HardBreak\";\n    Type[Type[\"Emphasis\"] = 25] = \"Emphasis\";\n    Type[Type[\"StrongEmphasis\"] = 26] = \"StrongEmphasis\";\n    Type[Type[\"Link\"] = 27] = \"Link\";\n    Type[Type[\"Image\"] = 28] = \"Image\";\n    Type[Type[\"InlineCode\"] = 29] = \"InlineCode\";\n    Type[Type[\"HTMLTag\"] = 30] = \"HTMLTag\";\n    Type[Type[\"Comment\"] = 31] = \"Comment\";\n    Type[Type[\"ProcessingInstruction\"] = 32] = \"ProcessingInstruction\";\n    Type[Type[\"URL\"] = 33] = \"URL\";\n    // Smaller tokens\n    Type[Type[\"HeaderMark\"] = 34] = \"HeaderMark\";\n    Type[Type[\"QuoteMark\"] = 35] = \"QuoteMark\";\n    Type[Type[\"ListMark\"] = 36] = \"ListMark\";\n    Type[Type[\"LinkMark\"] = 37] = \"LinkMark\";\n    Type[Type[\"EmphasisMark\"] = 38] = \"EmphasisMark\";\n    Type[Type[\"CodeMark\"] = 39] = \"CodeMark\";\n    Type[Type[\"CodeText\"] = 40] = \"CodeText\";\n    Type[Type[\"CodeInfo\"] = 41] = \"CodeInfo\";\n    Type[Type[\"LinkTitle\"] = 42] = \"LinkTitle\";\n    Type[Type[\"LinkLabel\"] = 43] = \"LinkLabel\";\n})(Type || (Type = {}));\n/// Data structure used to accumulate a block's content during [leaf\n/// block parsing](#BlockParser.leaf).\nclass LeafBlock {\n    /// @internal\n    constructor(\n    /// The start position of the block.\n    start, \n    /// The block's text content.\n    content) {\n        this.start = start;\n        this.content = content;\n        /// @internal\n        this.marks = [];\n        /// The block parsers active for this block.\n        this.parsers = [];\n    }\n}\n/// Data structure used during block-level per-line parsing.\nclass Line {\n    constructor() {\n        /// The line's full text.\n        this.text = \"\";\n        /// The base indent provided by the composite contexts (that have\n        /// been handled so far).\n        this.baseIndent = 0;\n        /// The string position corresponding to the base indent.\n        this.basePos = 0;\n        /// The number of contexts handled @internal\n        this.depth = 0;\n        /// Any markers (i.e. block quote markers) parsed for the contexts. @internal\n        this.markers = [];\n        /// The position of the next non-whitespace character beyond any\n        /// list, blockquote, or other composite block markers.\n        this.pos = 0;\n        /// The column of the next non-whitespace character.\n        this.indent = 0;\n        /// The character code of the character after `pos`.\n        this.next = -1;\n    }\n    /// @internal\n    forward() {\n        if (this.basePos > this.pos)\n            this.forwardInner();\n    }\n    /// @internal\n    forwardInner() {\n        let newPos = this.skipSpace(this.basePos);\n        this.indent = this.countIndent(newPos, this.pos, this.indent);\n        this.pos = newPos;\n        this.next = newPos == this.text.length ? -1 : this.text.charCodeAt(newPos);\n    }\n    /// Skip whitespace after the given position, return the position of\n    /// the next non-space character or the end of the line if there's\n    /// only space after `from`.\n    skipSpace(from) { return skipSpace(this.text, from); }\n    /// @internal\n    reset(text) {\n        this.text = text;\n        this.baseIndent = this.basePos = this.pos = this.indent = 0;\n        this.forwardInner();\n        this.depth = 1;\n        while (this.markers.length)\n            this.markers.pop();\n    }\n    /// Move the line's base position forward to the given position.\n    /// This should only be called by composite [block\n    /// parsers](#BlockParser.parse) or [markup skipping\n    /// functions](#NodeSpec.composite).\n    moveBase(to) {\n        this.basePos = to;\n        this.baseIndent = this.countIndent(to, this.pos, this.indent);\n    }\n    /// Move the line's base position forward to the given _column_.\n    moveBaseColumn(indent) {\n        this.baseIndent = indent;\n        this.basePos = this.findColumn(indent);\n    }\n    /// Store a composite-block-level marker. Should be called from\n    /// [markup skipping functions](#NodeSpec.composite) when they\n    /// consume any non-whitespace characters.\n    addMarker(elt) {\n        this.markers.push(elt);\n    }\n    /// Find the column position at `to`, optionally starting at a given\n    /// position and column.\n    countIndent(to, from = 0, indent = 0) {\n        for (let i = from; i < to; i++)\n            indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;\n        return indent;\n    }\n    /// Find the position corresponding to the given column.\n    findColumn(goal) {\n        let i = 0;\n        for (let indent = 0; i < this.text.length && indent < goal; i++)\n            indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;\n        return i;\n    }\n    /// @internal\n    scrub() {\n        if (!this.baseIndent)\n            return this.text;\n        let result = \"\";\n        for (let i = 0; i < this.basePos; i++)\n            result += \" \";\n        return result + this.text.slice(this.basePos);\n    }\n}\nfunction skipForList(bl, cx, line) {\n    if (line.pos == line.text.length ||\n        (bl != cx.block && line.indent >= cx.stack[line.depth + 1].value + line.baseIndent))\n        return true;\n    if (line.indent >= line.baseIndent + 4)\n        return false;\n    let size = (bl.type == Type.OrderedList ? isOrderedList : isBulletList)(line, cx, false);\n    return size > 0 &&\n        (bl.type != Type.BulletList || isHorizontalRule(line, cx, false) < 0) &&\n        line.text.charCodeAt(line.pos + size - 1) == bl.value;\n}\nconst DefaultSkipMarkup = {\n    [Type.Blockquote](bl, cx, line) {\n        if (line.next != 62 /* '>' */)\n            return false;\n        line.markers.push(elt(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1));\n        line.moveBase(line.pos + (space(line.text.charCodeAt(line.pos + 1)) ? 2 : 1));\n        bl.end = cx.lineStart + line.text.length;\n        return true;\n    },\n    [Type.ListItem](bl, _cx, line) {\n        if (line.indent < line.baseIndent + bl.value && line.next > -1)\n            return false;\n        line.moveBaseColumn(line.baseIndent + bl.value);\n        return true;\n    },\n    [Type.OrderedList]: skipForList,\n    [Type.BulletList]: skipForList,\n    [Type.Document]() { return true; }\n};\nfunction space(ch) { return ch == 32 || ch == 9 || ch == 10 || ch == 13; }\nfunction skipSpace(line, i = 0) {\n    while (i < line.length && space(line.charCodeAt(i)))\n        i++;\n    return i;\n}\nfunction skipSpaceBack(line, i, to) {\n    while (i > to && space(line.charCodeAt(i - 1)))\n        i--;\n    return i;\n}\nfunction isFencedCode(line) {\n    if (line.next != 96 && line.next != 126 /* '`~' */)\n        return -1;\n    let pos = line.pos + 1;\n    while (pos < line.text.length && line.text.charCodeAt(pos) == line.next)\n        pos++;\n    if (pos < line.pos + 3)\n        return -1;\n    if (line.next == 96)\n        for (let i = pos; i < line.text.length; i++)\n            if (line.text.charCodeAt(i) == 96)\n                return -1;\n    return pos;\n}\nfunction isBlockquote(line) {\n    return line.next != 62 /* '>' */ ? -1 : line.text.charCodeAt(line.pos + 1) == 32 ? 2 : 1;\n}\nfunction isHorizontalRule(line, cx, breaking) {\n    if (line.next != 42 && line.next != 45 && line.next != 95 /* '_-*' */)\n        return -1;\n    let count = 1;\n    for (let pos = line.pos + 1; pos < line.text.length; pos++) {\n        let ch = line.text.charCodeAt(pos);\n        if (ch == line.next)\n            count++;\n        else if (!space(ch))\n            return -1;\n    }\n    // Setext headers take precedence\n    if (breaking && line.next == 45 && isSetextUnderline(line) > -1 && line.depth == cx.stack.length)\n        return -1;\n    return count < 3 ? -1 : 1;\n}\nfunction inList(cx, type) {\n    for (let i = cx.stack.length - 1; i >= 0; i--)\n        if (cx.stack[i].type == type)\n            return true;\n    return false;\n}\nfunction isBulletList(line, cx, breaking) {\n    return (line.next == 45 || line.next == 43 || line.next == 42 /* '-+*' */) &&\n        (line.pos == line.text.length - 1 || space(line.text.charCodeAt(line.pos + 1))) &&\n        (!breaking || inList(cx, Type.BulletList) || line.skipSpace(line.pos + 2) < line.text.length) ? 1 : -1;\n}\nfunction isOrderedList(line, cx, breaking) {\n    let pos = line.pos, next = line.next;\n    for (;;) {\n        if (next >= 48 && next <= 57 /* '0-9' */)\n            pos++;\n        else\n            break;\n        if (pos == line.text.length)\n            return -1;\n        next = line.text.charCodeAt(pos);\n    }\n    if (pos == line.pos || pos > line.pos + 9 ||\n        (next != 46 && next != 41 /* '.)' */) ||\n        (pos < line.text.length - 1 && !space(line.text.charCodeAt(pos + 1))) ||\n        breaking && !inList(cx, Type.OrderedList) &&\n            (line.skipSpace(pos + 1) == line.text.length || pos > line.pos + 1 || line.next != 49 /* '1' */))\n        return -1;\n    return pos + 1 - line.pos;\n}\nfunction isAtxHeading(line) {\n    if (line.next != 35 /* '#' */)\n        return -1;\n    let pos = line.pos + 1;\n    while (pos < line.text.length && line.text.charCodeAt(pos) == 35)\n        pos++;\n    if (pos < line.text.length && line.text.charCodeAt(pos) != 32)\n        return -1;\n    let size = pos - line.pos;\n    return size > 6 ? -1 : size;\n}\nfunction isSetextUnderline(line) {\n    if (line.next != 45 && line.next != 61 /* '-=' */ || line.indent >= line.baseIndent + 4)\n        return -1;\n    let pos = line.pos + 1;\n    while (pos < line.text.length && line.text.charCodeAt(pos) == line.next)\n        pos++;\n    let end = pos;\n    while (pos < line.text.length && space(line.text.charCodeAt(pos)))\n        pos++;\n    return pos == line.text.length ? end : -1;\n}\nconst EmptyLine = /^[ \\t]*$/, CommentEnd = /-->/, ProcessingEnd = /\\?>/;\nconst HTMLBlockStyle = [\n    [/^<(?:script|pre|style)(?:\\s|>|$)/i, /<\\/(?:script|pre|style)>/i],\n    [/^\\s*<!--/, CommentEnd],\n    [/^\\s*<\\?/, ProcessingEnd],\n    [/^\\s*<![A-Z]/, />/],\n    [/^\\s*<!\\[CDATA\\[/, /\\]\\]>/],\n    [/^\\s*<\\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\\s|\\/?>|$)/i, EmptyLine],\n    [/^\\s*(?:<\\/[a-z][\\w-]*\\s*>|<[a-z][\\w-]*(\\s+[a-z:_][\\w-.]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*>)\\s*$/i, EmptyLine]\n];\nfunction isHTMLBlock(line, _cx, breaking) {\n    if (line.next != 60 /* '<' */)\n        return -1;\n    let rest = line.text.slice(line.pos);\n    for (let i = 0, e = HTMLBlockStyle.length - (breaking ? 1 : 0); i < e; i++)\n        if (HTMLBlockStyle[i][0].test(rest))\n            return i;\n    return -1;\n}\nfunction getListIndent(line, pos) {\n    let indentAfter = line.countIndent(pos, line.pos, line.indent);\n    let indented = line.countIndent(line.skipSpace(pos), pos, indentAfter);\n    return indented >= indentAfter + 5 ? indentAfter + 1 : indented;\n}\nfunction addCodeText(marks, from, to) {\n    let last = marks.length - 1;\n    if (last >= 0 && marks[last].to == from && marks[last].type == Type.CodeText)\n        marks[last].to = to;\n    else\n        marks.push(elt(Type.CodeText, from, to));\n}\n// Rules for parsing blocks. A return value of false means the rule\n// doesn't apply here, true means it does. When true is returned and\n// `p.line` has been updated, the rule is assumed to have consumed a\n// leaf block. Otherwise, it is assumed to have opened a context.\nconst DefaultBlockParsers = {\n    LinkReference: undefined,\n    IndentedCode(cx, line) {\n        let base = line.baseIndent + 4;\n        if (line.indent < base)\n            return false;\n        let start = line.findColumn(base);\n        let from = cx.lineStart + start, to = cx.lineStart + line.text.length;\n        let marks = [], pendingMarks = [];\n        addCodeText(marks, from, to);\n        while (cx.nextLine() && line.depth >= cx.stack.length) {\n            if (line.pos == line.text.length) { // Empty\n                addCodeText(pendingMarks, cx.lineStart - 1, cx.lineStart);\n                for (let m of line.markers)\n                    pendingMarks.push(m);\n            }\n            else if (line.indent < base) {\n                break;\n            }\n            else {\n                if (pendingMarks.length) {\n                    for (let m of pendingMarks) {\n                        if (m.type == Type.CodeText)\n                            addCodeText(marks, m.from, m.to);\n                        else\n                            marks.push(m);\n                    }\n                    pendingMarks = [];\n                }\n                addCodeText(marks, cx.lineStart - 1, cx.lineStart);\n                for (let m of line.markers)\n                    marks.push(m);\n                to = cx.lineStart + line.text.length;\n                let codeStart = cx.lineStart + line.findColumn(line.baseIndent + 4);\n                if (codeStart < to)\n                    addCodeText(marks, codeStart, to);\n            }\n        }\n        if (pendingMarks.length) {\n            pendingMarks = pendingMarks.filter(m => m.type != Type.CodeText);\n            if (pendingMarks.length)\n                line.markers = pendingMarks.concat(line.markers);\n        }\n        cx.addNode(cx.buffer.writeElements(marks, -from).finish(Type.CodeBlock, to - from), from);\n        return true;\n    },\n    FencedCode(cx, line) {\n        let fenceEnd = isFencedCode(line);\n        if (fenceEnd < 0)\n            return false;\n        let from = cx.lineStart + line.pos, ch = line.next, len = fenceEnd - line.pos;\n        let infoFrom = line.skipSpace(fenceEnd), infoTo = skipSpaceBack(line.text, line.text.length, infoFrom);\n        let marks = [elt(Type.CodeMark, from, from + len)];\n        if (infoFrom < infoTo)\n            marks.push(elt(Type.CodeInfo, cx.lineStart + infoFrom, cx.lineStart + infoTo));\n        for (let first = true; cx.nextLine() && line.depth >= cx.stack.length; first = false) {\n            let i = line.pos;\n            if (line.indent - line.baseIndent < 4)\n                while (i < line.text.length && line.text.charCodeAt(i) == ch)\n                    i++;\n            if (i - line.pos >= len && line.skipSpace(i) == line.text.length) {\n                for (let m of line.markers)\n                    marks.push(m);\n                marks.push(elt(Type.CodeMark, cx.lineStart + line.pos, cx.lineStart + i));\n                cx.nextLine();\n                break;\n            }\n            else {\n                if (!first)\n                    addCodeText(marks, cx.lineStart - 1, cx.lineStart);\n                for (let m of line.markers)\n                    marks.push(m);\n                let textStart = cx.lineStart + line.basePos, textEnd = cx.lineStart + line.text.length;\n                if (textStart < textEnd)\n                    addCodeText(marks, textStart, textEnd);\n            }\n        }\n        cx.addNode(cx.buffer.writeElements(marks, -from)\n            .finish(Type.FencedCode, cx.prevLineEnd() - from), from);\n        return true;\n    },\n    Blockquote(cx, line) {\n        let size = isBlockquote(line);\n        if (size < 0)\n            return false;\n        cx.startContext(Type.Blockquote, line.pos);\n        cx.addNode(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1);\n        line.moveBase(line.pos + size);\n        return null;\n    },\n    HorizontalRule(cx, line) {\n        if (isHorizontalRule(line, cx, false) < 0)\n            return false;\n        let from = cx.lineStart + line.pos;\n        cx.nextLine();\n        cx.addNode(Type.HorizontalRule, from);\n        return true;\n    },\n    BulletList(cx, line) {\n        let size = isBulletList(line, cx, false);\n        if (size < 0)\n            return false;\n        if (cx.block.type != Type.BulletList)\n            cx.startContext(Type.BulletList, line.basePos, line.next);\n        let newBase = getListIndent(line, line.pos + 1);\n        cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);\n        cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);\n        line.moveBaseColumn(newBase);\n        return null;\n    },\n    OrderedList(cx, line) {\n        let size = isOrderedList(line, cx, false);\n        if (size < 0)\n            return false;\n        if (cx.block.type != Type.OrderedList)\n            cx.startContext(Type.OrderedList, line.basePos, line.text.charCodeAt(line.pos + size - 1));\n        let newBase = getListIndent(line, line.pos + size);\n        cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);\n        cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);\n        line.moveBaseColumn(newBase);\n        return null;\n    },\n    ATXHeading(cx, line) {\n        let size = isAtxHeading(line);\n        if (size < 0)\n            return false;\n        let off = line.pos, from = cx.lineStart + off;\n        let endOfSpace = skipSpaceBack(line.text, line.text.length, off), after = endOfSpace;\n        while (after > off && line.text.charCodeAt(after - 1) == line.next)\n            after--;\n        if (after == endOfSpace || after == off || !space(line.text.charCodeAt(after - 1)))\n            after = line.text.length;\n        let buf = cx.buffer\n            .write(Type.HeaderMark, 0, size)\n            .writeElements(cx.parser.parseInline(line.text.slice(off + size + 1, after), from + size + 1), -from);\n        if (after < line.text.length)\n            buf.write(Type.HeaderMark, after - off, endOfSpace - off);\n        let node = buf.finish(Type.ATXHeading1 - 1 + size, line.text.length - off);\n        cx.nextLine();\n        cx.addNode(node, from);\n        return true;\n    },\n    HTMLBlock(cx, line) {\n        let type = isHTMLBlock(line, cx, false);\n        if (type < 0)\n            return false;\n        let from = cx.lineStart + line.pos, end = HTMLBlockStyle[type][1];\n        let marks = [], trailing = end != EmptyLine;\n        while (!end.test(line.text) && cx.nextLine()) {\n            if (line.depth < cx.stack.length) {\n                trailing = false;\n                break;\n            }\n            for (let m of line.markers)\n                marks.push(m);\n        }\n        if (trailing)\n            cx.nextLine();\n        let nodeType = end == CommentEnd ? Type.CommentBlock : end == ProcessingEnd ? Type.ProcessingInstructionBlock : Type.HTMLBlock;\n        let to = cx.prevLineEnd();\n        cx.addNode(cx.buffer.writeElements(marks, -from).finish(nodeType, to - from), from);\n        return true;\n    },\n    SetextHeading: undefined // Specifies relative precedence for block-continue function\n};\n// This implements a state machine that incrementally parses link references. At each\n// next line, it looks ahead to see if the line continues the reference or not. If it\n// doesn't and a valid link is available ending before that line, it finishes that.\n// Similarly, on `finish` (when the leaf is terminated by external circumstances), it\n// creates a link reference if there's a valid reference up to the current point.\nclass LinkReferenceParser {\n    constructor(leaf) {\n        this.stage = 0 /* Start */;\n        this.elts = [];\n        this.pos = 0;\n        this.start = leaf.start;\n        this.advance(leaf.content);\n    }\n    nextLine(cx, line, leaf) {\n        if (this.stage == -1 /* Failed */)\n            return false;\n        let content = leaf.content + \"\\n\" + line.scrub();\n        let finish = this.advance(content);\n        if (finish > -1 && finish < content.length)\n            return this.complete(cx, leaf, finish);\n        return false;\n    }\n    finish(cx, leaf) {\n        if ((this.stage == 2 /* Link */ || this.stage == 3 /* Title */) && skipSpace(leaf.content, this.pos) == leaf.content.length)\n            return this.complete(cx, leaf, leaf.content.length);\n        return false;\n    }\n    complete(cx, leaf, len) {\n        cx.addLeafElement(leaf, elt(Type.LinkReference, this.start, this.start + len, this.elts));\n        return true;\n    }\n    nextStage(elt) {\n        if (elt) {\n            this.pos = elt.to - this.start;\n            this.elts.push(elt);\n            this.stage++;\n            return true;\n        }\n        if (elt === false)\n            this.stage = -1 /* Failed */;\n        return false;\n    }\n    advance(content) {\n        for (;;) {\n            if (this.stage == -1 /* Failed */) {\n                return -1;\n            }\n            else if (this.stage == 0 /* Start */) {\n                if (!this.nextStage(parseLinkLabel(content, this.pos, this.start, true)))\n                    return -1;\n                if (content.charCodeAt(this.pos) != 58 /* ':' */)\n                    return this.stage = -1 /* Failed */;\n                this.elts.push(elt(Type.LinkMark, this.pos + this.start, this.pos + this.start + 1));\n                this.pos++;\n            }\n            else if (this.stage == 1 /* Label */) {\n                if (!this.nextStage(parseURL(content, skipSpace(content, this.pos), this.start)))\n                    return -1;\n            }\n            else if (this.stage == 2 /* Link */) {\n                let skip = skipSpace(content, this.pos), end = 0;\n                if (skip > this.pos) {\n                    let title = parseLinkTitle(content, skip, this.start);\n                    if (title) {\n                        let titleEnd = lineEnd(content, title.to - this.start);\n                        if (titleEnd > 0) {\n                            this.nextStage(title);\n                            end = titleEnd;\n                        }\n                    }\n                }\n                if (!end)\n                    end = lineEnd(content, this.pos);\n                return end > 0 && end < content.length ? end : -1;\n            }\n            else { // RefStage.Title\n                return lineEnd(content, this.pos);\n            }\n        }\n    }\n}\nfunction lineEnd(text, pos) {\n    for (; pos < text.length; pos++) {\n        let next = text.charCodeAt(pos);\n        if (next == 10)\n            break;\n        if (!space(next))\n            return -1;\n    }\n    return pos;\n}\nclass SetextHeadingParser {\n    nextLine(cx, line, leaf) {\n        let underline = line.depth < cx.stack.length ? -1 : isSetextUnderline(line);\n        let next = line.next;\n        if (underline < 0)\n            return false;\n        let underlineMark = elt(Type.HeaderMark, cx.lineStart + line.pos, cx.lineStart + underline);\n        cx.nextLine();\n        cx.addLeafElement(leaf, elt(next == 61 ? Type.SetextHeading1 : Type.SetextHeading2, leaf.start, cx.prevLineEnd(), [\n            ...cx.parser.parseInline(leaf.content, leaf.start),\n            underlineMark\n        ]));\n        return true;\n    }\n    finish() {\n        return false;\n    }\n}\nconst DefaultLeafBlocks = {\n    LinkReference(_, leaf) { return leaf.content.charCodeAt(0) == 91 /* '[' */ ? new LinkReferenceParser(leaf) : null; },\n    SetextHeading() { return new SetextHeadingParser; }\n};\nconst DefaultEndLeaf = [\n    (_, line) => isAtxHeading(line) >= 0,\n    (_, line) => isFencedCode(line) >= 0,\n    (_, line) => isBlockquote(line) >= 0,\n    (p, line) => isBulletList(line, p, true) >= 0,\n    (p, line) => isOrderedList(line, p, true) >= 0,\n    (p, line) => isHorizontalRule(line, p, true) >= 0,\n    (p, line) => isHTMLBlock(line, p, true) >= 0\n];\nconst scanLineResult = { text: \"\", end: 0 };\n/// Block-level parsing functions get access to this context object.\nclass BlockContext {\n    /// @internal\n    constructor(\n    /// The parser configuration used.\n    parser, \n    /// @internal\n    input, fragments, \n    /// @internal\n    ranges) {\n        this.parser = parser;\n        this.input = input;\n        this.ranges = ranges;\n        this.line = new Line();\n        this.atEnd = false;\n        /// @internal\n        this.dontInject = new Set;\n        this.stoppedAt = null;\n        /// The range index that absoluteLineStart points into @internal\n        this.rangeI = 0;\n        this.to = ranges[ranges.length - 1].to;\n        this.lineStart = this.absoluteLineStart = this.absoluteLineEnd = ranges[0].from;\n        this.block = CompositeBlock.create(Type.Document, 0, this.lineStart, 0, 0);\n        this.stack = [this.block];\n        this.fragments = fragments.length ? new FragmentCursor(fragments, input) : null;\n        this.readLine();\n    }\n    get parsedPos() {\n        return this.absoluteLineStart;\n    }\n    advance() {\n        if (this.stoppedAt != null && this.absoluteLineStart > this.stoppedAt)\n            return this.finish();\n        let { line } = this;\n        for (;;) {\n            while (line.depth < this.stack.length)\n                this.finishContext();\n            for (let mark of line.markers)\n                this.addNode(mark.type, mark.from, mark.to);\n            if (line.pos < line.text.length)\n                break;\n            // Empty line\n            if (!this.nextLine())\n                return this.finish();\n        }\n        if (this.fragments && this.reuseFragment(line.basePos))\n            return null;\n        start: for (;;) {\n            for (let type of this.parser.blockParsers)\n                if (type) {\n                    let result = type(this, line);\n                    if (result != false) {\n                        if (result == true)\n                            return null;\n                        line.forward();\n                        continue start;\n                    }\n                }\n            break;\n        }\n        let leaf = new LeafBlock(this.lineStart + line.pos, line.text.slice(line.pos));\n        for (let parse of this.parser.leafBlockParsers)\n            if (parse) {\n                let parser = parse(this, leaf);\n                if (parser)\n                    leaf.parsers.push(parser);\n            }\n        lines: while (this.nextLine()) {\n            if (line.pos == line.text.length)\n                break;\n            if (line.indent < line.baseIndent + 4) {\n                for (let stop of this.parser.endLeafBlock)\n                    if (stop(this, line, leaf))\n                        break lines;\n            }\n            for (let parser of leaf.parsers)\n                if (parser.nextLine(this, line, leaf))\n                    return null;\n            leaf.content += \"\\n\" + line.scrub();\n            for (let m of line.markers)\n                leaf.marks.push(m);\n        }\n        this.finishLeaf(leaf);\n        return null;\n    }\n    stopAt(pos) {\n        if (this.stoppedAt != null && this.stoppedAt < pos)\n            throw new RangeError(\"Can't move stoppedAt forward\");\n        this.stoppedAt = pos;\n    }\n    reuseFragment(start) {\n        if (!this.fragments.moveTo(this.absoluteLineStart + start, this.absoluteLineStart) ||\n            !this.fragments.matches(this.block.hash))\n            return false;\n        let taken = this.fragments.takeNodes(this);\n        if (!taken)\n            return false;\n        let withoutGaps = taken, end = this.absoluteLineStart + taken;\n        for (let i = 1; i < this.ranges.length; i++) {\n            let gapFrom = this.ranges[i - 1].to, gapTo = this.ranges[i].from;\n            if (gapFrom >= this.lineStart && gapTo < end)\n                withoutGaps -= gapTo - gapFrom;\n        }\n        this.lineStart += withoutGaps;\n        this.absoluteLineStart += taken;\n        this.moveRangeI();\n        if (this.absoluteLineStart < this.to) {\n            this.lineStart++;\n            this.absoluteLineStart++;\n            this.readLine();\n        }\n        else {\n            this.atEnd = true;\n            this.readLine();\n        }\n        return true;\n    }\n    /// The number of parent blocks surrounding the current block.\n    get depth() {\n        return this.stack.length;\n    }\n    /// Get the type of the parent block at the given depth. When no\n    /// depth is passed, return the type of the innermost parent.\n    parentType(depth = this.depth - 1) {\n        return this.parser.nodeSet.types[this.stack[depth].type];\n    }\n    /// Move to the next input line. This should only be called by\n    /// (non-composite) [block parsers](#BlockParser.parse) that consume\n    /// the line directly, or leaf block parser\n    /// [`nextLine`](#LeafBlockParser.nextLine) methods when they\n    /// consume the current line (and return true).\n    nextLine() {\n        this.lineStart += this.line.text.length;\n        if (this.absoluteLineEnd >= this.to) {\n            this.absoluteLineStart = this.absoluteLineEnd;\n            this.atEnd = true;\n            this.readLine();\n            return false;\n        }\n        else {\n            this.lineStart++;\n            this.absoluteLineStart = this.absoluteLineEnd + 1;\n            this.moveRangeI();\n            this.readLine();\n            return true;\n        }\n    }\n    moveRangeI() {\n        while (this.rangeI < this.ranges.length - 1 && this.absoluteLineStart >= this.ranges[this.rangeI].to) {\n            this.rangeI++;\n            this.absoluteLineStart = Math.max(this.absoluteLineStart, this.ranges[this.rangeI].from);\n        }\n    }\n    /// @internal\n    scanLine(start) {\n        let r = scanLineResult;\n        r.end = start;\n        if (start >= this.to) {\n            r.text = \"\";\n        }\n        else {\n            r.text = this.lineChunkAt(start);\n            r.end += r.text.length;\n            if (this.ranges.length > 1) {\n                let textOffset = this.absoluteLineStart, rangeI = this.rangeI;\n                while (this.ranges[rangeI].to < r.end) {\n                    rangeI++;\n                    let nextFrom = this.ranges[rangeI].from;\n                    let after = this.lineChunkAt(nextFrom);\n                    r.end = nextFrom + after.length;\n                    r.text = r.text.slice(0, this.ranges[rangeI - 1].to - textOffset) + after;\n                    textOffset = r.end - r.text.length;\n                }\n            }\n        }\n        return r;\n    }\n    /// @internal\n    readLine() {\n        let { line } = this, { text, end } = this.scanLine(this.absoluteLineStart);\n        this.absoluteLineEnd = end;\n        line.reset(text);\n        for (; line.depth < this.stack.length; line.depth++) {\n            let cx = this.stack[line.depth], handler = this.parser.skipContextMarkup[cx.type];\n            if (!handler)\n                throw new Error(\"Unhandled block context \" + Type[cx.type]);\n            if (!handler(cx, this, line))\n                break;\n            line.forward();\n        }\n    }\n    lineChunkAt(pos) {\n        let next = this.input.chunk(pos), text;\n        if (!this.input.lineChunks) {\n            let eol = next.indexOf(\"\\n\");\n            text = eol < 0 ? next : next.slice(0, eol);\n        }\n        else {\n            text = next == \"\\n\" ? \"\" : next;\n        }\n        return pos + text.length > this.to ? text.slice(0, this.to - pos) : text;\n    }\n    /// The end position of the previous line.\n    prevLineEnd() { return this.atEnd ? this.lineStart : this.lineStart - 1; }\n    /// @internal\n    startContext(type, start, value = 0) {\n        this.block = CompositeBlock.create(type, value, this.lineStart + start, this.block.hash, this.lineStart + this.line.text.length);\n        this.stack.push(this.block);\n    }\n    /// Start a composite block. Should only be called from [block\n    /// parser functions](#BlockParser.parse) that return null.\n    startComposite(type, start, value = 0) {\n        this.startContext(this.parser.getNodeType(type), start, value);\n    }\n    /// @internal\n    addNode(block, from, to) {\n        if (typeof block == \"number\")\n            block = new Tree(this.parser.nodeSet.types[block], none, none, (to !== null && to !== void 0 ? to : this.prevLineEnd()) - from);\n        this.block.addChild(block, from - this.block.from);\n    }\n    /// Add a block element. Can be called by [block\n    /// parsers](#BlockParser.parse).\n    addElement(elt) {\n        this.block.addChild(elt.toTree(this.parser.nodeSet), elt.from - this.block.from);\n    }\n    /// Add a block element from a [leaf parser](#LeafBlockParser). This\n    /// makes sure any extra composite block markup (such as blockquote\n    /// markers) inside the block are also added to the syntax tree.\n    addLeafElement(leaf, elt) {\n        this.addNode(this.buffer\n            .writeElements(injectMarks(elt.children, leaf.marks), -elt.from)\n            .finish(elt.type, elt.to - elt.from), elt.from);\n    }\n    /// @internal\n    finishContext() {\n        let cx = this.stack.pop();\n        let top = this.stack[this.stack.length - 1];\n        top.addChild(cx.toTree(this.parser.nodeSet), cx.from - top.from);\n        this.block = top;\n    }\n    finish() {\n        while (this.stack.length > 1)\n            this.finishContext();\n        return this.addGaps(this.block.toTree(this.parser.nodeSet, this.lineStart));\n    }\n    addGaps(tree) {\n        return this.ranges.length > 1 ? injectGaps(this.ranges, 0, tree.topNode, this.ranges[0].from, this.dontInject) : tree;\n    }\n    /// @internal\n    finishLeaf(leaf) {\n        for (let parser of leaf.parsers)\n            if (parser.finish(this, leaf))\n                return;\n        let inline = injectMarks(this.parser.parseInline(leaf.content, leaf.start), leaf.marks);\n        this.addNode(this.buffer\n            .writeElements(inline, -leaf.start)\n            .finish(Type.Paragraph, leaf.content.length), leaf.start);\n    }\n    elt(type, from, to, children) {\n        if (typeof type == \"string\")\n            return elt(this.parser.getNodeType(type), from, to, children);\n        return new TreeElement(type, from);\n    }\n    /// @internal\n    get buffer() { return new Buffer(this.parser.nodeSet); }\n}\nfunction injectGaps(ranges, rangeI, tree, offset, dont) {\n    if (dont.has(tree.tree))\n        return tree.tree;\n    let rangeEnd = ranges[rangeI].to;\n    let children = [], positions = [], start = tree.from + offset;\n    function movePastNext(upto, inclusive) {\n        while (inclusive ? upto >= rangeEnd : upto > rangeEnd) {\n            let size = ranges[rangeI + 1].from - rangeEnd;\n            offset += size;\n            upto += size;\n            rangeI++;\n            rangeEnd = ranges[rangeI].to;\n        }\n    }\n    for (let ch = tree.firstChild; ch; ch = ch.nextSibling) {\n        movePastNext(ch.from + offset, true);\n        let from = ch.from + offset, node;\n        if (ch.to + offset > rangeEnd) {\n            node = injectGaps(ranges, rangeI, ch, offset, dont);\n            movePastNext(ch.to + offset, false);\n        }\n        else {\n            node = ch.toTree();\n        }\n        children.push(node);\n        positions.push(from - start);\n    }\n    movePastNext(tree.to + offset, false);\n    return new Tree(tree.type, children, positions, tree.to + offset - start, tree.tree ? tree.tree.propValues : undefined);\n}\n/// A Markdown parser configuration.\nclass MarkdownParser extends Parser {\n    /// @internal\n    constructor(\n    /// The parser's syntax [node\n    /// types](https://lezer.codemirror.net/docs/ref/#common.NodeSet).\n    nodeSet, \n    /// @internal\n    blockParsers, \n    /// @internal\n    leafBlockParsers, \n    /// @internal\n    blockNames, \n    /// @internal\n    endLeafBlock, \n    /// @internal\n    skipContextMarkup, \n    /// @internal\n    inlineParsers, \n    /// @internal\n    inlineNames, \n    /// @internal\n    wrappers) {\n        super();\n        this.nodeSet = nodeSet;\n        this.blockParsers = blockParsers;\n        this.leafBlockParsers = leafBlockParsers;\n        this.blockNames = blockNames;\n        this.endLeafBlock = endLeafBlock;\n        this.skipContextMarkup = skipContextMarkup;\n        this.inlineParsers = inlineParsers;\n        this.inlineNames = inlineNames;\n        this.wrappers = wrappers;\n        /// @internal\n        this.nodeTypes = Object.create(null);\n        for (let t of nodeSet.types)\n            this.nodeTypes[t.name] = t.id;\n    }\n    createParse(input, fragments, ranges) {\n        let parse = new BlockContext(this, input, fragments, ranges);\n        for (let w of this.wrappers)\n            parse = w(parse, input, fragments, ranges);\n        return parse;\n    }\n    /// Reconfigure the parser.\n    configure(spec) {\n        let config = resolveConfig(spec);\n        if (!config)\n            return this;\n        let { nodeSet, skipContextMarkup } = this;\n        let blockParsers = this.blockParsers.slice(), leafBlockParsers = this.leafBlockParsers.slice(), blockNames = this.blockNames.slice(), inlineParsers = this.inlineParsers.slice(), inlineNames = this.inlineNames.slice(), endLeafBlock = this.endLeafBlock.slice(), wrappers = this.wrappers;\n        if (nonEmpty(config.defineNodes)) {\n            skipContextMarkup = Object.assign({}, skipContextMarkup);\n            let nodeTypes = nodeSet.types.slice(), styles;\n            for (let s of config.defineNodes) {\n                let { name, block, composite, style } = typeof s == \"string\" ? { name: s } : s;\n                if (nodeTypes.some(t => t.name == name))\n                    continue;\n                if (composite)\n                    skipContextMarkup[nodeTypes.length] =\n                        (bl, cx, line) => composite(cx, line, bl.value);\n                let id = nodeTypes.length;\n                let group = composite ? [\"Block\", \"BlockContext\"] : !block ? undefined\n                    : id >= Type.ATXHeading1 && id <= Type.SetextHeading2 ? [\"Block\", \"LeafBlock\", \"Heading\"] : [\"Block\", \"LeafBlock\"];\n                nodeTypes.push(NodeType.define({\n                    id,\n                    name,\n                    props: group && [[NodeProp.group, group]]\n                }));\n                if (style) {\n                    if (!styles)\n                        styles = {};\n                    if (Array.isArray(style) || style instanceof Tag)\n                        styles[name] = style;\n                    else\n                        Object.assign(styles, style);\n                }\n            }\n            nodeSet = new NodeSet(nodeTypes);\n            if (styles)\n                nodeSet = nodeSet.extend(styleTags(styles));\n        }\n        if (nonEmpty(config.props))\n            nodeSet = nodeSet.extend(...config.props);\n        if (nonEmpty(config.remove)) {\n            for (let rm of config.remove) {\n                let block = this.blockNames.indexOf(rm), inline = this.inlineNames.indexOf(rm);\n                if (block > -1)\n                    blockParsers[block] = leafBlockParsers[block] = undefined;\n                if (inline > -1)\n                    inlineParsers[inline] = undefined;\n            }\n        }\n        if (nonEmpty(config.parseBlock)) {\n            for (let spec of config.parseBlock) {\n                let found = blockNames.indexOf(spec.name);\n                if (found > -1) {\n                    blockParsers[found] = spec.parse;\n                    leafBlockParsers[found] = spec.leaf;\n                }\n                else {\n                    let pos = spec.before ? findName(blockNames, spec.before)\n                        : spec.after ? findName(blockNames, spec.after) + 1 : blockNames.length - 1;\n                    blockParsers.splice(pos, 0, spec.parse);\n                    leafBlockParsers.splice(pos, 0, spec.leaf);\n                    blockNames.splice(pos, 0, spec.name);\n                }\n                if (spec.endLeaf)\n                    endLeafBlock.push(spec.endLeaf);\n            }\n        }\n        if (nonEmpty(config.parseInline)) {\n            for (let spec of config.parseInline) {\n                let found = inlineNames.indexOf(spec.name);\n                if (found > -1) {\n                    inlineParsers[found] = spec.parse;\n                }\n                else {\n                    let pos = spec.before ? findName(inlineNames, spec.before)\n                        : spec.after ? findName(inlineNames, spec.after) + 1 : inlineNames.length - 1;\n                    inlineParsers.splice(pos, 0, spec.parse);\n                    inlineNames.splice(pos, 0, spec.name);\n                }\n            }\n        }\n        if (config.wrap)\n            wrappers = wrappers.concat(config.wrap);\n        return new MarkdownParser(nodeSet, blockParsers, leafBlockParsers, blockNames, endLeafBlock, skipContextMarkup, inlineParsers, inlineNames, wrappers);\n    }\n    /// @internal\n    getNodeType(name) {\n        let found = this.nodeTypes[name];\n        if (found == null)\n            throw new RangeError(`Unknown node type '${name}'`);\n        return found;\n    }\n    /// Parse the given piece of inline text at the given offset,\n    /// returning an array of [`Element`](#Element) objects representing\n    /// the inline content.\n    parseInline(text, offset) {\n        let cx = new InlineContext(this, text, offset);\n        outer: for (let pos = offset; pos < cx.end;) {\n            let next = cx.char(pos);\n            for (let token of this.inlineParsers)\n                if (token) {\n                    let result = token(cx, next, pos);\n                    if (result >= 0) {\n                        pos = result;\n                        continue outer;\n                    }\n                }\n            pos++;\n        }\n        return cx.resolveMarkers(0);\n    }\n}\nfunction nonEmpty(a) {\n    return a != null && a.length > 0;\n}\nfunction resolveConfig(spec) {\n    if (!Array.isArray(spec))\n        return spec;\n    if (spec.length == 0)\n        return null;\n    let conf = resolveConfig(spec[0]);\n    if (spec.length == 1)\n        return conf;\n    let rest = resolveConfig(spec.slice(1));\n    if (!rest || !conf)\n        return conf || rest;\n    let conc = (a, b) => (a || none).concat(b || none);\n    let wrapA = conf.wrap, wrapB = rest.wrap;\n    return {\n        props: conc(conf.props, rest.props),\n        defineNodes: conc(conf.defineNodes, rest.defineNodes),\n        parseBlock: conc(conf.parseBlock, rest.parseBlock),\n        parseInline: conc(conf.parseInline, rest.parseInline),\n        remove: conc(conf.remove, rest.remove),\n        wrap: !wrapA ? wrapB : !wrapB ? wrapA :\n            (inner, input, fragments, ranges) => wrapA(wrapB(inner, input, fragments, ranges), input, fragments, ranges)\n    };\n}\nfunction findName(names, name) {\n    let found = names.indexOf(name);\n    if (found < 0)\n        throw new RangeError(`Position specified relative to unknown parser ${name}`);\n    return found;\n}\nlet nodeTypes = [NodeType.none];\nfor (let i = 1, name; name = Type[i]; i++) {\n    nodeTypes[i] = NodeType.define({\n        id: i,\n        name,\n        props: i >= Type.Escape ? [] : [[NodeProp.group, i in DefaultSkipMarkup ? [\"Block\", \"BlockContext\"] : [\"Block\", \"LeafBlock\"]]]\n    });\n}\nconst none = [];\nclass Buffer {\n    constructor(nodeSet) {\n        this.nodeSet = nodeSet;\n        this.content = [];\n        this.nodes = [];\n    }\n    write(type, from, to, children = 0) {\n        this.content.push(type, from, to, 4 + children * 4);\n        return this;\n    }\n    writeElements(elts, offset = 0) {\n        for (let e of elts)\n            e.writeTo(this, offset);\n        return this;\n    }\n    finish(type, length) {\n        return Tree.build({\n            buffer: this.content,\n            nodeSet: this.nodeSet,\n            reused: this.nodes,\n            topID: type,\n            length\n        });\n    }\n}\n/// Elements are used to compose syntax nodes during parsing.\nclass Element {\n    /// @internal\n    constructor(\n    /// The node's\n    /// [id](https://lezer.codemirror.net/docs/ref/#common.NodeType.id).\n    type, \n    /// The start of the node, as an offset from the start of the document.\n    from, \n    /// The end of the node.\n    to, \n    /// The node's child nodes @internal\n    children = none) {\n        this.type = type;\n        this.from = from;\n        this.to = to;\n        this.children = children;\n    }\n    /// @internal\n    writeTo(buf, offset) {\n        let startOff = buf.content.length;\n        buf.writeElements(this.children, offset);\n        buf.content.push(this.type, this.from + offset, this.to + offset, buf.content.length + 4 - startOff);\n    }\n    /// @internal\n    toTree(nodeSet) {\n        return new Buffer(nodeSet).writeElements(this.children, -this.from).finish(this.type, this.to - this.from);\n    }\n}\nclass TreeElement {\n    constructor(tree, from) {\n        this.tree = tree;\n        this.from = from;\n    }\n    get to() { return this.from + this.tree.length; }\n    get type() { return this.tree.type.id; }\n    get children() { return none; }\n    writeTo(buf, offset) {\n        buf.nodes.push(this.tree);\n        buf.content.push(buf.nodes.length - 1, this.from + offset, this.to + offset, -1);\n    }\n    toTree() { return this.tree; }\n}\nfunction elt(type, from, to, children) {\n    return new Element(type, from, to, children);\n}\nconst EmphasisUnderscore = { resolve: \"Emphasis\", mark: \"EmphasisMark\" };\nconst EmphasisAsterisk = { resolve: \"Emphasis\", mark: \"EmphasisMark\" };\nconst LinkStart = {}, ImageStart = {};\nclass InlineDelimiter {\n    constructor(type, from, to, side) {\n        this.type = type;\n        this.from = from;\n        this.to = to;\n        this.side = side;\n    }\n}\nconst Escapable = \"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\";\nlet Punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\u2010-\\u2027]/;\ntry {\n    Punctuation = new RegExp(\"[\\\\p{Pc}|\\\\p{Pd}|\\\\p{Pe}|\\\\p{Pf}|\\\\p{Pi}|\\\\p{Po}|\\\\p{Ps}]\", \"u\");\n}\ncatch (_) { }\nconst DefaultInline = {\n    Escape(cx, next, start) {\n        if (next != 92 /* '\\\\' */ || start == cx.end - 1)\n            return -1;\n        let escaped = cx.char(start + 1);\n        for (let i = 0; i < Escapable.length; i++)\n            if (Escapable.charCodeAt(i) == escaped)\n                return cx.append(elt(Type.Escape, start, start + 2));\n        return -1;\n    },\n    Entity(cx, next, start) {\n        if (next != 38 /* '&' */)\n            return -1;\n        let m = /^(?:#\\d+|#x[a-f\\d]+|\\w+);/i.exec(cx.slice(start + 1, start + 31));\n        return m ? cx.append(elt(Type.Entity, start, start + 1 + m[0].length)) : -1;\n    },\n    InlineCode(cx, next, start) {\n        if (next != 96 /* '`' */ || start && cx.char(start - 1) == 96)\n            return -1;\n        let pos = start + 1;\n        while (pos < cx.end && cx.char(pos) == 96)\n            pos++;\n        let size = pos - start, curSize = 0;\n        for (; pos < cx.end; pos++) {\n            if (cx.char(pos) == 96) {\n                curSize++;\n                if (curSize == size && cx.char(pos + 1) != 96)\n                    return cx.append(elt(Type.InlineCode, start, pos + 1, [\n                        elt(Type.CodeMark, start, start + size),\n                        elt(Type.CodeMark, pos + 1 - size, pos + 1)\n                    ]));\n            }\n            else {\n                curSize = 0;\n            }\n        }\n        return -1;\n    },\n    HTMLTag(cx, next, start) {\n        if (next != 60 /* '<' */ || start == cx.end - 1)\n            return -1;\n        let after = cx.slice(start + 1, cx.end);\n        let url = /^(?:[a-z][-\\w+.]+:[^\\s>]+|[a-z\\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?(?:\\.[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?)*)>/i.exec(after);\n        if (url)\n            return cx.append(elt(Type.URL, start, start + 1 + url[0].length));\n        let comment = /^!--[^>](?:-[^-]|[^-])*?-->/i.exec(after);\n        if (comment)\n            return cx.append(elt(Type.Comment, start, start + 1 + comment[0].length));\n        let procInst = /^\\?[^]*?\\?>/.exec(after);\n        if (procInst)\n            return cx.append(elt(Type.ProcessingInstruction, start, start + 1 + procInst[0].length));\n        let m = /^(?:![A-Z][^]*?>|!\\[CDATA\\[[^]*?\\]\\]>|\\/\\s*[a-zA-Z][\\w-]*\\s*>|\\s*[a-zA-Z][\\w-]*(\\s+[a-zA-Z:_][\\w-.:]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*(\\/\\s*)?>)/.exec(after);\n        if (!m)\n            return -1;\n        return cx.append(elt(Type.HTMLTag, start, start + 1 + m[0].length));\n    },\n    Emphasis(cx, next, start) {\n        if (next != 95 && next != 42)\n            return -1;\n        let pos = start + 1;\n        while (cx.char(pos) == next)\n            pos++;\n        let before = cx.slice(start - 1, start), after = cx.slice(pos, pos + 1);\n        let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after);\n        let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after);\n        let leftFlanking = !sAfter && (!pAfter || sBefore || pBefore);\n        let rightFlanking = !sBefore && (!pBefore || sAfter || pAfter);\n        let canOpen = leftFlanking && (next == 42 || !rightFlanking || pBefore);\n        let canClose = rightFlanking && (next == 42 || !leftFlanking || pAfter);\n        return cx.append(new InlineDelimiter(next == 95 ? EmphasisUnderscore : EmphasisAsterisk, start, pos, (canOpen ? 1 /* Open */ : 0) | (canClose ? 2 /* Close */ : 0)));\n    },\n    HardBreak(cx, next, start) {\n        if (next == 92 /* '\\\\' */ && cx.char(start + 1) == 10 /* '\\n' */)\n            return cx.append(elt(Type.HardBreak, start, start + 2));\n        if (next == 32) {\n            let pos = start + 1;\n            while (cx.char(pos) == 32)\n                pos++;\n            if (cx.char(pos) == 10 && pos >= start + 2)\n                return cx.append(elt(Type.HardBreak, start, pos + 1));\n        }\n        return -1;\n    },\n    Link(cx, next, start) {\n        return next == 91 /* '[' */ ? cx.append(new InlineDelimiter(LinkStart, start, start + 1, 1 /* Open */)) : -1;\n    },\n    Image(cx, next, start) {\n        return next == 33 /* '!' */ && cx.char(start + 1) == 91 /* '[' */\n            ? cx.append(new InlineDelimiter(ImageStart, start, start + 2, 1 /* Open */)) : -1;\n    },\n    LinkEnd(cx, next, start) {\n        if (next != 93 /* ']' */)\n            return -1;\n        // Scanning back to the next link/image start marker\n        for (let i = cx.parts.length - 1; i >= 0; i--) {\n            let part = cx.parts[i];\n            if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart)) {\n                // If this one has been set invalid (because it would produce\n                // a nested link) or there's no valid link here ignore both.\n                if (!part.side || cx.skipSpace(part.to) == start && !/[(\\[]/.test(cx.slice(start + 1, start + 2))) {\n                    cx.parts[i] = null;\n                    return -1;\n                }\n                // Finish the content and replace the entire range in\n                // this.parts with the link/image node.\n                let content = cx.takeContent(i);\n                let link = cx.parts[i] = finishLink(cx, content, part.type == LinkStart ? Type.Link : Type.Image, part.from, start + 1);\n                // Set any open-link markers before this link to invalid.\n                if (part.type == LinkStart)\n                    for (let j = 0; j < i; j++) {\n                        let p = cx.parts[j];\n                        if (p instanceof InlineDelimiter && p.type == LinkStart)\n                            p.side = 0;\n                    }\n                return link.to;\n            }\n        }\n        return -1;\n    }\n};\nfunction finishLink(cx, content, type, start, startPos) {\n    let { text } = cx, next = cx.char(startPos), endPos = startPos;\n    content.unshift(elt(Type.LinkMark, start, start + (type == Type.Image ? 2 : 1)));\n    content.push(elt(Type.LinkMark, startPos - 1, startPos));\n    if (next == 40 /* '(' */) {\n        let pos = cx.skipSpace(startPos + 1);\n        let dest = parseURL(text, pos - cx.offset, cx.offset), title;\n        if (dest) {\n            pos = cx.skipSpace(dest.to);\n            title = parseLinkTitle(text, pos - cx.offset, cx.offset);\n            if (title)\n                pos = cx.skipSpace(title.to);\n        }\n        if (cx.char(pos) == 41 /* ')' */) {\n            content.push(elt(Type.LinkMark, startPos, startPos + 1));\n            endPos = pos + 1;\n            if (dest)\n                content.push(dest);\n            if (title)\n                content.push(title);\n            content.push(elt(Type.LinkMark, pos, endPos));\n        }\n    }\n    else if (next == 91 /* '[' */) {\n        let label = parseLinkLabel(text, startPos - cx.offset, cx.offset, false);\n        if (label) {\n            content.push(label);\n            endPos = label.to;\n        }\n    }\n    return elt(type, start, endPos, content);\n}\n// These return `null` when falling off the end of the input, `false`\n// when parsing fails otherwise (for use in the incremental link\n// reference parser).\nfunction parseURL(text, start, offset) {\n    let next = text.charCodeAt(start);\n    if (next == 60 /* '<' */) {\n        for (let pos = start + 1; pos < text.length; pos++) {\n            let ch = text.charCodeAt(pos);\n            if (ch == 62 /* '>' */)\n                return elt(Type.URL, start + offset, pos + 1 + offset);\n            if (ch == 60 || ch == 10 /* '<\\n' */)\n                return false;\n        }\n        return null;\n    }\n    else {\n        let depth = 0, pos = start;\n        for (let escaped = false; pos < text.length; pos++) {\n            let ch = text.charCodeAt(pos);\n            if (space(ch)) {\n                break;\n            }\n            else if (escaped) {\n                escaped = false;\n            }\n            else if (ch == 40 /* '(' */) {\n                depth++;\n            }\n            else if (ch == 41 /* ')' */) {\n                if (!depth)\n                    break;\n                depth--;\n            }\n            else if (ch == 92 /* '\\\\' */) {\n                escaped = true;\n            }\n        }\n        return pos > start ? elt(Type.URL, start + offset, pos + offset) : pos == text.length ? null : false;\n    }\n}\nfunction parseLinkTitle(text, start, offset) {\n    let next = text.charCodeAt(start);\n    if (next != 39 && next != 34 && next != 40 /* '\"\\'(' */)\n        return false;\n    let end = next == 40 ? 41 : next;\n    for (let pos = start + 1, escaped = false; pos < text.length; pos++) {\n        let ch = text.charCodeAt(pos);\n        if (escaped)\n            escaped = false;\n        else if (ch == end)\n            return elt(Type.LinkTitle, start + offset, pos + 1 + offset);\n        else if (ch == 92 /* '\\\\' */)\n            escaped = true;\n    }\n    return null;\n}\nfunction parseLinkLabel(text, start, offset, requireNonWS) {\n    for (let escaped = false, pos = start + 1, end = Math.min(text.length, pos + 999); pos < end; pos++) {\n        let ch = text.charCodeAt(pos);\n        if (escaped)\n            escaped = false;\n        else if (ch == 93 /* ']' */)\n            return requireNonWS ? false : elt(Type.LinkLabel, start + offset, pos + 1 + offset);\n        else {\n            if (requireNonWS && !space(ch))\n                requireNonWS = false;\n            if (ch == 91 /* '[' */)\n                return false;\n            else if (ch == 92 /* '\\\\' */)\n                escaped = true;\n        }\n    }\n    return null;\n}\n/// Inline parsing functions get access to this context, and use it to\n/// read the content and emit syntax nodes.\nclass InlineContext {\n    /// @internal\n    constructor(\n    /// The parser that is being used.\n    parser, \n    /// The text of this inline section.\n    text, \n    /// The starting offset of the section in the document.\n    offset) {\n        this.parser = parser;\n        this.text = text;\n        this.offset = offset;\n        /// @internal\n        this.parts = [];\n    }\n    /// Get the character code at the given (document-relative)\n    /// position.\n    char(pos) { return pos >= this.end ? -1 : this.text.charCodeAt(pos - this.offset); }\n    /// The position of the end of this inline section.\n    get end() { return this.offset + this.text.length; }\n    /// Get a substring of this inline section. Again uses\n    /// document-relative positions.\n    slice(from, to) { return this.text.slice(from - this.offset, to - this.offset); }\n    /// @internal\n    append(elt) {\n        this.parts.push(elt);\n        return elt.to;\n    }\n    /// Add a [delimiter](#DelimiterType) at this given position. `open`\n    /// and `close` indicate whether this delimiter is opening, closing,\n    /// or both. Returns the end of the delimiter, for convenient\n    /// returning from [parse functions](#InlineParser.parse).\n    addDelimiter(type, from, to, open, close) {\n        return this.append(new InlineDelimiter(type, from, to, (open ? 1 /* Open */ : 0) | (close ? 2 /* Close */ : 0)));\n    }\n    /// Add an inline element. Returns the end of the element.\n    addElement(elt) {\n        return this.append(elt);\n    }\n    /// Resolve markers between this.parts.length and from, wrapping matched markers in the\n    /// appropriate node and updating the content of this.parts. @internal\n    resolveMarkers(from) {\n        // Scan forward, looking for closing tokens\n        for (let i = from; i < this.parts.length; i++) {\n            let close = this.parts[i];\n            if (!(close instanceof InlineDelimiter && close.type.resolve && (close.side & 2 /* Close */)))\n                continue;\n            let emp = close.type == EmphasisUnderscore || close.type == EmphasisAsterisk;\n            let closeSize = close.to - close.from;\n            let open, j = i - 1;\n            // Continue scanning for a matching opening token\n            for (; j >= from; j--) {\n                let part = this.parts[j];\n                if (part instanceof InlineDelimiter && (part.side & 1 /* Open */) && part.type == close.type &&\n                    // Ignore emphasis delimiters where the character count doesn't match\n                    !(emp && ((close.side & 1 /* Open */) || (part.side & 2 /* Close */)) &&\n                        (part.to - part.from + closeSize) % 3 == 0 && ((part.to - part.from) % 3 || closeSize % 3))) {\n                    open = part;\n                    break;\n                }\n            }\n            if (!open)\n                continue;\n            let type = close.type.resolve, content = [];\n            let start = open.from, end = close.to;\n            // Emphasis marker effect depends on the character count. Size consumed is minimum of the two\n            // markers.\n            if (emp) {\n                let size = Math.min(2, open.to - open.from, closeSize);\n                start = open.to - size;\n                end = close.from + size;\n                type = size == 1 ? \"Emphasis\" : \"StrongEmphasis\";\n            }\n            // Move the covered region into content, optionally adding marker nodes\n            if (open.type.mark)\n                content.push(this.elt(open.type.mark, start, open.to));\n            for (let k = j + 1; k < i; k++) {\n                if (this.parts[k] instanceof Element)\n                    content.push(this.parts[k]);\n                this.parts[k] = null;\n            }\n            if (close.type.mark)\n                content.push(this.elt(close.type.mark, close.from, end));\n            let element = this.elt(type, start, end, content);\n            // If there are leftover emphasis marker characters, shrink the close/open markers. Otherwise, clear them.\n            this.parts[j] = emp && open.from != start ? new InlineDelimiter(open.type, open.from, start, open.side) : null;\n            let keep = this.parts[i] = emp && close.to != end ? new InlineDelimiter(close.type, end, close.to, close.side) : null;\n            // Insert the new element in this.parts\n            if (keep)\n                this.parts.splice(i, 0, element);\n            else\n                this.parts[i] = element;\n        }\n        // Collect the elements remaining in this.parts into an array.\n        let result = [];\n        for (let i = from; i < this.parts.length; i++) {\n            let part = this.parts[i];\n            if (part instanceof Element)\n                result.push(part);\n        }\n        return result;\n    }\n    /// Find an opening delimiter of the given type. Returns `null` if\n    /// no delimiter is found, or an index that can be passed to\n    /// [`takeContent`](#InlineContext.takeContent) otherwise.\n    findOpeningDelimiter(type) {\n        for (let i = this.parts.length - 1; i >= 0; i--) {\n            let part = this.parts[i];\n            if (part instanceof InlineDelimiter && part.type == type)\n                return i;\n        }\n        return null;\n    }\n    /// Remove all inline elements and delimiters starting from the\n    /// given index (which you should get from\n    /// [`findOpeningDelimiter`](#InlineContext.findOpeningDelimiter),\n    /// resolve delimiters inside of them, and return them as an array\n    /// of elements.\n    takeContent(startIndex) {\n        let content = this.resolveMarkers(startIndex);\n        this.parts.length = startIndex;\n        return content;\n    }\n    /// Skip space after the given (document) position, returning either\n    /// the position of the next non-space character or the end of the\n    /// section.\n    skipSpace(from) { return skipSpace(this.text, from - this.offset) + this.offset; }\n    elt(type, from, to, children) {\n        if (typeof type == \"string\")\n            return elt(this.parser.getNodeType(type), from, to, children);\n        return new TreeElement(type, from);\n    }\n}\nfunction injectMarks(elements, marks) {\n    if (!marks.length)\n        return elements;\n    if (!elements.length)\n        return marks;\n    let elts = elements.slice(), eI = 0;\n    for (let mark of marks) {\n        while (eI < elts.length && elts[eI].to < mark.to)\n            eI++;\n        if (eI < elts.length && elts[eI].from < mark.from) {\n            let e = elts[eI];\n            if (e instanceof Element)\n                elts[eI] = new Element(e.type, e.from, e.to, injectMarks(e.children, [mark]));\n        }\n        else {\n            elts.splice(eI++, 0, mark);\n        }\n    }\n    return elts;\n}\n// These are blocks that can span blank lines, and should thus only be\n// reused if their next sibling is also being reused.\nconst NotLast = [Type.CodeBlock, Type.ListItem, Type.OrderedList, Type.BulletList];\nclass FragmentCursor {\n    constructor(fragments, input) {\n        this.fragments = fragments;\n        this.input = input;\n        // Index into fragment array\n        this.i = 0;\n        // Active fragment\n        this.fragment = null;\n        this.fragmentEnd = -1;\n        // Cursor into the current fragment, if any. When `moveTo` returns\n        // true, this points at the first block after `pos`.\n        this.cursor = null;\n        if (fragments.length)\n            this.fragment = fragments[this.i++];\n    }\n    nextFragment() {\n        this.fragment = this.i < this.fragments.length ? this.fragments[this.i++] : null;\n        this.cursor = null;\n        this.fragmentEnd = -1;\n    }\n    moveTo(pos, lineStart) {\n        while (this.fragment && this.fragment.to <= pos)\n            this.nextFragment();\n        if (!this.fragment || this.fragment.from > (pos ? pos - 1 : 0))\n            return false;\n        if (this.fragmentEnd < 0) {\n            let end = this.fragment.to;\n            while (end > 0 && this.input.read(end - 1, end) != \"\\n\")\n                end--;\n            this.fragmentEnd = end ? end - 1 : 0;\n        }\n        let c = this.cursor;\n        if (!c) {\n            c = this.cursor = this.fragment.tree.cursor();\n            c.firstChild();\n        }\n        let rPos = pos + this.fragment.offset;\n        while (c.to <= rPos)\n            if (!c.parent())\n                return false;\n        for (;;) {\n            if (c.from >= rPos)\n                return this.fragment.from <= lineStart;\n            if (!c.childAfter(rPos))\n                return false;\n        }\n    }\n    matches(hash) {\n        let tree = this.cursor.tree;\n        return tree && tree.prop(NodeProp.contextHash) == hash;\n    }\n    takeNodes(cx) {\n        let cur = this.cursor, off = this.fragment.offset, fragEnd = this.fragmentEnd - (this.fragment.openEnd ? 1 : 0);\n        let start = cx.absoluteLineStart, end = start, blockI = cx.block.children.length;\n        let prevEnd = end, prevI = blockI;\n        for (;;) {\n            if (cur.to - off > fragEnd) {\n                if (cur.type.isAnonymous && cur.firstChild())\n                    continue;\n                break;\n            }\n            cx.dontInject.add(cur.tree);\n            cx.addNode(cur.tree, cur.from - off);\n            // Taken content must always end in a block, because incremental\n            // parsing happens on block boundaries. Never stop directly\n            // after an indented code block, since those can continue after\n            // any number of blank lines.\n            if (cur.type.is(\"Block\")) {\n                if (NotLast.indexOf(cur.type.id) < 0) {\n                    end = cur.to - off;\n                    blockI = cx.block.children.length;\n                }\n                else {\n                    end = prevEnd;\n                    blockI = prevI;\n                    prevEnd = cur.to - off;\n                    prevI = cx.block.children.length;\n                }\n            }\n            if (!cur.nextSibling())\n                break;\n        }\n        while (cx.block.children.length > blockI) {\n            cx.block.children.pop();\n            cx.block.positions.pop();\n        }\n        return end - start;\n    }\n}\nconst markdownHighlighting = styleTags({\n    \"Blockquote/...\": tags.quote,\n    HorizontalRule: tags.contentSeparator,\n    \"ATXHeading1/... SetextHeading1/...\": tags.heading1,\n    \"ATXHeading2/... SetextHeading2/...\": tags.heading2,\n    \"ATXHeading3/...\": tags.heading3,\n    \"ATXHeading4/...\": tags.heading4,\n    \"ATXHeading5/...\": tags.heading5,\n    \"ATXHeading6/...\": tags.heading6,\n    \"Comment CommentBlock\": tags.comment,\n    Escape: tags.escape,\n    Entity: tags.character,\n    \"Emphasis/...\": tags.emphasis,\n    \"StrongEmphasis/...\": tags.strong,\n    \"Link/... Image/...\": tags.link,\n    \"OrderedList/... BulletList/...\": tags.list,\n    \"BlockQuote/...\": tags.quote,\n    \"InlineCode CodeText\": tags.monospace,\n    URL: tags.url,\n    \"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark\": tags.processingInstruction,\n    \"CodeInfo LinkLabel\": tags.labelName,\n    LinkTitle: tags.string,\n    Paragraph: tags.content\n});\n/// The default CommonMark parser.\nconst parser = new MarkdownParser(new NodeSet(nodeTypes).extend(markdownHighlighting), Object.keys(DefaultBlockParsers).map(n => DefaultBlockParsers[n]), Object.keys(DefaultBlockParsers).map(n => DefaultLeafBlocks[n]), Object.keys(DefaultBlockParsers), DefaultEndLeaf, DefaultSkipMarkup, Object.keys(DefaultInline).map(n => DefaultInline[n]), Object.keys(DefaultInline), []);\n\nfunction leftOverSpace(node, from, to) {\n    let ranges = [];\n    for (let n = node.firstChild, pos = from;; n = n.nextSibling) {\n        let nextPos = n ? n.from : to;\n        if (nextPos > pos)\n            ranges.push({ from: pos, to: nextPos });\n        if (!n)\n            break;\n        pos = n.to;\n    }\n    return ranges;\n}\n/// Create a Markdown extension to enable nested parsing on code\n/// blocks and/or embedded HTML.\nfunction parseCode(config) {\n    let { codeParser, htmlParser } = config;\n    let wrap = parseMixed((node, input) => {\n        let id = node.type.id;\n        if (codeParser && (id == Type.CodeBlock || id == Type.FencedCode)) {\n            let info = \"\";\n            if (id == Type.FencedCode) {\n                let infoNode = node.node.getChild(Type.CodeInfo);\n                if (infoNode)\n                    info = input.read(infoNode.from, infoNode.to);\n            }\n            let parser = codeParser(info);\n            if (parser)\n                return { parser, overlay: node => node.type.id == Type.CodeText };\n        }\n        else if (htmlParser && (id == Type.HTMLBlock || id == Type.HTMLTag)) {\n            return { parser: htmlParser, overlay: leftOverSpace(node.node, node.from, node.to) };\n        }\n        return null;\n    });\n    return { wrap };\n}\n\nconst StrikethroughDelim = { resolve: \"Strikethrough\", mark: \"StrikethroughMark\" };\n/// An extension that implements\n/// [GFM-style](https://github.github.com/gfm/#strikethrough-extension-)\n/// Strikethrough syntax using `~~` delimiters.\nconst Strikethrough = {\n    defineNodes: [{\n            name: \"Strikethrough\",\n            style: { \"Strikethrough/...\": tags.strikethrough }\n        }, {\n            name: \"StrikethroughMark\",\n            style: tags.processingInstruction\n        }],\n    parseInline: [{\n            name: \"Strikethrough\",\n            parse(cx, next, pos) {\n                if (next != 126 /* '~' */ || cx.char(pos + 1) != 126 || cx.char(pos + 2) == 126)\n                    return -1;\n                let before = cx.slice(pos - 1, pos), after = cx.slice(pos + 2, pos + 3);\n                let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after);\n                let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after);\n                return cx.addDelimiter(StrikethroughDelim, pos, pos + 2, !sAfter && (!pAfter || sBefore || pBefore), !sBefore && (!pBefore || sAfter || pAfter));\n            },\n            after: \"Emphasis\"\n        }]\n};\nfunction parseRow(cx, line, startI = 0, elts, offset = 0) {\n    let count = 0, first = true, cellStart = -1, cellEnd = -1, esc = false;\n    let parseCell = () => {\n        elts.push(cx.elt(\"TableCell\", offset + cellStart, offset + cellEnd, cx.parser.parseInline(line.slice(cellStart, cellEnd), offset + cellStart)));\n    };\n    for (let i = startI; i < line.length; i++) {\n        let next = line.charCodeAt(i);\n        if (next == 124 /* '|' */ && !esc) {\n            if (!first || cellStart > -1)\n                count++;\n            first = false;\n            if (elts) {\n                if (cellStart > -1)\n                    parseCell();\n                elts.push(cx.elt(\"TableDelimiter\", i + offset, i + offset + 1));\n            }\n            cellStart = cellEnd = -1;\n        }\n        else if (esc || next != 32 && next != 9) {\n            if (cellStart < 0)\n                cellStart = i;\n            cellEnd = i + 1;\n        }\n        esc = !esc && next == 92;\n    }\n    if (cellStart > -1) {\n        count++;\n        if (elts)\n            parseCell();\n    }\n    return count;\n}\nfunction hasPipe(str, start) {\n    for (let i = start; i < str.length; i++) {\n        let next = str.charCodeAt(i);\n        if (next == 124 /* '|' */)\n            return true;\n        if (next == 92 /* '\\\\' */)\n            i++;\n    }\n    return false;\n}\nconst delimiterLine = /^\\|?(\\s*:?-+:?\\s*\\|)+(\\s*:?-+:?\\s*)?$/;\nclass TableParser {\n    constructor() {\n        // Null means we haven't seen the second line yet, false means this\n        // isn't a table, and an array means this is a table and we've\n        // parsed the given rows so far.\n        this.rows = null;\n    }\n    nextLine(cx, line, leaf) {\n        if (this.rows == null) { // Second line\n            this.rows = false;\n            let lineText;\n            if ((line.next == 45 || line.next == 58 || line.next == 124 /* '-:|' */) &&\n                delimiterLine.test(lineText = line.text.slice(line.pos))) {\n                let firstRow = [], firstCount = parseRow(cx, leaf.content, 0, firstRow, leaf.start);\n                if (firstCount == parseRow(cx, lineText, line.pos))\n                    this.rows = [cx.elt(\"TableHeader\", leaf.start, leaf.start + leaf.content.length, firstRow),\n                        cx.elt(\"TableDelimiter\", cx.lineStart + line.pos, cx.lineStart + line.text.length)];\n            }\n        }\n        else if (this.rows) { // Line after the second\n            let content = [];\n            parseRow(cx, line.text, line.pos, content, cx.lineStart);\n            this.rows.push(cx.elt(\"TableRow\", cx.lineStart + line.pos, cx.lineStart + line.text.length, content));\n        }\n        return false;\n    }\n    finish(cx, leaf) {\n        if (!this.rows)\n            return false;\n        cx.addLeafElement(leaf, cx.elt(\"Table\", leaf.start, leaf.start + leaf.content.length, this.rows));\n        return true;\n    }\n}\n/// This extension provides\n/// [GFM-style](https://github.github.com/gfm/#tables-extension-)\n/// tables, using syntax like this:\n///\n/// ```\n/// | head 1 | head 2 |\n/// | ---    | ---    |\n/// | cell 1 | cell 2 |\n/// ```\nconst Table = {\n    defineNodes: [\n        { name: \"Table\", block: true },\n        { name: \"TableHeader\", style: { \"TableHeader/...\": tags.heading } },\n        \"TableRow\",\n        { name: \"TableCell\", style: tags.content },\n        { name: \"TableDelimiter\", style: tags.processingInstruction },\n    ],\n    parseBlock: [{\n            name: \"Table\",\n            leaf(_, leaf) { return hasPipe(leaf.content, 0) ? new TableParser : null; },\n            endLeaf(cx, line, leaf) {\n                if (leaf.parsers.some(p => p instanceof TableParser) || !hasPipe(line.text, line.basePos))\n                    return false;\n                let next = cx.scanLine(cx.absoluteLineEnd + 1).text;\n                return delimiterLine.test(next) && parseRow(cx, line.text, line.basePos) == parseRow(cx, next, line.basePos);\n            },\n            before: \"SetextHeading\"\n        }]\n};\nclass TaskParser {\n    nextLine() { return false; }\n    finish(cx, leaf) {\n        cx.addLeafElement(leaf, cx.elt(\"Task\", leaf.start, leaf.start + leaf.content.length, [\n            cx.elt(\"TaskMarker\", leaf.start, leaf.start + 3),\n            ...cx.parser.parseInline(leaf.content.slice(3), leaf.start + 3)\n        ]));\n        return true;\n    }\n}\n/// Extension providing\n/// [GFM-style](https://github.github.com/gfm/#task-list-items-extension-)\n/// task list items, where list items can be prefixed with `[ ]` or\n/// `[x]` to add a checkbox.\nconst TaskList = {\n    defineNodes: [\n        { name: \"Task\", block: true, style: tags.list },\n        { name: \"TaskMarker\", style: tags.atom }\n    ],\n    parseBlock: [{\n            name: \"TaskList\",\n            leaf(cx, leaf) {\n                return /^\\[[ xX]\\]/.test(leaf.content) && cx.parentType().name == \"ListItem\" ? new TaskParser : null;\n            },\n            after: \"SetextHeading\"\n        }]\n};\n/// Extension bundle containing [`Table`](#Table),\n/// [`TaskList`](#TaskList) and [`Strikethrough`](#Strikethrough).\nconst GFM = [Table, TaskList, Strikethrough];\nfunction parseSubSuper(ch, node, mark) {\n    return (cx, next, pos) => {\n        if (next != ch || cx.char(pos + 1) == ch)\n            return -1;\n        let elts = [cx.elt(mark, pos, pos + 1)];\n        for (let i = pos + 1; i < cx.end; i++) {\n            let next = cx.char(i);\n            if (next == ch)\n                return cx.addElement(cx.elt(node, pos, i + 1, elts.concat(cx.elt(mark, i, i + 1))));\n            if (next == 92 /* '\\\\' */)\n                elts.push(cx.elt(\"Escape\", i, i++ + 2));\n            if (space(next))\n                break;\n        }\n        return -1;\n    };\n}\n/// Extension providing\n/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\n/// superscript using `^` markers.\nconst Superscript = {\n    defineNodes: [\n        { name: \"Superscript\", style: tags.special(tags.content) },\n        { name: \"SuperscriptMark\", style: tags.processingInstruction }\n    ],\n    parseInline: [{\n            name: \"Superscript\",\n            parse: parseSubSuper(94 /* '^' */, \"Superscript\", \"SuperscriptMark\")\n        }]\n};\n/// Extension providing\n/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\n/// subscript using `~` markers.\nconst Subscript = {\n    defineNodes: [\n        { name: \"Subscript\", style: tags.special(tags.content) },\n        { name: \"SubscriptMark\", style: tags.processingInstruction }\n    ],\n    parseInline: [{\n            name: \"Subscript\",\n            parse: parseSubSuper(126 /* '~' */, \"Subscript\", \"SubscriptMark\")\n        }]\n};\n/// Extension that parses two colons with only letters, underscores,\n/// and numbers between them as `Emoji` nodes.\nconst Emoji = {\n    defineNodes: [{ name: \"Emoji\", style: tags.character }],\n    parseInline: [{\n            name: \"Emoji\",\n            parse(cx, next, pos) {\n                let match;\n                if (next != 58 /* ':' */ || !(match = /^[a-zA-Z_0-9]+:/.exec(cx.slice(pos + 1, cx.end))))\n                    return -1;\n                return cx.addElement(cx.elt(\"Emoji\", pos, pos + 1 + match[0].length));\n            }\n        }]\n};\n\nexport { BlockContext, Element, Emoji, GFM, InlineContext, LeafBlock, Line, MarkdownParser, Strikethrough, Subscript, Superscript, Table, TaskList, parseCode, parser };\n", "import { EditorSelection, countColumn, Prec, EditorState } from '@codemirror/state';\nimport { keymap } from '@codemirror/view';\nimport { defineLanguageFacet, foldNodeProp, indentNodeProp, languageDataProp, foldService, syntaxTree, Language, LanguageDescription, ParseContext, indentUnit, LanguageSupport } from '@codemirror/language';\nimport { CompletionContext } from '@codemirror/autocomplete';\nimport { parser, GFM, Subscript, Superscript, Emoji, MarkdownParser, parseCode } from '@lezer/markdown';\nimport { html, htmlCompletionSource } from '@codemirror/lang-html';\nimport { NodeProp } from '@lezer/common';\n\nconst data = /*@__PURE__*/defineLanguageFacet({ commentTokens: { block: { open: \"<!--\", close: \"-->\" } } });\nconst headingProp = /*@__PURE__*/new NodeProp();\nconst commonmark = /*@__PURE__*/parser.configure({\n    props: [\n        /*@__PURE__*/foldNodeProp.add(type => {\n            return !type.is(\"Block\") || type.is(\"Document\") || isHeading(type) != null || isList(type) ? undefined\n                : (tree, state) => ({ from: state.doc.lineAt(tree.from).to, to: tree.to });\n        }),\n        /*@__PURE__*/headingProp.add(isHeading),\n        /*@__PURE__*/indentNodeProp.add({\n            Document: () => null\n        }),\n        /*@__PURE__*/languageDataProp.add({\n            Document: data\n        })\n    ]\n});\nfunction isHeading(type) {\n    let match = /^(?:ATX|Setext)Heading(\\d)$/.exec(type.name);\n    return match ? +match[1] : undefined;\n}\nfunction isList(type) {\n    return type.name == \"OrderedList\" || type.name == \"BulletList\";\n}\nfunction findSectionEnd(headerNode, level) {\n    let last = headerNode;\n    for (;;) {\n        let next = last.nextSibling, heading;\n        if (!next || (heading = isHeading(next.type)) != null && heading <= level)\n            break;\n        last = next;\n    }\n    return last.to;\n}\nconst headerIndent = /*@__PURE__*/foldService.of((state, start, end) => {\n    for (let node = syntaxTree(state).resolveInner(end, -1); node; node = node.parent) {\n        if (node.from < start)\n            break;\n        let heading = node.type.prop(headingProp);\n        if (heading == null)\n            continue;\n        let upto = findSectionEnd(node, heading);\n        if (upto > end)\n            return { from: end, to: upto };\n    }\n    return null;\n});\nfunction mkLang(parser) {\n    return new Language(data, parser, [headerIndent], \"markdown\");\n}\n/**\nLanguage support for strict CommonMark.\n*/\nconst commonmarkLanguage = /*@__PURE__*/mkLang(commonmark);\nconst extended = /*@__PURE__*/commonmark.configure([GFM, Subscript, Superscript, Emoji, {\n        props: [\n            /*@__PURE__*/foldNodeProp.add({\n                Table: (tree, state) => ({ from: state.doc.lineAt(tree.from).to, to: tree.to })\n            })\n        ]\n    }]);\n/**\nLanguage support for [GFM](https://github.github.com/gfm/) plus\nsubscript, superscript, and emoji syntax.\n*/\nconst markdownLanguage = /*@__PURE__*/mkLang(extended);\nfunction getCodeParser(languages, defaultLanguage) {\n    return (info) => {\n        if (info && languages) {\n            let found = null;\n            // Strip anything after whitespace\n            info = /\\S*/.exec(info)[0];\n            if (typeof languages == \"function\")\n                found = languages(info);\n            else\n                found = LanguageDescription.matchLanguageName(languages, info, true);\n            if (found instanceof LanguageDescription)\n                return found.support ? found.support.language.parser : ParseContext.getSkippingParser(found.load());\n            else if (found)\n                return found.parser;\n        }\n        return defaultLanguage ? defaultLanguage.parser : null;\n    };\n}\n\nclass Context {\n    constructor(node, from, to, spaceBefore, spaceAfter, type, item) {\n        this.node = node;\n        this.from = from;\n        this.to = to;\n        this.spaceBefore = spaceBefore;\n        this.spaceAfter = spaceAfter;\n        this.type = type;\n        this.item = item;\n    }\n    blank(maxWidth, trailing = true) {\n        let result = this.spaceBefore + (this.node.name == \"Blockquote\" ? \">\" : \"\");\n        if (maxWidth != null) {\n            while (result.length < maxWidth)\n                result += \" \";\n            return result;\n        }\n        else {\n            for (let i = this.to - this.from - result.length - this.spaceAfter.length; i > 0; i--)\n                result += \" \";\n            return result + (trailing ? this.spaceAfter : \"\");\n        }\n    }\n    marker(doc, add) {\n        let number = this.node.name == \"OrderedList\" ? String((+itemNumber(this.item, doc)[2] + add)) : \"\";\n        return this.spaceBefore + number + this.type + this.spaceAfter;\n    }\n}\nfunction getContext(node, doc) {\n    let nodes = [], context = [];\n    for (let cur = node; cur; cur = cur.parent) {\n        if (cur.name == \"FencedCode\")\n            return context;\n        if (cur.name == \"ListItem\" || cur.name == \"Blockquote\")\n            nodes.push(cur);\n    }\n    for (let i = nodes.length - 1; i >= 0; i--) {\n        let node = nodes[i], match;\n        let line = doc.lineAt(node.from), startPos = node.from - line.from;\n        if (node.name == \"Blockquote\" && (match = /^ *>( ?)/.exec(line.text.slice(startPos)))) {\n            context.push(new Context(node, startPos, startPos + match[0].length, \"\", match[1], \">\", null));\n        }\n        else if (node.name == \"ListItem\" && node.parent.name == \"OrderedList\" &&\n            (match = /^( *)\\d+([.)])( *)/.exec(line.text.slice(startPos)))) {\n            let after = match[3], len = match[0].length;\n            if (after.length >= 4) {\n                after = after.slice(0, after.length - 4);\n                len -= 4;\n            }\n            context.push(new Context(node.parent, startPos, startPos + len, match[1], after, match[2], node));\n        }\n        else if (node.name == \"ListItem\" && node.parent.name == \"BulletList\" &&\n            (match = /^( *)([-+*])( {1,4}\\[[ xX]\\])?( +)/.exec(line.text.slice(startPos)))) {\n            let after = match[4], len = match[0].length;\n            if (after.length > 4) {\n                after = after.slice(0, after.length - 4);\n                len -= 4;\n            }\n            let type = match[2];\n            if (match[3])\n                type += match[3].replace(/[xX]/, ' ');\n            context.push(new Context(node.parent, startPos, startPos + len, match[1], after, type, node));\n        }\n    }\n    return context;\n}\nfunction itemNumber(item, doc) {\n    return /^(\\s*)(\\d+)(?=[.)])/.exec(doc.sliceString(item.from, item.from + 10));\n}\nfunction renumberList(after, doc, changes, offset = 0) {\n    for (let prev = -1, node = after;;) {\n        if (node.name == \"ListItem\") {\n            let m = itemNumber(node, doc);\n            let number = +m[2];\n            if (prev >= 0) {\n                if (number != prev + 1)\n                    return;\n                changes.push({ from: node.from + m[1].length, to: node.from + m[0].length, insert: String(prev + 2 + offset) });\n            }\n            prev = number;\n        }\n        let next = node.nextSibling;\n        if (!next)\n            break;\n        node = next;\n    }\n}\nfunction normalizeIndent(content, state) {\n    let blank = /^[ \\t]*/.exec(content)[0].length;\n    if (!blank || state.facet(indentUnit) != \"\\t\")\n        return content;\n    let col = countColumn(content, 4, blank);\n    let space = \"\";\n    for (let i = col; i > 0;) {\n        if (i >= 4) {\n            space += \"\\t\";\n            i -= 4;\n        }\n        else {\n            space += \" \";\n            i--;\n        }\n    }\n    return space + content.slice(blank);\n}\n/**\nThis command, when invoked in Markdown context with cursor\nselection(s), will create a new line with the markup for\nblockquotes and lists that were active on the old line. If the\ncursor was directly after the end of the markup for the old line,\ntrailing whitespace and list markers are removed from that line.\n\nThe command does nothing in non-Markdown context, so it should\nnot be used as the only binding for Enter (even in a Markdown\ndocument, HTML and code regions might use a different language).\n*/\nconst insertNewlineContinueMarkup = ({ state, dispatch }) => {\n    let tree = syntaxTree(state), { doc } = state;\n    let dont = null, changes = state.changeByRange(range => {\n        if (!range.empty || !markdownLanguage.isActiveAt(state, range.from, 0))\n            return dont = { range };\n        let pos = range.from, line = doc.lineAt(pos);\n        let context = getContext(tree.resolveInner(pos, -1), doc);\n        while (context.length && context[context.length - 1].from > pos - line.from)\n            context.pop();\n        if (!context.length)\n            return dont = { range };\n        let inner = context[context.length - 1];\n        if (inner.to - inner.spaceAfter.length > pos - line.from)\n            return dont = { range };\n        let emptyLine = pos >= (inner.to - inner.spaceAfter.length) && !/\\S/.test(line.text.slice(inner.to));\n        // Empty line in list\n        if (inner.item && emptyLine) {\n            let first = inner.node.firstChild, second = inner.node.getChild(\"ListItem\", \"ListItem\");\n            // Not second item or blank line before: delete a level of markup\n            if (first.to >= pos || second && second.to < pos ||\n                line.from > 0 && !/[^\\s>]/.test(doc.lineAt(line.from - 1).text)) {\n                let next = context.length > 1 ? context[context.length - 2] : null;\n                let delTo, insert = \"\";\n                if (next && next.item) { // Re-add marker for the list at the next level\n                    delTo = line.from + next.from;\n                    insert = next.marker(doc, 1);\n                }\n                else {\n                    delTo = line.from + (next ? next.to : 0);\n                }\n                let changes = [{ from: delTo, to: pos, insert }];\n                if (inner.node.name == \"OrderedList\")\n                    renumberList(inner.item, doc, changes, -2);\n                if (next && next.node.name == \"OrderedList\")\n                    renumberList(next.item, doc, changes);\n                return { range: EditorSelection.cursor(delTo + insert.length), changes };\n            }\n            else { // Move second item down, making tight two-item list non-tight\n                let insert = blankLine(context, state, line);\n                return { range: EditorSelection.cursor(pos + insert.length + 1),\n                    changes: { from: line.from, insert: insert + state.lineBreak } };\n            }\n        }\n        if (inner.node.name == \"Blockquote\" && emptyLine && line.from) {\n            let prevLine = doc.lineAt(line.from - 1), quoted = />\\s*$/.exec(prevLine.text);\n            // Two aligned empty quoted lines in a row\n            if (quoted && quoted.index == inner.from) {\n                let changes = state.changes([{ from: prevLine.from + quoted.index, to: prevLine.to },\n                    { from: line.from + inner.from, to: line.to }]);\n                return { range: range.map(changes), changes };\n            }\n        }\n        let changes = [];\n        if (inner.node.name == \"OrderedList\")\n            renumberList(inner.item, doc, changes);\n        let continued = inner.item && inner.item.from < line.from;\n        let insert = \"\";\n        // If not dedented\n        if (!continued || /^[\\s\\d.)\\-+*>]*/.exec(line.text)[0].length >= inner.to) {\n            for (let i = 0, e = context.length - 1; i <= e; i++) {\n                insert += i == e && !continued ? context[i].marker(doc, 1)\n                    : context[i].blank(i < e ? countColumn(line.text, 4, context[i + 1].from) - insert.length : null);\n            }\n        }\n        let from = pos;\n        while (from > line.from && /\\s/.test(line.text.charAt(from - line.from - 1)))\n            from--;\n        insert = normalizeIndent(insert, state);\n        if (nonTightList(inner.node, state.doc))\n            insert = blankLine(context, state, line) + state.lineBreak + insert;\n        changes.push({ from, to: pos, insert: state.lineBreak + insert });\n        return { range: EditorSelection.cursor(from + insert.length + 1), changes };\n    });\n    if (dont)\n        return false;\n    dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\nfunction isMark(node) {\n    return node.name == \"QuoteMark\" || node.name == \"ListMark\";\n}\nfunction nonTightList(node, doc) {\n    if (node.name != \"OrderedList\" && node.name != \"BulletList\")\n        return false;\n    let first = node.firstChild, second = node.getChild(\"ListItem\", \"ListItem\");\n    if (!second)\n        return false;\n    let line1 = doc.lineAt(first.to), line2 = doc.lineAt(second.from);\n    let empty = /^[\\s>]*$/.test(line1.text);\n    return line1.number + (empty ? 0 : 1) < line2.number;\n}\nfunction blankLine(context, state, line) {\n    let insert = \"\";\n    for (let i = 0, e = context.length - 2; i <= e; i++) {\n        insert += context[i].blank(i < e\n            ? countColumn(line.text, 4, Math.min(line.text.length, context[i + 1].from)) - insert.length\n            : null, i < e);\n    }\n    return normalizeIndent(insert, state);\n}\nfunction contextNodeForDelete(tree, pos) {\n    let node = tree.resolveInner(pos, -1), scan = pos;\n    if (isMark(node)) {\n        scan = node.from;\n        node = node.parent;\n    }\n    for (let prev; prev = node.childBefore(scan);) {\n        if (isMark(prev)) {\n            scan = prev.from;\n        }\n        else if (prev.name == \"OrderedList\" || prev.name == \"BulletList\") {\n            node = prev.lastChild;\n            scan = node.to;\n        }\n        else {\n            break;\n        }\n    }\n    return node;\n}\n/**\nThis command will, when invoked in a Markdown context with the\ncursor directly after list or blockquote markup, delete one level\nof markup. When the markup is for a list, it will be replaced by\nspaces on the first invocation (a further invocation will delete\nthe spaces), to make it easy to continue a list.\n\nWhen not after Markdown block markup, this command will return\nfalse, so it is intended to be bound alongside other deletion\ncommands, with a higher precedence than the more generic commands.\n*/\nconst deleteMarkupBackward = ({ state, dispatch }) => {\n    let tree = syntaxTree(state);\n    let dont = null, changes = state.changeByRange(range => {\n        let pos = range.from, { doc } = state;\n        if (range.empty && markdownLanguage.isActiveAt(state, range.from)) {\n            let line = doc.lineAt(pos);\n            let context = getContext(contextNodeForDelete(tree, pos), doc);\n            if (context.length) {\n                let inner = context[context.length - 1];\n                let spaceEnd = inner.to - inner.spaceAfter.length + (inner.spaceAfter ? 1 : 0);\n                // Delete extra trailing space after markup\n                if (pos - line.from > spaceEnd && !/\\S/.test(line.text.slice(spaceEnd, pos - line.from)))\n                    return { range: EditorSelection.cursor(line.from + spaceEnd),\n                        changes: { from: line.from + spaceEnd, to: pos } };\n                if (pos - line.from == spaceEnd &&\n                    // Only apply this if we're on the line that has the\n                    // construct's syntax, or there's only indentation in the\n                    // target range\n                    (!inner.item || line.from <= inner.item.from || !/\\S/.test(line.text.slice(0, inner.to)))) {\n                    let start = line.from + inner.from;\n                    // Replace a list item marker with blank space\n                    if (inner.item && inner.node.from < inner.item.from && /\\S/.test(line.text.slice(inner.from, inner.to))) {\n                        let insert = inner.blank(countColumn(line.text, 4, inner.to) - countColumn(line.text, 4, inner.from));\n                        if (start == line.from)\n                            insert = normalizeIndent(insert, state);\n                        return { range: EditorSelection.cursor(start + insert.length),\n                            changes: { from: start, to: line.from + inner.to, insert } };\n                    }\n                    // Delete one level of indentation\n                    if (start < pos)\n                        return { range: EditorSelection.cursor(start), changes: { from: start, to: pos } };\n                }\n            }\n        }\n        return dont = { range };\n    });\n    if (dont)\n        return false;\n    dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete\" }));\n    return true;\n};\n\n/**\nA small keymap with Markdown-specific bindings. Binds Enter to\n[`insertNewlineContinueMarkup`](https://codemirror.net/6/docs/ref/#lang-markdown.insertNewlineContinueMarkup)\nand Backspace to\n[`deleteMarkupBackward`](https://codemirror.net/6/docs/ref/#lang-markdown.deleteMarkupBackward).\n*/\nconst markdownKeymap = [\n    { key: \"Enter\", run: insertNewlineContinueMarkup },\n    { key: \"Backspace\", run: deleteMarkupBackward }\n];\nconst htmlNoMatch = /*@__PURE__*/html({ matchClosingTags: false });\n/**\nMarkdown language support.\n*/\nfunction markdown(config = {}) {\n    let { codeLanguages, defaultCodeLanguage, addKeymap = true, base: { parser } = commonmarkLanguage, completeHTMLTags = true, htmlTagLanguage = htmlNoMatch } = config;\n    if (!(parser instanceof MarkdownParser))\n        throw new RangeError(\"Base parser provided to `markdown` should be a Markdown parser\");\n    let extensions = config.extensions ? [config.extensions] : [];\n    let support = [htmlTagLanguage.support], defaultCode;\n    if (defaultCodeLanguage instanceof LanguageSupport) {\n        support.push(defaultCodeLanguage.support);\n        defaultCode = defaultCodeLanguage.language;\n    }\n    else if (defaultCodeLanguage) {\n        defaultCode = defaultCodeLanguage;\n    }\n    let codeParser = codeLanguages || defaultCode ? getCodeParser(codeLanguages, defaultCode) : undefined;\n    extensions.push(parseCode({ codeParser, htmlParser: htmlTagLanguage.language.parser }));\n    if (addKeymap)\n        support.push(Prec.high(keymap.of(markdownKeymap)));\n    let lang = mkLang(parser.configure(extensions));\n    if (completeHTMLTags)\n        support.push(lang.data.of({ autocomplete: htmlTagCompletion }));\n    return new LanguageSupport(lang, support);\n}\nfunction htmlTagCompletion(context) {\n    let { state, pos } = context, m = /<[:\\-\\.\\w\\u00b7-\\uffff]*$/.exec(state.sliceDoc(pos - 25, pos));\n    if (!m)\n        return null;\n    let tree = syntaxTree(state).resolveInner(pos, -1);\n    while (tree && !tree.type.isTop) {\n        if (tree.name == \"CodeBlock\" || tree.name == \"FencedCode\" || tree.name == \"ProcessingInstructionBlock\" ||\n            tree.name == \"CommentBlock\" || tree.name == \"Link\" || tree.name == \"Image\")\n            return null;\n        tree = tree.parent;\n    }\n    return {\n        from: pos - m[0].length, to: pos,\n        options: htmlTagCompletions(),\n        validFor: /^<[:\\-\\.\\w\\u00b7-\\uffff]*$/\n    };\n}\nlet _tagCompletions = null;\nfunction htmlTagCompletions() {\n    if (_tagCompletions)\n        return _tagCompletions;\n    let result = htmlCompletionSource(new CompletionContext(EditorState.create({ extensions: htmlNoMatch }), 0, true));\n    return _tagCompletions = result ? result.options : [];\n}\n\nexport { commonmarkLanguage, deleteMarkupBackward, insertNewlineContinueMarkup, markdown, markdownKeymap, markdownLanguage };\n", "import { ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst castOpen = 1,\n  HeredocString = 2,\n  interpolatedStringContent = 263,\n  EscapeSequence = 3,\n  afterInterpolation = 264,\n  automaticSemicolon = 265,\n  eof = 266,\n  abstract = 4,\n  and = 5,\n  array = 6,\n  as = 7,\n  Boolean = 8,\n  _break = 9,\n  _case = 10,\n  _catch = 11,\n  clone = 12,\n  _const = 13,\n  _continue = 14,\n  _default = 15,\n  declare = 16,\n  _do = 17,\n  echo = 18,\n  _else = 19,\n  elseif = 20,\n  enddeclare = 21,\n  endfor = 22,\n  endforeach = 23,\n  endif = 24,\n  endswitch = 25,\n  endwhile = 26,\n  _enum = 27,\n  _extends = 28,\n  final = 29,\n  _finally = 30,\n  fn = 31,\n  _for = 32,\n  foreach = 33,\n  from = 34,\n  _function = 35,\n  global = 36,\n  goto = 37,\n  _if = 38,\n  _implements = 39,\n  include = 40,\n  include_once = 41,\n  _instanceof = 42,\n  insteadof = 43,\n  _interface = 44,\n  list = 45,\n  match = 46,\n  namespace = 47,\n  _new = 48,\n  _null = 49,\n  or = 50,\n  print = 51,\n  _require = 52,\n  require_once = 53,\n  _return = 54,\n  _switch = 55,\n  _throw = 56,\n  trait = 57,\n  _try = 58,\n  unset = 59,\n  use = 60,\n  _var = 61,\n  Visibility = 62,\n  _while = 63,\n  xor = 64,\n  _yield = 65;\n\nconst keywordMap = {\n  abstract,\n  and,\n  array,\n  as,\n  true: Boolean,\n  false: Boolean,\n  break: _break,\n  case: _case,\n  catch: _catch,\n  clone,\n  const: _const,\n  continue: _continue,\n  declare,\n  default: _default,\n  do: _do,\n  echo,\n  else: _else,\n  elseif,\n  enddeclare,\n  endfor,\n  endforeach,\n  endif,\n  endswitch,\n  endwhile,\n  enum: _enum,\n  extends: _extends,\n  final,\n  finally: _finally,\n  fn,\n  for: _for,\n  foreach,\n  from,\n  function: _function,\n  global,\n  goto,\n  if: _if,\n  implements: _implements,\n  include,\n  include_once,\n  instanceof: _instanceof,\n  insteadof,\n  interface: _interface,\n  list,\n  match,\n  namespace,\n  new: _new,\n  null: _null,\n  or,\n  print,\n  require: _require,\n  require_once,\n  return: _return,\n  switch: _switch,\n  throw: _throw,\n  trait,\n  try: _try,\n  unset,\n  use,\n  var: _var,\n  public: Visibility,\n  private: Visibility,\n  protected: Visibility,\n  while: _while,\n  xor,\n  yield: _yield,\n  __proto__: null,\n};\n\nfunction keywords(name) {\n  let found = keywordMap[name.toLowerCase()];\n  return found == null ? -1 : found\n}\n\nfunction isSpace(ch) {\n  return ch == 9 || ch == 10 || ch == 13 || ch == 32\n}\n\nfunction isASCIILetter(ch) {\n  return ch >= 97 && ch <= 122 || ch >= 65 && ch <= 90\n}\n\nfunction isIdentifierStart(ch) {\n  return ch == 95 || ch >= 0x80 || isASCIILetter(ch)\n}\n\nfunction isHex(ch) {\n  return ch >= 48 && ch <= 55 || ch >= 97 && ch <= 102 || ch >= 65 && ch <= 70 /* 0-9, a-f, A-F */\n}\n\nconst castTypes = {\n  int: true, integer: true, bool: true, boolean: true,\n  float: true, double: true, real: true, string: true,\n  array: true, object: true, unset: true,\n  __proto__: null\n};\n\nconst expression = new ExternalTokenizer(input => {\n  if (input.next == 40 /* '(' */) {\n    input.advance();\n    let peek = 0;\n    while (isSpace(input.peek(peek))) peek++;\n    let name = \"\", next;\n    while (isASCIILetter(next = input.peek(peek))) {\n      name += String.fromCharCode(next);\n      peek++;\n    }\n    while (isSpace(input.peek(peek))) peek++;\n    if (input.peek(peek) == 41 /* ')' */ && castTypes[name.toLowerCase()])\n      input.acceptToken(castOpen);\n  } else if (input.next == 60 /* '<' */ && input.peek(1) == 60 && input.peek(2) == 60) {\n    for (let i = 0; i < 3; i++) input.advance();\n    while (input.next == 32 /* ' ' */ || input.next == 9 /* '\\t' */) input.advance();\n    let quoted = input.next == 39; /* \"'\" */\n    if (quoted) input.advance();\n    if (!isIdentifierStart(input.next)) return\n    let tag = String.fromCharCode(input.next);\n    for (;;) {\n      input.advance();\n      if (!isIdentifierStart(input.next) && !(input.next >= 48 && input.next <= 55) /* 0-9 */) break\n      tag += String.fromCharCode(input.next);\n    }\n    if (quoted) {\n      if (input.next != 39) return\n      input.advance();\n    }\n    if (input.next != 10 /* '\\n' */ && input.next != 13 /* '\\r' */) return\n    for (;;) {\n      let lineStart = input.next == 10 || input.next == 13;\n      input.advance();\n      if (input.next < 0) return\n      if (lineStart) {\n        while (input.next == 32 /* ' ' */ || input.next == 9 /* '\\t' */) input.advance();\n        let match = true;\n        for (let i = 0; i < tag.length; i++) {\n          if (input.next != tag.charCodeAt(i)) { match = false; break }\n          input.advance();\n        }\n        if (match) return input.acceptToken(HeredocString)\n      }\n    }\n  }\n});\n\nconst eofToken = new ExternalTokenizer(input => {\n  if (input.next < 0) input.acceptToken(eof);\n});\n\nconst semicolon = new ExternalTokenizer((input, stack) => {\n  if (input.next == 63 /* '?' */ && stack.canShift(automaticSemicolon) && input.peek(1) == 62 /* '>' */)\n    input.acceptToken(automaticSemicolon);\n});\n\nfunction scanEscape(input) {\n  let after = input.peek(1);\n  if (after == 110 /* 'n' */ || after == 114 /* 'r' */ || after == 116 /* 't' */ ||\n      after == 118 /* 'v' */ || after == 101 /* 'e' */ || after == 102 /* 'f' */ ||\n      after == 92 /* '\\\\' */ || after == 36 /* '\"' */ || after == 34 /* '$' */ ||\n      after == 123 /* '{' */)\n    return 2\n\n  if (after >= 48 && after <= 55 /* '0'-'7' */) {\n    let size = 2, next;\n    while (size < 5 && (next = input.peek(size)) >= 48 && next <= 55) size++;\n    return size\n  }\n\n  if (after == 120 /* 'x' */ && isHex(input.peek(2))) {\n    return isHex(input.peek(3)) ? 4 : 3\n  }\n\n  if (after == 117 /* 'u' */ && input.peek(2) == 123 /* '{' */) {\n    for (let size = 3;; size++) {\n      let next = input.peek(size);\n      if (next == 125 /* '}' */) return size == 2 ? 0 : size + 1\n      if (!isHex(next)) break\n    }\n  }\n\n  return 0\n}\n\nconst interpolated = new ExternalTokenizer((input, stack) => {\n  let content = false;\n  for (;; content = true) {\n    if (input.next == 34 /* '\"' */ || input.next < 0 ||\n        input.next == 36 /* '$' */ && (isIdentifierStart(input.peek(1)) || input.peek(1) == 123 /* '{' */) ||\n        input.next == 123 /* '{' */ && input.peek(1) == 36 /* '$' */) {\n      break\n    } else if (input.next == 92 /* '\\\\' */) {\n      let escaped = scanEscape(input);\n      if (escaped) {\n        if (content) break\n        else return input.acceptToken(EscapeSequence, escaped)\n      }\n    } else if (!content && (\n      input.next == 91 /* '[' */ ||\n      input.next == 45 /* '-' */ && input.peek(1) == 62 /* '>' */ && isIdentifierStart(input.peek(2)) ||\n      input.next == 63 /* '?' */ && input.peek(1) == 45 && input.peek(2) == 62 && isIdentifierStart(input.peek(3))\n    ) && stack.canShift(afterInterpolation)) {\n      break\n    }\n    input.advance();\n  }\n  if (content) input.acceptToken(interpolatedStringContent);\n});\n\nconst phpHighlighting = styleTags({\n  \"Visibility abstract final static\": tags.modifier,\n  \"for foreach while do if else elseif switch try catch finally return throw break continue default case\": tags.controlKeyword,\n  \"endif endfor endforeach endswitch endwhile declare enddeclare goto match\": tags.controlKeyword,\n  \"and or xor yield unset clone instanceof insteadof\": tags.operatorKeyword,\n  \"function fn class trait implements extends const enum global interface use var\": tags.definitionKeyword,\n  \"include include_once require require_once namespace\": tags.moduleKeyword,\n  \"new from echo print array list as\": tags.keyword,\n  null: tags.null,\n  Boolean: tags.bool,\n  VariableName: tags.variableName,\n  \"NamespaceName/...\": tags.namespace,\n  \"NamedType/...\": tags.typeName,\n  Name: tags.name,\n  \"CallExpression/Name\": tags.function(tags.variableName),\n  \"LabelStatement/Name\": tags.labelName,\n  \"MemberExpression/Name\": tags.propertyName,\n  \"MemberExpression/VariableName\": tags.special(tags.propertyName),\n  \"ScopedExpression/ClassMemberName/Name\": tags.propertyName,\n  \"ScopedExpression/ClassMemberName/VariableName\": tags.special(tags.propertyName),\n  \"CallExpression/MemberExpression/Name\": tags.function(tags.propertyName),\n  \"CallExpression/ScopedExpression/ClassMemberName/Name\": tags.function(tags.propertyName),\n  \"MethodDeclaration/Name\": tags.function(tags.definition(tags.variableName)),\n  \"FunctionDefinition/Name\": tags.function(tags.definition(tags.variableName)),\n  \"ClassDeclaration/Name\": tags.definition(tags.className),\n  UpdateOp: tags.updateOperator,\n  ArithOp: tags.arithmeticOperator,\n  LogicOp: tags.logicOperator,\n  BitOp: tags.bitwiseOperator,\n  CompareOp: tags.compareOperator,\n  ControlOp: tags.controlOperator,\n  AssignOp: tags.definitionOperator,\n  \"$ ConcatOp\": tags.operator,\n  LineComment: tags.lineComment,\n  BlockComment: tags.blockComment,\n  Integer: tags.integer,\n  Float: tags.float,\n  String: tags.string,\n  ShellExpression: tags.special(tags.string),\n  \"=> ->\": tags.punctuation,\n  \"( )\": tags.paren,\n  \"#[ [ ]\": tags.squareBracket,\n  \"${ { }\": tags.brace,\n  \"-> ?->\": tags.derefOperator,\n  \", ; :: : \\\\\": tags.separator,\n  \"PhpOpen PhpClose\": tags.processingInstruction,\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_Name = {__proto__:null,static:311, STATIC:311, class:333, CLASS:333};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"$GSQ`OWOOQhQaOOP%oO`OOOOO#t'#H_'#H_O%tO#|O'#DtOOO#u'#Dw'#DwQ&SOWO'#DwO&XO$VOOOOQ#u'#Dx'#DxO&lQaO'#D|O(mQdO'#E}O(tQdO'#EQO*kQaO'#EWO,zQ`O'#ETO-PQ`O'#E^O/nQaO'#E^O/uQ`O'#EfO/zQ`O'#EoO*kQaO'#EoO0VQ`O'#HhO0[Q`O'#E{O0[Q`O'#E{OOQS'#Ic'#IcO0aQ`O'#EvOOQS'#IZ'#IZO2oQdO'#IWO6tQeO'#FUO*kQaO'#FeO*kQaO'#FfO*kQaO'#FgO*kQaO'#FhO*kQaO'#FhO*kQaO'#FkOOQO'#Id'#IdO7RQ`O'#FqOOQO'#Hi'#HiO7ZQ`O'#HOO7uQ`O'#FlO8QQ`O'#H]O8]Q`O'#FvO8eQaO'#FwO*kQaO'#GVO*kQaO'#GYO8}OrO'#G]OOQS'#Iq'#IqOOQS'#Ip'#IpOOQS'#IW'#IWO,zQ`O'#GdO,zQ`O'#GfO,zQ`O'#GkOhQaO'#GmO9UQ`O'#GnO9ZQ`O'#GqO9`Q`O'#GtO9eQeO'#GuO9eQeO'#GvO9eQeO'#GwO9oQ`O'#GxO9tQ`O'#GzO9yQaO'#G{O<YQ`O'#G|O<_Q`O'#G}O<dQ`O'#G}O9oQ`O'#HOO<iQ`O'#HQO<nQ`O'#HRO<sQ`O'#HSO<xQ`O'#HVO=TQ`O'#HWO9yQaO'#H[OOQ#u'#IV'#IVOOQ#u'#Ha'#HaQhQaOOO=fQ`O'#HPO7pQ`O'#HPO=kO#|O'#DrPOOO)CCw)CCwOOO#t-E;]-E;]OOO#u,5:c,5:cOOO#u'#H`'#H`O&XO$VOOO=vQ$VO'#IUOOOO'#IU'#IUQOOOOOOOQ#y,5:h,5:hO=}QaO,5:hOOQ#u,5:j,5:jO@eQaO,5:mO@lQaO,5;UO*kQaO,5;UO@sQ`O,5;VOCbQaO'#EsOOQS,5;^,5;^OCiQ`O,5;jOOQP'#F]'#F]O*kQaO,5;qO*kQaO,5;qO*kQaO,5;qO*kQaO,5;qO*kQaO,5;qO*kQaO,5;qO*kQaO,5;qO*kQaO,5;qO*kQaO,5;qO*kQaO,5;qO*kQaO,5;qO*kQaO,5;qO*kQaO,5;qO*kQaO,5;qO*kQaO,5;qO*kQaO,5;qOOQ#u'#Im'#ImOOQS,5<q,5<qOOQ#u,5:l,5:lOEbQ`O,5:rOEiQdO'#E}OF]Q`O'#FlOFeQ`O'#FlOFmQ`O,5:oOFrQaO'#E_OOQS,5:x,5:xOHyQ`O'#I]O9yQaO'#EaO9yQaO'#I]OOQS'#I]'#I]OIQQ`O'#I[OIYQ`O,5:xO-UQaO,5:xOI_QaO'#EgOOQS,5;Q,5;QOOQS,5;Z,5;ZOIiQ`O,5;ZOOQO,5>S,5>SOJ[QdO,5;gOOQO-E;f-E;fOL^Q`O,5;gOLcQpO,5;bO0aQ`O'#EyOLkQtO'#E}OOQS'#Ez'#EzOOQS'#Ib'#IbOM`QaO,5:wO*kQaO,5;nOOQS,5;p,5;pO*kQaO,5;pOMgQdO,5<POMwQdO,5<QONXQdO,5<RONiQdO,5<SO!!sQdO,5<SO!!zQdO,5<VO!#[Q`O'#FrO!#gQ`O'#IgO!#oQ`O,5<]OOQO-E;g-E;gO!#tQ`O'#IoO<_Q`O,5=iO!#|Q`O,5=iO9oQ`O,5=jO!$RQ`O,5=nO!$WQ`O,5=kO!$]Q`O,5=kO!$bQ`O'#FnO!$xQ`O,5<WO!%TQ`O,5<WO!%WQ`O,5?ZO!%]Q`O,5<WO!%eQ`O,5<bO!%mQdO'#GPO!%{QdO'#InO!&WQdO,5=wO!&`Q`O,5<bO!%WQ`O,5<bO!&hQdO,5<cO!&xQ`O,5<cO!'lQdO,5<qO!)nQdO,5<tO!*OOrO'#HsOOOQ'#It'#ItO*kQaO'#GbOOOQ'#Hs'#HsO!*pOrO,5<wOOQS,5<w,5<wO!*wQaO,5=OO!+OQ`O,5=QO!+WQeO,5=VO!+bQ`O,5=XO!+gQaO'#GoO!+WQeO,5=YO9yQaO'#GrO!+WQeO,5=]O!&WQdO,5=`O(tQdO,5=aOOQ#u,5=a,5=aO(tQdO,5=bOOQ#u,5=b,5=bO(tQdO,5=cOOQ#u,5=c,5=cO!+nQ`O,5=dO!+vQ`O,5=fO!+{QdO'#IvOOQS'#Iv'#IvO!&WQdO,5=gO>UQaO,5=hO!-eQ`O'#F}O!-jQdO'#IlO!&WQdO,5=iOOQ#u,5=j,5=jO!-uQ`O,5=lO!-xQ`O,5=mO!-}Q`O,5=nO!.YQdO,5=qOOQ#u,5=q,5=qO!.eQ`O,5=rO!.eQ`O,5=rO!.mQdO'#IwO!.{Q`O'#HXO!&WQdO,5=rO!/ZQ`O,5=rO!/fQdO'#IYO!&WQdO,5=vOOQ#u-E;_-E;_O!1RQ`O,5=kOOO#u,5:^,5:^O!1^O#|O,5:^OOO#u-E;^-E;^OOOO,5>p,5>pOOQ#y1G0S1G0SO!1fQ`O1G0XO*kQaO1G0XO!2xQ`O1G0pOOQS1G0p1G0pO!4[Q`O1G0pOOQS'#I_'#I_O*kQaO'#I_OOQS1G0q1G0qO!4cQ`O'#IaO!7lQ`O'#E}O!7yQaO'#EuOOQO'#Ia'#IaO!8TQ`O'#I`O!8]Q`O,5;_OOQS'#FQ'#FQOOQS1G1U1G1UO!8bQdO1G1]O!:dQdO1G1]O!<PQdO1G1]O!=lQdO1G1]O!?XQdO1G1]O!@tQdO1G1]O!BaQdO1G1]O!C|QdO1G1]O!EiQdO1G1]O!GUQdO1G1]O!HqQdO1G1]O!J^QdO1G1]O!KyQdO1G1]O!MfQdO1G1]O# RQdO1G1]O#!nQdO1G1]OOQT1G0^1G0^O!%WQ`O,5<WO#$ZQaO'#EXOOQS1G0Z1G0ZO#$bQ`O,5:yOFuQaO,5:yO#$gQaO,5:}O#$nQdO,5:{O#&jQdO,5>wO#(fQaO'#HdO#(vQ`O,5>vOOQS1G0d1G0dO#)OQ`O1G0dO#)TQ`O'#I^O#*mQ`O'#I^O#*uQ`O,5;ROIbQaO,5;ROOQS1G0u1G0uPOQO'#E}'#E}O#+fQdO1G1RO0aQ`O'#HgO#-hQtO,5;cO#.YQaO1G0|OOQS,5;e,5;eO#0iQtO,5;gO#0vQdO1G0cO*kQaO1G0cO#2cQdO1G1YO#4OQdO1G1[OOQO,5<^,5<^O#4`Q`O'#HjO#4nQ`O,5?ROOQO1G1w1G1wO#4vQ`O,5?ZO!&WQdO1G3TO<_Q`O1G3TOOQ#u1G3U1G3UO#4{Q`O1G3YO!1RQ`O1G3VO#5WQ`O1G3VO#5]QpO'#FoO#5kQ`O'#FoO#5{Q`O'#FoO#6WQ`O'#FoO#6`Q`O'#FsO#6eQ`O'#FtOOQO'#If'#IfO#6lQ`O'#IeO#6tQ`O,5<YOOQS1G1r1G1rO0aQ`O1G1rO#6yQ`O1G1rO#7OQ`O1G1rO!%WQ`O1G4uO#7ZQdO1G4uO!%WQ`O1G1rO#7iQ`O1G1|O!%WQ`O1G1|O9yQaO,5<kO#7qQdO'#HqO#8PQdO,5?YOOQ#u1G3c1G3cO*kQaO1G1|O0aQ`O1G1|O#8[QdO1G1}O7RQ`O'#FyO7RQ`O'#FzO#:nQ`O'#F{OOQS1G1}1G1}O!-xQ`O1G1}O!1UQ`O1G1}O!1RQ`O1G1}O#;eO`O,5<xO#;jO`O,5<xO#;uO!bO,5<yO#<TQ`O,5<|OOOQ-E;q-E;qOOQS1G2c1G2cO#<[QaO'#GeO#<uQ$VO1G2jO#AuQ`O1G2jO#BQQ`O'#GgO#B]Q`O'#GjOOQ#u1G2l1G2lO#BhQ`O1G2lOOQ#u'#Gl'#GlOOQ#u'#Iu'#IuOOQ#u1G2q1G2qO#BmQ`O1G2qO,zQ`O1G2sO#BrQaO,5=ZO#ByQ`O,5=ZOOQ#u1G2t1G2tO#COQ`O1G2tO#CTQ`O,5=^OOQ#u1G2w1G2wO#DgQ`O1G2wOOQ#u1G2z1G2zOOQ#u1G2{1G2{OOQ#u1G2|1G2|OOQ#u1G2}1G2}O#DlQ`O'#HxO9oQ`O'#HxO#DqQ$VO1G3OO#IwQ`O1G3QO9yQaO'#HwO#I|QdO,5=[OOQ#u1G3R1G3RO#JXQ`O1G3SO9yQaO,5<iO#J^QdO'#HpO#JlQdO,5?WOOQ#u1G3T1G3TOOQ#u1G3W1G3WO!-xQ`O1G3WOOQ#u1G3X1G3XO#KfQ`O'#HTOOQ#u1G3Y1G3YO#KmQ`O1G3YO0aQ`O1G3YOOQ#u1G3]1G3]O!&WQdO1G3^O#KrQ`O1G3^O#KzQdO'#HzO#L]QdO,5?cO#LhQ`O,5?cO#LmQ`O'#HYO7RQ`O'#HYO#LxQ`O'#IxO#MQQ`O,5=sOOQ#u1G3^1G3^O!.eQ`O1G3^O!.eQ`O1G3^O#MVQeO'#HbO#MgQdO,5>tOOQ#u1G3b1G3bOOQ#u1G3V1G3VO!-xQ`O1G3VO!1UQ`O1G3VOOO#u1G/x1G/xO*kQaO7+%sO#MuQdO7+%sOOQS7+&[7+&[O$ bQ`O,5>yO>UQaO,5;`O$ iQ`O,5;aO$#OQaO'#HfO$#YQ`O,5>zOOQS1G0y1G0yO$#bQ`O'#EYO$#gQ`O'#IXO$#oQ`O,5:sOOQS1G0e1G0eO$#tQ`O1G0eO$#yQ`O1G0iO9yQaO1G0iOOQO,5>O,5>OOOQO-E;b-E;bOOQS7+&O7+&OO>UQaO,5;SO$%`QaO'#HeO$%jQ`O,5>xOOQS1G0m1G0mO$%rQ`O1G0mOOQS,5>R,5>ROOQS-E;e-E;eO$%wQdO7+&hO$'yQtO1G1RO$(WQdO7+%}OOQS1G0i1G0iOOQO,5>U,5>UOOQO-E;h-E;hOOQ#u7+(o7+(oO!&WQdO7+(oOOQ#u7+(t7+(tO#KmQ`O7+(tO0aQ`O7+(tOOQ#u7+(q7+(qO!-xQ`O7+(qO!1UQ`O7+(qO!1RQ`O7+(qO$)sQ`O,5<ZO$*OQ`O,5<ZO$*WQ`O,5<_O$*]QpO,5<ZO>UQaO,5<ZOOQO,5<_,5<_O$*kQpO,5<`O$*sQ`O,5<`O$+OQ`O'#HkO$+iQ`O,5?POOQS1G1t1G1tO$+qQpO7+'^O$+yQ`O'#FuO$,UQ`O7+'^OOQS7+'^7+'^O0aQ`O7+'^O#6yQ`O7+'^O$,^QdO7+*aO0aQ`O7+*aO$,lQ`O7+'^O*kQaO7+'hO0aQ`O7+'hO$,wQ`O7+'hO$-PQdO1G2VOOQS,5>],5>]OOQS-E;o-E;oO$.iQdO7+'hO$.yQpO7+'hO$/RQdO'#IiOOQO,5<e,5<eOOQO,5<f,5<fO$/dQpO'#GOO$/lQ`O'#GOOOQO'#Ik'#IkOOQO'#Ho'#HoO$0]Q`O'#GOO<_Q`O'#F|O!&WQdO'#GOO!.YQdO'#GQO7RQ`O'#GROOQO'#Ij'#IjOOQO'#Hn'#HnO$0yQ`O,5<gOOQ#y,5<g,5<gOOQS7+'i7+'iO!-xQ`O7+'iO!1UQ`O7+'iOOOQ1G2d1G2dO$1pO`O1G2dO$1uO!bO1G2eO$2TO`O'#G`O$2YO`O1G2eOOOQ1G2h1G2hO$2_QaO,5=PO,zQ`O'#HtO$2xQ$VO7+(UOhQaO7+(UO,zQ`O'#HuO$7xQ`O7+(UO!&WQdO7+(UO$8TQ`O7+(UO$8YQaO'#GhO$:iQ`O'#GiOOQO'#Hv'#HvO$:qQ`O,5=ROOQ#u,5=R,5=RO$:|Q`O,5=UO!&WQdO7+(WO!&WQdO7+(]O!&WQdO7+(_O$;XQaO1G2uO$;`Q`O1G2uO$;eQaO1G2uO!&WQdO7+(`O9yQaO1G2xO!&WQdO7+(cO0aQ`O'#GyO9oQ`O,5>dOOQ#u,5>d,5>dOOQ#u-E;v-E;vO$;lQaO7+(lO$<TQdO,5>cOOQS-E;u-E;uO!&WQdO7+(nO$=mQdO1G2TOOQS,5>[,5>[OOQS-E;n-E;nOOQ#u7+(r7+(rO$?nQ`O'#GQO$?uQ`O'#GQO$@ZQ`O'#HUOOQO'#Hy'#HyO$@`Q`O,5=oOOQ#u,5=o,5=oO$@gQpO7+(tOOQ#u7+(x7+(xO!&WQdO7+(xO$@rQdO,5>fOOQS-E;x-E;xO$AQQdO1G4}O$A]Q`O,5=tO$AbQ`O,5=tO$AmQ`O'#H{O$BRQ`O,5?dOOQS1G3_1G3_O#KrQ`O7+(xO$BZQdO,5=|OOQS-E;`-E;`O$CvQdO<<I_OOQS1G4e1G4eO$EcQ`O1G0zOOQO,5>Q,5>QOOQO-E;d-E;dO$8YQaO,5:tO$FxQaO'#HcO$GVQ`O,5>sOOQS1G0_1G0_OOQS7+&P7+&PO$G_Q`O7+&TO$HtQ`O1G0nO$JZQ`O,5>POOQO,5>P,5>POOQO-E;c-E;cOOQS7+&X7+&XOOQS7+&T7+&TOOQ#u<<LZ<<LZOOQ#u<<L`<<L`O$@gQpO<<L`OOQ#u<<L]<<L]O!-xQ`O<<L]O!1UQ`O<<L]O>UQaO1G1uO$KsQ`O1G1uO$LOQ`O1G1yOOQO1G1y1G1yO$LTQ`O1G1uO$L]Q`O1G1uO$MrQ`O1G1zO>UQaO1G1zOOQO,5>V,5>VOOQO-E;i-E;iOOQS<<Jx<<JxO$M}Q`O'#IhO$NVQ`O'#IhO$N[Q`O,5<aO0aQ`O<<JxO$+qQpO<<JxO$NaQ`O<<JxO0aQ`O<<M{O$NiQtO<<M{O#6yQ`O<<JxO$NwQdO<<KSO% XQpO<<KSO*kQaO<<KSO0aQ`O<<KSO% aQdO'#HmO% xQdO,5?TO!&WQdO,5<jO$/dQpO,5<jO%!ZQ`O,5<jO<_Q`O,5<hO!.YQdO,5<lOOQO-E;m-E;mO!&WQdO,5<hOOQO,5<j,5<jOOQO,5<l,5<lO%!tQdO,5<mOOQO-E;l-E;lOOQ#y1G2R1G2ROOQS<<KT<<KTO!-xQ`O<<KTOOOQ7+(O7+(OO%#PO`O7+(POOOO,5<z,5<zOOOQ7+(P7+(POhQaO,5>`OOQ#u-E;r-E;rOhQaO<<KpOOQ#u<<Kp<<KpO$8TQ`O,5>aOOQO-E;s-E;sO!&WQdO<<KpO$8TQ`O<<KpO%#UQ`O<<KpO%#ZQ`O,5=SO%$pQaO,5=TOOQO-E;t-E;tOOQ#u1G2m1G2mOOQ#u<<Kr<<KrOOQ#u<<Kw<<KwOOQ#u<<Ky<<KyOOQT7+(a7+(aO%%QQ`O7+(aO%%VQaO7+(aO%%^Q`O7+(aOOQ#u<<Kz<<KzO%%cQ`O7+(dO%&xQ`O7+(dOOQ#u<<K}<<K}O%&}QpO,5=eOOQ#u1G4O1G4OO%'YQ`O<<LWOOQ#u<<LY<<LYO$?uQ`O,5<lO%'_Q`O,5=pO%'dQdO,5=pOOQO-E;w-E;wOOQ#u1G3Z1G3ZO#KmQ`O<<L`OOQ#u<<Ld<<LdO%'oQ`O1G4QO%'tQdO7+*iOOQO1G3`1G3`O%(PQ`O1G3`O%(UQ`O'#HZO7RQ`O'#HZOOQO,5>g,5>gOOQO-E;y-E;yO!&WQdO<<LdO%(aQ`O1G0`OOQO,5=},5=}OOQO-E;a-E;aO>UQaO,5;TOOQ#uANAzANAzO#KmQ`OANAzOOQ#uANAwANAwO!-xQ`OANAwO%)vQ`O7+'aO>UQaO7+'aOOQO7+'e7+'eO%+]Q`O7+'aO%+hQ`O7+'eO>UQaO7+'fO%+mQ`O7+'fO%-SQ`O'#HlO%-bQ`O,5?SO%-bQ`O,5?SOOQO1G1{1G1{O$+qQpOAN@dOOQSAN@dAN@dO0aQ`OAN@dO%-jQtOANCgO%-xQ`OAN@dO*kQaOAN@nO%.QQdOAN@nO%.bQpOAN@nOOQS,5>X,5>XOOQS-E;k-E;kOOQO1G2U1G2UO!&WQdO1G2UO$/dQpO1G2UO<_Q`O1G2SO!.YQdO1G2WO!&WQdO1G2SOOQO1G2W1G2WOOQO1G2S1G2SO%.jQaO'#GSOOQO1G2X1G2XOOQSAN@oAN@oOOOQ<<Kk<<KkOOQ#u1G3z1G3zOOQ#uANA[ANA[OOQO1G3{1G3{O%0iQ`OANA[O!&WQdOANA[O%0nQaO1G2nO%1OQaO1G2oOOQT<<K{<<K{O%1`Q`O<<K{O%1eQaO<<K{O*kQaO,5=_OOQT<<LO<<LOOOQO1G3P1G3PO%1lQ`O1G3PO!+WQeOANArO%1qQdO1G3[OOQO1G3[1G3[O%1|Q`O1G3[OOQS7+)l7+)lOOQO7+(z7+(zO%2UQ`O,5=uO%2ZQ`O,5=uOOQ#uANBOANBOO%2fQ`O1G0oOOQ#uG27fG27fOOQ#uG27cG27cO%3{Q`O<<J{O>UQaO<<J{OOQO<<KP<<KPO%5bQ`O<<KQOOQO,5>W,5>WO%6wQ`O,5>WOOQO-E;j-E;jO%6|Q`O1G4nOOQSG26OG26OO$+qQpOG26OO0aQ`OG26OO%7UQdOG26YO*kQaOG26YOOQO7+'p7+'pO!&WQdO7+'pO!&WQdO7+'nOOQO7+'r7+'rOOQO7+'n7+'nO%7fQ`OLD+tO%8uQ`O'#E}O%9PQ`O'#IZO!&WQdO'#HrO%:|QaO,5<nOOQO,5<n,5<nO!&WQdOG26vOOQ#uG26vG26vO%<{QaO7+(YOOQTANAgANAgO%=]Q`OANAgO%=bQ`O1G2yOOQO7+(k7+(kOOQ#uG27^G27^O%=iQ`OG27^OOQO7+(v7+(vO%=nQ`O7+(vO!&WQdO7+(vOOQO1G3a1G3aO%=vQ`O1G3aO%={Q`OAN@gOOQO1G3r1G3rOOQSLD+jLD+jO$+qQpOLD+jO%?bQdOLD+tOOQO<<K[<<K[OOQO<<KY<<KYO%?rQ`O,5<oO%?wQ`O,5<pOOQP,5>^,5>^OOQP-E;p-E;pOOQO1G2Y1G2YOOQ#uLD,bLD,bOOQTG27RG27RO!&WQdOLD,xO!&WQdO<<LbOOQO<<Lb<<LbOOQO7+({7+({OOQS!$( U!$( UOOQS1G2Z1G2ZOOQS1G2[1G2[O%@PQdO1G2[OOQ#u!$(!d!$(!dOOQOANA|ANA|OOQS7+'v7+'vO%@[Q`O'#E{O%@[Q`O'#E{O%@aQ`O,5;gO%@fQdO,5<cO%BbQaO,5:}O*kQaO1G0iO%BiQaO'#FwO#.YQaO'#GVO#.YQaO'#GYO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO#.YQaO,5;qO%BpQdO'#I]O%D`QdO'#I]O#.YQaO'#EaO#.YQaO'#I]O%FbQaO,5:wO#.YQaO,5;nO#.YQaO,5;pO%FiQdO,5<PO%HeQdO,5<QO%JaQdO,5<RO%L]QdO,5<SO%NXQdO,5<SO%NoQdO,5<VO&!kQdO,5<tO#.YQaO1G0XO&$gQdO1G1]O&&cQdO1G1]O&(_QdO1G1]O&*ZQdO1G1]O&,VQdO1G1]O&.RQdO1G1]O&/}QdO1G1]O&1yQdO1G1]O&3uQdO1G1]O&5qQdO1G1]O&7mQdO1G1]O&9iQdO1G1]O&;eQdO1G1]O&=aQdO1G1]O&?]QdO1G1]O&AXQdO,5:{O&CTQdO,5>wO&EPQdO1G0cO#.YQaO1G0cO&F{QdO1G1YO&HwQdO1G1[O#.YQaO1G1|O#.YQaO7+%sO&JsQdO7+%sO&LoQdO7+%}O#.YQaO7+'hO&NkQdO7+'hO'!gQdO<<I_O'$cQdO<<KSO#.YQaO<<KSO#.YQaOAN@nO'&_QdOAN@nO'(ZQdOG26YO#.YQaOG26YO'*VQdOLD+tO',RQaO,5:}O'.QQaO1G0iO'/|QdO'#IWO'0aQeO'#FUO'4aQeO'#FUO#.YQaO'#FeO'.QQaO'#FeO#.YQaO'#FfO'.QQaO'#FfO#.YQaO'#FgO'.QQaO'#FgO#.YQaO'#FhO'.QQaO'#FhO#.YQaO'#FhO'.QQaO'#FhO#.YQaO'#FkO'.QQaO'#FkO'8gQaO,5:mO'8nQ`O,5<bO'8vQ`O1G0XO'.QQaO1G0|O':YQ`O1G1|O':bQ`O7+'hO':jQpO7+'hO':rQpO<<KSO':zQpOAN@nO';SQaO'#FwO'.QQaO'#GVO'.QQaO'#GYO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO,5;qO'.QQaO'#EaO'.QQaO'#I]O'=RQaO,5:wO'.QQaO,5;nO'.QQaO,5;pO'?QQdO,5<PO'ASQdO,5<QO'CUQdO,5<RO'EWQdO,5<SO'GYQdO,5<SO'GvQdO,5<VO'IxQdO,5<tO'.QQaO1G0XO'KzQdO1G1]O'M|QdO1G1]O(!OQdO1G1]O($QQdO1G1]O(&SQdO1G1]O((UQdO1G1]O(*WQdO1G1]O(,YQdO1G1]O(.[QdO1G1]O(0^QdO1G1]O(2`QdO1G1]O(4bQdO1G1]O(6dQdO1G1]O(8fQdO1G1]O(:hQdO1G1]O(<jQdO,5:{O(>lQdO,5>wO(@nQdO1G0cO'.QQaO1G0cO(BpQdO1G1YO(DrQdO1G1[O'.QQaO1G1|O'.QQaO7+%sO(FtQdO7+%sO(HvQdO7+%}O'.QQaO7+'hO(JxQdO7+'hO(LzQdO<<I_O(N|QdO<<KSO'.QQaO<<KSO'.QQaOAN@nO)#OQdOAN@nO)%QQdOG26YO'.QQaOG26YO)'SQdOLD+tO))UQaO,5:}O#.YQaO1G0iO))]Q`O'#FvO))eQpO,5;bO))mQ`O,5<bO!%WQ`O,5<bO!%WQ`O1G1|O0aQ`O1G1|O0aQ`O7+'hO0aQ`O<<KSO))uQdO,5<cO)+wQdO'#I]O)-vQdO'#IWO).aQaO,5:mO).hQ`O,5<bO).pQ`O1G0XO)0SQ`O1G1|O)0[Q`O7+'hO)0dQpO7+'hO)0lQpO<<KSO)0tQpOAN@nO0aQ`O'#EvO9yQaO'#FeO9yQaO'#FfO9yQaO'#FgO9yQaO'#FhO9yQaO'#FhO9yQaO'#FkO)0|QaO'#FwO9yQaO'#GVO9yQaO'#GYO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO9yQaO,5;qO)1TQ`O'#FlO*kQaO'#EaO*kQaO'#I]O)1]QaO,5:wO9yQaO,5;nO9yQaO,5;pO)1dQdO,5<PO)3`QdO,5<QO)5[QdO,5<RO)7WQdO,5<SO)9SQdO,5<SO)9jQdO,5<VO);fQdO,5<cO)=bQdO,5<tO)?^Q`O'#IvO)@sQ`O'#IYO9yQaO1G0XO)BYQdO1G1]O)DUQdO1G1]O)FQQdO1G1]O)G|QdO1G1]O)IxQdO1G1]O)KtQdO1G1]O)MpQdO1G1]O* lQdO1G1]O*#hQdO1G1]O*%dQdO1G1]O*'`QdO1G1]O*)[QdO1G1]O*+WQdO1G1]O*-SQdO1G1]O*/OQdO1G1]O*0zQaO,5:}O*1RQdO,5:{O*1cQdO,5>wO*1sQaO'#HdO*2TQ`O,5>vO*2]QdO1G0cO9yQaO1G0cO*4XQdO1G1YO*6TQdO1G1[O9yQaO1G1|O>UQaO'#HwO*8PQ`O,5=[O*8XQaO'#HbO*8cQ`O,5>tO9yQaO7+%sO*8kQdO7+%sO*:gQ`O1G0iO>UQaO1G0iO*;|QdO7+%}O9yQaO7+'hO*=xQdO7+'hO*?tQ`O,5>cO*AZQ`O,5=|O*BpQdO<<I_O*DlQ`O7+&TO*FRQdO<<KSO9yQaO<<KSO9yQaOAN@nO*G}QdOAN@nO*IyQdOG26YO9yQaOG26YO*KuQdOLD+tO*MqQaO,5:}O9yQaO1G0iO*MxQdO'#I]O*NcQ`O'#FvO*NkQ`O,5<bO!%WQ`O,5<bO!%WQ`O1G1|O0aQ`O1G1|O0aQ`O7+'hO0aQ`O<<KSO*NsQdO'#IWO+ ^QeO'#FUO+ zQaO'#FUO+#sQaO'#FUO+%`QaO'#FUO>UQaO'#FeO>UQaO'#FfO>UQaO'#FgO>UQaO'#FhO>UQaO'#FhO>UQaO'#FkO+'XQaO'#FwO>UQaO'#GVO>UQaO'#GYO+'`QaO,5:mO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO>UQaO,5;qO+'gQ`O'#I]O$8YQaO'#EaO+)PQaOG26YO$8YQaO'#I]O+*{Q`O'#I[O++TQaO,5:wO>UQaO,5;nO>UQaO,5;pO++[Q`O,5<PO+,wQ`O,5<QO+.dQ`O,5<RO+0PQ`O,5<SO+1lQ`O,5<SO+3XQ`O,5<VO+4tQ`O,5<bO+4|Q`O,5<cO+6iQ`O,5<tO+8UQ`O1G0XO>UQaO1G0XO+9hQ`O1G1]O+;TQ`O1G1]O+<pQ`O1G1]O+>]Q`O1G1]O+?xQ`O1G1]O+AeQ`O1G1]O+CQQ`O1G1]O+DmQ`O1G1]O+FYQ`O1G1]O+GuQ`O1G1]O+IbQ`O1G1]O+J}Q`O1G1]O+LjQ`O1G1]O+NVQ`O1G1]O, rQ`O1G1]O,#_Q`O1G0cO>UQaO1G0cO,$zQ`O1G1YO,&gQ`O1G1[O,(SQ`O1G1|O>UQaO1G1|O>UQaO7+%sO,([Q`O7+%sO,)wQ`O7+%}O>UQaO7+'hO,+dQ`O7+'hO,+lQ`O7+'hO,-XQpO7+'hO,-aQ`O<<I_O,.|Q`O<<KSO,0iQpO<<KSO>UQaO<<KSO>UQaOAN@nO,0qQ`OAN@nO,2^QpOAN@nO,2fQ`OG26YO>UQaOG26YO,4RQ`OLD+tO,5nQaO,5:}O>UQaO1G0iO,5uQ`O'#I]O$8YQaO'#FeO$8YQaO'#FfO$8YQaO'#FgO$8YQaO'#FhO$8YQaO'#FhO+)PQaO'#FhO$8YQaO'#FkO,6SQaO'#FwO,6ZQaO'#FwO$8YQaO'#GVO+)PQaO'#GVO$8YQaO'#GYO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO$8YQaO,5;qO+)PQaO,5;qO,8YQ`O'#FlO>UQaO'#EaO>UQaO'#I]O,8bQaO,5:wO,8iQaO,5:wO$8YQaO,5;nO+)PQaO,5;nO$8YQaO,5;pO,:hQ`O,5<PO,<TQ`O,5<QO,=pQ`O,5<RO,?]Q`O,5<SO,@xQ`O,5<SO,BeQ`O,5<SO,CtQ`O,5<VO,EaQ`O,5<cO%7fQ`O,5<cO,F|Q`O,5<tO$8YQaO1G0XO+)PQaO1G0XO,HiQ`O1G1]O,JUQ`O1G1]O,KeQ`O1G1]O,MQQ`O1G1]O,NaQ`O1G1]O- |Q`O1G1]O-#]Q`O1G1]O-$xQ`O1G1]O-&XQ`O1G1]O-'tQ`O1G1]O-)TQ`O1G1]O-*pQ`O1G1]O-,PQ`O1G1]O--lQ`O1G1]O-.{Q`O1G1]O-0hQ`O1G1]O-1wQ`O1G1]O-3dQ`O1G1]O-4sQ`O1G1]O-6`Q`O1G1]O-7oQ`O1G1]O-9[Q`O1G1]O-:kQ`O1G1]O-<WQ`O1G1]O-=gQ`O1G1]O-?SQ`O1G1]O-@cQ`O1G1]O-BOQ`O1G1]O-C_Q`O1G1]O-DzQ`O1G1]O-FZQ`O,5:{O-GvQ`O,5>wO-IcQ`O1G0cO-KOQ`O1G0cO$8YQaO1G0cO+)PQaO1G0cO-L_Q`O1G1YO-MzQ`O1G1YO. ZQ`O1G1[O$8YQaO1G1|O$8YQaO7+%sO+)PQaO7+%sO.!vQ`O7+%sO.$cQ`O7+%sO.%rQ`O7+%}O.'_Q`O7+%}O$8YQaO7+'hO.(nQ`O7+'hO.*ZQ`O<<I_O.+vQ`O<<I_O.-VQ`O<<KSO$8YQaO<<KSO$8YQaOAN@nO..rQ`OAN@nO.0_Q`OG26YO$8YQaOG26YO.1zQ`OLD+tO.3gQaO,5:}O.3nQaO,5:}O$8YQaO1G0iO+)PQaO1G0iO.5mQ`O'#I]O.7PQ`O'#I]O.:fQ`O'#IWO.:vQ`O'#FvO.;OQaO,5:mO.;VQ`O,5<bO.;_Q`O,5<bO!%WQ`O,5<bO.;gQ`O1G0XO.<yQ`O,5:{O.>fQ`O,5>wO.@RQ`O1G1|O!%WQ`O1G1|O0aQ`O1G1|O0aQ`O7+'hO.@ZQ`O7+'hO.@cQpO7+'hO.@kQpO<<KSO0aQ`O<<KSO.@sQpOAN@nO.@{Q`O'#IWO.A]Q`O'#IWO.CSQaO,5:mO.CZQaO,5:mO.CbQ`O,5<bO.CjQ`O7+'hO.CrQ`O1G0XO.EUQ`O1G0XO.FhQ`O1G1|O.FpQ`O7+'hO.FxQpO7+'hO.GQQpOAN@nO.GYQpO<<KSO.GbQpOAN@nO.GjQ`O'#FvO.GrQ`O'#FlO.GzQ`O,5<bO!%WQ`O,5<bO!%WQ`O1G1|O0aQ`O1G1|O0aQ`O7+'hO0aQ`O<<KSO.HSQ`O'#FvO.H[Q`O,5<bO.HdQ`O,5<bO!%WQ`O,5<bO!%WQ`O1G1|O!%WQ`O1G1|O0aQ`O1G1|O0aQ`O<<KSO0aQ`O7+'hO0aQ`O<<KSO.HlQ`O'#FlO.HtQ`O'#FlO.H|Q`O'#Fl\",\n  stateData: \".Ic~O!dOS!eOS&vOS!gQQ~O!iTO&wRO~OPgOQ|OS!lOU^OW}OX!XO[mO]!_O^!WO`![Oa!SOb!]Ok!dOm!lOowOp!TOq!UOsuOt!gOu!VOv!POxkOykO|!bO}`O!O]O!P!eO!QxO!R}O!TpO!UlO!VlO!W!YO!X!QO!YzO!Z!cO![!ZO!]!^O!^!fO!`!`O!a!RO!cjO!mWO!oXO!sYO!y[O#W_O#bhO#daO#ebO#peO$ToO$]nO$^oO$aqO$drO$l!kO$zyO${!OO$}}O%O}O%V|O'g{O~O!g!mO~O&wRO!i!hX&p!hX&t!hX~O!i!pO~O!d!qO!e!qO!g!mO&t!tO&v!qO~PhO!n!vO~PhOT'VXz'VX!S'VX!b'VX!m'VX!o'VX!v'VX!y'VX#S'VX#W'VX#`'VX#a'VX#p#qX#s'VX#z'VX#{'VX#|'VX#}'VX$O'VX$Q'VX$R'VX$S'VX$T'VX$U'VX$V'VX$W'VX$z'VX&s'VX~O!q!xO~P&sOT#TOz#RO!S#UO!b#VO!m#cO!o!{O!v!yO!y!}O#S#QO#W!zO#`!|O#a!|O#s#PO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dO&s#cO~OPgOQ|OU^OW}O[mOowOs#hOxkOykO}`O!O]O!QxO!R}O!TpO!UlO!VlO!YzO!cjO!s#gO!y[O#W_O#bhO#daO#ebO#peO$ToO$]nO$^oO$aqO$zyO${!OO$}}O%O}O%V|O'g{O~O!y[O~O!y#kO~OP6]OQ|OU^OW}O[6`Oo=YOs#hOx6^Oy6^O}`O!O]O!Q6dO!R}O!T6cO!U6_O!V6_O!Y6fO!c8fO!s#gO!y[O#S#oO#U#nO#W_O#bhO#daO#ebO#peO$T6bO$]6aO$^6bO$aqO$z6eO${!OO$}}O%O}O%V|O'g{O#X'OP~O!}#sO~P-UO!y#tO~O#b#vO#daO#ebO~O#p#xO~O!s#yO~OU$PO!R$PO!s$OO!v#}O#p2XO~OT&zXz&zX!S&zX!b&zX!m&zX!o&zX!v&zX!y&zX#S&zX#W&zX#`&zX#a&zX#s&zX#z&zX#{&zX#|&zX#}&zX$O&zX$Q&zX$R&zX$S&zX$T&zX$U&zX$V&zX$W&zX$z&zX&s&zX!x&zX!n&zX~O#u$RO#w$SO~P0rOP6]OQ|OU^OW}O[6`Oo=YOs#hOx6^Oy6^O}`O!O]O!Q6dO!R}O!T6cO!U6_O!V6_O!Y6fO!c8fO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T6bO$]6aO$^6bO$aqO$z6eO${!OO$}}O%O}O%V|O'g{OT#xXz#xX!S#xX!b#xX!m#xX!o#xX!v#xX#`#xX#a#xX#s#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX&s#xX!x#xX!n#xX~Or$UO#S6yO#U6xO~P2yO!s#gO#peO~OS$gO]$bOk$eOm$gOs$aO!`$cO$drO$l$fO~O!s$kO!y$hO#S$jO~Oo$mOs$lO#b$nO~O!y$hO#S$rO~O$l$tO~P*kOR$zO!o$yO#b$xO#e$yO&q$zO~O'f$|O~P8lO!y%RO~O!y%TO~O!s%VO~O!m#cO&s#cO~P*kO!oXO~O!y%_O~OP6]OQ|OU^OW}O[6`Oo=YOs#hOx6^Oy6^O}`O!O]O!Q6dO!R}O!T6cO!U6_O!V6_O!Y6fO!c8fO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T6bO$]6aO$^6bO$aqO$z6eO${!OO$}}O%O}O%V|O'g{O~O!y%cO~O!s%dO~O]$bO~O!s%hO~O!s%iO~O!s%jO~O!oXO!s#gO#peO~O]%rOs%rO!o%pO!s#gO#p%nO~O!s%vO~O!i%wO&t%wO&wRO~O&t%zO~PhO!n%{O~PhOPgOQ|OU^OW}O[8lOo=yOs#hOx8jOy8jO}`O!O]O!Q8pO!R}O!T8oO!U8kO!V8kO!Y8rO!c8iO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T8nO$]8mO$^8nO$aqO$z8qO${!OO$}}O%O}O%V|O'g{O~O!q%}O~P>UO#X&PO~P>UO!o&SO!s&RO#b&RO~OPgOQ|OU^OW}O[8lOo=yOs#hOx8jOy8jO}`O!O]O!Q8pO!R}O!T8oO!U8kO!V8kO!Y8rO!c8iO!s&VO!y[O#U&WO#W_O#bhO#daO#ebO#peO$T8nO$]8mO$^8nO$aqO$z8qO${!OO$}}O%O}O%V|O'g{O~O!x'SP~PAOO!s&[O#b&[O~OT#TOz#RO!S#UO!b#VO!o!{O!v!yO!y!}O#S#QO#W!zO#`!|O#a!|O#s#PO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dO~O!x&nO~PCqO!x'VX!}'VX#O'VX#X'VX!n'VXV'VX!q'VX#u'VX#w'VXw'VX~P&sO!y$hO#S&oO~Oo$mOs$lO~O!o&pO~O!}&sO#S;dO#U;cO!x'OP~P9yOT6iOz6gO!S6jO!b6kO!o!{O!v8sO!y!}O#S#QO#W!zO#`!|O#a!|O#s#PO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}'PX#X'PX~O#O&tO~PGSO!}&wO#X'OX~O#X&yO~O!}'OO!x'QP~P9yO!n'PO~PCqO!m#oa!o#oa#S#oa#p#qX&s#oa!x#oa#O#oaw#oa~OT#oaz#oa!S#oa!b#oa!v#oa!y#oa#W#oa#`#oa#a#oa#s#oa#z#oa#{#oa#|#oa#}#oa$O#oa$Q#oa$R#oa$S#oa$T#oa$U#oa$V#oa$W#oa$z#oa!}#oa#X#oa!n#oaV#oa!q#oa#u#oa#w#oa~PIpO!s'RO~O!x'UO#l'SO~O!x'VX#l'VX#p#qX#S'VX#U'VX#b'VX!o'VX#O'VXw'VX!m'VX&s'VX~O#S'YO~P*kO!m$Xa&s$Xa!x$Xa!n$Xa~PCqO!m$Ya&s$Ya!x$Ya!n$Ya~PCqO!m$Za&s$Za!x$Za!n$Za~PCqO!m$[a&s$[a!x$[a!n$[a~PCqO!o!{O!y!}O#W!zO#`!|O#a!|O#s#PO$z#dOT$[a!S$[a!b$[a!m$[a!v$[a#S$[a#z$[a#{$[a#|$[a#}$[a$O$[a$Q$[a$R$[a$S$[a$T$[a$U$[a$V$[a$W$[a&s$[a!x$[a!n$[a~Oz#RO~PNyO!m$_a&s$_a!x$_a!n$_a~PCqO!y!}O!}$fX#X$fX~O!}'^O#X'ZX~O#X'`O~O!s$kO#S'aO~O]'cO~O!s'eO~O!s'fO~O$l'gO~O!`'mO#S'kO#U'lO#b'jO$drO!x'XP~P0aO!^'sO!oXO!q'rO~O!s'uO!y$hO~O!y$hO#S'wO~O!y$hO#S'yO~O#u'zO!m$sX!}$sX&s$sX~O!}'{O!m'bX&s'bX~O!m#cO&s#cO~O!q(PO#O(OO~O!m$ka&s$ka!x$ka!n$ka~PCqOl(ROw(SO!o(TO!y!}O~O!o!{O!y!}O#W!zO#`!|O#a!|O#s#PO~OT$yaz$ya!S$ya!b$ya!m$ya!v$ya#S$ya#z$ya#{$ya#|$ya#}$ya$O$ya$Q$ya$R$ya$S$ya$T$ya$U$ya$V$ya$W$ya$z$ya&s$ya!x$ya!}$ya#O$ya#X$ya!n$ya!q$yaV$ya#u$ya#w$ya~P!'WO!m$|a&s$|a!x$|a!n$|a~PCqO#W([O#`(YO#a(YO&r(ZOR&gX!o&gX#b&gX#e&gX&q&gX'f&gX~O'f(_O~P8lO!q(`O~PhO!o(cO!q(dO~O!q(`O&s(gO~PhO!a(kO~O!m(lO~P9yOZ(wOn(xO~O!s(zO~OT6iOz6gO!S6jO!b6kO!v8sO!}({O#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m'jX&s'jX~P!'WO#u)PO~O!})QO!m'`X&s'`X~Ol(RO!o(TO~Ow(SO!o)WO!q)ZO~O!m#cO!oXO&s#cO~O!o%pO!s#yO~OV)aO!})_O!m'kX&s'kX~O])cOs)cO!s#gO#peO~O!o%pO!s#gO#p)hO~OT6iOz6gO!S6jO!b6kO!v8sO!})iO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m&|X&s&|X#O&|X~P!'WOl(ROw(SO!o(TO~O!i)oO&t)oO~OT8vOz8tO!S8wO!b8xO!q)pO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#X)rO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WO!n)rO~PCqOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x'TX!}'TX~P!'WOT'VXz'VX!S'VX!b'VX!o'VX!v'VX!y'VX#S'VX#W'VX#`'VX#a'VX#p#qX#s'VX#z'VX#{'VX#|'VX#}'VX$O'VX$Q'VX$R'VX$S'VX$T'VX$U'VX$V'VX$W'VX$z'VX~O!q)tO!x'VX!}'VX~P!5xO!x#iX!}#iX~P>UO!})vO!x'SX~O!x)xO~O$z#dOT#yiz#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi$W#yi&s#yi!x#yi!}#yi#O#yi#X#yi!n#yi!q#yiV#yi#u#yi#w#yi~P!'WOz#RO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi&s#yi!x#yi!n#yi~P!'WOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi&s#yi!x#yi!n#yi~P!'WOT#TOz#RO!b#VO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dO!S#yi!m#yi&s#yi!x#yi!n#yi~P!'WOT#TOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dO!S#yi!b#yi!m#yi&s#yi!x#yi!n#yi~P!'WOz#RO#S#QO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#z#yi#{#yi&s#yi!x#yi!n#yi~P!'WOz#RO#S#QO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#z#yi#{#yi#|#yi&s#yi!x#yi!n#yi~P!'WOz#RO#S#QO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#z#yi#{#yi#|#yi#}#yi&s#yi!x#yi!n#yi~P!'WOz#RO#S#QO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#z#yi#{#yi#|#yi#}#yi$O#yi&s#yi!x#yi!n#yi~P!'WOz#RO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi&s#yi!x#yi!n#yi~P!'WOz#RO$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi&s#yi!x#yi!n#yi~P!'WOz#RO$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi&s#yi!x#yi!n#yi~P!'WOz#RO$T#`O$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi&s#yi!x#yi!n#yi~P!'WOz#RO$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi&s#yi!x#yi!n#yi~P!'WOz#RO$S#_O$T#`O$V#bO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi&s#yi!x#yi!n#yi~P!'WOz#RO$W#bO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi&s#yi!x#yi!n#yi~P!'WO_)yO~P9yO!x)|O~O#S*PO~P9yOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}#Ta#X#Ta#O#Ta!m#Ta&s#Ta!x#Ta!n#TaV#Ta!q#Ta~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}'Pa#X'Pa#O'Pa!m'Pa&s'Pa!x'Pa!n'PaV'Pa!q'Pa~P!'WO#S#oO#U#nO!}&WX#X&WX~P9yO!}&wO#X'Oa~O#X*SO~OT6iOz6gO!S6jO!b6kO!v8sO!}*UO#O*TO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!x'QX~P!'WO!}*UO!x'QX~O!x*WO~O!m#oi!o#oi#S#oi#p#qX&s#oi!x#oi#O#oiw#oi~OT#oiz#oi!S#oi!b#oi!v#oi!y#oi#W#oi#`#oi#a#oi#s#oi#z#oi#{#oi#|#oi#}#oi$O#oi$Q#oi$R#oi$S#oi$T#oi$U#oi$V#oi$W#oi$z#oi!}#oi#X#oi!n#oiV#oi!q#oi#u#oi#w#oi~P#*zO#l'SO!x#ka#S#ka#U#ka#b#ka!o#ka#O#kaw#ka!m#ka&s#ka~OPgOQ|OU^OW}O[4OOo5xOs#hOx3zOy3zO}`O!O]O!Q2^O!R}O!T4UO!U3|O!V3|O!Y2`O!c3xO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T4SO$]4QO$^4SO$aqO$z2_O${!OO$}}O%O}O%V|O'g{O~O#l#oa#U#oa#b#oa~PIpOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#Pi!S#Pi!b#Pi!m#Pi&s#Pi!x#Pi!n#Pi~P!'WOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#vi!S#vi!b#vi!m#vi&s#vi!x#vi!n#vi~P!'WO!m#xi&s#xi!x#xi!n#xi~PCqO!s#gO#peO!}&^X#X&^X~O!}'^O#X'Za~O!s'uO~Ow(SO!o)WO!q*fO~O!s*jO~O#S*lO#U*mO#b*kO#l'SO~O#S*lO#U*mO#b*kO$drO~P0aO#u*oO!x$cX!}$cX~O#U*mO#b*kO~O#b*pO~O#b*rO~P0aO!}*sO!x'XX~O!x*uO~O!y*wO~O!^*{O!oXO!q*zO~O!q*}O!o'ci!m'ci&s'ci~O!q+QO#O+PO~O#b$nO!m&eX!}&eX&s&eX~O!}'{O!m'ba&s'ba~OT$kiz$ki!S$ki!b$ki!m$ki!o$ki!v$ki!y$ki#S$ki#W$ki#`$ki#a$ki#s$ki#u#fa#w#fa#z$ki#{$ki#|$ki#}$ki$O$ki$Q$ki$R$ki$S$ki$T$ki$U$ki$V$ki$W$ki$z$ki&s$ki!x$ki!}$ki#O$ki#X$ki!n$ki!q$kiV$ki~OS+^O]+aOm+^Os$aO!^+dO!_+^O!`+^O!n+hO#b$nO$aqO$drO~P0aO!s+lO~O#W+nO#`+mO#a+mO~O!s+pO#b+pO$}+pO%T+oO~O!n+qO~PCqOc%XXd%XXh%XXj%XXf%XXg%XXe%XX~PhOc+uOd+sOP%WiQ%WiS%WiU%WiW%WiX%Wi[%Wi]%Wi^%Wi`%Wia%Wib%Wik%Wim%Wio%Wip%Wiq%Wis%Wit%Wiu%Wiv%Wix%Wiy%Wi|%Wi}%Wi!O%Wi!P%Wi!Q%Wi!R%Wi!T%Wi!U%Wi!V%Wi!W%Wi!X%Wi!Y%Wi!Z%Wi![%Wi!]%Wi!^%Wi!`%Wi!a%Wi!c%Wi!m%Wi!o%Wi!s%Wi!y%Wi#W%Wi#b%Wi#d%Wi#e%Wi#p%Wi$T%Wi$]%Wi$^%Wi$a%Wi$d%Wi$l%Wi$z%Wi${%Wi$}%Wi%O%Wi%V%Wi&p%Wi'g%Wi&t%Wi!n%Wih%Wij%Wif%Wig%WiY%Wi_%Wii%Wie%Wi~Oc+yOd+vOh+xO~OY+zO_+{O!n,OO~OY+zO_+{Oi%^X~Oi,QO~Oj,RO~O!m,TO~P9yO!m,VO~Of,WO~OT6iOV,XOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO~P!'WOg,YO~O!y,ZO~OZ(wOn(xOP%liQ%liS%liU%liW%liX%li[%li]%li^%li`%lia%lib%lik%lim%lio%lip%liq%lis%lit%liu%liv%lix%liy%li|%li}%li!O%li!P%li!Q%li!R%li!T%li!U%li!V%li!W%li!X%li!Y%li!Z%li![%li!]%li!^%li!`%li!a%li!c%li!m%li!o%li!s%li!y%li#W%li#b%li#d%li#e%li#p%li$T%li$]%li$^%li$a%li$d%li$l%li$z%li${%li$}%li%O%li%V%li&p%li'g%li&t%li!n%lic%lid%lih%lij%lif%lig%liY%li_%lii%lie%li~O#u,_O~O!}({O!m%da&s%da~O!x,bO~O!s%dO!m&dX!}&dX&s&dX~O!})QO!m'`a&s'`a~OS+^OY,iOm+^Os$aO!^+dO!_+^O!`+^O$aqO$drO~O!n,lO~P#JwO!o)WO~O!o%pO!s'RO~O!s#gO#peO!m&nX!}&nX&s&nX~O!})_O!m'ka&s'ka~O!s,rO~OV,sO!n%|X!}%|X~O!},uO!n'lX~O!n,wO~O!m&UX!}&UX&s&UX#O&UX~P9yO!})iO!m&|a&s&|a#O&|a~Oz#RO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT!uq!S!uq!b!uq!m!uq!v!uq&s!uq!x!uq!n!uq~P!'WO!n,|O~PCqOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#ia!}#ia~P!'WO!x&YX!}&YX~PAOO!})vO!x'Sa~O#O-QO~O!}-RO!n&{X~O!n-TO~O!x-UO~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}#Vi#X#Vi~P!'WO!x&XX!}&XX~P9yO!}*UO!x'Qa~O!x-[O~OT#jqz#jq!S#jq!b#jq!m#jq!v#jq#S#jq#u#jq#w#jq#z#jq#{#jq#|#jq#}#jq$O#jq$Q#jq$R#jq$S#jq$T#jq$U#jq$V#jq$W#jq$z#jq&s#jq!x#jq!}#jq#O#jq#X#jq!n#jq!q#jqV#jq~P!'WO#l#oi#U#oi#b#oi~P#*zOz#RO!v!yO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT#Pq!S#Pq!b#Pq!m#Pq&s#Pq!x#Pq!n#Pq~P!'WO#u-dO!x$ca!}$ca~O#U-fO#b-eO~O#b-gO~O#S-hO#U-fO#b-eO#l'SO~O#b-jO#l'SO~O#u-kO!x$ha!}$ha~O!`'mO#S'kO#U'lO#b'jO$drO!x&_X!}&_X~P0aO!}*sO!x'Xa~O!oXO#l'SO~O#S-pO#b-oO!x'[P~O!oXO!q-rO~O!q-uO!o'cq!m'cq&s'cq~O!^-wO!oXO!q-rO~O!q-{O#O-zO~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m$si!}$si&s$si~P!'WO!m$jq&s$jq!x$jq!n$jq~PCqO#O-zO#l'SO~O!}-|Ow']X!o']X!m']X&s']X~O#b$nO#l'SO~OS+^O].ROm+^Os$aO!_+^O!`+^O#b$nO$aqO$drO~P0aOS+^O].ROm+^Os$aO!_+^O!`+^O#b$nO$aqO~P0aOS+^O]+aOm+^Os$aO!^+dO!_+^O!`+^O!n.ZO#b$nO$aqO$drO~P0aO!s.^O~O!s._O#b._O$}._O%T+oO~O$}.`O~O#X.aO~Oc%Xad%Xah%Xaj%Xaf%Xag%Xae%Xa~PhOc.dOd+sOP%WqQ%WqS%WqU%WqW%WqX%Wq[%Wq]%Wq^%Wq`%Wqa%Wqb%Wqk%Wqm%Wqo%Wqp%Wqq%Wqs%Wqt%Wqu%Wqv%Wqx%Wqy%Wq|%Wq}%Wq!O%Wq!P%Wq!Q%Wq!R%Wq!T%Wq!U%Wq!V%Wq!W%Wq!X%Wq!Y%Wq!Z%Wq![%Wq!]%Wq!^%Wq!`%Wq!a%Wq!c%Wq!m%Wq!o%Wq!s%Wq!y%Wq#W%Wq#b%Wq#d%Wq#e%Wq#p%Wq$T%Wq$]%Wq$^%Wq$a%Wq$d%Wq$l%Wq$z%Wq${%Wq$}%Wq%O%Wq%V%Wq&p%Wq'g%Wq&t%Wq!n%Wqh%Wqj%Wqf%Wqg%WqY%Wq_%Wqi%Wqe%Wq~Oc.iOd+vOh.hO~O!q(`O~OP6]OQ|OU^OW}O[:fOo>ROs#hOx:dOy:dO}`O!O]O!Q:kO!R}O!T:jO!U:eO!V:eO!Y:oO!c8gO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T:hO$]:gO$^:hO$aqO$z:mO${!OO$}}O%O}O%V|O'g{O~O!m.lO!q.lO~OY+zO_+{O!n.nO~OY+zO_+{Oi%^a~O!x.rO~P>UO!m.tO~O!m.tO~P9yOQ|OW}O!R}O$}}O%O}O%V|O'g{O~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m&ka!}&ka&s&ka~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m$qi!}$qi&s$qi~P!'WOS+^Om+^Os$aO!_+^O!`+^O$aqO$drO~OY/PO~P$?VOS+^Om+^Os$aO!_+^O!`+^O$aqO~O!s/QO~O!n/SO~P#JwOw(SO!o)WO#l'SO~OV/VO!m&na!}&na&s&na~O!})_O!m'ki&s'ki~O!s/XO~OV/YO!n%|a!}%|a~O]/[Os/[O!s#gO#peO!n&oX!}&oX~O!},uO!n'la~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m&Ua!}&Ua&s&Ua#O&Ua~P!'WOz#RO#S#QO#z#SO#{#WO#|#XO#}#YO$O#ZO$Q#]O$R#^O$S#_O$T#`O$U#aO$V#bO$W#bO$z#dOT!uy!S!uy!b!uy!m!uy!v!uy&s!uy!x!uy!n!uy~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#hi!}#hi~P!'WO_)yO!n&VX!}&VX~P9yO!}-RO!n&{a~OT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}#Vq#X#Vq~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#[i!}#[i~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#O/cO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!x&Xa!}&Xa~P!'WO#u/iO!x$ci!}$ci~O#b/jO~O#U/lO#b/kO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$ci!}$ci~P!'WO#u/mO!x$hi!}$hi~O!}/oO!x'[X~O#b/qO~O!x/rO~O!oXO!q/uO~O#l'SO!o'cy!m'cy&s'cy~O!m$jy&s$jy!x$jy!n$jy~PCqO#O/xO#l'SO~O!s#gO#peOw&aX!o&aX!}&aX!m&aX&s&aX~O!}-|Ow']a!o']a!m']a&s']a~OU$PO]0QO!R$PO!s$OO!v#}O#b$nO#p2XO~P$?uO!m#cO!o0VO&s#cO~O#X0YO~Oh0_O~OT:tOz:pO!S:vO!b:xO!m0`O!q0`O!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO~P!'WOY%]a_%]a!n%]ai%]a~PhO!x0bO~O!x0bO~P>UO!m0dO~OT6iOz6gO!S6jO!b6kO!v8sO!x0fO#O0eO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO~P!'WO!x0fO~O!x0gO#b0hO#l'SO~O!x0iO~O!s0jO~O!m#cO#u0lO&s#cO~O!s0mO~O!})_O!m'kq&s'kq~O!s0nO~OV0oO!n%}X!}%}X~OT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!n!|i!}!|i~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$cq!}$cq~P!'WO#u0vO!x$cq!}$cq~O#b0wO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$hq!}$hq~P!'WO#S0zO#b0yO!x&`X!}&`X~O!}/oO!x'[a~O#l'SO!o'c!R!m'c!R&s'c!R~O!oXO!q1PO~O!m$j!R&s$j!R!x$j!R!n$j!R~PCqO#O1RO#l'SO~OP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!n1^O!s1YO!y[O#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$z:nO${!OO~P$;lOh1_O~OY%[i_%[i!n%[ii%[i~PhOY%]i_%]i!n%]ii%]i~PhO!x1bO~O!x1bO~P>UO!x1eO~O!m#cO#u1iO&s#cO~O$}1jO%V1jO~O!s1kO~OV1lO!n%}a!}%}a~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#]i!}#]i~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$cy!}$cy~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$hy!}$hy~P!'WO#b1nO~O!}/oO!x'[i~O!m$j!Z&s$j!Z!x$j!Z!n$j!Z~PCqOT:uOz:qO!S:wO!b:yO!v=nO#S#QO#z:sO#{:{O#|:}O#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dO~P!'WOV1uO{1tO~P!5xOV1uO{1tOT&}Xz&}X!S&}X!b&}X!o&}X!v&}X!y&}X#S&}X#W&}X#`&}X#a&}X#s&}X#u&}X#w&}X#z&}X#{&}X#|&}X#}&}X$O&}X$Q&}X$R&}X$S&}X$T&}X$U&}X$V&}X$W&}X$z&}X~OP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!n1xO!s1YO!y[O#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$z:nO${!OO~P$;lOY%[q_%[q!n%[qi%[q~PhO!x1zO~O!x%gi~PCqOe1{O~O$}1|O%V1|O~O!s2OO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x$c!R!}$c!R~P!'WO!m$j!c&s$j!c!x$j!c!n$j!c~PCqO!s2QO~O!`2SO!s2RO~O!s2VO!m$xi&s$xi~O!s'WO~O!s*]O~OT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$ka#u$ka#w$ka&s$ka!x$ka!n$ka!q$ka#X$ka!}$ka~P!'WO#S2]O~P*kO$l$tO~P#.YOT6iOz6gO!S6jO!b6kO!v8sO#O2[O#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m'PX&s'PX!x'PX!n'PX~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#O3uO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}'PX#X'PX#u'PX#w'PX!m'PX&s'PX!x'PX!n'PXV'PX!q'PX~P!'WO#S3dO~P#.YOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$Xa#u$Xa#w$Xa&s$Xa!x$Xa!n$Xa!q$Xa#X$Xa!}$Xa~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$Ya#u$Ya#w$Ya&s$Ya!x$Ya!n$Ya!q$Ya#X$Ya!}$Ya~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$Za#u$Za#w$Za&s$Za!x$Za!n$Za!q$Za#X$Za!}$Za~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$[a#u$[a#w$[a&s$[a!x$[a!n$[a!q$[a#X$[a!}$[a~P!'WOz2aO#u$[a#w$[a!q$[a#X$[a!}$[a~PNyOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$_a#u$_a#w$_a&s$_a!x$_a!n$_a!q$_a#X$_a!}$_a~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$|a#u$|a#w$|a&s$|a!x$|a!n$|a!q$|a#X$|a!}$|a~P!'WOz2aO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi#u#yi#w#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOT2cOz2aO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!S#yi!m#yi#u#yi#w#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOT2cOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!S#yi!b#yi!m#yi#u#yi#w#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO#S#QO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi#z#yi#{#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO#S#QO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi#z#yi#{#yi#|#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO#S#QO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO#S#QO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$T2nO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$S2mO$T2nO$V2pO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOz2aO$W2pO$z#dOT#yi!S#yi!b#yi!m#yi!v#yi#S#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi&s#yi!x#yi!n#yi!q#yi#X#yi!}#yi~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m#Ta#u#Ta#w#Ta&s#Ta!x#Ta!n#Ta!q#Ta#X#Ta!}#Ta~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m'Pa#u'Pa#w'Pa&s'Pa!x'Pa!n'Pa!q'Pa#X'Pa!}'Pa~P!'WOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#Pi!S#Pi!b#Pi!m#Pi#u#Pi#w#Pi&s#Pi!x#Pi!n#Pi!q#Pi#X#Pi!}#Pi~P!'WOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#vi!S#vi!b#vi!m#vi#u#vi#w#vi&s#vi!x#vi!n#vi!q#vi#X#vi!}#vi~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m#xi#u#xi#w#xi&s#xi!x#xi!n#xi!q#xi#X#xi!}#xi~P!'WOz2aO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT!uq!S!uq!b!uq!m!uq!v!uq#u!uq#w!uq&s!uq!x!uq!n!uq!q!uq#X!uq!}!uq~P!'WOz2aO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT#Pq!S#Pq!b#Pq!m#Pq#u#Pq#w#Pq&s#Pq!x#Pq!n#Pq!q#Pq#X#Pq!}#Pq~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$jq#u$jq#w$jq&s$jq!x$jq!n$jq!q$jq#X$jq!}$jq~P!'WOz2aO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dOT!uy!S!uy!b!uy!m!uy!v!uy#u!uy#w!uy&s!uy!x!uy!n!uy!q!uy#X!uy!}!uy~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$jy#u$jy#w$jy&s$jy!x$jy!n$jy!q$jy#X$jy!}$jy~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$j!R#u$j!R#w$j!R&s$j!R!x$j!R!n$j!R!q$j!R#X$j!R!}$j!R~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$j!Z#u$j!Z#w$j!Z&s$j!Z!x$j!Z!n$j!Z!q$j!Z#X$j!Z!}$j!Z~P!'WOT2cOz2aO!S2dO!b2eO!v4WO#S#QO#z2bO#{2fO#|2gO#}2hO$O2iO$Q2kO$R2lO$S2mO$T2nO$U2oO$V2pO$W2pO$z#dO!m$j!c#u$j!c#w$j!c&s$j!c!x$j!c!n$j!c!q$j!c#X$j!c!}$j!c~P!'WOP6]OU^O[4POo8^Os#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#S3vO#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OO~P$;lOP6]OU^O[4POo8^Os#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OO~P$;lO#u2uO#w2vO!q&zX#X&zX!}&zX~P0rOP6]OU^O[4POo8^Or2wOs#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#S2tO#U2sO#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OOT#xXz#xX!S#xX!b#xX!m#xX!o#xX!v#xX#`#xX#a#xX#s#xX#u#xX#w#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX&s#xX!x#xX!n#xX!q#xX#X#xX!}#xX~P$;lOP6]OU^O[4POo8^Or4xOs#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#S4uO#U4tO#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OOT#xXz#xX!S#xX!b#xX!o#xX!v#xX!}#xX#O#xX#X#xX#`#xX#a#xX#s#xX#u#xX#w#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX!m#xX&s#xX!x#xX!n#xXV#xX!q#xX~P$;lO!q3PO~P>UO!q5}O#O3gO~OT8vOz8tO!S8wO!b8xO!q3hO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WO!q6OO#O3kO~O!q6PO#O3oO~O#O3oO#l'SO~O#O3pO#l'SO~O#O3sO#l'SO~OP6]OU^O[4POo8^Os#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$l$tO$z4bO${!OO~P$;lOP6]OU^O[4POo8^Os#hOx3{Oy3{O}`O!O]O!Q4aO!T4VO!U3}O!V3}O!Y4cO!c3yO!s#gO!y[O#S5eO#W_O#bhO#daO#ebO#peO$T4TO$]4RO$^4TO$aqO$z4bO${!OO~P$;lOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$Xa#O$Xa#X$Xa#u$Xa#w$Xa!m$Xa&s$Xa!x$Xa!n$XaV$Xa!q$Xa~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$Ya#O$Ya#X$Ya#u$Ya#w$Ya!m$Ya&s$Ya!x$Ya!n$YaV$Ya!q$Ya~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$Za#O$Za#X$Za#u$Za#w$Za!m$Za&s$Za!x$Za!n$ZaV$Za!q$Za~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$[a#O$[a#X$[a#u$[a#w$[a!m$[a&s$[a!x$[a!n$[aV$[a!q$[a~P!'WOz4dO!}$[a#O$[a#X$[a#u$[a#w$[aV$[a!q$[a~PNyOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$_a#O$_a#X$_a#u$_a#w$_a!m$_a&s$_a!x$_a!n$_aV$_a!q$_a~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$|a#O$|a#X$|a#u$|a#w$|a!m$|a&s$|a!x$|a!n$|aV$|a!q$|a~P!'WOz4dO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!}#yi#O#yi#X#yi#u#yi#w#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT4fOz4dO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!S#yi!}#yi#O#yi#X#yi#u#yi#w#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT4fOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!S#yi!b#yi!}#yi#O#yi#X#yi#u#yi#w#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO#S#QO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi#z#yi#{#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO#S#QO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO#S#QO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO#S#QO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$T4qO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$S4pO$T4qO$V4sO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz4dO$W4sO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#u#yi#w#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}#Ta#O#Ta#X#Ta#u#Ta#w#Ta!m#Ta&s#Ta!x#Ta!n#TaV#Ta!q#Ta~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}'Pa#O'Pa#X'Pa#u'Pa#w'Pa!m'Pa&s'Pa!x'Pa!n'PaV'Pa!q'Pa~P!'WOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#Pi!S#Pi!b#Pi!}#Pi#O#Pi#X#Pi#u#Pi#w#Pi!m#Pi&s#Pi!x#Pi!n#PiV#Pi!q#Pi~P!'WOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#vi!S#vi!b#vi!}#vi#O#vi#X#vi#u#vi#w#vi!m#vi&s#vi!x#vi!n#viV#vi!q#vi~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}#xi#O#xi#X#xi#u#xi#w#xi!m#xi&s#xi!x#xi!n#xiV#xi!q#xi~P!'WOz4dO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT!uq!S!uq!b!uq!v!uq!}!uq#O!uq#X!uq#u!uq#w!uq!m!uq&s!uq!x!uq!n!uqV!uq!q!uq~P!'WOz4dO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT#Pq!S#Pq!b#Pq!}#Pq#O#Pq#X#Pq#u#Pq#w#Pq!m#Pq&s#Pq!x#Pq!n#PqV#Pq!q#Pq~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$jq#O$jq#X$jq#u$jq#w$jq!m$jq&s$jq!x$jq!n$jqV$jq!q$jq~P!'WOz4dO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dOT!uy!S!uy!b!uy!v!uy!}!uy#O!uy#X!uy#u!uy#w!uy!m!uy&s!uy!x!uy!n!uyV!uy!q!uy~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$jy#O$jy#X$jy#u$jy#w$jy!m$jy&s$jy!x$jy!n$jyV$jy!q$jy~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$j!R#O$j!R#X$j!R#u$j!R#w$j!R!m$j!R&s$j!R!x$j!R!n$j!RV$j!R!q$j!R~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$j!Z#O$j!Z#X$j!Z#u$j!Z#w$j!Z!m$j!Z&s$j!Z!x$j!Z!n$j!ZV$j!Z!q$j!Z~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$j!c#O$j!c#X$j!c#u$j!c#w$j!c!m$j!c&s$j!c!x$j!c!n$j!cV$j!c!q$j!c~P!'WO#S5wO~P#.YO!y$hO#S5{O~O!x4ZO#l'SO~O!y$hO#S5|O~OT4fOz4dO!S4gO!b4hO!v6TO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!}$ka#O$ka#X$ka#u$ka#w$ka!m$ka&s$ka!x$ka!n$kaV$ka!q$ka~P!'WOT4fOz4dO!S4gO!b4hO!v6TO#O5vO#S#QO#z4eO#{4iO#|4jO#}4kO$O4lO$Q4nO$R4oO$S4pO$T4qO$U4rO$V4sO$W4sO$z#dO!m'PX#u'PX#w'PX&s'PX!x'PX!n'PX!q'PX#X'PX!}'PX~P!'WO#u4vO#w4wO!}&zX#O&zX#X&zXV&zX!q&zX~P0rO!q5QO~P>UO!q8bO#O5hO~OT8vOz8tO!S8wO!b8xO!q5iO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WO!q8cO#O5lO~O!q8dO#O5pO~O#O5pO#l'SO~O#O5qO#l'SO~O#O5tO#l'SO~O$l$tO~P9yOo5zOs$lO~O#S7oO~P9yOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$Xa#O$Xa#X$Xa!m$Xa&s$Xa!x$Xa!n$XaV$Xa!q$Xa~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$Ya#O$Ya#X$Ya!m$Ya&s$Ya!x$Ya!n$YaV$Ya!q$Ya~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$Za#O$Za#X$Za!m$Za&s$Za!x$Za!n$ZaV$Za!q$Za~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$[a#O$[a#X$[a!m$[a&s$[a!x$[a!n$[aV$[a!q$[a~P!'WOz6gO!}$[a#O$[a#X$[aV$[a!q$[a~PNyOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$_a#O$_a#X$_a!m$_a&s$_a!x$_a!n$_aV$_a!q$_a~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$ka#O$ka#X$ka!m$ka&s$ka!x$ka!n$kaV$ka!q$ka~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$|a#O$|a#X$|a!m$|a&s$|a!x$|a!n$|aV$|a!q$|a~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO!}7sO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x'jX~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO!}7uO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x&|X~P!'WOz6gO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!}#yi#O#yi#X#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT6iOz6gO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!S#yi!}#yi#O#yi#X#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOT6iOz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!S#yi!b#yi!}#yi#O#yi#X#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO#S#QO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#z#yi#{#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO#S#QO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#z#yi#{#yi#|#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO#S#QO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#z#yi#{#yi#|#yi#}#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO#S#QO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$T6tO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$S6sO$T6tO$V6vO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WOz6gO$W6vO$z#dOT#yi!S#yi!b#yi!v#yi!}#yi#O#yi#S#yi#X#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi!m#yi&s#yi!x#yi!n#yiV#yi!q#yi~P!'WO#S7zO~P>UO!m#Ta&s#Ta!x#Ta!n#Ta~PCqO!m'Pa&s'Pa!x'Pa!n'Pa~PCqO#S;dO#U;cO!x&WX!}&WX~P9yO!}7lO!x'Oa~Oz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#Pi!S#Pi!b#Pi!}#Pi#O#Pi#X#Pi!m#Pi&s#Pi!x#Pi!n#PiV#Pi!q#Pi~P!'WOz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#vi!S#vi!b#vi!}#vi#O#vi#X#vi!m#vi&s#vi!x#vi!n#viV#vi!q#vi~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}#xi#O#xi#X#xi!m#xi&s#xi!x#xi!n#xiV#xi!q#xi~P!'WO!}7sO!x%da~O!x&UX!}&UX~P>UO!}7uO!x&|a~Oz6gO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT!uq!S!uq!b!uq!v!uq!}!uq#O!uq#X!uq!m!uq&s!uq!x!uq!n!uqV!uq!q!uq~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#Vi!}#Vi~P!'WOz6gO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT#Pq!S#Pq!b#Pq!}#Pq#O#Pq#X#Pq!m#Pq&s#Pq!x#Pq!n#PqV#Pq!q#Pq~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$jq#O$jq#X$jq!m$jq&s$jq!x$jq!n$jqV$jq!q$jq~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x&ka!}&ka~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x&Ua!}&Ua~P!'WOz6gO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dOT!uy!S!uy!b!uy!v!uy!}!uy#O!uy#X!uy!m!uy&s!uy!x!uy!n!uyV!uy!q!uy~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#Vq!}#Vq~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$jy#O$jy#X$jy!m$jy&s$jy!x$jy!n$jyV$jy!q$jy~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$j!R#O$j!R#X$j!R!m$j!R&s$j!R!x$j!R!n$j!RV$j!R!q$j!R~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$j!Z#O$j!Z#X$j!Z!m$j!Z&s$j!Z!x$j!Z!n$j!ZV$j!Z!q$j!Z~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!}$j!c#O$j!c#X$j!c!m$j!c&s$j!c!x$j!c!n$j!cV$j!c!q$j!c~P!'WO#S8[O~P9yO#O8ZO!m'PX&s'PX!x'PX!n'PXV'PX!q'PX~PGSO!y$hO#S8`O~O!y$hO#S8aO~O#u6zO#w6{O!}&zX#O&zX#X&zXV&zX!q&zX~P0rOr6|O#S#oO#U#nO!}#xX#O#xX#X#xXV#xX!q#xX~P2yOr;iO#S9XO#U9VOT#xXz#xX!S#xX!b#xX!m#xX!o#xX!q#xX!v#xX#`#xX#a#xX#s#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX!n#xX!}#xX~P9yOr9WO#S9WO#U9WOT#xXz#xX!S#xX!b#xX!o#xX!v#xX#`#xX#a#xX#s#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX~P9yOr9]O#S;dO#U;cOT#xXz#xX!S#xX!b#xX!o#xX!q#xX!v#xX#`#xX#a#xX#s#xX#z#xX#{#xX#|#xX#}#xX$O#xX$Q#xX$R#xX$S#xX$U#xX$V#xX$W#xX#X#xX!x#xX!}#xX~P9yO$l$tO~P>UO!q7XO~P>UOT6iOz6gO!S6jO!b6kO!v8sO#O7iO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!x'PX!}'PX~P!'WOP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$z:nO${!OO~P$;lO!}7lO!x'OX~O#S9yO~P>UOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$Xa#X$Xa!x$Xa!}$Xa~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$Ya#X$Ya!x$Ya!}$Ya~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$Za#X$Za!x$Za!}$Za~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$[a#X$[a!x$[a!}$[a~P!'WOz8tO$z#dOT$[a!S$[a!b$[a!q$[a!v$[a#S$[a#z$[a#{$[a#|$[a#}$[a$O$[a$Q$[a$R$[a$S$[a$T$[a$U$[a$V$[a$W$[a#X$[a!x$[a!}$[a~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$_a#X$_a!x$_a!}$_a~P!'WO!q=dO#O7rO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$ka#X$ka!x$ka!}$ka~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$|a#X$|a!x$|a!}$|a~P!'WOT8vOz8tO!S8wO!b8xO!q7wO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WOz8tO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#X#yi!x#yi!}#yi~P!'WOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi#X#yi!x#yi!}#yi~P!'WOT8vOz8tO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!S#yi!q#yi#X#yi!x#yi!}#yi~P!'WOT8vOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!S#yi!b#yi!q#yi#X#yi!x#yi!}#yi~P!'WOz8tO#S#QO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#z#yi#{#yi#X#yi!x#yi!}#yi~P!'WOz8tO#S#QO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#z#yi#{#yi#|#yi#X#yi!x#yi!}#yi~P!'WOz8tO#S#QO$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#z#yi#{#yi#|#yi#}#yi#X#yi!x#yi!}#yi~P!'WOz8tO#S#QO$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#z#yi#{#yi#|#yi#}#yi$O#yi#X#yi!x#yi!}#yi~P!'WOz8tO$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi#X#yi!x#yi!}#yi~P!'WOz8tO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi#X#yi!x#yi!}#yi~P!'WOz8tO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi#X#yi!x#yi!}#yi~P!'WOz8tO$T9RO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi#X#yi!x#yi!}#yi~P!'WOz8tO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi#X#yi!x#yi!}#yi~P!'WOz8tO$S9QO$T9RO$V9TO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi#X#yi!x#yi!}#yi~P!'WOz8tO$W9TO$z#dOT#yi!S#yi!b#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi#X#yi!x#yi!}#yi~P!'WOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#Pi!S#Pi!b#Pi!q#Pi#X#Pi!x#Pi!}#Pi~P!'WOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#vi!S#vi!b#vi!q#vi#X#vi!x#vi!}#vi~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q#xi#X#xi!x#xi!}#xi~P!'WO!q=eO#O7|O~Oz8tO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT!uq!S!uq!b!uq!q!uq!v!uq#X!uq!x!uq!}!uq~P!'WOz8tO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT#Pq!S#Pq!b#Pq!q#Pq#X#Pq!x#Pq!}#Pq~P!'WO!q=iO#O8TO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$jq#X$jq!x$jq!}$jq~P!'WO#O8TO#l'SO~Oz8tO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dOT!uy!S!uy!b!uy!q!uy!v!uy#X!uy!x!uy!}!uy~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$jy#X$jy!x$jy!}$jy~P!'WO#O8UO#l'SO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$j!R#X$j!R!x$j!R!}$j!R~P!'WO#O8XO#l'SO~OT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$j!Z#X$j!Z!x$j!Z!}$j!Z~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!q$j!c#X$j!c!x$j!c!}$j!c~P!'WO#S:bO~P>UO#O:aO!q'PX!x'PX~PGSO$l$tO~P$8YOP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!s#gO!y[O#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$l$tO$z:nO${!OO~P$;lOo8_Os$lO~O#S<jO~P$8YOP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!s#gO!y[O#S<kO#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$z:nO${!OO~P$;lOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m$Xa!q$Xa!n$Xa!}$Xa~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m$Ya!q$Ya!n$Ya!}$Ya~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m$Za!q$Za!n$Za!}$Za~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m$[a!q$[a!n$[a!}$[a~P!'WOz:pO$z#dOT$[a!S$[a!b$[a!m$[a!q$[a!v$[a#S$[a#z$[a#{$[a#|$[a#}$[a$O$[a$Q$[a$R$[a$S$[a$T$[a$U$[a$V$[a$W$[a!n$[a!}$[a~P!'WOz:qO$z#dOT$[a!S$[a!b$[a!v$[a#S$[a#z$[a#{$[a#|$[a#}$[a$O$[a$Q$[a$R$[a$S$[a$T$[a$U$[a$V$[a$W$[a~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m$_a!q$_a!n$_a!}$_a~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m$ka!q$ka!n$ka!}$ka~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m$|a!q$|a!n$|a!}$|a~P!'WOz:pO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT#yi!S#yi!b#yi!m#yi!q#yi!v#yi!n#yi!}#yi~P!'WOz:qO#S#QO#z:sO#{:{O#|:}O#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT#yi!S#yi!b#yi!v#yi~P!'WOz:pO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT#yi!S#yi!b#yi!m#yi!q#yi!n#yi!}#yi~P!'WOz:qO!v=nO#S#QO#z:sO#{:{O#|:}O#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT#yi!S#yi!b#yi~P!'WOT:tOz:pO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!S#yi!m#yi!q#yi!n#yi!}#yi~P!'WOT:uOz:qO!b:yO!v=nO#S#QO#z:sO#{:{O#|:}O#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dO!S#yi~P!'WOT:tOz:pO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!S#yi!b#yi!m#yi!q#yi!n#yi!}#yi~P!'WOT:uOz:qO!v=nO#S#QO#z:sO#{:{O#|:}O#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dO!S#yi!b#yi~P!'WOz:pO#S#QO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT#yi!S#yi!b#yi!m#yi!q#yi!v#yi#z#yi#{#yi!n#yi!}#yi~P!'WOz:qO#S#QO#|:}O#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT#yi!S#yi!b#yi!v#yi#z#yi#{#yi~P!'WOz:pO#S#QO#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT#yi!S#yi!b#yi!m#yi!q#yi!v#yi#z#yi#{#yi#|#yi!n#yi!}#yi~P!'WOz:qO#S#QO#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT#yi!S#yi!b#yi!v#yi#z#yi#{#yi#|#yi~P!'WOz:pO#S#QO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT#yi!S#yi!b#yi!m#yi!q#yi!v#yi#z#yi#{#yi#|#yi#}#yi!n#yi!}#yi~P!'WOz:qO#S#QO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT#yi!S#yi!b#yi!v#yi#z#yi#{#yi#|#yi#}#yi~P!'WOz:pO#S#QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT#yi!S#yi!b#yi!m#yi!q#yi!v#yi#z#yi#{#yi#|#yi#}#yi$O#yi!n#yi!}#yi~P!'WOz:qO#S#QO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT#yi!S#yi!b#yi!v#yi#z#yi#{#yi#|#yi#}#yi$O#yi~P!'WOz:pO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT#yi!S#yi!b#yi!m#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi!n#yi!}#yi~P!'WOz:qO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT#yi!S#yi!b#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi~P!'WOz:pO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT#yi!S#yi!b#yi!m#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi!n#yi!}#yi~P!'WOz:qO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT#yi!S#yi!b#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi~P!'WOz:pO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT#yi!S#yi!b#yi!m#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi!n#yi!}#yi~P!'WOz:qO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT#yi!S#yi!b#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi~P!'WOz:pO$T;[O$V;`O$W;`O$z#dOT#yi!S#yi!b#yi!m#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi!n#yi!}#yi~P!'WOz:qO$T;]O$V;aO$W;aO$z#dOT#yi!S#yi!b#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$U#yi~P!'WOz:pO$V;`O$W;`O$z#dOT#yi!S#yi!b#yi!m#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi!n#yi!}#yi~P!'WOz:qO$V;aO$W;aO$z#dOT#yi!S#yi!b#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi~P!'WOz:pO$S;YO$T;[O$V;`O$W;`O$z#dOT#yi!S#yi!b#yi!m#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi!n#yi!}#yi~P!'WOz:qO$S;ZO$T;]O$V;aO$W;aO$z#dOT#yi!S#yi!b#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$U#yi~P!'WOz:pO$W;`O$z#dOT#yi!S#yi!b#yi!m#yi!q#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi!n#yi!}#yi~P!'WOz:qO$W;aO$z#dOT#yi!S#yi!b#yi!v#yi#S#yi#z#yi#{#yi#|#yi#}#yi$O#yi$Q#yi$R#yi$S#yi$T#yi$U#yi$V#yi~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x#Ta!}#Ta!q#Ta#X#Ta~P!'WOT8vOz8tO!S8wO!b8xO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO!x'Pa!}'Pa!q'Pa#X'Pa~P!'WOz:pO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT#Pi!S#Pi!b#Pi!m#Pi!q#Pi!n#Pi!}#Pi~P!'WOz:qO!v=nO#S#QO#z:sO#{:{O#|:}O#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT#Pi!S#Pi!b#Pi~P!'WOz:pO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT#vi!S#vi!b#vi!m#vi!q#vi!n#vi!}#vi~P!'WOz:qO!v=nO#S#QO#z:sO#{:{O#|:}O#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT#vi!S#vi!b#vi~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m#xi!q#xi!n#xi!}#xi~P!'WOz:pO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT!uq!S!uq!b!uq!m!uq!q!uq!v!uq!n!uq!}!uq~P!'WOz:qO#S#QO#z:sO#{:{O#|:}O#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT!uq!S!uq!b!uq!v!uq~P!'WOz:pO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT#Pq!S#Pq!b#Pq!m#Pq!q#Pq!n#Pq!}#Pq~P!'WOz:qO!v=nO#S#QO#z:sO#{:{O#|:}O#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT#Pq!S#Pq!b#Pq~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m$jq!q$jq!n$jq!}$jq~P!'WOz:pO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dOT!uy!S!uy!b!uy!m!uy!q!uy!v!uy!n!uy!}!uy~P!'WOz:qO#S#QO#z:sO#{:{O#|:}O#};PO$O;RO$Q;VO$R;XO$S;ZO$T;]O$U;_O$V;aO$W;aO$z#dOT!uy!S!uy!b!uy!v!uy~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m$jy!q$jy!n$jy!}$jy~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m$j!R!q$j!R!n$j!R!}$j!R~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m$j!Z!q$j!Z!n$j!Z!}$j!Z~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m$j!c!q$j!c!n$j!c!}$j!c~P!'WO#S=TO~P$8YOP6]OU^O[9WOo>SOs#hOx9WOy9WO}`O!O]O!Q:lO!T9WO!U9WO!V9WO!Y9WO!c8hO!s#gO!y[O#S=UO#W_O#bhO#daO#ebO#peO$T:iO$]9WO$^:iO$aqO$z:nO${!OO~P$;lOT6iOz6gO!S6jO!b6kO!v8sO#O=SO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO~P!'WOT6iOz6gO!S6jO!b6kO!v8sO#O=RO#S#QO#z6hO#{6lO#|6mO#}6nO$O6oO$Q6qO$R6rO$S6sO$T6tO$U6uO$V6vO$W6vO$z#dO!m'PX!q'PX!n'PX!}'PX~P!'WOT&zXz&zX!S&zX!b&zX!o&zX!q&zX!v&zX!y&zX#S&zX#W&zX#`&zX#a&zX#s&zX#z&zX#{&zX#|&zX#}&zX$O&zX$Q&zX$R&zX$S&zX$T&zX$U&zX$V&zX$W&zX$z&zX!}&zX~O#u9ZO#w9[O#X&zX!x&zX~P.8oO!y$hO#S=^O~O!q9hO~P>UO!y$hO#S=cO~O!q>OO#O9}O~OT8vOz8tO!S8wO!b8xO!q:OO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m#Ta!q#Ta!n#Ta!}#Ta~P!'WOT:tOz:pO!S:vO!b:xO!v=mO#S#QO#z:rO#{:zO#|:|O#};OO$O;QO$Q;UO$R;WO$S;YO$T;[O$U;^O$V;`O$W;`O$z#dO!m'Pa!q'Pa!n'Pa!}'Pa~P!'WO!q>PO#O:RO~O!q>QO#O:YO~O#O:YO#l'SO~O#O:ZO#l'SO~O#O:_O#l'SO~O#u;eO#w;gO!m&zX!n&zX~P.8oO#u;fO#w;hOT&zXz&zX!S&zX!b&zX!o&zX!v&zX!y&zX#S&zX#W&zX#`&zX#a&zX#s&zX#z&zX#{&zX#|&zX#}&zX$O&zX$Q&zX$R&zX$S&zX$T&zX$U&zX$V&zX$W&zX$z&zX~O!q;tO~P>UO!q;uO~P>UO!q>XO#O<oO~O!q>YO#O9WO~OT8vOz8tO!S8wO!b8xO!q<pO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WOT8vOz8tO!S8wO!b8xO!q<qO!v=ZO#S#QO#z8uO#{8yO#|8zO#}8{O$O8|O$Q9OO$R9PO$S9QO$T9RO$U9SO$V9TO$W9TO$z#dO~P!'WO!q>ZO#O<vO~O!q>[O#O<{O~O#O<{O#l'SO~O#O9WO#l'SO~O#O<|O#l'SO~O#O=PO#l'SO~O!y$hO#S=|O~Oo=[Os$lO~O!y$hO#S=}O~O!y$hO#S>UO~O!y$hO#S>VO~O!y$hO#S>WO~Oo={Os$lO~Oo>TOs$lO~Oo>SOs$lO~O%O$U$}$d!d$V#b%V#e'g!s#d~\",\n  goto: \"%&y'mPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP'nP'uPP'{(OPPP(hP(OP(O*ZP*ZPP2W:j:mPP*Z:sBpPBsPBsPP:sCSCVCZ:s:sPPPC^PP:sK^!$S!$S:s!$WP!$W!$W!%UP!.]!7pP!?oP*ZP*Z*ZPPPPP!?rPPPPPPP*Z*Z*Z*ZPP*Z*ZP!E]!GRP!GV!Gy!GR!GR!HP*Z*ZP!HY!Hl!Ib!J`!Jd!J`!Jo!J}!J}!KV!KY!KY*ZPP*ZPP!K^#%[#%[#%`P#%fP(O#%j(O#&S#&V#&V#&](O#&`(O(O#&f#&i(O#&r#&u(O(O(O(O(O#&x(O(O(O(O(O(O(O(O(O#&{!KR(O(O#'_#'o#'r(O(OP#'u#'|#(S#(o#(y#)P#)Z#)b#)h#*d#4X#5T#5Z#5a#5k#5q#5w#6]#6c#6i#6o#6u#6{#7R#7]#7g#7m#7s#7}PPPPPPPP#8T#8X#8}#NO#NR#N]$(f$(r$)X$)_$)b$)e$)k$,X$5v$>_$>b$>h$>k$>n$>w$>{$?X$?k$Bk$CO$C{$K{PP%%y%%}%&Z%&p%&vQ!nQT!qV!rQUOR%x!mRVO}!hPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1a|!hPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1aQ%^!ZQ%g!aQ%l!eQ'd$dQ'q$iQ)[%kQ*y'tQ,](xU-n*v*x+OQ.W+cQ.{,[S/t-s-tQ0T.SS0}/s/wQ1V0RQ1o1OR2P1p0u!OPVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;u<j<k<o<p<q<v<{<|=P=R=S=T=U=Z=m=n0t!OPVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;u<j<k<o<p<q<v<{<|=P=R=S=T=U=Z=m=nQ#j]Q$}!PQ%O!QQ%P!RQ,S(kQ.b+sR.f+vR&q#jQ)z&pR/a-R0uhPVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;u<j<k<o<p<q<v<{<|=P=R=S=T=U=Z=m=nR#l^k#p_j#k#s&s&w3x3y7l8f8g8h8iR#u`T&|#t'OR-Y*U0thPVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;u<j<k<o<p<q<v<{<|=P=R=S=T=U=Z=m=nR#va-r#OZ#f#m#w$V$W$X$Y$Z$[$u$v%W%Y%[%`%s%|&O&Q&U&^&_&`&a&b&c&d&e&f&g&h&i&j&k&l&m&u&v&{'X'Z'[(](p)q)s)u*O*[*^+S+V,`,c,y,{,}-V-W-X-i-x.k.w/`/h/n/y0r0u0x1Q1X1d1m1q2q2r2x2y2z2{2|2}3O3Q3R3S3T3U3V3W3X3Y3Z3[3]3^3_3`3a3b3c3e3f3i3j3l3m3n3q3r3t4Y4y4z4{4|4}5O5P5R5S5T5U5V5W5X5Y5Z5[5]5^5_5`5a5b5c5d5f5g5j5k5m5n5o5r5s5u6R6V6}7O7P7Q7R7S7U7V7W7Y7Z7[7]7^7_7`7a7b7c7d7e7f7g7h7j7k7n7p7q7x7y7{7}8O8P8Q8R8S8V8W8Y8]9U9^9_9`9a9b9c9f9g9i9j9k9l9m9n9o9p9q9r9s9t9u9v9w9x9z9{:P:Q:T:V:W:[:^:`:c;j;k;l;m;n;o;p;s;v;w;x;y;z;{;|;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<l<m<n<r<s<t<u<w<x<y<z<}=O=Q=V=W=_=`=a=q=rQ']$]Y(Q$s7T9e;q;rS(U2Z6QR(X$tT&X!})v!w$Qg#}$h'S'i'm'r(P(T)Z*f*s*z*}+Q+]+`+g,Z-r-u-{.Q/u1P5}6O6P6]8b8c8d=d=e=i>O>P>Q>X>Y>Z>[3ZfPVX[_bgjklmnoprxyz!S!W!X!Y!]!e!f!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t#}$R$S$U$h$y$}%P%R%S%T%U%c%p%r%}&S&W&p&s&t&w'O'S'U'Y'^'i'm'r'z(O(P(R(S(T(`(l({)P)Z)_)c)i)p)t)v*P*T*U*f*o*s*z*}+P+Q+]+`+d+g+r+u+z,T,V,X,Z,u-Q-R-d-k-r-u-z-{-|.Q.b.d.l.t/[/c/i/m/u/x0V0`0a0d0e0i0v1P1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w5}6O6P6T6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8b8c8d8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;u<j<k<o<p<q<v<{<|=P=R=S=T=U=Z=d=e=i=m=n>O>P>Q>X>Y>Z>[3scPVX[_bdegjklmnoprxyz!S!W!X!Y!]!e!f!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t#{#}$R$S$U$h$y$}%P%R%S%T%U%c%m%n%p%r%}&S&W&p&s&t&w'O'S'U'Y'^'i'm'r'z(O(P(R(S(T(`(l({)P)Z)^)_)c)g)h)i)p)t)v*P*T*U*f*o*s*z*}+P+Q+]+`+d+g+r+u+z,T,V,X,Z,u,x-Q-R-d-k-r-u-z-{-|.Q.b.d.l.t/[/c/i/m/u/x0V0`0a0d0e0i0v1P1R1]1a2W2X2Y2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w5}6O6P6T6]6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8b8c8d8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;u<j<k<o<p<q<v<{<|=P=R=S=T=U=Z=d=e=i=m=n>O>P>Q>X>Y>Z>[0phPVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X-Q-R-d-k-z.b.d.l.t/c/i/m/x0`0a0d0e0i0v1R1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;u<j<k<o<p<q<v<{<|=P=R=S=T=U=Z=m=nT1Z0V1]R&]#P!n#[Z#f#w$V$W$X$Y$[$s$v%W%Y%[&Q&_&`&a&b&c&d&e&f'X'Z'[(])q)s*^+V,{-x/y1Q1d1q7j7k!Y2j2Z2x2y2z2{2}3O3Q3R3S3T3U3V3W3X3a3b3c3e3f3i3j3l3m3n3q3r3t!^4m2r4y4z4{4|5O5P5R5S5T5U5V5W5X5Y5b5c5d5f5g5j5k5m5n5o5r5s5u6Q6R#Q6p#m%`%s&u&v&{(p*O+S,`,c,y-V-X.w2q6}7O7P7Q7S7T7U7Y7Z7[7]7^7_7`7a7n7p7q7x7{7}8Q8S8V8W8Y8]9U:c=V=W#^8}%|&O&U)u,}-W-i/h/n0r0u0x1m4Y6V7V7W7y8O8P8R9^9_9`9a9c9e9f9g9i9j9k9l9m9n9o9p9x9z9{:P:Q:T:V:W:[:^:`<f<g=_=q=r!^;S.k/`;j;k;l;m;p;q;s;v;x;z;|<O<Q<S<U<h<l<n<r<t<w<x<z<}=O=Q=`=ao;T1X;r;w;y;{;}<P<R<T<V<i<m<s<u<yS$iu#hQ$qwU't$j$l&oQ'v$kS'x$m$rQ*|'uQ+O'wQ+R'yQ4X5xS4[5z5{Q4]5|Q6U8^S6W8_8`Q6X8aQ9d=YS9|=[=^Q:S=cQ=]=yS=b={=|Q=f=}Q=o>RS=p>S>VS=s>T>UR=t>WT'n$h*s!csPVXt!S!j!r!s!w$h$}%P%S%U'i(T(`)W*s+]+g+r+u,g,k.b.d.l0`0a0i1aQ$^rR*`'^Q*x'sQ-t*{R/w-wQ(W$tQ)U%hQ)n%vQ*i'fQ+k(XR-c*jQ(V$tQ)Y%jQ)m%vQ*e'eS*h'f)nS+j(W(XS-b*i*jQ.]+kQ/T,mQ/e-`R/g-cQ(U$tQ)T%hQ)V%iQ)l%vU*g'f)m)nU+i(V(W(XQ,f)UU-a*h*i*jS.[+j+kS/f-b-cQ0X.]R0t/gT+e(T+g[%e!_$b'c+a.R0QR,d)Qb$ov(T+[+]+`+g.P.Q0PR+T'{S+e(T+gT,j)W,kR0W.XT1[0V1]0w|PVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X,_-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;u<j<k<o<p<q<v<{<|=P=R=S=T=U=Z=m=nT$x{${Q+p([R._+nT$z{${Q(b$}Q(j%PQ(o%SQ(r%UQ.j+yQ0].fQ0^.iR1g0iR(e%OX+|(c(d+},PR(f%OX(h%P%S%U0iR%S!T_%a!]%R(l,T,V.t0dR%U!UR.x,XR,[(wQ)X%jS*d'e)YS-_*e,mS/d-`/TR0s/eQ%q!fU)]%m%n%rU,o)^)g)hR/_,xR)d%pR/],uSSO!mR!oSQ!rVR%y!rQ!jPS!sV!rQ!wX[%u!j!s!w+r0a1aQ+r(`Q0a.lR1a0`Q)j%sS,z)j7vR7v7WQ-S)zR/b-SQ&x#qS*R&x7mR7m9YS*V&{&|R-Z*VQ)w&YR-P)w!l'T#|'h*n*q*v+W+[,m-`-s-v-y.P.z/s/v/z0P1O1p4^4_4`5y6Y6Z6[:U:X:]=g=h=j=u=v=w=xR*Z'T1^dPVX[_bjklmnoprxyz!S!W!X!Y!]!e!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%p%}&S&W&p&s&t&w'O'U'Y'^'z(O(R(S(`(l({)P)_)c)i)p)t)v*P*T*U*o+P+d+r+u+z,T,V,X,u-Q-R-d-k-z-|.b.d.l.t/[/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;u<j<k<o<p<q<v<{<|=P=R=S=T=U=Z=m=n`#zd#{%m)^)g,x2W2YQ#{eQ%m!fQ)^%nQ)g%rQ,x)h!v2Wg#}$h'S'i'm'r(P(T)Z*f*s*z*}+Q+]+`+g,Z-r-u-{.Q/u1P5}6O6P6]8b8c8d=d=e=i>O>P>Q>X>Y>Z>[R2Y2X|tPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1aW$`t'i+],gS'i$h*sS+](T+gT,g)W,kQ'_$^R*a'_Q*t'oR-m*tQ/p-oS0{/p0|R0|/qQ-}+XR/|-}Q+g(TR.Y+gS+`(T+gS,h)W,kQ.Q+]W.T+`,h.Q/OR/O,gQ)R%eR,e)RQ'|$oR+U'|Q1]0VR1w1]Q${{R(^${Q+t(aR.c+tQ+w(bR.g+wQ+}(cQ,P(dT.m+},PQ(|%`S,a(|7tR7t7VQ(y%^R,^(yQ,k)WR/R,kQ)`%oS,q)`/WR/W,rQ,v)dR/^,vT!uV!rj!iPVX!j!r!s!w(`+r.l0`0a1aQ%Q!SQ(a$}W(h%P%S%U0iQ.e+uQ0Z.bR0[.d|ZPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1aQ#f[U#m_#s&wQ#wbQ$VkQ$WlQ$XmQ$YnQ$ZoQ$[pQ$sx^$uy2_4b6e8q:m:nQ$vzQ%W!WQ%Y!XQ%[!YW%`!]%R(l,VU%s!g&p-RQ%|!yQ&O!zQ&Q!{S&U!})v^&^#R2a4d6g8t:p:qQ&_#SQ&`#TQ&a#UQ&b#VQ&c#WQ&d#XQ&e#YQ&f#ZQ&g#[Q&h#]Q&i#^Q&j#_Q&k#`Q&l#aQ&m#bQ&u#nQ&v#oS&{#t'OQ'X$RQ'Z$SQ'[$UQ(]$yQ(p%TQ)q%}Q)s&SQ)u&WQ*O&tS*['U4ZQ*^'Y^*_2[3u5v8Z:a=R=SQ+S'zQ+V(OQ,`({Q,c)PQ,y)iQ,{)pQ,})tQ-V*PQ-W*TQ-X*U^-]2]3v5w8[:b=T=UQ-i*oQ-x+PQ.k+zQ.w,XQ/`-QQ/h-dQ/n-kQ/y-zQ0r/cQ0u/iQ0x/mQ1Q/xU1X0V1]9WQ1d0eQ1m0vQ1q1RQ2Z2^Q2qjQ2r3yQ2x3zQ2y3|Q2z4OQ2{4QQ2|4SQ2}4UQ3O2`Q3Q2bQ3R2cQ3S2dQ3T2eQ3U2fQ3V2gQ3W2hQ3X2iQ3Y2jQ3Z2kQ3[2lQ3]2mQ3^2nQ3_2oQ3`2pQ3a2sQ3b2tQ3c2uQ3e2vQ3f2wQ3i3PQ3j3dQ3l3gQ3m3hQ3n3kQ3q3oQ3r3pQ3t3sQ4Y4WQ4y3{Q4z3}Q4{4PQ4|4RQ4}4TQ5O4VQ5P4cQ5R4eQ5S4fQ5T4gQ5U4hQ5V4iQ5W4jQ5X4kQ5Y4lQ5Z4mQ5[4nQ5]4oQ5^4pQ5_4qQ5`4rQ5a4sQ5b4tQ5c4uQ5d4vQ5f4wQ5g4xQ5j5QQ5k5eQ5m5hQ5n5iQ5o5lQ5r5pQ5s5qQ5u5tQ6Q4aQ6R3xQ6V6TQ6}6^Q7O6_Q7P6`Q7Q6aQ7R6bQ7S6cQ7T6dQ7U6fU7V,T.t0dQ7W%cQ7Y6hQ7Z6iQ7[6jQ7]6kQ7^6lQ7_6mQ7`6nQ7a6oQ7b6pQ7c6qQ7d6rQ7e6sQ7f6tQ7g6uQ7h6vQ7j6xQ7k6yQ7n6zQ7p6{Q7q6|Q7x7XQ7y7iQ7{7oQ7}7rQ8O7sQ8P7uQ8Q7wQ8R7zQ8S7|Q8V8TQ8W8UQ8Y8XQ8]8fU9U#k&s7lQ9^8jQ9_8kQ9`8lQ9a8mQ9b8nQ9c8oQ9e8pQ9f8rQ9g8sQ9i8uQ9j8vQ9k8wQ9l8xQ9m8yQ9n8zQ9o8{Q9p8|Q9q8}Q9r9OQ9s9PQ9t9QQ9u9RQ9v9SQ9w9TQ9x9ZQ9z9[Q9{9]Q:P9hQ:Q9yQ:T9}Q:V:OQ:W:RQ:[:YQ:^:ZQ:`:_Q:c8iQ;j:dQ;k:eQ;l:fQ;m:gQ;n:hQ;o:iQ;p:jQ;q:kQ;r:lQ;s:oQ;v:rQ;w:sQ;x:tQ;y:uQ;z:vQ;{:wQ;|:xQ;}:yQ<O:zQ<P:{Q<Q:|Q<R:}Q<S;OQ<T;PQ<U;QQ<V;RQ<W;SQ<X;TQ<Y;UQ<Z;VQ<[;WQ<];XQ<^;YQ<_;ZQ<`;[Q<a;]Q<b;^Q<c;_Q<d;`Q<e;aQ<f;cQ<g;dQ<h;eQ<i;fQ<l;gQ<m;hQ<n;iQ<r;tQ<s;uQ<t<jQ<u<kQ<w<oQ<x<pQ<y<qQ<z<vQ<}<{Q=O<|Q=Q=PQ=V8hQ=W8gQ=_=ZQ=`9VQ=a9XQ=q=mR=r=nR){&pQ%t!gQ)O%cT)y&p-R$SiPVX[bklmnopxyz!S!W!X!Y!j!r!s!w!{#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b$R$S$U$y$}%P%S%U%}&S'Y(O(`)p+P+r+u-z.b.d.l/x0`0a0e0i1R1a2[2]6x6y!t3w'U2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3z3|4O4Q4S4U5v5w!x6S3u3v3x3y3{3}4P4R4T4V4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t$O8e_j!]!g#k#n#o#s#t%R%T&p&s&t&w'O'z(l({)P)i*P*U,V,X-R6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6z6{6|7X7l7o7r7w7|8T8U8X8Z8[8f8g8h8i#|=X!y!z!}%c&W)t)v*T*o,T-d-k.t/c/i/m0d0v4W6T7i7s7u7z8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9Z9[9]9h9y9}:O:R:Y:Z:_:a:b;c;d=Z=m=n!v=k+z-Q9V9X:d:e:f:g:h:j:k:m:o:p:r:t:v:x:z:|;O;Q;S;U;W;Y;[;^;`;e;g;i;t<j<o<p<v<{<|=P=R=T!]=l0V1]9W:i:l:n:q:s:u:w:y:{:};P;R;T;V;X;Z;];_;a;f;h;u<k<q=S=UQ#r_Q&r#kQ&z#sR)}&sS#q_#s^$Tj3x3y8f8g8h8iS*Q&w7lT9Y#k&sQ&}#tR*X'OR&T!|R&Z!}Q&Y!}R-O)vQ#|gQ'V#}S'h$h*sQ*Y'SQ*n'iQ*q'mQ*v'rQ+W(PS+[(T+gQ,m)ZQ-`*fQ-s*zQ-v*}Q-y+QS.P+]+`Q.z,ZQ/s-rQ/v-uQ/z-{Q0P.QQ1O/uQ1p1PQ4^5}Q4_6OQ4`6PQ5y6]Q6Y8bQ6Z8cQ6[8dQ:U=dQ:X=eQ:]=iQ=g>OQ=h>PQ=j>QQ=u>XQ=v>YQ=w>ZR=x>[0t!OPVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;u<j<k<o<p<q<v<{<|=P=R=S=T=U=Z=m=n!v$Pg#}$h'S'i'm'r(P(T)Z*f*s*z*}+Q+]+`+g,Z-r-u-{.Q/u1P5}6O6P6]8b8c8d=d=e=i>O>P>Q>X>Y>Z>[S$]r'^Q%k!eS%o!f%rQ)b%pU+X(R(S+dQ,p)_Q,t)cQ/Z,uQ/{-|R0p/[|vPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1a#U#i[bklmnopxyz!W!X!Y!{#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b$R$S$U$y%}&S'Y(O)p+P-z/x0e1R2[2]6x6yd+^(T)W+]+`+g,g,h,k.Q/O!t6w'U2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3z3|4O4Q4S4U5v5w!x;b3u3v3x3y3{3}4P4R4T4V4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t$O=z_j!]!g#k#n#o#s#t%R%T&p&s&t&w'O'z(l({)P)i*P*U,V,X-R6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6z6{6|7X7l7o7r7w7|8T8U8X8Z8[8f8g8h8i#|>]!y!z!}%c&W)t)v*T*o,T-d-k.t/c/i/m0d0v4W6T7i7s7u7z8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9Z9[9]9h9y9}:O:R:Y:Z:_:a:b;c;d=Z=m=n!v>^+z-Q9V9X:d:e:f:g:h:j:k:m:o:p:r:t:v:x:z:|;O;Q;S;U;W;Y;[;^;`;e;g;i;t<j<o<p<v<{<|=P=R=T!]>_0V1]9W:i:l:n:q:s:u:w:y:{:};P;R;T;V;X;Z;];_;a;f;h;u<k<q=S=UR'p$hQ'o$hR-l*sR$_rR-q*wQ+Y(RQ+Z(SR.X+dT+f(T+ge+_(T)W+]+`+g,g,h,k.Q/OQ%f!_Q'b$bQ*c'cQ.U+aQ0S.RR1U0QQ#eZQ%X!WQ%Z!XQ%]!YQ'}$pQ(s%VQ(t%WQ(u%YQ(v%[Q(}%bQ)S%fQ)[%kQ)f%qQ)k%tQ*b'bQ,n)]Q-^*cQ.V+bQ.W+cQ.e+xQ.o,QQ.p,RQ.q,SQ.v,WQ.y,YQ.},bQ/U,oQ/}.OQ0T.SQ0U.UQ0W.XQ0[.hQ0k/QQ0q/_Q1S0OQ1V0RQ1W0SQ1`0_Q1h0jQ1r1TQ1s1UQ1v1[Q1y1_Q1}1jQ2T1{R2U1|Q$pvS+b(T+gU.O+[+]+`S0O.P.QR1T0P|!aPVX!S!j!r!s!w$}%P%S%U(`+r+u.b.d.l0`0a0i1aQ$dtW+c(T)W+g,kW.S+]+`,g,hT0R.Q/O0t!OPVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;u<j<k<o<p<q<v<{<|=P=R=S=T=U=Z=m=nR.|,_0w}PVX[_bjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!{!}#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#b#k#n#o#s#t$R$S$U$y$}%P%R%S%T%U%c%}&S&W&p&s&t&w'O'U'Y'z(O(`(l({)P)i)p)t)v*P*T*U*o+P+r+u+z,T,V,X,_-Q-R-d-k-z.b.d.l.t/c/i/m/x0V0`0a0d0e0i0v1R1]1a2[2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2s2t2u2v2w3P3d3g3h3k3o3p3s3u3v3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4Z4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x5Q5e5h5i5l5p5q5t5v5w6T6^6_6`6a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6x6y6z6{6|7X7i7l7o7r7s7u7w7z7|8T8U8X8Z8[8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9T9V9W9X9Z9[9]9h9y9}:O:R:Y:Z:_:a:b:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:{:|:};O;P;Q;R;S;T;U;V;W;X;Y;Z;[;];^;_;`;a;c;d;e;f;g;h;i;t;u<j<k<o<p<q<v<{<|=P=R=S=T=U=Z=m=nT$w{${Q(i%PQ(n%SQ(q%UR1f0iQ%b!]Q(m%RQ,U(lQ.s,TQ.u,VQ0c.tR1c0dQ%q!fR)]%rR)e%p\",\n  nodeNames: \"\u26A0 ( HeredocString EscapeSequence abstract LogicOp array as Boolean break case catch clone const continue default declare do echo else elseif enddeclare endfor endforeach endif endswitch endwhile enum extends final finally fn for foreach from function global goto if implements include include_once LogicOp insteadof interface list match namespace new null LogicOp print require require_once return switch throw trait try unset use var Visibility while LogicOp yield LineComment BlockComment TextInterpolation PhpClose Text PhpOpen Template TextInterpolation EmptyStatement ; } { Block : LabelStatement Name ExpressionStatement ConditionalExpression LogicOp MatchExpression ) ( ParenthesizedExpression MatchBlock MatchArm , => AssignmentExpression ArrayExpression ValueList & VariadicUnpacking ... Pair [ ] ListExpression ValueList Pair Pair SubscriptExpression MemberExpression -> ?-> VariableName DynamicVariable $ ${ CallExpression ArgList NamedArgument SpreadArgument CastExpression UnionType LogicOp OptionalType NamedType QualifiedName \\\\ NamespaceName ScopedExpression :: ClassMemberName AssignOp UpdateExpression UpdateOp YieldExpression BinaryExpression LogicOp LogicOp LogicOp BitOp BitOp BitOp CompareOp CompareOp BitOp ArithOp ConcatOp ArithOp ArithOp IncludeExpression RequireExpression CloneExpression UnaryExpression ControlOp LogicOp PrintIntrinsic FunctionExpression static ParamList Parameter #[ Attributes Attribute VariadicParameter PropertyParameter UseList ArrowFunction NewExpression class BaseClause ClassInterfaceClause DeclarationList ConstDeclaration VariableDeclarator PropertyDeclaration VariableDeclarator MethodDeclaration UseDeclaration UseList UseInsteadOfClause UseAsClause UpdateExpression ArithOp ShellExpression ThrowExpression Integer Float String MemberExpression SubscriptExpression UnaryExpression ArithOp Interpolation String IfStatement ColonBlock SwitchStatement Block CaseStatement DefaultStatement ColonBlock WhileStatement EmptyStatement DoStatement ForStatement ForSpec SequenceExpression ForeachStatement ForSpec Pair GotoStatement ContinueStatement BreakStatement ReturnStatement TryStatement CatchDeclarator DeclareStatement EchoStatement UnsetStatement ConstDeclaration FunctionDefinition ClassDeclaration InterfaceDeclaration TraitDeclaration EnumDeclaration EnumBody EnumCase NamespaceDefinition NamespaceUseDeclaration UseGroup UseClause UseClause GlobalDeclaration FunctionStaticDeclaration Program\",\n  maxTerm: 304,\n  nodeProps: [\n    [\"group\", -36,2,8,49,81,83,85,88,93,94,102,106,107,110,111,114,118,123,126,130,132,133,147,148,149,150,153,154,164,165,179,181,182,183,184,185,191,\"Expression\",-28,74,78,80,82,192,194,199,201,202,205,208,209,210,211,212,214,215,216,217,218,219,220,221,222,225,226,230,231,\"Statement\",-3,119,121,122,\"Type\"],\n    [\"openedBy\", 69,\"phpOpen\",76,\"{\",86,\"(\",101,\"#[\"],\n    [\"closedBy\", 71,\"phpClose\",77,\"}\",87,\")\",158,\"]\"]\n  ],\n  propSources: [phpHighlighting],\n  skippedNodes: [0],\n  repeatNodeCount: 29,\n  tokenData: \"!F|_R!]OX$zXY&^YZ'sZ]$z]^&^^p$zpq&^qr)Rrs+Pst+otu2buv5evw6rwx8Vxy>]yz>yz{?g{|@}|}Bb}!OCO!O!PDh!P!QKT!Q!R!!o!R![!$q![!]!,P!]!^!-a!^!_!-}!_!`!1S!`!a!2d!a!b!3t!b!c!7^!c!d!7z!d!e!9W!e!}!7z!}#O!;^#O#P!;z#P#Q!<h#Q#R!=U#R#S!7z#S#T!=u#T#U!7z#U#V!9W#V#o!7z#o#p!Co#p#q!D]#q#r!Er#r#s!F`#s$f$z$f$g&^$g&j!7z&j$I_$z$I_$I`&^$I`$KW$z$KW$KX&^$KX;'S$z;'S;=`&W<%l?HT$z?HT?HU&^?HUO$zP%PV&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zP%kO&wPP%nWOY$zYZ%fZ!a$z!b;'S$z;'S;=`&W<%l~$z~O$z~~%fP&ZP;=`<%l$zV&ed&wP&vUOX$zXY&^YZ'sZ]$z]^&^^p$zpq&^q!^$z!^!_%k!_$f$z$f$g&^$g$I_$z$I_$I`&^$I`$KW$z$KW$KX&^$KX;'S$z;'S;=`&W<%l?HT$z?HT?HU&^?HUO$zV'zW&wP&vUXY(dYZ(d]^(dpq(d$f$g(d$I_$I`(d$KW$KX(d?HT?HU(dU(iW&vUXY(dYZ(d]^(dpq(d$f$g(d$I_$I`(d$KW$KX(d?HT?HU(dR)YW$^Q&wPOY$zYZ%fZ!^$z!^!_%k!_!`)r!`;'S$z;'S;=`&W<%lO$zR)yW$QQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`*c!`;'S$z;'S;=`&W<%lO$zR*jV$QQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV+YV'fS&wP'gQOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV+v]&wP!dUOY,oYZ%fZ],o]^$z^!^,o!^!_-i!_!a,o!a!b/y!b!},o!}#O1f#O;'S,o;'S;=`/s<%lO,oV,vZ&wP!dUOY,oYZ%fZ],o]^$z^!^,o!^!_-i!_!a,o!a!b/y!b;'S,o;'S;=`/s<%lO,oV-nZ!dUOY,oYZ%fZ],o]^$z^!a,o!a!b.a!b;'S,o;'S;=`/s<%l~,o~O,o~~%fU.dWOY.|YZ/nZ].|]^/n^!`.|!a;'S.|;'S;=`/h<%lO.|U/RV!dUOY.|Z].|^!a.|!a!b.a!b;'S.|;'S;=`/h<%lO.|U/kP;=`<%l.|U/sO!dUV/vP;=`<%l,oV0OZ&wPOY,oYZ0qZ],o]^0x^!^,o!^!_-i!_!`,o!`!a$z!a;'S,o;'S;=`/s<%lO,oV0xO&wP!dUV1PV&wP!dUOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV1oZ&wP$dQ!dUOY,oYZ%fZ],o]^$z^!^,o!^!_-i!_!a,o!a!b/y!b;'S,o;'S;=`/s<%lO,o_2i`&wP#dQOY$zYZ%fZ!^$z!^!_%k!_!c$z!c!}3k!}#R$z#R#S3k#S#T$z#T#o3k#o#p4w#p$g$z$g&j3k&j;'S$z;'S;=`&W<%lO$z_3ra&wP#b^OY$zYZ%fZ!Q$z!Q![3k![!^$z!^!_%k!_!c$z!c!}3k!}#R$z#R#S3k#S#T$z#T#o3k#o$g$z$g&j3k&j;'S$z;'S;=`&W<%lO$zV5OV&wP#eUOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR5lW&wP$VQOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR6]V#wQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV6yY#SU&wPOY$zYZ%fZv$zvw7iw!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR7pV#|Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR8^Z&wP%VQOY8VYZ9PZw8Vwx;_x!^8V!^!_;{!_#O8V#O#P<y#P;'S8V;'S;=`>V<%lO8VR9WV&wP%VQOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X<%lO9mQ9rV%VQOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X<%lO9mQ:^O%VQQ:aRO;'S9m;'S;=`:j;=`O9mQ:oW%VQOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X;=`<%l9m<%lO9mQ;[P;=`<%l9mR;fV&wP%VQOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR<Q]%VQOY8VYZ9PZw8Vwx;_x!a8V!a!b9m!b#O8V#O#P<y#P;'S8V;'S;=`>V<%l~8V~O8V~~%fR=OW&wPOY8VYZ9PZ!^8V!^!_;{!_;'S8V;'S;=`=h;=`<%l9m<%lO8VR=mW%VQOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X;=`<%l8V<%lO9mR>YP;=`<%l8VR>dV!yQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV?QV!xU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR?nY&wP$VQOY$zYZ%fZz$zz{@^{!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR@eW$WQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zRAUY$TQ&wPOY$zYZ%fZ{$z{|At|!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zRA{V$zQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRBiV!}Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_CXZ$TQ%TW&wPOY$zYZ%fZ}$z}!OAt!O!^$z!^!_%k!_!`6U!`!aCz!a;'S$z;'S;=`&W<%lO$zVDRV#`U&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVDo[&wP$UQOY$zYZ%fZ!O$z!O!PEe!P!Q$z!Q![Fs![!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zVEjX&wPOY$zYZ%fZ!O$z!O!PFV!P!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVF^V#UU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRFz_&wP%OQOY$zYZ%fZ!Q$z!Q![Fs![!^$z!^!_%k!_!g$z!g!hGy!h#R$z#R#SJc#S#X$z#X#YGy#Y;'S$z;'S;=`&W<%lO$zRHO]&wPOY$zYZ%fZ{$z{|Hw|}$z}!OHw!O!Q$z!Q![Ii![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRH|X&wPOY$zYZ%fZ!Q$z!Q![Ii![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRIpZ&wP%OQOY$zYZ%fZ!Q$z!Q![Ii![!^$z!^!_%k!_#R$z#R#SHw#S;'S$z;'S;=`&W<%lO$zRJhX&wPOY$zYZ%fZ!Q$z!Q![Fs![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVK[[&wP$VQOY$zYZ%fZz$zz{LQ{!P$z!P!Q,o!Q!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zVLVX&wPOYLQYZLrZzLQz{N_{!^LQ!^!_! s!_;'SLQ;'S;=`!!i<%lOLQVLwT&wPOzMWz{Mj{;'SMW;'S;=`NX<%lOMWUMZTOzMWz{Mj{;'SMW;'S;=`NX<%lOMWUMmVOzMWz{Mj{!PMW!P!QNS!Q;'SMW;'S;=`NX<%lOMWUNXO!eUUN[P;=`<%lMWVNdZ&wPOYLQYZLrZzLQz{N_{!PLQ!P!Q! V!Q!^LQ!^!_! s!_;'SLQ;'S;=`!!i<%lOLQV! ^V!eU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV! vZOYLQYZLrZzLQz{N_{!aLQ!a!bMW!b;'SLQ;'S;=`!!i<%l~LQ~OLQ~~%fV!!lP;=`<%lLQZ!!vm&wP$}YOY$zYZ%fZ!O$z!O!PFs!P!Q$z!Q![!$q![!^$z!^!_%k!_!d$z!d!e!&o!e!g$z!g!hGy!h!q$z!q!r!(a!r!z$z!z!{!){!{#R$z#R#S!%}#S#U$z#U#V!&o#V#X$z#X#YGy#Y#c$z#c#d!(a#d#l$z#l#m!){#m;'S$z;'S;=`&W<%lO$zZ!$xa&wP$}YOY$zYZ%fZ!O$z!O!PFs!P!Q$z!Q![!$q![!^$z!^!_%k!_!g$z!g!hGy!h#R$z#R#S!%}#S#X$z#X#YGy#Y;'S$z;'S;=`&W<%lO$zZ!&SX&wPOY$zYZ%fZ!Q$z!Q![!$q![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!&tY&wPOY$zYZ%fZ!Q$z!Q!R!'d!R!S!'d!S!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!'k[&wP$}YOY$zYZ%fZ!Q$z!Q!R!'d!R!S!'d!S!^$z!^!_%k!_#R$z#R#S!&o#S;'S$z;'S;=`&W<%lO$zZ!(fX&wPOY$zYZ%fZ!Q$z!Q!Y!)R!Y!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!)YZ&wP$}YOY$zYZ%fZ!Q$z!Q!Y!)R!Y!^$z!^!_%k!_#R$z#R#S!(a#S;'S$z;'S;=`&W<%lO$zZ!*Q]&wPOY$zYZ%fZ!Q$z!Q![!*y![!^$z!^!_%k!_!c$z!c!i!*y!i#T$z#T#Z!*y#Z;'S$z;'S;=`&W<%lO$zZ!+Q_&wP$}YOY$zYZ%fZ!Q$z!Q![!*y![!^$z!^!_%k!_!c$z!c!i!*y!i#R$z#R#S!){#S#T$z#T#Z!*y#Z;'S$z;'S;=`&W<%lO$zR!,WX!qQ&wPOY$zYZ%fZ![$z![!]!,s!]!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!,zV#sQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!-hV!mU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!.S[$RQOY$zYZ%fZ!^$z!^!_!.x!_!`!/i!`!a*c!a!b!0]!b;'S$z;'S;=`&W<%l~$z~O$z~~%fR!/PW$SQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!/pX$RQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`$z!`!a*c!a;'S$z;'S;=`&W<%lO$zP!0bR!iP!_!`!0k!r!s!0p#d#e!0pP!0pO!iPP!0sQ!j!k!0y#[#]!0yP!0|Q!r!s!0k#d#e!0kV!1ZX#uQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`)r!`!a!1v!a;'S$z;'S;=`&W<%lO$zV!1}V#OU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!2kX$RQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`!3W!`!a!.x!a;'S$z;'S;=`&W<%lO$zR!3_V$RQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!3{[!vQ&wPOY$zYZ%fZ}$z}!O!4q!O!^$z!^!_%k!_!`$z!`!a!6P!a!b!6m!b;'S$z;'S;=`&W<%lO$zV!4vX&wPOY$zYZ%fZ!^$z!^!_%k!_!`$z!`!a!5c!a;'S$z;'S;=`&W<%lO$zV!5jV#aU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!6WV!gU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!6tW#zQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!7eV$]Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!8Ra&wP!s^OY$zYZ%fZ!Q$z!Q![!7z![!^$z!^!_%k!_!c$z!c!}!7z!}#R$z#R#S!7z#S#T$z#T#o!7z#o$g$z$g&j!7z&j;'S$z;'S;=`&W<%lO$z_!9_e&wP!s^OY$zYZ%fZr$zrs!:psw$zwx8Vx!Q$z!Q![!7z![!^$z!^!_%k!_!c$z!c!}!7z!}#R$z#R#S!7z#S#T$z#T#o!7z#o$g$z$g&j!7z&j;'S$z;'S;=`&W<%lO$zR!:wV&wP'gQOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!;eV#WU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!<RV#pU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!<oV#XQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!=]W$OQ&wPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!=zZ&wPOY!=uYZ!>mZ!^!=u!^!_!@u!_#O!=u#O#P!Aq#P#S!=u#S#T!B{#T;'S!=u;'S;=`!Ci<%lO!=uR!>rV&wPO#O!?X#O#P!?q#P#S!?X#S#T!@j#T;'S!?X;'S;=`!@o<%lO!?XQ!?[VO#O!?X#O#P!?q#P#S!?X#S#T!@j#T;'S!?X;'S;=`!@o<%lO!?XQ!?tRO;'S!?X;'S;=`!?};=`O!?XQ!@QWO#O!?X#O#P!?q#P#S!?X#S#T!@j#T;'S!?X;'S;=`!@o;=`<%l!?X<%lO!?XQ!@oO${QQ!@rP;=`<%l!?XR!@x]OY!=uYZ!>mZ!a!=u!a!b!?X!b#O!=u#O#P!Aq#P#S!=u#S#T!B{#T;'S!=u;'S;=`!Ci<%l~!=u~O!=u~~%fR!AvW&wPOY!=uYZ!>mZ!^!=u!^!_!@u!_;'S!=u;'S;=`!B`;=`<%l!?X<%lO!=uR!BcWO#O!?X#O#P!?q#P#S!?X#S#T!@j#T;'S!?X;'S;=`!@o;=`<%l!=u<%lO!?XR!CSV${Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!ClP;=`<%l!=uV!CvV!oU&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!DfY#}Q#lS&wPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`#p$z#p#q!EU#q;'S$z;'S;=`&W<%lO$zR!E]V#{Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!EyV!nQ&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!FgV$^Q&wPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z\",\n  tokenizers: [expression, interpolated, semicolon, 0, 1, 2, 3, eofToken],\n  topRules: {\"Template\":[0,72],\"Program\":[1,232]},\n  dynamicPrecedences: {\"284\":1},\n  specialized: [{term: 81, get: (value, stack) => (keywords(value) << 1), external: keywords},{term: 81, get: value => spec_Name[value] || -1}],\n  tokenPrec: 29354\n});\n\nexport { parser };\n", "import { parser } from '@lezer/php';\nimport { parseMixed } from '@lezer/common';\nimport { html } from '@codemirror/lang-html';\nimport { LRLanguage, indentNodeProp, continuedIndent, delimitedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nA language provider based on the [Lezer PHP\nparser](https://github.com/lezer-parser/php), extended with\nhighlighting and indentation information.\n*/\nconst phpLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"php\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                IfStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b|elseif\\b|endif\\b)/ }),\n                TryStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|catch\\b|finally\\b)/ }),\n                SwitchBody: context => {\n                    let after = context.textAfter, closed = /^\\s*\\}/.test(after), isCase = /^\\s*(case|default)\\b/.test(after);\n                    return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit;\n                },\n                ColonBlock: cx => cx.baseIndent + cx.unit,\n                \"Block EnumBody DeclarationList\": /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n                ArrowFunction: cx => cx.baseIndent + cx.unit,\n                \"String BlockComment\": () => null,\n                Statement: /*@__PURE__*/continuedIndent({ except: /^({|end(for|foreach|switch|while)\\b)/ })\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                \"Block EnumBody DeclarationList SwitchBody ArrayExpression ValueList\": foldInside,\n                ColonBlock(tree) { return { from: tree.from + 1, to: tree.to }; },\n                BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { block: { open: \"/*\", close: \"*/\" }, line: \"//\" },\n        indentOnInput: /^\\s*(?:case |default:|end(?:if|for(?:each)?|switch|while)|else(?:if)?|\\{|\\})$/,\n        wordChars: \"$\",\n        closeBrackets: { stringPrefixes: [\"b\", \"B\"] }\n    }\n});\n/**\nPHP language support.\n*/\nfunction php(config = {}) {\n    let support = [], base;\n    if (config.baseLanguage === null) ;\n    else if (config.baseLanguage) {\n        base = config.baseLanguage;\n    }\n    else {\n        let htmlSupport = html({ matchClosingTags: false });\n        support.push(htmlSupport.support);\n        base = htmlSupport.language;\n    }\n    return new LanguageSupport(phpLanguage.configure({\n        wrap: base && parseMixed(node => {\n            if (!node.type.isTop)\n                return null;\n            return {\n                parser: base.parser,\n                overlay: node => node.name == \"Text\"\n            };\n        }),\n        top: config.plain ? \"Program\" : \"Template\"\n    }), support);\n}\n\nexport { php, phpLanguage };\n", "import { ExternalTokenizer, ContextTracker, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst printKeyword = 1,\n  indent = 196,\n  dedent = 197,\n  newline$1 = 198,\n  blankLineStart = 199,\n  newlineBracketed = 200,\n  eof = 201,\n  formatString1Content = 202,\n  formatString1Brace = 2,\n  formatString1End = 203,\n  formatString2Content = 204,\n  formatString2Brace = 3,\n  formatString2End = 205,\n  formatString1lContent = 206,\n  formatString1lBrace = 4,\n  formatString1lEnd = 207,\n  formatString2lContent = 208,\n  formatString2lBrace = 5,\n  formatString2lEnd = 209,\n  ParenL = 26,\n  ParenthesizedExpression = 27,\n  TupleExpression = 51,\n  ComprehensionExpression = 52,\n  BracketL = 57,\n  ArrayExpression = 58,\n  ArrayComprehensionExpression = 59,\n  BraceL = 61,\n  DictionaryExpression = 62,\n  DictionaryComprehensionExpression = 63,\n  SetExpression = 64,\n  SetComprehensionExpression = 65,\n  ArgList = 67,\n  subscript = 246,\n  FormatString = 74,\n  importList = 265,\n  ParamList = 129,\n  SequencePattern = 150,\n  MappingPattern = 151,\n  PatternArgList = 154;\n\nconst newline = 10, carriageReturn = 13, space = 32, tab = 9, hash = 35, parenOpen = 40, dot = 46,\n      braceOpen = 123, singleQuote = 39, doubleQuote = 34, backslash = 92;\n\nconst bracketed = new Set([\n  ParenthesizedExpression, TupleExpression, ComprehensionExpression, importList, ArgList, ParamList,\n  ArrayExpression, ArrayComprehensionExpression, subscript,\n  SetExpression, SetComprehensionExpression, FormatString,\n  DictionaryExpression, DictionaryComprehensionExpression,\n  SequencePattern, MappingPattern, PatternArgList\n]);\n\nfunction isLineBreak(ch) {\n  return ch == newline || ch == carriageReturn\n}\n\nconst newlines = new ExternalTokenizer((input, stack) => {\n  let prev;\n  if (input.next < 0) {\n    input.acceptToken(eof);\n  } else if (stack.context.depth < 0) {\n    if (isLineBreak(input.next)) input.acceptToken(newlineBracketed, 1);\n  } else if (((prev = input.peek(-1)) < 0 || isLineBreak(prev)) &&\n             stack.canShift(blankLineStart)) {\n    let spaces = 0;\n    while (input.next == space || input.next == tab) { input.advance(); spaces++; }\n    if (input.next == newline || input.next == carriageReturn || input.next == hash)\n      input.acceptToken(blankLineStart, -spaces);\n  } else if (isLineBreak(input.next)) {\n    input.acceptToken(newline$1, 1);\n  }\n}, {contextual: true});\n\nconst indentation = new ExternalTokenizer((input, stack) => {\n  let cDepth = stack.context.depth;\n  if (cDepth < 0) return\n  let prev = input.peek(-1);\n  if (prev == newline || prev == carriageReturn) {\n    let depth = 0, chars = 0;\n    for (;;) {\n      if (input.next == space) depth++;\n      else if (input.next == tab) depth += 8 - (depth % 8);\n      else break\n      input.advance();\n      chars++;\n    }\n    if (depth != cDepth &&\n        input.next != newline && input.next != carriageReturn && input.next != hash) {\n      if (depth < cDepth) input.acceptToken(dedent, -chars);\n      else input.acceptToken(indent);\n    }\n  }\n});\n\nfunction IndentLevel(parent, depth) {\n  this.parent = parent;\n  // -1 means this is not an actual indent level but a set of brackets\n  this.depth = depth;\n  this.hash = (parent ? parent.hash + parent.hash << 8 : 0) + depth + (depth << 4);\n}\n\nconst topIndent = new IndentLevel(null, 0);\n\nfunction countIndent(space) {\n  let depth = 0;\n  for (let i = 0; i < space.length; i++)\n    depth += space.charCodeAt(i) == tab ? 8 - (depth % 8) : 1;\n  return depth\n}\n\nconst trackIndent = new ContextTracker({\n  start: topIndent,\n  reduce(context, term) {\n    return context.depth < 0 && bracketed.has(term) ? context.parent : context\n  },\n  shift(context, term, stack, input) {\n    if (term == indent) return new IndentLevel(context, countIndent(input.read(input.pos, stack.pos)))\n    if (term == dedent) return context.parent\n    if (term == ParenL || term == BracketL || term == BraceL) return new IndentLevel(context, -1)\n    return context\n  },\n  hash(context) { return context.hash }\n});\n\nconst legacyPrint = new ExternalTokenizer(input => {\n  for (let i = 0; i < 5; i++) {\n    if (input.next != \"print\".charCodeAt(i)) return\n    input.advance();\n  }\n  if (/\\w/.test(String.fromCharCode(input.next))) return\n  for (let off = 0;; off++) {\n    let next = input.peek(off);\n    if (next == space || next == tab) continue\n    if (next != parenOpen && next != dot && next != newline && next != carriageReturn && next != hash)\n      input.acceptToken(printKeyword);\n    return\n  }\n});\n\nfunction formatString(quote, len, content, brace, end) {\n  return new ExternalTokenizer(input => {\n    let start = input.pos;\n    for (;;) {\n      if (input.next < 0) {\n        break\n      } else if (input.next == braceOpen) {\n        if (input.peek(1) == braceOpen) {\n          input.advance(2);\n        } else {\n          if (input.pos == start) {\n            input.acceptToken(brace, 1);\n            return\n          }\n          break\n        }\n      } else if (input.next == backslash) {\n        input.advance();\n        if (input.next >= 0) input.advance();\n      } else if (input.next == quote && (len == 1 || input.peek(1) == quote && input.peek(2) == quote)) {\n        if (input.pos == start) {\n          input.acceptToken(end, len);\n          return\n        }\n        break\n      } else {\n        input.advance();\n      }\n    }\n    if (input.pos > start) input.acceptToken(content);\n  })\n}\n\nconst formatString1 = formatString(singleQuote, 1, formatString1Content, formatString1Brace, formatString1End);\nconst formatString2 = formatString(doubleQuote, 1, formatString2Content, formatString2Brace, formatString2End);\nconst formatString1l = formatString(singleQuote, 3, formatString1lContent, formatString1lBrace, formatString1lEnd);\nconst formatString2l = formatString(doubleQuote, 3, formatString2lContent, formatString2lBrace, formatString2lEnd);\n\nconst pythonHighlighting = styleTags({\n  \"async \\\"*\\\" \\\"**\\\" FormatConversion FormatSpec\": tags.modifier,\n  \"for while if elif else try except finally return raise break continue with pass assert await yield match case\": tags.controlKeyword,\n  \"in not and or is del\": tags.operatorKeyword,\n  \"from def class global nonlocal lambda\": tags.definitionKeyword,\n  import: tags.moduleKeyword,\n  \"with as print\": tags.keyword,\n  Boolean: tags.bool,\n  None: tags.null,\n  VariableName: tags.variableName,\n  \"CallExpression/VariableName\": tags.function(tags.variableName),\n  \"FunctionDefinition/VariableName\": tags.function(tags.definition(tags.variableName)),\n  \"ClassDefinition/VariableName\": tags.definition(tags.className),\n  PropertyName: tags.propertyName,\n  \"CallExpression/MemberExpression/PropertyName\": tags.function(tags.propertyName),\n  Comment: tags.lineComment,\n  Number: tags.number,\n  String: tags.string,\n  FormatString: tags.special(tags.string),\n  UpdateOp: tags.updateOperator,\n  \"ArithOp!\": tags.arithmeticOperator,\n  BitOp: tags.bitwiseOperator,\n  CompareOp: tags.compareOperator,\n  AssignOp: tags.definitionOperator,\n  Ellipsis: tags.punctuation,\n  At: tags.meta,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace,\n  \".\": tags.derefOperator,\n  \", ;\": tags.separator\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,await:48, or:58, and:60, in:64, not:66, is:68, if:74, else:76, lambda:80, yield:98, from:100, async:106, for:108, None:168, True:170, False:170, del:184, pass:188, break:192, continue:196, return:200, raise:208, import:212, as:214, global:218, nonlocal:220, assert:224, elif:234, while:238, try:244, except:246, finally:248, with:252, def:256, class:266, match:277, case:283};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"#!OO`Q#yOOP$_OSOOO%hQ&nO'#H^OOQS'#Cq'#CqOOQS'#Cr'#CrO'WQ#xO'#CpO(yQ&nO'#H]OOQS'#H^'#H^OOQS'#DW'#DWOOQS'#H]'#H]O)gQ#xO'#DaO)zQ#xO'#DhO*[Q#xO'#DlOOQS'#Dw'#DwO*oO,UO'#DwO*wO7[O'#DwO+POWO'#DxO+[O`O'#DxO+gOpO'#DxO+rO!bO'#DxO-tQ&nO'#G}OOQS'#G}'#G}O'WQ#xO'#G|O/WQ&nO'#G|OOQS'#Ee'#EeO/oQ#xO'#EfOOQS'#G{'#G{O/yQ#xO'#GzOOQV'#Gz'#GzO0UQ#xO'#FXOOQS'#G`'#G`O0ZQ#xO'#FWOOQV'#IS'#ISOOQV'#Gy'#GyOOQV'#Fp'#FpQ`Q#yOOO'WQ#xO'#CsO0iQ#xO'#DPO0pQ#xO'#DTO1OQ#xO'#HbO1`Q&nO'#EYO'WQ#xO'#EZOOQS'#E]'#E]OOQS'#E_'#E_OOQS'#Ea'#EaO1tQ#xO'#EcO2[Q#xO'#EgO0UQ#xO'#EiO2oQ&nO'#EiO0UQ#xO'#ElO/oQ#xO'#EoO/oQ#xO'#EsO/oQ#xO'#EvO2zQ#xO'#ExO3RQ#xO'#E}O3^Q#xO'#EyO/oQ#xO'#E}O0UQ#xO'#FPO0UQ#xO'#FUO3cQ#xO'#FZP3jO#xO'#GxPOOO)CBl)CBlOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Ck'#CkOOQS'#Cl'#ClOOQS'#Cn'#CnO'WQ#xO,59QO'WQ#xO,59QO'WQ#xO,59QO'WQ#xO,59QO'WQ#xO,59QO'WQ#xO,59QO3uQ#xO'#DqOOQS,5:[,5:[O4YQ#xO'#HlOOQS,5:_,5:_O4gQMlO,5:_O4lQ&nO,59[O0iQ#xO,59dO0iQ#xO,59dO0iQ#xO,59dO7[Q#xO,59dO7aQ#xO,59dO7hQ#xO,59lO7oQ#xO'#H]O8uQ#xO'#H[OOQS'#H['#H[OOQS'#D^'#D^O9^Q#xO,59cO'WQ#xO,59cO9lQ#xO,59cOOQS,59{,59{O9qQ#xO,5:TO'WQ#xO,5:TOOQS,5:S,5:SO:PQ#xO,5:SO:UQ#xO,5:ZO'WQ#xO,5:ZO'WQ#xO,5:XOOQS,5:W,5:WO:gQ#xO,5:WO:lQ#xO,5:YOOOO'#Fx'#FxO:qO,UO,5:cOOQS,5:c,5:cOOOO'#Fy'#FyO:yO7[O,5:cO;RQ#xO'#DyOOOW'#Fz'#FzO;cOWO,5:dOOQS,5:d,5:dO;RQ#xO'#D}OOO`'#F}'#F}O;nO`O,5:dO;RQ#xO'#EOOOOp'#GO'#GOO;yOpO,5:dO;RQ#xO'#EPOOO!b'#GP'#GPO<UO!bO,5:dOOQS'#GQ'#GQO<aQ&nO,5:lO?RQ&nO,5=hO?lQ!LUO,5=hO@]Q&nO,5=hOOQS,5;Q,5;QO@tQ#yO'#GYOBTQ#xO,5;]OOQV,5=f,5=fOB`Q&nO'#IOOBwQ#xO,5;sOOQS-E:^-E:^OOQV,5;r,5;rO3XQ#xO'#FPOOQV-E9n-E9nOCPQ&nO,59_OEWQ&nO,59kOEqQ#xO'#H_OE|Q#xO'#H_O0UQ#xO'#H_OFXQ#xO'#DVOFaQ#xO,59oOFfQ#xO'#HcO'WQ#xO'#HcO/oQ#xO,5=|OOQS,5=|,5=|O/oQ#xO'#EUOOQS'#EV'#EVOGTQ#xO'#GSOGeQ#xO,59OOGeQ#xO,59OO)mQ#xO,5:rOGsQ&nO'#HeOOQS,5:u,5:uOOQS,5:},5:}OHWQ#xO,5;ROHiQ#xO,5;TOOQS'#GV'#GVOHwQ&nO,5;TOIVQ#xO,5;TOI[Q#xO'#IROOQS,5;W,5;WOIjQ#xO'#H}OOQS,5;Z,5;ZO3^Q#xO,5;_O3^Q#xO,5;bOI{Q&nO'#ITO'WQ#xO'#ITOJVQ#xO,5;dO2zQ#xO,5;dO/oQ#xO,5;iO0UQ#xO,5;kOJ[Q#yO'#EtOKeQ#{O,5;eONvQ#xO'#IUO3^Q#xO,5;iO! RQ#xO,5;kO! WQ#xO,5;pO! `Q&nO,5;uO'WQ#xO,5;uPOOO,5=d,5=dP! gOSO,5=dP! lO#xO,5=dO!$aQ&nO1G.lO!$hQ&nO1G.lO!'XQ&nO1G.lO!'cQ&nO1G.lO!)|Q&nO1G.lO!*aQ&nO1G.lO!*tQ#xO'#HkO!+SQ&nO'#G}O/oQ#xO'#HkO!+^Q#xO'#HjOOQS,5:],5:]O!+fQ#xO,5:]O!+kQ#xO'#HmO!+vQ#xO'#HmO!,ZQ#xO,5>WOOQS'#Du'#DuOOQS1G/y1G/yOOQS1G/O1G/OO!-ZQ&nO1G/OO!-bQ&nO1G/OO0iQ#xO1G/OO!-}Q#xO1G/WOOQS'#D]'#D]O/oQ#xO,59vOOQS1G.}1G.}O!.UQ#xO1G/gO!.fQ#xO1G/gO!.nQ#xO1G/hO'WQ#xO'#HdO!.sQ#xO'#HdO!.xQ&nO1G.}O!/YQ#xO,59kO!0`Q#xO,5>SO!0pQ#xO,5>SO!0xQ#xO1G/oO!0}Q&nO1G/oOOQS1G/n1G/nO!1_Q#xO,5=}O!2UQ#xO,5=}O/oQ#xO1G/sO!2sQ#xO1G/uO!2xQ&nO1G/uO!3YQ&nO1G/sOOQS1G/r1G/rOOQS1G/t1G/tOOOO-E9v-E9vOOQS1G/}1G/}OOOO-E9w-E9wO!3jQ#xO'#HwO/oQ#xO'#HwO!3xQ#xO,5:eOOOW-E9x-E9xOOQS1G0O1G0OO!4TQ#xO,5:iOOO`-E9{-E9{O!4`Q#xO,5:jOOOp-E9|-E9|O!4kQ#xO,5:kOOO!b-E9}-E9}OOQS-E:O-E:OO!4vQ!LUO1G3SO!5gQ&nO1G3SO'WQ#xO,5<mOOQS,5<m,5<mOOQS-E:P-E:POOQS,5<t,5<tOOQS-E:W-E:WOOQV1G0w1G0wO0UQ#xO'#GUO!6OQ&nO,5>jOOQS1G1_1G1_O!6gQ#xO1G1_OOQS'#DX'#DXO/oQ#xO,5=yOOQS,5=y,5=yO!6lQ#xO'#FqO!6wQ#xO,59qO!7PQ#xO1G/ZO!7ZQ&nO,5=}OOQS1G3h1G3hOOQS,5:p,5:pO!7zQ#xO'#G|OOQS,5<n,5<nOOQS-E:Q-E:QO!8]Q#xO1G.jOOQS1G0^1G0^O!8kQ#xO,5>PO!8{Q#xO,5>PO/oQ#xO1G0mO/oQ#xO1G0mO0UQ#xO1G0oOOQS-E:T-E:TO!9^Q#xO1G0oO!9iQ#xO1G0oO!9nQ#xO,5>mO!9|Q#xO,5>mO!:[Q#xO,5>iO!:rQ#xO,5>iO!;TQ#{O1G0yO!>cQ#{O1G0|O!AnQ#xO,5>oO!AxQ#xO,5>oO!BQQ&nO,5>oO/oQ#xO1G1OO!B[Q#xO1G1OO3^Q#xO1G1TO! RQ#xO1G1VOOQV,5;`,5;`O!BaQ#zO,5;`O!BfQ#{O1G1PO!EwQ#xO'#G]O3^Q#xO1G1PO3^Q#xO1G1PO!FUQ#xO,5>pO!FcQ#xO,5>pO0UQ#xO,5>pOOQV1G1T1G1TO!FkQ#xO'#FRO!F|QMlO1G1VOOQV1G1[1G1[O3^Q#xO1G1[O!GUQ#xO'#F]OOQV1G1a1G1aO! `Q&nO1G1aPOOO1G3O1G3OP!GZOSO1G3OOOQS,5>V,5>VOOQS'#Dr'#DrO/oQ#xO,5>VO!G`Q#xO,5>UO!GsQ#xO,5>UOOQS1G/w1G/wO!G{Q#xO,5>XO!H]Q#xO,5>XO!HeQ#xO,5>XO!HxQ#xO,5>XO!IYQ#xO,5>XOOQS1G3r1G3rOOQS7+$j7+$jO!7PQ#xO7+$rO!J{Q#xO1G/OO!KSQ#xO1G/OOOQS1G/b1G/bOOQS,5<_,5<_O'WQ#xO,5<_OOQS7+%R7+%RO!KZQ#xO7+%ROOQS-E9q-E9qOOQS7+%S7+%SO!KkQ#xO,5>OO'WQ#xO,5>OOOQS7+$i7+$iO!KpQ#xO7+%RO!KxQ#xO7+%SO!K}Q#xO1G3nOOQS7+%Z7+%ZO!L_Q#xO1G3nO!LgQ#xO7+%ZOOQS,5<^,5<^O'WQ#xO,5<^O!LlQ#xO1G3iOOQS-E9p-E9pO!McQ#xO7+%_OOQS7+%a7+%aO!MqQ#xO1G3iO!N`Q#xO7+%aO!NeQ#xO1G3oO!NuQ#xO1G3oO!N}Q#xO7+%_O# SQ#xO,5>cO# jQ#xO,5>cO# jQ#xO,5>cO# xO$ISO'#D{O#!TO#tO'#HxOOOW1G0P1G0PO#!YQ#xO1G0POOO`1G0T1G0TO#!bQ#xO1G0TOOOp1G0U1G0UO#!jQ#xO1G0UOOO!b1G0V1G0VO#!rQ#xO1G0VO#!zQ!LUO7+(nO##kQ&nO1G2XP#$UQ#xO'#GROOQS,5<p,5<pOOQS-E:S-E:SOOQS7+&y7+&yOOQS1G3e1G3eOOQS,5<],5<]OOQS-E9o-E9oOOQS7+$u7+$uO#$cQ#xO,5=hO#$|Q#xO,5=hO#%_Q&nO,5<`O#%rQ#xO1G3kOOQS-E9r-E9rOOQS7+&X7+&XO#&SQ#xO7+&XOOQS7+&Z7+&ZO#&bQ#xO'#IQO0UQ#xO'#IPO#&vQ#xO7+&ZOOQS,5<s,5<sO#'RQ#xO1G4XOOQS-E:V-E:VOOQS,5<o,5<oO#'aQ#xO1G4TOOQS-E:R-E:RO#'wQ#{O7+&eO!EwQ#xO'#GZO3^Q#xO7+&eO3^Q#xO7+&hO#+VQ&nO,5<vO'WQ#xO,5<vO#+aQ#xO1G4ZOOQS-E:Y-E:YO#+kQ#xO1G4ZO3^Q#xO7+&jO/oQ#xO7+&jOOQV7+&o7+&oO!F|QMlO7+&qO`Q#yO1G0zOOQV-E:Z-E:ZO3^Q#xO7+&kO3^Q#xO7+&kOOQV,5<w,5<wO#+sQ#xO,5<wOOQV7+&k7+&kO#,OQ#{O7+&kO#/ZQ#xO,5<xO#/fQ#xO1G4[OOQS-E:[-E:[O#/sQ#xO1G4[O#/{Q#xO'#IWO#0ZQ#xO'#IWO0UQ#xO'#IWOOQS'#IW'#IWO#0fQ#xO'#IVOOQS,5;m,5;mO#0nQ#xO,5;mO/oQ#xO'#FTOOQV7+&q7+&qO3^Q#xO7+&qOOQV7+&v7+&vO#0sQ#zO,5;wOOQV7+&{7+&{POOO7+(j7+(jOOQS1G3q1G3qOOQS,5<b,5<bO#0xQ#xO1G3pOOQS-E9t-E9tO#1]Q#xO,5<cO#1hQ#xO,5<cO#1{Q#xO1G3sOOQS-E9u-E9uO#2]Q#xO1G3sO#2eQ#xO1G3sO#2uQ#xO1G3sO#2]Q#xO1G3sOOQS<<H^<<H^O#3QQ&nO1G1yOOQS<<Hm<<HmP#3_Q#xO'#FsO7hQ#xO1G3jO#3lQ#xO1G3jO#3qQ#xO<<HmOOQS<<Hn<<HnO#4RQ#xO7+)YOOQS<<Hu<<HuO#4cQ&nO1G1xP#5SQ#xO'#FrO#5aQ#xO7+)ZO#5qQ#xO7+)ZO#5yQ#xO<<HyO#6OQ#xO7+)TOOQS<<H{<<H{O#6uQ#xO,5<aO'WQ#xO,5<aOOQS-E9s-E9sOOQS<<Hy<<HyOOQS,5<g,5<gO/oQ#xO,5<gO#6zQ#xO1G3}OOQS-E9y-E9yO#7bQ#xO1G3}O;RQ#xO'#D|OOOO'#F|'#F|O#7pO$ISO,5:gOOO#l,5>d,5>dOOOW7+%k7+%kOOO`7+%o7+%oOOOp7+%p7+%pOOO!b7+%q7+%qO#7{Q#xO1G3SO#8fQ#xO1G3SP'WQ#xO'#FtO/oQ#xO<<IsO#8wQ#xO,5>lO#9YQ#xO,5>lO0UQ#xO,5>lO#9kQ#xO,5>kOOQS<<Iu<<IuP0UQ#xO'#GXP/oQ#xO'#GTOOQV-E:X-E:XO3^Q#xO<<JPOOQV,5<u,5<uO3^Q#xO,5<uOOQV<<JP<<JPOOQV<<JS<<JSO#9pQ&nO1G2bP#9zQ#xO'#G[O#:RQ#xO7+)uO#:]Q#{O<<JUO3^Q#xO<<JUOOQV<<J]<<J]O3^Q#xO<<J]O#=hQ#{O7+&fOOQV<<JV<<JVO#=rQ#{O<<JVOOQV1G2c1G2cO0UQ#xO1G2cO3^Q#xO<<JVO0UQ#xO1G2dP/oQ#xO'#G^O#@}Q#xO7+)vO#A[Q#xO7+)vOOQS'#FS'#FSO/oQ#xO,5>rO#AdQ#xO,5>rOOQS,5>r,5>rO#AoQ#xO,5>qO#BQQ#xO,5>qOOQS1G1X1G1XOOQS,5;o,5;oO#BYQ#xO1G1cP#B_Q#xO'#FvO#BoQ#xO1G1}O#CSQ#xO1G1}O#CdQ#xO1G1}P#CoQ#xO'#FwO#C|Q#xO7+)_O#D^Q#xO7+)_O#D^Q#xO7+)_O#DfQ#xO7+)_O#DvQ#xO7+)UO7hQ#xO7+)UOOQSAN>XAN>XO#EaQ#xO<<LuOOQSAN>eAN>eO/oQ#xO1G1{O#EqQ&nO1G1{P#E{Q#xO'#FuOOQS1G2R1G2RP#FYQ#xO'#F{O#FgQ#xO7+)iO#F}Q#xO,5:hOOOO-E9z-E9zO#GYQ#xO7+(nOOQSAN?_AN?_O#GsQ#xO,5<rO#HXQ#xO1G4WOOQS-E:U-E:UO#HjQ#xO1G4WOOQS1G4V1G4VOOQVAN?kAN?kOOQV1G2a1G2aO3^Q#xOAN?pO#H{Q#{OAN?pOOQVAN?wAN?wOOQV<<JQ<<JQO3^Q#xOAN?qO3^Q#xO7+'}OOQVAN?qAN?qOOQS7+(O7+(OO#LWQ#xO<<MbOOQS1G4^1G4^O/oQ#xO1G4^OOQS,5<y,5<yO#LeQ#xO1G4]OOQS-E:]-E:]OOQU'#Ga'#GaO#LvQ#zO7+&}O#MRQ#xO'#F^O#MyQ#xO7+'iO#NZQ#xO7+'iOOQS7+'i7+'iO#NfQ#xO<<LyO#NvQ#xO<<LyO#NvQ#xO<<LyO$ OQ#xO'#HfOOQS<<Lp<<LpO$ YQ#xO<<LpOOQS7+'g7+'gOOOO1G0S1G0SO$ sQ#xO1G0SO0UQ#xO1G2^P0UQ#xO'#GWO$ {Q#xO7+)rO$!^Q#xO7+)rOOQVG25[G25[O3^Q#xOG25[OOQVG25]G25]OOQV<<Ki<<KiOOQS7+)x7+)xP$!oQ#xO'#G_OOQU-E:_-E:_OOQV<<Ji<<JiO$#cQ&nO'#F`OOQS'#Fb'#FbO$#sQ#xO'#FaO$$eQ#xO'#FaOOQS'#Fa'#FaO$$jQ#xO'#IYO#MRQ#xO'#FhO#MRQ#xO'#FhO$%RQ#xO'#FiO#MRQ#xO'#FjO$%YQ#xO'#IZOOQS'#IZ'#IZO$%wQ#xO,5;xOOQS<<KT<<KTO$&PQ#xO<<KTO$&aQ#xOANBeO$&qQ#xOANBeO$&yQ#xO'#HgOOQS'#Hg'#HgO0pQ#xO'#DeO$'dQ#xO,5>QOOQSANB[ANB[OOOO7+%n7+%nOOQS7+'x7+'xO$'{Q#xO<<M^OOQVLD*vLD*vO4gQMlO'#GcO$(^Q&nO,5<RO#MRQ#xO'#FlOOQS,5<V,5<VOOQS'#Fc'#FcO$)OQ#xO,5;{O$)TQ#xO,5;{OOQS'#Ff'#FfO#MRQ#xO'#GbO$)uQ#xO,5<PO$*aQ#xO,5>tO$*qQ#xO,5>tO0UQ#xO,5<OO$+SQ#xO,5<SO$+XQ#xO,5<SO#MRQ#xO'#I[O$+^Q#xO'#I[O$+cQ#xO,5<TOOQS,5<U,5<UO'WQ#xO'#FoOOQU1G1d1G1dO3^Q#xO1G1dOOQSAN@oAN@oO$+hQ#xOG28PO$+xQ#xO,5:POOQS1G3l1G3lOOQS,5<},5<}OOQS-E:a-E:aO$+}Q&nO'#F`O$,UQ#xO'#I]O$,dQ#xO'#I]O$,lQ#xO,5<WOOQS1G1g1G1gO$,qQ#xO1G1gO$,vQ#xO,5<|OOQS-E:`-E:`O$-bQ#xO,5=QO$-yQ#xO1G4`OOQS-E:d-E:dOOQS1G1j1G1jOOQS1G1n1G1nO$.ZQ#xO,5>vO#MRQ#xO,5>vOOQS1G1o1G1oO$.iQ&nO,5<ZOOQU7+'O7+'OO$ OQ#xO1G/kO#MRQ#xO,5<XO$.pQ#xO,5>wO$.wQ#xO,5>wOOQS1G1r1G1rOOQS7+'R7+'RP#MRQ#xO'#GfO$/PQ#xO1G4bO$/ZQ#xO1G4bO$/cQ#xO1G4bOOQS7+%V7+%VO$/qQ#xO1G1sO$0PQ&nO'#F`O$0WQ#xO,5=POOQS,5=P,5=PO$0fQ#xO1G4cOOQS-E:c-E:cO#MRQ#xO,5=OO$0mQ#xO,5=OO$0rQ#xO7+)|OOQS-E:b-E:bO$0|Q#xO7+)|O#MRQ#xO,5<YP#MRQ#xO'#GeO$1UQ#xO1G2jO#MRQ#xO1G2jP$1dQ#xO'#GdO$1kQ#xO<<MhO$1uQ#xO1G1tO$2TQ#xO7+(UO7hQ#xO'#DPO7hQ#xO,59dO7hQ#xO,59dO7hQ#xO,59dO$2cQ&nO,5=hO7hQ#xO1G/OO/oQ#xO1G/ZO/oQ#xO7+$rP$2vQ#xO'#GRO'WQ#xO'#G|O$3TQ#xO,59dO$3YQ#xO,59dO$3aQ#xO,59oO$3fQ#xO1G/WO0pQ#xO'#DTO7hQ#xO,59l\",\n  stateData: \"$3w~O%kOS%`OSUOS%_PQ~OPiOXfOhtOjYOquOu!TOxvO!RwO!S!QO!V!WO!W!VO!ZZO!_[O!jeO!ueO!veO!weO#OyO#QzO#S{O#U|O#W}O#[!OO#^!PO#a!RO#b!RO#d!SO#k!UO#n!XO#r!YO#t!ZO#y![O#|mO$O!]O%wRO%xRO%|SO%}WO&c]O&d^O&g_O&j`O&naO&obO&pcO~O%_!^O~OX!eOa!eOc!fOj!mO!Z!oO!h!qO%r!`O%s!aO%t!bO%u!cO%v!cO%w!dO%x!dO%y!eO%z!eO%{!eO~Om&QXn&QXo&QXp&QXq&QXr&QXu&QX|&QX}&QX!{&QX#f&QX%^&QX%a&QX&S&QXi&QX!V&QX!W&QX&T&QX!Y&QX!^&QX!S&QX#_&QXv&QX!n&QX~P$dOhtOjYO!ZZO!_[O!jeO!ueO!veO!weO%wRO%xRO%|SO%}WO&c]O&d^O&g_O&j`O&naO&obO&pcO~O|&PX}&PX#f&PX%^&PX%a&PX&S&PX~Om!tOn!uOo!sOp!sOq!vOr!wOu!xO!{&PX~P(eOX#OOi#QOq0VOx0eO!RwO~P'WOX#SOq0VOx0eO!Y#TO~P'WOX#WOc#XOq0VOx0eO!^#YO~P'WO&e#]O&f#_O~O&h#`O&i#_O~OQ#bO%b#cO%c#eO~OR#fO%d#gO%e#eO~OS#iO%f#jO%g#eO~OT#lO%h#mO%i#eO~OX%qXa%qXc%qXj%qXm%qXn%qXo%qXp%qXq%qXr%qXu%qX|%qX!Z%qX!h%qX%r%qX%s%qX%t%qX%u%qX%v%qX%w%qX%x%qX%y%qX%z%qX%{%qXi%qX!V%qX!W%qX~O&c]O&d^O&g_O&j`O&naO&obO&pcO}%qX!{%qX#f%qX%^%qX%a%qX&S%qX&T%qX!Y%qX!^%qX!S%qX#_%qXv%qX!n%qX~P+}O|#rO}%pX!{%pX#f%pX%^%pX%a%pX&S%pX~Oq0VOx0eO~P'WO#f#uO%^#wO%a#wO~O%}WO~O!V#|O#t!ZO#y![O#|mO~OquO~P'WOX$ROc$SO%}WO}yP~OX$WOq0VOx0eO!S$XO~P'WO}$ZO!{$`O&S$[O#f!|X%^!|X%a!|X~OX$WOq0VOx0eO#f#VX%^#VX%a#VX~P'WOq0VOx0eO#f#ZX%^#ZX%a#ZX~P'WO!h$fO!u$fO%}WO~OX$pO~P'WO!W$rO#r$sO#t$tO~O}$uO~OX$|O~P'WOU%OO%^$}O%k%PO~OX%YOc%YOi%[Oq0VOx0eO~P'WOq0VOx0eO}%_O~P'WO&b%aO~Oc!fOj!mO!Z!oO!h!qOXdaadamdandaodapdaqdardauda|da}da!{da#fda%^da%ada%rda%sda%tda%uda%vda%wda%xda%yda%zda%{da&Sdaida!Vda!Wda&Tda!Yda!^da!Sda#_davda!nda~Op%fO~Oq%fO~P'WOq0VO~P'WOm0XOn0YOo0WOp0WOq0aOr0bOu0fOi&PX!V&PX!W&PX&T&PX!Y&PX!^&PX!S&PX#_&PX!n&PX~P(eO&T%hOi&OX|&OX!V&OX!W&OX!Y&OX}&OX~Oi%jO|%kO!V%oO!W%nO~Oi%jO~O|%rO!V%oO!W%nO!Y&[X~O!Y%vO~O|%wO}%yO!V%oO!W%nO!^&VX~O!^%}O~O!^&OO~O&e#]O&f&QO~O&h#`O&i&QO~OX&TOq0VOx0eO!RwO~P'WOQ#bO%b#cO%c&WO~OR#fO%d#gO%e&WO~OS#iO%f#jO%g&WO~OT#lO%h#mO%i&WO~OX!taa!tac!taj!tam!tan!tao!tap!taq!tar!tau!ta|!ta}!ta!Z!ta!h!ta!{!ta#f!ta%^!ta%a!ta%r!ta%s!ta%t!ta%u!ta%v!ta%w!ta%x!ta%y!ta%z!ta%{!ta&S!tai!ta!V!ta!W!ta&T!ta!Y!ta!^!ta!S!ta#_!tav!ta!n!ta~P#vO|&`O}%pa!{%pa#f%pa%^%pa%a%pa&S%pa~P$dOX&bOquOxvO}%pa!{%pa#f%pa%^%pa%a%pa&S%pa~P'WO|&`O}%pa!{%pa#f%pa%^%pa%a%pa&S%pa~OPiOXfOquOxvO!RwO!S!QO#OyO#QzO#S{O#U|O#W}O#[!OO#^!PO#a!RO#b!RO#d!SO#f$|X%^$|X%a$|X~P'WO#f#uO%^&gO%a&gO~O!h&hOj&rX%^&rX#_&rX#f&rX%a&rX#^&rX~Oj!mO%^&jO~Omgangaogapgaqgargauga|ga}ga!{ga#fga%^ga%aga&Sgaiga!Vga!Wga&Tga!Yga!^ga!Sga#_gavga!nga~P$dOusa|sa}sa#fsa%^sa%asa&Ssa~Om!tOn!uOo!sOp!sOq!vOr!wO!{sa~PDoO&S&lO|&RX}&RX~O%}WO|&RX}&RX~O|&oO}yX~O}&qO~O|%wO#f&VX%^&VX%a&VXi&VX}&VX!^&VX!n&VX&S&VX~OX0`Oq0VOx0eO!RwO~P'WO&S$[O#fWa%^Wa%aWa~O|&zO#f&XX%^&XX%a&XXp&XX~P$dO|&}O!S&|O#f#Za%^#Za%a#Za~O#_'OO#f#]a%^#]a%a#]a~O!h$fO!u$fO#^'QO%}WO~O#^'QO~O|'SO#f&uX%^&uX%a&uX~O|'UO#f&qX%^&qX%a&qX}&qX~O|'YOp&wX~P$dOp']O~OPiOXfOquOxvO!RwO!S!QO#OyO#QzO#S{O#U|O#W}O#[!OO#^!PO#a!RO#b!RO#d!SO%^'bO~P'WOv'fO#o'dO#p'eOP#maX#mah#maj#maq#mau#max#ma!R#ma!S#ma!V#ma!W#ma!Z#ma!_#ma!j#ma!u#ma!v#ma!w#ma#O#ma#Q#ma#S#ma#U#ma#W#ma#[#ma#^#ma#a#ma#b#ma#d#ma#k#ma#n#ma#r#ma#t#ma#y#ma#|#ma$O#ma%Z#ma%w#ma%x#ma%|#ma%}#ma&c#ma&d#ma&g#ma&j#ma&n#ma&o#ma&p#ma%]#ma%a#ma~O|'gO#_'iO}&xX~Oj'kO~Oj!mO}$uO~O}'oO~P$dO%^'rO~OU'sO%^'rO~OX!eOa!eOc!fOj!mO!Z!oO!h!qO%t!bO%u!cO%v!cO%w!dO%x!dO%y!eO%z!eO%{!eOmYinYioYipYiqYirYiuYi|Yi}Yi!{Yi#fYi%^Yi%aYi%rYi&SYiiYi!VYi!WYi&TYi!YYi!^Yi!SYi#_YivYi!nYi~O%s!aO~P! tO%sYi~P! tOX!eOa!eOc!fOj!mO!Z!oO!h!qO%w!dO%x!dO%y!eO%z!eO%{!eOmYinYioYipYiqYirYiuYi|Yi}Yi!{Yi#fYi%^Yi%aYi%rYi%sYi%tYi&SYiiYi!VYi!WYi&TYi!YYi!^Yi!SYi#_YivYi!nYi~O%u!cO%v!cO~P!$oO%uYi%vYi~P!$oOc!fOj!mO!Z!oO!h!qOmYinYioYipYiqYirYiuYi|Yi}Yi!{Yi#fYi%^Yi%aYi%rYi%sYi%tYi%uYi%vYi%wYi%xYi&SYiiYi!VYi!WYi&TYi!YYi!^Yi!SYi#_YivYi!nYi~OX!eOa!eO%y!eO%z!eO%{!eO~P!'mOXYiaYi%yYi%zYi%{Yi~P!'mO!V%oO!W%nOi&_X|&_X~O&S'uO&T'uO~P+}O|'wOi&^X~Oi'yO~O|'zO}'|O!Y&aX~Oq0VOx0eO|'zO}'}O!Y&aX~P'WO!Y(PO~Oo!sOp!sOq!vOr!wOmliuli|li}li!{li#fli%^li%ali&Sli~On!uO~P!,`Onli~P!,`Om0XOn0YOo0WOp0WOq0aOr0bO~Ov(RO~P!-iOX(WOi(XOq0VOx0eO~P'WOi(XO|(YO~Oi([O~O!W(^O~Oi(_O|(YO!V%oO!W%nO~P$dOm0XOn0YOo0WOp0WOq0aOr0bOisa!Vsa!Wsa&Tsa!Ysa!^sa!Ssa#_savsa!nsa~PDoOX(WOq0VOx0eO!Y&[a~P'WO|(bO!Y&[a~O!Y(cO~O|(bO!V%oO!W%nO!Y&[a~P$dOX(gOq0VOx0eO!^&Va#f&Va%^&Va%a&Vai&Va}&Va!n&Va&S&Va~P'WO|(hO!^&Va#f&Va%^&Va%a&Vai&Va}&Va!n&Va&S&Va~O!^(kO~O|(hO!V%oO!W%nO!^&Va~P$dO|(nO!V%oO!W%nO!^&]a~P$dO|(qO}&kX!^&kX!n&kX~O}(tO!^(vO!n(wO~O}(tO!^(xO!n(yO~O}(tO!^(zO!n({O~O}(tO!^(|O!n(}O~OX&bOquOxvO}%pi!{%pi#f%pi%^%pi%a%pi&S%pi~P'WO|)OO}%pi!{%pi#f%pi%^%pi%a%pi&S%pi~O!h&hOj&ra%^&ra#_&ra#f&ra%a&ra#^&ra~O%^)TO~OX$ROc$SO%}WO~O|&oO}ya~OquOxvO~P'WO|(hO#f&Va%^&Va%a&Vai&Va}&Va!^&Va!n&Va&S&Va~P$dO|)YO#f%pX%^%pX%a%pX&S%pX~O&S$[O#fWi%^Wi%aWi~O#f&Xa%^&Xa%a&Xap&Xa~P'WO|)]O#f&Xa%^&Xa%a&Xap&Xa~OX)aOj)cO%}WO~O#^)dO~O%}WO#f&ua%^&ua%a&ua~O|)fO#f&ua%^&ua%a&ua~Oq0VOx0eO#f&qa%^&qa%a&qa}&qa~P'WO|)iO#f&qa%^&qa%a&qa}&qa~Ov)mO#i)lOP#giX#gih#gij#giq#giu#gix#gi!R#gi!S#gi!V#gi!W#gi!Z#gi!_#gi!j#gi!u#gi!v#gi!w#gi#O#gi#Q#gi#S#gi#U#gi#W#gi#[#gi#^#gi#a#gi#b#gi#d#gi#k#gi#n#gi#r#gi#t#gi#y#gi#|#gi$O#gi%Z#gi%w#gi%x#gi%|#gi%}#gi&c#gi&d#gi&g#gi&j#gi&n#gi&o#gi&p#gi%]#gi%a#gi~Ov)nOP#jiX#jih#jij#jiq#jiu#jix#ji!R#ji!S#ji!V#ji!W#ji!Z#ji!_#ji!j#ji!u#ji!v#ji!w#ji#O#ji#Q#ji#S#ji#U#ji#W#ji#[#ji#^#ji#a#ji#b#ji#d#ji#k#ji#n#ji#r#ji#t#ji#y#ji#|#ji$O#ji%Z#ji%w#ji%x#ji%|#ji%}#ji&c#ji&d#ji&g#ji&j#ji&n#ji&o#ji&p#ji%]#ji%a#ji~OX)pOp&wa~P'WO|)qOp&wa~O|)qOp&wa~P$dOp)uO~O%[)xO~Ov){O#o'dO#p)zOP#miX#mih#mij#miq#miu#mix#mi!R#mi!S#mi!V#mi!W#mi!Z#mi!_#mi!j#mi!u#mi!v#mi!w#mi#O#mi#Q#mi#S#mi#U#mi#W#mi#[#mi#^#mi#a#mi#b#mi#d#mi#k#mi#n#mi#r#mi#t#mi#y#mi#|#mi$O#mi%Z#mi%w#mi%x#mi%|#mi%}#mi&c#mi&d#mi&g#mi&j#mi&n#mi&o#mi&p#mi%]#mi%a#mi~Oq0VOx0eO}$uO~P'WOq0VOx0eO}&xa~P'WO|*RO}&xa~OX*VOc*WOi*ZO%y*XO%}WO~O}$uO&{*]O~O%^*aO~O%^*cO~OX%YOc%YOq0VOx0eOi&^a~P'WO|*fOi&^a~Oq0VOx0eO}*iO!Y&aa~P'WO|*jO!Y&aa~Oq0VOx0eO|*jO}*mO!Y&aa~P'WOq0VOx0eO|*jO!Y&aa~P'WO|*jO}*mO!Y&aa~Oo0WOp0WOq0aOr0bOilimliuli|li!Vli!Wli&Tli!Yli}li!^li#fli%^li%ali!Sli#_livli!nli&Sli~On0YO~P!IeOnli~P!IeOX(WOi*rOq0VOx0eO~P'WOp*tO~Oi*rO|*vO~Oi*wO~OX(WOq0VOx0eO!Y&[i~P'WO|*xO!Y&[i~O!Y*yO~OX(gOq0VOx0eO!^&Vi#f&Vi%^&Vi%a&Vii&Vi}&Vi!n&Vi&S&Vi~P'WO|*|O!V%oO!W%nO!^&]i~O|+PO!^&Vi#f&Vi%^&Vi%a&Vii&Vi}&Vi!n&Vi&S&Vi~O!^+QO~Oc+SOq0VOx0eO!^&]i~P'WO|*|O!^&]i~O!^+UO~OX+WOq0VOx0eO}&ka!^&ka!n&ka~P'WO|+XO}&ka!^&ka!n&ka~O!_+[O&m+]O!^!oX~O!^+_O~O}(tO!^+`O~O}(tO!^+aO~O}(tO!^+bO~O}(tO!^+cO~OX&bOquOxvO}%pq!{%pq#f%pq%^%pq%a%pq&S%pq~P'WO|$ui}$ui!{$ui#f$ui%^$ui%a$ui&S$ui~P$dOX&bOquOxvO~P'WOX&bOq0VOx0eO#f%pa%^%pa%a%pa&S%pa~P'WO|+dO#f%pa%^%pa%a%pa&S%pa~O|$ha#f$ha%^$ha%a$hap$ha~P$dO#f&Xi%^&Xi%a&Xip&Xi~P'WO|+gO#f#Zq%^#Zq%a#Zq~O|+hO#_+jO#f&tX%^&tX%a&tXi&tX~OX+lOj)cO%}WO~O%}WO#f&ui%^&ui%a&ui~Oq0VOx0eO#f&qi%^&qi%a&qi}&qi~P'WOv+pO#i)lOP#gqX#gqh#gqj#gqq#gqu#gqx#gq!R#gq!S#gq!V#gq!W#gq!Z#gq!_#gq!j#gq!u#gq!v#gq!w#gq#O#gq#Q#gq#S#gq#U#gq#W#gq#[#gq#^#gq#a#gq#b#gq#d#gq#k#gq#n#gq#r#gq#t#gq#y#gq#|#gq$O#gq%Z#gq%w#gq%x#gq%|#gq%}#gq&c#gq&d#gq&g#gq&j#gq&n#gq&o#gq&p#gq%]#gq%a#gq~Op%Oa|%Oa~P$dOX)pOp&wi~P'WO|+wOp&wi~O|,QO}$uO#_,QO~O#p,ROP#mqX#mqh#mqj#mqq#mqu#mqx#mq!R#mq!S#mq!V#mq!W#mq!Z#mq!_#mq!j#mq!u#mq!v#mq!w#mq#O#mq#Q#mq#S#mq#U#mq#W#mq#[#mq#^#mq#a#mq#b#mq#d#mq#k#mq#n#mq#r#mq#t#mq#y#mq#|#mq$O#mq%Z#mq%w#mq%x#mq%|#mq%}#mq&c#mq&d#mq&g#mq&j#mq&n#mq&o#mq&p#mq%]#mq%a#mq~O#_,SO|%Qa}%Qa~Oq0VOx0eO}&xi~P'WO|,UO}&xi~O}$ZO&S,WOi&zX|&zX~O%}WOi&zX|&zX~O|,[Oi&yX~Oi,^O~O%[,`O~OX%YOc%YOq0VOx0eOi&^i~P'WO},bO|$ka!Y$ka~Oq0VOx0eO},cO|$ka!Y$ka~P'WOq0VOx0eO}*iO!Y&ai~P'WO|,fO!Y&ai~Oq0VOx0eO|,fO!Y&ai~P'WO|,fO},iO!Y&ai~Oi$gi|$gi!Y$gi~P$dOX(WOq0VOx0eO~P'WOp,kO~OX(WOi,lOq0VOx0eO~P'WOX(WOq0VOx0eO!Y&[q~P'WO|$fi!^$fi#f$fi%^$fi%a$fii$fi}$fi!n$fi&S$fi~P$dOX(gOq0VOx0eO~P'WOc+SOq0VOx0eO!^&]q~P'WO|,mO!^&]q~O!^,nO~OX(gOq0VOx0eO!^&Vq#f&Vq%^&Vq%a&Vqi&Vq}&Vq!n&Vq&S&Vq~P'WO},oO~OX+WOq0VOx0eO}&ki!^&ki!n&ki~P'WO|,tO}&ki!^&ki!n&ki~O!_+[O&m+]O!^!oa~OX&bOq0VOx0eO#f%pi%^%pi%a%pi&S%pi~P'WO|,wO#f%pi%^%pi%a%pi&S%pi~O%}WO#f&ta%^&ta%a&tai&ta~O|,zO#f&ta%^&ta%a&tai&ta~Oi,}O~Op%Oi|%Oi~P$dOX)pO~P'WOX)pOp&wq~P'WOv-QOP#lyX#lyh#lyj#lyq#lyu#lyx#ly!R#ly!S#ly!V#ly!W#ly!Z#ly!_#ly!j#ly!u#ly!v#ly!w#ly#O#ly#Q#ly#S#ly#U#ly#W#ly#[#ly#^#ly#a#ly#b#ly#d#ly#k#ly#n#ly#r#ly#t#ly#y#ly#|#ly$O#ly%Z#ly%w#ly%x#ly%|#ly%}#ly&c#ly&d#ly&g#ly&j#ly&n#ly&o#ly&p#ly%]#ly%a#ly~O%]-TO%a-TO~P`O#p-UOP#myX#myh#myj#myq#myu#myx#my!R#my!S#my!V#my!W#my!Z#my!_#my!j#my!u#my!v#my!w#my#O#my#Q#my#S#my#U#my#W#my#[#my#^#my#a#my#b#my#d#my#k#my#n#my#r#my#t#my#y#my#|#my$O#my%Z#my%w#my%x#my%|#my%}#my&c#my&d#my&g#my&j#my&n#my&o#my&p#my%]#my%a#my~Oq0VOx0eO}&xq~P'WO|-YO}&xq~O&S,WOi&za|&za~OX*VOc*WO%y*XO%}WOi&ya~O|-^Oi&ya~O$R-bO~OX%YOc%YOq0VOx0eO~P'WOq0VOx0eO}-cO|$ki!Y$ki~P'WOq0VOx0eO|$ki!Y$ki~P'WO}-cO|$ki!Y$ki~Oq0VOx0eO}*iO~P'WOq0VOx0eO}*iO!Y&aq~P'WO|-fO!Y&aq~Oq0VOx0eO|-fO!Y&aq~P'WOu-iO!V%oO!W%nOi&Wq!Y&Wq!^&Wq|&Wq~P!-iOc+SOq0VOx0eO!^&]y~P'WO|$ii!^$ii~P$dOc+SOq0VOx0eO~P'WOX+WOq0VOx0eO~P'WOX+WOq0VOx0eO}&kq!^&kq!n&kq~P'WO}(tO!^-mO!n-nO~OX&bOq0VOx0eO#f%pq%^%pq%a%pq&S%pq~P'WO#_-oO|$za#f$za%^$za%a$zai$za~O%}WO#f&ti%^&ti%a&tii&ti~O|-qO#f&ti%^&ti%a&tii&ti~Ov-tOP#l!RX#l!Rh#l!Rj#l!Rq#l!Ru#l!Rx#l!R!R#l!R!S#l!R!V#l!R!W#l!R!Z#l!R!_#l!R!j#l!R!u#l!R!v#l!R!w#l!R#O#l!R#Q#l!R#S#l!R#U#l!R#W#l!R#[#l!R#^#l!R#a#l!R#b#l!R#d#l!R#k#l!R#n#l!R#r#l!R#t#l!R#y#l!R#|#l!R$O#l!R%Z#l!R%w#l!R%x#l!R%|#l!R%}#l!R&c#l!R&d#l!R&g#l!R&j#l!R&n#l!R&o#l!R&p#l!R%]#l!R%a#l!R~Oq0VOx0eO}&xy~P'WOX*VOc*WO%y*XO%}WOi&yi~O$R-bO%]-zO%a-zO~OX.UOj.SO!Z.RO!_.TO!j-}O!v.PO!w.PO%x-|O%}WO&c]O&d^O&g_O~Oq0VOx0eO|$kq!Y$kq~P'WO}.ZO|$kq!Y$kq~Oq0VOx0eO}*iO!Y&ay~P'WO|.[O!Y&ay~Oq0VOx.`O~P'WOu-iO!V%oO!W%nOi&Wy!Y&Wy!^&Wy|&Wy~P!-iO}(tO!^.cO~O%}WO#f&tq%^&tq%a&tqi&tq~O|.eO#f&tq%^&tq%a&tqi&tq~OX*VOc*WO%y*XO%}WO~Oj.iO!h.gO|$SX#_$SX%r$SXi$SX~Ou$SX}$SX!Y$SX!^$SX~P$!}O%w.kO%x.kOu$TX|$TX}$TX#_$TX%r$TX!Y$TXi$TX!^$TX~O!j.mO~O|.qO#_.sO%r.nOu&|X}&|X!Y&|Xi&|X~Oc.vO~P#M_Oj.iOu&}X|&}X}&}X#_&}X%r&}X!Y&}Xi&}X!^&}X~Ou.zO}$uO~Oq0VOx0eO|$ky!Y$ky~P'WOq0VOx0eO}*iO!Y&a!R~P'WO|/OO!Y&a!R~Oi&ZXu&ZX!V&ZX!W&ZX!Y&ZX!^&ZX|&ZX~P!-iOu-iO!V%oO!W%nOi&Ya!Y&Ya!^&Ya|&Ya~O%}WO#f&ty%^&ty%a&tyi&ty~O!h.gOj$Zau$Za|$Za}$Za#_$Za%r$Za!Y$Zai$Za!^$Za~O!j/XO~O%w.kO%x.kOu$Ta|$Ta}$Ta#_$Ta%r$Ta!Y$Tai$Ta!^$Ta~O%r.nOu$Xa|$Xa}$Xa#_$Xa!Y$Xai$Xa!^$Xa~Ou&|a}&|a!Y&|ai&|a~P#MRO|/^Ou&|a}&|a!Y&|ai&|a~O!Y/aO~Oi/aO~O}/cO~O!^/dO~Oq0VOx0eO}*iO!Y&a!Z~P'WO}/gO~O&S/hO~P$!}O|/iO#_.sO%r.nOi'PX~O|/iOi'PX~Oi/kO~O!j/lO~O#_.sOu%Ua|%Ua}%Ua%r%Ua!Y%Uai%Ua!^%Ua~O#_.sO%r.nOu%Ya|%Ya}%Ya!Y%Yai%Ya~Ou&|i}&|i!Y&|ii&|i~P#MRO|/nO#_.sO%r.nO!^'Oa~O}$ca~P$dOi'Pa~P#MRO|/vOi'Pa~Oc/xO!^'Oi~P#M_O|/zO!^'Oi~O|/zO#_.sO%r.nO!^'Oi~O#_.sO%r.nOi$ai|$ai~O&S/}O~P$!}O#_.sO%r.nOi%Xa|%Xa~Oi'Pi~P#MRO}0QO~Oc/xO!^'Oq~P#M_O|0SO!^'Oq~O#_.sO%r.nO|%Wi!^%Wi~Oc/xO~P#M_Oc/xO!^'Oy~P#M_O#_.sO%r.nOi$bi|$bi~O#_.sO%r.nO|%Wq!^%Wq~O|+dO#f%pa%^%pa%a%pa&S%pa~P$dOX&bOq0VOx0eO~P'WOp0[O~Oq0[O~P'WO}0]O~Ov0^O~P!-iO&d&g&o&p&c&j&n%}&c~\",\n  goto: \"!<w'QPPPPPPPP'RP'Z*s+]+v,b,}-kP.YP'Z.y.y'ZPPP'Z2cPPPPPP2c5VPP5VP7g7p=pPP=s>e>hPP'Z'ZPP?QPP'Z'ZPP'Z'Z'Z'Z'Z?U?{'ZP@OP@UD]GyPG}HZH_HcHg'ZPPPHkHq'RP'R'RP'RP'RP'RP'RP'R'R'RP'RPP'RPP'RPHwPIOIUPIOPIOIOPPPIOPKTPK^KdKjKTPIOKpPIOPKwK}PLRLgMUMoLRLRMuNSLRLRLRLRNhNnNqNvNy! T! Z! g! y!!P!!Z!!a!!}!#T!#Z!#a!#k!#q!#w!#}!$T!$Z!$m!$w!$}!%T!%Z!%e!%k!%q!%w!&R!&X!&c!&i!&r!&x!'X!'a!'k!'rPPPPPPPPPPPPPPPPP!'x!'{!(R!([!(f!(qPPPPPPPPPPPP!-e!.y!2s!6TPP!6]!6o!6x!7n!7e!7w!7}!8Q!8T!8W!8`!9PPPPPPPPPP!9S!9cPPPP!:R!:_!:k!:q!:z!:}!;T!;Z!;a!;dP!;l!;u!<q!<t]jOs#u$u)x+|'}eOTYZ[fistuwy}!O!S!T!U!V!Y!]!g!h!i!j!k!l!m!o!s!t!u!w!x#O#S#W#X#b#f#i#l#r#u$W$X$Z$]$`$p$r$s$u$|%Y%_%f%i%k%n%r%w%y&T&`&b&m&q&z&|&}'U'Y']'d'g'v'w'z'|'}(R(W(Y(^(b(g(h(n(q)O)Q)Y)])i)l)p)q)u)x*R*]*f*i*j*m*s*t*v*x*{*|+P+S+W+X+[+d+f+g+n+v+w+|,T,U,X,a,b,c,e,f,i,k,m,o,q,s,t,w-Y-[-c-f-i.Z.[.z/O/g0V0W0X0Y0[0]0^0_0`0b0f}!gQ#q$O$a$o${%p%u%{%|&r'['q)P)[)o*q*z+u,p/e0Z!P!hQ#q$O$a$o${%Q%p%u%{%|&r'['q)P)[)o*q*z+u,p/e0Z!R!iQ#q$O$a$o${%Q%R%p%u%{%|&r'['q)P)[)o*q*z+u,p/e0Z!T!jQ#q$O$a$o${%Q%R%S%p%u%{%|&r'['q)P)[)o*q*z+u,p/e0Z!V!kQ#q$O$a$o${%Q%R%S%T%p%u%{%|&r'['q)P)[)o*q*z+u,p/e0Z!X!lQ#q$O$a$o${%Q%R%S%T%U%p%u%{%|&r'['q)P)[)o*q*z+u,p/e0Z!]!lQ!r#q$O$a$o${%Q%R%S%T%U%V%p%u%{%|&r'['q)P)[)o*q*z+u,p/e0Z'}TOTYZ[fistuwy}!O!S!T!U!V!Y!]!g!h!i!j!k!l!m!o!s!t!u!w!x#O#S#W#X#b#f#i#l#r#u$W$X$Z$]$`$p$r$s$u$|%Y%_%f%i%k%n%r%w%y&T&`&b&m&q&z&|&}'U'Y']'d'g'v'w'z'|'}(R(W(Y(^(b(g(h(n(q)O)Q)Y)])i)l)p)q)u)x*R*]*f*i*j*m*s*t*v*x*{*|+P+S+W+X+[+d+f+g+n+v+w+|,T,U,X,a,b,c,e,f,i,k,m,o,q,s,t,w-Y-[-c-f-i.Z.[.z/O/g0V0W0X0Y0[0]0^0_0`0b0f&cVOYZ[isuw}!O!S!T!U!Y!m!o!s!t!u!w!x#b#f#i#l#r#u$X$Z$]$`$s$u%Y%_%f%i%k%r%w%y&T&`&m&q&|&}'U']'d'g'v'w'z'|'}(R(Y(b(h(n(q)O)Q)Y)i)l)u)x*R*]*f*i*j*m*s*t*v*x*{*|+P+W+X+[+d+g+n+|,T,U,X,a,b,c,e,f,i,k,m,o,q,s,t,w-Y-[-c-f-i.Z.[/O/g0V0W0X0Y0[0]0^0_0b0f%mXOYZ[isw}!O!S!T!U!Y!m!o#b#f#i#l#r#u$X$Z$]$`$s$u%Y%_%i%k%r%w%y&T&`&m&q&|&}'U']'d'g'v'w'z'|'}(R(Y(b(h(n(q)O)Q)Y)i)l)u)x*R*]*f*i*j*m*s*v*x*{*|+P+W+X+[+d+g+n+|,T,U,X,a,b,c,e,f,i,m,o,q,s,t,w-Y-[-c-f.Z.[/O0]0^0_Q$UvQ/P.`R0c0e'teOTYZ[fistuwy}!O!S!T!U!V!Y!]!g!h!i!j!k!l!o!s!t!u!w!x#O#S#W#X#b#f#i#l#r#u$W$X$Z$]$`$p$r$s$u$|%Y%_%f%i%k%n%r%w%y&T&`&b&m&q&z&|&}'U'Y']'d'g'v'z'|'}(R(W(Y(^(b(g(h(n(q)O)Q)Y)])i)l)p)q)u)x*R*]*i*j*m*s*t*v*x*{*|+P+S+W+X+[+d+f+g+n+v+w+|,T,U,X,b,c,e,f,i,k,m,o,q,s,t,w-Y-[-c-f-i.Z.[.z/O/g0V0W0X0Y0[0]0^0_0`0b0fW#xm!P!Q$gW$Qv&o.`0eQ$i!RQ$y!ZQ$z![W%X!m'w*f,aS&n$R$SQ'`$tQ)R&hQ)a'OU)b'Q)c)dU)e'S)f+mQ*T'iW*U'k,[-^-xS,Z*V*WY,y+h,z-p-q.eQ,|+jQ-V,QQ-X,Sl-{-b.R.S.U.o.q.v/^/c/h/m/x/}0QQ.d-oQ.w.TQ/T.iQ/`.sU/s/i/v0OX/y/n/z0R0SR&m$Q!_!{YZ!T!U!o%_%k%r'z'|'}(Y(b)l*i*j*m*s*v*x,b,c,e,f,i-c-f.Z.[/OR%i!zQ#PYQ&U#bQ&X#fQ&Z#iQ&]#lQ&v$]Q&y$`R,u+[T._-i/g![!nQ!r#q$O$a$o${%Q%R%S%T%U%V%p%u%{%|&r'['q)P)[)o*q*z+u,p/e0ZQ&k#yR'n$zR'v%XQ%b!qR/R.g'|dOTYZ[fistuwy}!O!S!T!U!V!Y!]!g!h!i!j!k!l!m!o!s!t!u!w!x#O#S#W#X#b#f#i#l#r#u$W$X$Z$]$`$p$r$s$u$|%Y%_%f%i%k%n%r%w%y&T&`&b&m&q&z&|&}'U'Y']'d'g'v'w'z'|'}(R(W(Y(^(b(g(h(n(q)O)Q)Y)])i)l)p)q)u)x*R*]*f*i*j*m*s*t*v*x*{*|+P+S+W+X+[+d+f+g+n+v+w+|,T,U,X,a,b,c,e,f,i,k,m,o,q,s,t,w-Y-[-c-f-i.Z.[.z/O/g0V0W0X0Y0[0]0^0_0`0b0fS#od#p!P.P-b.R.S.T.U.i.o.q.v/^/c/h/i/m/n/v/x/z/}0O0Q0R0S'|dOTYZ[fistuwy}!O!S!T!U!V!Y!]!g!h!i!j!k!l!m!o!s!t!u!w!x#O#S#W#X#b#f#i#l#r#u$W$X$Z$]$`$p$r$s$u$|%Y%_%f%i%k%n%r%w%y&T&`&b&m&q&z&|&}'U'Y']'d'g'v'w'z'|'}(R(W(Y(^(b(g(h(n(q)O)Q)Y)])i)l)p)q)u)x*R*]*f*i*j*m*s*t*v*x*{*|+P+S+W+X+[+d+f+g+n+v+w+|,T,U,X,a,b,c,e,f,i,k,m,o,q,s,t,w-Y-[-c-f-i.Z.[.z/O/g0V0W0X0Y0[0]0^0_0`0b0fT#od#pT#c`#de(u&U&X&Z&](w(y({(},u-nT+](t+^T#ga#hT#jb#kT#mc#nQ$_xR,Y*UX$]x$^$_&xZlOs$u)x+|XpOs)x+|Q$v!XQ'W$mQ'X$nQ'j$xQ'm$zQ)v'_Q)|'dQ*O'eQ*P'fQ*^'lQ*`'nQ+q)lQ+s)mQ+t)nQ+x)tS+z)w*_Q+})zQ,O){Q,P)}Q-O+pQ-P+rQ-R+yQ-S+{Q-W,RQ-s-QQ-u-UQ-v-VQ.f-tQ.{.XR/f.|WpOs)x+|R#{oQ'l$yR)w'`Q,X*UR-[,YQ*_'lR+{)wZnOos)x+|Q'p${R*b'qT-`,`-au.W-b.R.S.U.i.o.q.v/^/c/h/i/m/v/x/}0O0Qt.W-b.R.S.U.i.o.q.v/^/c/h/i/m/v/x/}0O0QQ.w.TX/y/n/z0R0S!P.O-b.R.S.T.U.i.o.q.v/^/c/h/i/m/n/v/x/z/}0O0Q0R0SQ.l-}R/Y.mg.o.Q.p/U/]/b/p/r/t0P0T0Uu.V-b.R.S.U.i.o.q.v/^/c/h/i/m/v/x/}0O0QX.j-{.V/T/sR/V.iV/u/i/v0OR.|.XQsOS#}s+|R+|)xQ&p$TR)W&pS%x#V$VS(i%x(lT(l%{&rQ%l!}Q%s#RW(Z%l%s(`(dQ(`%pR(d%uQ&{$aR)^&{Q(o%|Q*}(jT+T(o*}Q'x%ZR*g'xS'{%^%_Y*k'{*l,g-g.]U*l'|'}(OU,g*m*n*oS-g,h,iR.]-hQ#^^R&P#^Q#a_R&R#aQ#d`R&V#dQ(r&SS+Y(r+ZR+Z(sQ+^(tR,v+^Q#haR&Y#hQ#kbR&[#kQ#ncR&^#nQ#pdR&_#pQ#sgQ&a#qW&d#s&a)Z+eQ)Z&uR+e0ZQ$^xS&w$^&xR&x$_Q'V$kR)j'VQ&i#xR)S&iQ$g!QR'P$gQ+i)bS,{+i-rR-r,|Q'T$iR)g'TQ#vkR&f#vQ)k'WR+o)kQ'Z$oS)r'Z)sR)s'[Q'c$vR)y'cQ'h$wS*S'h,VR,V*TQ,]*YR-_,]WoOs)x+|R#zoQ-a,`R-y-ad.p.Q/U/]/b/p/r/t0P0T0UR/[.pU.h-{/T/sR/S.hQ/o/bS/{/o/|R/|/pS/j/U/VR/w/jQ.r.QR/_.rR!_PXrOs)x+|WqOs)x+|R'a$uYkOs$u)x+|R&e#u[xOs#u$u)x+|R&v$]&bQOYZ[isuw}!O!S!T!U!Y!m!o!s!t!u!w!x#b#f#i#l#r#u$X$Z$]$`$s$u%Y%_%f%i%k%r%w%y&T&`&m&q&|&}'U']'d'g'v'w'z'|'}(R(Y(b(h(n(q)O)Q)Y)i)l)u)x*R*]*f*i*j*m*s*t*v*x*{*|+P+W+X+[+d+g+n+|,T,U,X,a,b,c,e,f,i,k,m,o,q,s,t,w-Y-[-c-f-i.Z.[/O/g0V0W0X0Y0[0]0^0_0b0fQ!rTQ#qfQ$OtU$ay%n(^S$o!V$rQ${!]Q%Q!gQ%R!hQ%S!iQ%T!jQ%U!kQ%V!lQ%p#OQ%u#SQ%{#WQ%|#XQ&r$WQ'[$pQ'q$|Q)P&bU)[&z)]+fW)o'Y)q+v+wQ*q(WQ*z(gQ+u)pQ,p+SQ/e.zR0Z0`Q!}YQ#RZQ$m!TQ$n!UQ%^!oQ(O%_^(V%k%r(Y(b*s*v*x^*h'z*j,e,f-f.[/OQ*n'|Q*o'}Q+r)lQ,d*iQ,h*mQ-d,bQ-e,cQ-h,iQ.Y-cR.}.Z[gOs#u$u)x+|!^!zYZ!T!U!o%_%k%r'z'|'}(Y(b)l*i*j*m*s*v*x,b,c,e,f,i-c-f.Z.[/OQ#V[Q#tiS$Vw}Q$d!OW$k!S$`'])uS$w!Y$sW%W!m'w*f,aY&S#b#f#i#l+[`&c#r&`)O)Q)Y+d,w0_Q&s$XQ&t$ZQ&u$]Q't%YQ(U%iW(f%w(h*{+PQ(j%yQ(s&TQ)U&mS)X&q0]Q)_&|Q)`&}U)h'U)i+nQ)}'dY*Q'g*R,T,U-YQ*d'vS*p(R0^W+R(n*|,m,qW+V(q+X,s,tQ,_*]Q,r+WQ,x+gQ-Z,XQ-l,oR-w-[hUOs#r#u$u&`&q(R)O)Q)x+|%S!yYZ[iw}!O!S!T!U!Y!m!o#b#f#i#l$X$Z$]$`$s%Y%_%i%k%r%w%y&T&m&|&}'U']'d'g'v'w'z'|'}(Y(b(h(n(q)Y)i)l)u*R*]*f*i*j*m*s*v*x*{*|+P+W+X+[+d+g+n,T,U,X,a,b,c,e,f,i,m,o,q,s,t,w-Y-[-c-f.Z.[/O0]0^0_Q$PuW%c!s!w0W0bQ%d!tQ%e!uQ%g!xQ%q0VS(Q%f0[Q(S0XQ(T0YQ,j*tQ-k,kS.^-i/gR0d0fU$Tv.`0eR)V&o[hOs#u$u)x+|a!|Y#b#f#i#l$]$`+[Q#[[Q$YwR$c}Q%m!}Q%t#RQ%z#VQ't%WQ(a%pQ(e%uQ(m%{Q(p%|Q+O(jQ-j,jQ.b-kR/Q.aQ$byQ(]%nR*u(^Q.a-iR/q/gR#UZR#Z[R%]!mQ%Z!mV*e'w*f,a!]!pQ!r#q$O$a$o${%Q%R%S%T%U%V%p%u%{%|&r'['q)P)[)o*q*z+u,p/e0ZR%`!oQ&U#bQ&X#fQ&Z#iQ&]#lR,u+[Q(v&UQ(x&XQ(z&ZQ(|&]Q+`(wQ+a(yQ+b({Q+c(}Q-m,uR.c-nQ$l!SQ&y$`Q)t']R+y)uQ#ymQ$e!PQ$h!QR'R$gQ)a'QR+l)dQ)a'QQ+k)cR+l)dR$j!RXqOs)x+|Q$q!VR'^$rQ$x!YR'_$sR*['kQ*Y'kV-],[-^-xQ.X-bQ.t.RR.u.SU.Q-b.R.SQ.y.UQ/U.iQ/Z.oU/].q/^/mQ/b.vQ/p/cQ/r/hU/t/i/v0OQ0P/xQ0T/}R0U0QR.x.TR/W.i\",\n  nodeNames: \"\u26A0 print { { { { Comment Script AssignStatement * BinaryExpression BitOp BitOp BitOp BitOp ArithOp ArithOp @ ArithOp ** UnaryExpression ArithOp BitOp AwaitExpression await ) ( ParenthesizedExpression BinaryExpression or and CompareOp in not is UnaryExpression ConditionalExpression if else LambdaExpression lambda ParamList VariableName AssignOp , : NamedExpression AssignOp YieldExpression yield from TupleExpression ComprehensionExpression async for LambdaExpression ] [ ArrayExpression ArrayComprehensionExpression } { DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression CallExpression ArgList AssignOp MemberExpression . PropertyName Number String FormatString FormatReplacement FormatConversion FormatSpec FormatReplacement FormatReplacement FormatReplacement FormatReplacement ContinuedString Ellipsis None Boolean TypeDef AssignOp UpdateStatement UpdateOp ExpressionStatement DeleteStatement del PassStatement pass BreakStatement break ContinueStatement continue ReturnStatement return YieldStatement PrintStatement RaiseStatement raise ImportStatement import as ScopeStatement global nonlocal AssertStatement assert StatementGroup ; IfStatement Body elif WhileStatement while ForStatement TryStatement try except finally WithStatement with FunctionDefinition def ParamList AssignOp TypeDef ClassDefinition class DecoratedStatement Decorator At MatchStatement match MatchBody MatchClause case CapturePattern LiteralPattern ArithOp ArithOp AsPattern OrPattern LogicOp AttributePattern SequencePattern MappingPattern StarPattern ClassPattern PatternArgList KeywordPattern KeywordPattern Guard\",\n  maxTerm: 277,\n  context: trackIndent,\n  nodeProps: [\n    [\"group\", -14,8,88,90,91,93,95,97,99,101,102,103,105,108,111,\"Statement Statement\",-22,10,20,23,27,42,51,52,58,59,62,63,64,65,66,69,72,73,74,82,83,84,85,\"Expression\",-10,113,115,118,120,121,125,127,132,134,137,\"Statement\",-9,142,143,146,147,149,150,151,152,153,\"Pattern\"],\n    [\"openedBy\", 25,\"(\",56,\"[\",60,\"{\"],\n    [\"closedBy\", 26,\")\",57,\"]\",61,\"}\"]\n  ],\n  propSources: [pythonHighlighting],\n  skippedNodes: [0,6],\n  repeatNodeCount: 37,\n  tokenData: \"%-W#sR!`OX%TXY=|Y[%T[]=|]p%Tpq=|qr@_rsDOst!+|tu%Tuv!Nnvw#!|wx#$Wxy#:Uyz#;Yz{#<^{|#>x|}#@S}!O#AW!O!P#Ci!P!Q#N_!Q!R$!y!R![$&w![!]$1e!]!^$3s!^!_$4w!_!`$7c!`!a$8m!a!b%T!b!c$;U!c!d$<b!d!e$>W!e!h$<b!h!i$H[!i!t$<b!t!u%#r!u!w$<b!w!x$Fl!x!}$<b!}#O%%z#O#P?d#P#Q%'O#Q#R%(S#R#S$<b#S#T%T#T#U$<b#U#V$>W#V#Y$<b#Y#Z$H[#Z#f$<b#f#g%#r#g#i$<b#i#j$Fl#j#o$<b#o#p%)^#p#q%*S#q#r%+^#r#s%,S#s$g%T$g;'S$<b;'S;=`$>Q<%lO$<b!n%^]&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!n&^]&m!b&eSOr%Trs'Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!n'^]&m!b&eSOr%Trs(Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!f(^Z&m!b&eSOw(Vwx)Px#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V!f)UZ&m!bOw(Vwx)wx#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V!f)|Z&m!bOw(Vwx*ox#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V!b*tT&m!bO#o*o#p#q*o#r;'S*o;'S;=`+T<%lO*o!b+WP;=`<%l*o!f+`W&m!bO#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`.d;=`<%l+x<%lO(VS+}V&eSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^<%lO+xS,gVOw+xwx,|x#O+x#O#P-c#P;'S+x;'S;=`.^<%lO+xS-PUOw+xx#O+x#O#P-c#P;'S+x;'S;=`.^<%lO+xS-fRO;'S+x;'S;=`-o;=`O+xS-tW&eSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^;=`<%l+x<%lO+xS.aP;=`<%l+x!f.iW&eSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^;=`<%l(V<%lO+x!f/UP;=`<%l(V!n/`]&m!b&hWOr%Trs&Vsw%Twx0Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!n0`]&m!b&hWOr%Trs&Vsw%Twx1Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!j1`Z&m!b&hWOr1Xrs2Rs#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X!j2WZ&m!bOr1Xrs2ys#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X!j3OZ&m!bOr1Xrs*os#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X!j3vW&m!bO#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`6z;=`<%l4`<%lO1XW4eV&hWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t<%lO4`W4}VOr4`rs5ds#O4`#O#P5y#P;'S4`;'S;=`6t<%lO4`W5gUOr4`s#O4`#O#P5y#P;'S4`;'S;=`6t<%lO4`W5|RO;'S4`;'S;=`6V;=`O4`W6[W&hWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l4`<%lO4`W6wP;=`<%l4`!j7PW&hWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l1X<%lO4`!j7lP;=`<%l1X!n7tW&m!bO#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=P;=`<%l8^<%lO%T[8eX&eS&hWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[9VX&eSOr8^rs9rsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[9wX&eSOr8^rs+xsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[:iX&hWOr8^rs9Qsw8^wx;Ux#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[;ZX&hWOr8^rs9Qsw8^wx4`x#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^[;yRO;'S8^;'S;=`<S;=`O8^[<ZY&eS&hWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y;=`<%l8^<%lO8^[<|P;=`<%l8^!n=WY&eS&hWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y;=`<%l%T<%lO8^!n=yP;=`<%l%T#s>Xc&m!b&eS&hW%k!TOX%TXY=|Y[%T[]=|]p%Tpq=|qr%Trs&Vsw%Twx/Xx#O%T#O#P?d#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#s?i[&m!bOY%TYZ=|Z]%T]^=|^#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=P;=`<%l8^<%lO%T!q@hd&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`Av!`#O%T#O#P7o#P#T%T#T#UBz#U#f%T#f#gBz#g#hBz#h#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!qBR]oR&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!qCV]!nR&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#cDXa&m!b&eS&csOYE^YZ%TZ]E^]^%T^rE^rs!)|swE^wxGpx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#cEia&m!b&eS&hW&csOYE^YZ%TZ]E^]^%T^rE^rsFnswE^wxGpx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#cFw]&m!b&eS&csOr%Trs'Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#cGya&m!b&hW&csOYE^YZ%TZ]E^]^%T^rE^rsFnswE^wxIOx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#cIXa&m!b&hW&csOYE^YZ%TZ]E^]^%T^rE^rsFnswE^wxJ^x#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#_Jg_&m!b&hW&csOYJ^YZ1XZ]J^]^1X^rJ^rsKfs#OJ^#O#PL`#P#oJ^#o#pL}#p#qJ^#q#rL}#r;'SJ^;'S;=`!!o<%lOJ^#_KmZ&m!b&csOr1Xrs2ys#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X#_LeW&m!bO#oJ^#o#pL}#p#qJ^#q#rL}#r;'SJ^;'S;=`! r;=`<%lL}<%lOJ^{MUZ&hW&csOYL}YZ4`Z]L}]^4`^rL}rsMws#OL}#O#PNc#P;'SL};'S;=`! l<%lOL}{M|V&csOr4`rs5ds#O4`#O#P5y#P;'S4`;'S;=`6t<%lO4`{NfRO;'SL};'S;=`No;=`OL}{Nv[&hW&csOYL}YZ4`Z]L}]^4`^rL}rsMws#OL}#O#PNc#P;'SL};'S;=`! l;=`<%lL}<%lOL}{! oP;=`<%lL}#_! y[&hW&csOYL}YZ4`Z]L}]^4`^rL}rsMws#OL}#O#PNc#P;'SL};'S;=`! l;=`<%lJ^<%lOL}#_!!rP;=`<%lJ^#c!!zW&m!bO#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!(q;=`<%l!#d<%lOE^!P!#m]&eS&hW&csOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwx!%Yx#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k<%lO!#d!P!$mX&eS&csOr8^rs9rsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^!P!%a]&hW&csOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwx!&Yx#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k<%lO!#d!P!&a]&hW&csOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwxL}x#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k<%lO!#d!P!']RO;'S!#d;'S;=`!'f;=`O!#d!P!'o^&eS&hW&csOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwx!%Yx#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k;=`<%l!#d<%lO!#d!P!(nP;=`<%l!#d#c!(z^&eS&hW&csOY!#dYZ8^Z]!#d]^8^^r!#drs!$fsw!#dwx!%Yx#O!#d#O#P!'Y#P;'S!#d;'S;=`!(k;=`<%lE^<%lO!#d#c!)yP;=`<%lE^#c!*V]&m!b&eS&csOr%Trs!+Osw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c!+ZZ&iW&m!b&eS&gsOw(Vwx)Px#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V#s!,XaU!T&m!b&eS&hWOY!+|YZ%TZ]!+|]^%T^r!+|rs!-^sw!+|wx!:hx#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#s!-gaU!T&m!b&eSOY!+|YZ%TZ]!+|]^%T^r!+|rs!.lsw!+|wx!:hx#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#s!.uaU!T&m!b&eSOY!+|YZ%TZ]!+|]^%T^r!+|rs!/zsw!+|wx!:hx#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#k!0T_U!T&m!b&eSOY!/zYZ(VZ]!/z]^(V^w!/zwx!1Sx#O!/z#O#P!4z#P#o!/z#o#p!5w#p#q!/z#q#r!5w#r;'S!/z;'S;=`!:b<%lO!/z#k!1Z_U!T&m!bOY!/zYZ(VZ]!/z]^(V^w!/zwx!2Yx#O!/z#O#P!4z#P#o!/z#o#p!5w#p#q!/z#q#r!5w#r;'S!/z;'S;=`!:b<%lO!/z#k!2a_U!T&m!bOY!/zYZ(VZ]!/z]^(V^w!/zwx!3`x#O!/z#O#P!4z#P#o!/z#o#p!5w#p#q!/z#q#r!5w#r;'S!/z;'S;=`!:b<%lO!/z#g!3gZU!T&m!bOY!3`YZ*oZ]!3`]^*o^#o!3`#o#p!4Y#p#q!3`#q#r!4Y#r;'S!3`;'S;=`!4t<%lO!3`!T!4_TU!TOY!4YZ]!4Y^;'S!4Y;'S;=`!4n<%lO!4Y!T!4qP;=`<%l!4Y#g!4wP;=`<%l!3`#k!5R[U!T&m!bOY!/zYZ(VZ]!/z]^(V^#o!/z#o#p!5w#p#q!/z#q#r!5w#r;'S!/z;'S;=`!9s;=`<%l+x<%lO!/z!X!6OZU!T&eSOY!5wYZ+xZ]!5w]^+x^w!5wwx!6qx#O!5w#O#P!8a#P;'S!5w;'S;=`!9m<%lO!5w!X!6vZU!TOY!5wYZ+xZ]!5w]^+x^w!5wwx!7ix#O!5w#O#P!8a#P;'S!5w;'S;=`!9m<%lO!5w!X!7nZU!TOY!5wYZ+xZ]!5w]^+x^w!5wwx!4Yx#O!5w#O#P!8a#P;'S!5w;'S;=`!9m<%lO!5w!X!8fWU!TOY!5wYZ+xZ]!5w]^+x^;'S!5w;'S;=`!9O;=`<%l+x<%lO!5w!X!9TW&eSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^;=`<%l!5w<%lO+x!X!9pP;=`<%l!5w#k!9xW&eSOw+xwx,dx#O+x#O#P-c#P;'S+x;'S;=`.^;=`<%l!/z<%lO+x#k!:eP;=`<%l!/z#s!:qaU!T&m!b&hWOY!+|YZ%TZ]!+|]^%T^r!+|rs!-^sw!+|wx!;vx#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#s!<PaU!T&m!b&hWOY!+|YZ%TZ]!+|]^%T^r!+|rs!-^sw!+|wx!=Ux#O!+|#O#P!FW#P#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Nh<%lO!+|#o!=__U!T&m!b&hWOY!=UYZ1XZ]!=U]^1X^r!=Urs!>^s#O!=U#O#P!@j#P#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!FQ<%lO!=U#o!>e_U!T&m!bOY!=UYZ1XZ]!=U]^1X^r!=Urs!?ds#O!=U#O#P!@j#P#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!FQ<%lO!=U#o!?k_U!T&m!bOY!=UYZ1XZ]!=U]^1X^r!=Urs!3`s#O!=U#O#P!@j#P#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!FQ<%lO!=U#o!@q[U!T&m!bOY!=UYZ1XZ]!=U]^1X^#o!=U#o#p!Ag#p#q!=U#q#r!Ag#r;'S!=U;'S;=`!Ec;=`<%l4`<%lO!=U!]!AnZU!T&hWOY!AgYZ4`Z]!Ag]^4`^r!Agrs!Bas#O!Ag#O#P!DP#P;'S!Ag;'S;=`!E]<%lO!Ag!]!BfZU!TOY!AgYZ4`Z]!Ag]^4`^r!Agrs!CXs#O!Ag#O#P!DP#P;'S!Ag;'S;=`!E]<%lO!Ag!]!C^ZU!TOY!AgYZ4`Z]!Ag]^4`^r!Agrs!4Ys#O!Ag#O#P!DP#P;'S!Ag;'S;=`!E]<%lO!Ag!]!DUWU!TOY!AgYZ4`Z]!Ag]^4`^;'S!Ag;'S;=`!Dn;=`<%l4`<%lO!Ag!]!DsW&hWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l!Ag<%lO4`!]!E`P;=`<%l!Ag#o!EhW&hWOr4`rs4zs#O4`#O#P5y#P;'S4`;'S;=`6t;=`<%l!=U<%lO4`#o!FTP;=`<%l!=U#s!F_[U!T&m!bOY!+|YZ%TZ]!+|]^%T^#o!+|#o#p!GT#p#q!+|#q#r!GT#r;'S!+|;'S;=`!Mq;=`<%l8^<%lO!+|!a!G^]U!T&eS&hWOY!GTYZ8^Z]!GT]^8^^r!GTrs!HVsw!GTwx!JVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!H^]U!T&eSOY!GTYZ8^Z]!GT]^8^^r!GTrs!IVsw!GTwx!JVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!I^]U!T&eSOY!GTYZ8^Z]!GT]^8^^r!GTrs!5wsw!GTwx!JVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!J^]U!T&hWOY!GTYZ8^Z]!GT]^8^^r!GTrs!HVsw!GTwx!KVx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!K^]U!T&hWOY!GTYZ8^Z]!GT]^8^^r!GTrs!HVsw!GTwx!Agx#O!GT#O#P!LV#P;'S!GT;'S;=`!Mk<%lO!GT!a!L[WU!TOY!GTYZ8^Z]!GT]^8^^;'S!GT;'S;=`!Lt;=`<%l8^<%lO!GT!a!L{Y&eS&hWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y;=`<%l!GT<%lO8^!a!MnP;=`<%l!GT#s!MxY&eS&hWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y;=`<%l!+|<%lO8^#s!NkP;=`<%l!+|#b!Ny_%zQ&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b#!T]!{r&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b##X_%tQ&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#$aa&m!b&hW&csOY#%fYZ%TZ]#%f]^%T^r#%frs#&vsw#%fwx#8Ux#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#c#%qa&m!b&eS&hW&csOY#%fYZ%TZ]#%f]^%T^r#%frs#&vsw#%fwx#/{x#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#c#'Pa&m!b&eS&csOY#%fYZ%TZ]#%f]^%T^r#%frs#(Usw#%fwx#/{x#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#c#(_a&m!b&eS&csOY#%fYZ%TZ]#%f]^%T^r#%frs#)dsw#%fwx#/{x#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#Z#)m_&m!b&eS&csOY#)dYZ(VZ]#)d]^(V^w#)dwx#*lx#O#)d#O#P#+f#P#o#)d#o#p#,T#p#q#)d#q#r#,T#r;'S#)d;'S;=`#/u<%lO#)d#Z#*sZ&m!b&csOw(Vwx)wx#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V#Z#+kW&m!bO#o#)d#o#p#,T#p#q#)d#q#r#,T#r;'S#)d;'S;=`#.x;=`<%l#,T<%lO#)dw#,[Z&eS&csOY#,TYZ+xZ]#,T]^+x^w#,Twx#,}x#O#,T#O#P#-i#P;'S#,T;'S;=`#.r<%lO#,Tw#-SV&csOw+xwx,|x#O+x#O#P-c#P;'S+x;'S;=`.^<%lO+xw#-lRO;'S#,T;'S;=`#-u;=`O#,Tw#-|[&eS&csOY#,TYZ+xZ]#,T]^+x^w#,Twx#,}x#O#,T#O#P#-i#P;'S#,T;'S;=`#.r;=`<%l#,T<%lO#,Tw#.uP;=`<%l#,T#Z#/P[&eS&csOY#,TYZ+xZ]#,T]^+x^w#,Twx#,}x#O#,T#O#P#-i#P;'S#,T;'S;=`#.r;=`<%l#)d<%lO#,T#Z#/xP;=`<%l#)d#c#0U]&m!b&hW&csOr%Trs&Vsw%Twx0Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#1SW&m!bO#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#6y;=`<%l#1l<%lO#%f!P#1u]&eS&hW&csOY#1lYZ8^Z]#1l]^8^^r#1lrs#2nsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s<%lO#1l!P#2u]&eS&csOY#1lYZ8^Z]#1l]^8^^r#1lrs#3nsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s<%lO#1l!P#3u]&eS&csOY#1lYZ8^Z]#1l]^8^^r#1lrs#,Tsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s<%lO#1l!P#4uX&hW&csOr8^rs9Qsw8^wx;Ux#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^!P#5eRO;'S#1l;'S;=`#5n;=`O#1l!P#5w^&eS&hW&csOY#1lYZ8^Z]#1l]^8^^r#1lrs#2nsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s;=`<%l#1l<%lO#1l!P#6vP;=`<%l#1l#c#7S^&eS&hW&csOY#1lYZ8^Z]#1l]^8^^r#1lrs#2nsw#1lwx#4nx#O#1l#O#P#5b#P;'S#1l;'S;=`#6s;=`<%l#%f<%lO#1l#c#8RP;=`<%l#%f#c#8_]&m!b&hW&csOr%Trs&Vsw%Twx#9Wx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#9cZ&fS&m!b&hW&dsOr1Xrs2Rs#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X#c#:a]js&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q#;e]iR&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#<iaXs&m!b&eS&hWOr%Trs&Vsw%Twx/Xxz%Tz{#=n{!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#=y_cR&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#?T_%ws&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q#@_]|R&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#s#Ac`%xs&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`!a#Be!a#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#O#Bp]&{`&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#Cta!hQ&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!O%T!O!P#Dy!P!Q%T!Q![#GV![#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#ES_&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!O%T!O!P#FR!P#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#F^]!us&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#Gbi!jq&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!Q%T!Q![#GV![!g%T!g!h#IP!h!l%T!l!m#MZ!m#O%T#O#P7o#P#R%T#R#S#GV#S#X%T#X#Y#IP#Y#^%T#^#_#MZ#_#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#IYc&m!b&eS&hWOr%Trs&Vsw%Twx/Xx{%T{|#Je|}%T}!O#Je!O!Q%T!Q![#Km![#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#Jn_&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!Q%T!Q![#Km![#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#Kxe!jq&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!Q%T!Q![#Km![!l%T!l!m#MZ!m#O%T#O#P7o#P#R%T#R#S#Km#S#^%T#^#_#MZ#_#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a#Mf]!jq&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c#Nja%yR&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!P%T!P!Q$ o!Q!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b$ z_%{Q&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$#Uw!jq&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!O%T!O!P$%o!P!Q%T!Q![$&w![!d%T!d!e$(w!e!g%T!g!h#IP!h!l%T!l!m#MZ!m!q%T!q!r$+m!r!z%T!z!{$.]!{#O%T#O#P7o#P#R%T#R#S$&w#S#U%T#U#V$(w#V#X%T#X#Y#IP#Y#^%T#^#_#MZ#_#c%T#c#d$+m#d#l%T#l#m$.]#m#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$%x_&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!Q%T!Q![#GV![#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$'Sk!jq&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!O%T!O!P$%o!P!Q%T!Q![$&w![!g%T!g!h#IP!h!l%T!l!m#MZ!m#O%T#O#P7o#P#R%T#R#S$&w#S#X%T#X#Y#IP#Y#^%T#^#_#MZ#_#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$)Qb&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!Q%T!Q!R$*Y!R!S$*Y!S#O%T#O#P7o#P#R%T#R#S$*Y#S#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$*eb!jq&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!Q%T!Q!R$*Y!R!S$*Y!S#O%T#O#P7o#P#R%T#R#S$*Y#S#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$+va&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!Q%T!Q!Y$,{!Y#O%T#O#P7o#P#R%T#R#S$,{#S#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$-Wa!jq&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!Q%T!Q!Y$,{!Y#O%T#O#P7o#P#R%T#R#S$,{#S#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$.fe&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!Q%T!Q![$/w![!c%T!c!i$/w!i#O%T#O#P7o#P#R%T#R#S$/w#S#T%T#T#Z$/w#Z#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a$0Se!jq&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!Q%T!Q![$/w![!c%T!c!i$/w!i#O%T#O#P7o#P#R%T#R#S$/w#S#T%T#T#Z$/w#Z#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#s$1p_}!T&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`$2o!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q$2z]&TR&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$4O]#fs&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$5SaoR&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!^%T!^!_$6X!_!`Av!`!aAv!a#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b$6d_%uQ&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$7n_&Ss&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`Av!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$8x`oR&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`Av!`!a$9z!a#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b$:V_%vQ&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$;c_aQ#|P&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#s$<oe&m!b&eS&hW&b`%}sOr%Trs&Vsw%Twx/Xx!Q%T!Q![$<b![!c%T!c!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#s$>TP;=`<%l$<b#s$>ei&m!b&eS&hW&b`%}sOr%Trs$@Ssw%Twx$C`x!Q%T!Q![$<b![!c%T!c!t$<b!t!u$Fl!u!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#f$<b#f#g$Fl#g#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#c$@]a&m!b&eS&csOYE^YZ%TZ]E^]^%T^rE^rs$AbswE^wxGpx#OE^#O#P!!u#P#oE^#o#p!#d#p#qE^#q#r!#d#r;'SE^;'S;=`!)v<%lOE^#c$Ak]&m!b&eS&csOr%Trs$Bdsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#Z$BmZ&m!b&eS&gsOw(Vwx)Px#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V#c$Cia&m!b&hW&csOY#%fYZ%TZ]#%f]^%T^r#%frs#&vsw#%fwx$Dnx#O#%f#O#P#0}#P#o#%f#o#p#1l#p#q#%f#q#r#1l#r;'S#%f;'S;=`#8O<%lO#%f#c$Dw]&m!b&hW&csOr%Trs&Vsw%Twx$Epx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#_$EyZ&m!b&hW&dsOr1Xrs2Rs#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X#s$Fye&m!b&eS&hW&b`%}sOr%Trs$@Ssw%Twx$C`x!Q%T!Q![$<b![!c%T!c!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#s$Hii&m!b&eS&hW&b`%}sOr%Trs$JWsw%Twx$MUx!Q%T!Q![$<b![!c%T!c!t$<b!t!u%!S!u!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#f$<b#f#g%!S#g#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#c$Ja]&m!b&eS&nsOr%Trs$KYsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$Ka]&m!b&eSOr%Trs$LYsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#Z$LcZ&m!b&eS&psOw(Vwx)Px#O(V#O#P+Z#P#o(V#o#p+x#p#q(V#q#r+x#r;'S(V;'S;=`/R<%lO(V#c$M_]&m!b&hW&jsOr%Trs&Vsw%Twx$NWx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#c$N_]&m!b&hWOr%Trs&Vsw%Twx% Wx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#_% aZ&m!b&hW&osOr1Xrs2Rs#O1X#O#P3q#P#o1X#o#p4`#p#q1X#q#r4`#r;'S1X;'S;=`7i<%lO1X#s%!ae&m!b&eS&hW&b`%}sOr%Trs$JWsw%Twx$MUx!Q%T!Q![$<b![!c%T!c!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#s%$Pm&m!b&eS&hW&b`%}sOr%Trs$@Ssw%Twx$C`x!Q%T!Q![$<b![!c%T!c!h$<b!h!i%!S!i!t$<b!t!u$Fl!u!}$<b!}#O%T#O#P7o#P#R%T#R#S$<b#S#T%T#T#U$<b#U#V$Fl#V#Y$<b#Y#Z%!S#Z#o$<b#o#p8^#p#q%T#q#r8^#r$g%T$g;'S$<b;'S;=`$>Q<%lO$<b#c%&V]!Zs&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q%'Z]!YR&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#b%(__%sQ&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T#a%)gX!_#T&eS&hWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^#c%*__%rR&m!b&eS&hWOr%Trs&Vsw%Twx/Xx!_%T!_!`# x!`#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T!q%+gX!^!e&eS&hWOr8^rs9Qsw8^wx:dx#O8^#O#P;v#P;'S8^;'S;=`<y<%lO8^#a%,_]%|q&m!b&eS&hWOr%Trs&Vsw%Twx/Xx#O%T#O#P7o#P#o%T#o#p8^#p#q%T#q#r8^#r;'S%T;'S;=`=v<%lO%T\",\n  tokenizers: [legacyPrint, indentation, newlines, formatString1, formatString2, formatString1l, formatString2l, 0, 1, 2, 3, 4, 5, 6],\n  topRules: {\"Script\":[0,7]},\n  specialized: [{term: 229, get: value => spec_identifier[value] || -1}],\n  tokenPrec: 7205\n});\n\nexport { parser };\n", "import { parser } from '@lezer/python';\nimport { syntaxTree, LRLanguage, indentNodeProp, delimitedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\nimport { snippetCompletion, ifNotIn, completeFromList } from '@codemirror/autocomplete';\n\nconst cache = /*@__PURE__*/new NodeWeakMap();\nconst ScopeNodes = /*@__PURE__*/new Set([\n    \"Script\", \"Body\",\n    \"FunctionDefinition\", \"ClassDefinition\", \"LambdaExpression\",\n    \"ForStatement\", \"MatchClause\"\n]);\nfunction defID(type) {\n    return (node, def, outer) => {\n        if (outer)\n            return false;\n        let id = node.node.getChild(\"VariableName\");\n        if (id)\n            def(id, type);\n        return true;\n    };\n}\nconst gatherCompletions = {\n    FunctionDefinition: /*@__PURE__*/defID(\"function\"),\n    ClassDefinition: /*@__PURE__*/defID(\"class\"),\n    ForStatement(node, def, outer) {\n        if (outer)\n            for (let child = node.node.firstChild; child; child = child.nextSibling) {\n                if (child.name == \"VariableName\")\n                    def(child, \"variable\");\n                else if (child.name == \"in\")\n                    break;\n            }\n    },\n    ImportStatement(_node, def) {\n        var _a, _b;\n        let { node } = _node;\n        let isFrom = ((_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.name) == \"from\";\n        for (let ch = node.getChild(\"import\"); ch; ch = ch.nextSibling) {\n            if (ch.name == \"VariableName\" && ((_b = ch.nextSibling) === null || _b === void 0 ? void 0 : _b.name) != \"as\")\n                def(ch, isFrom ? \"variable\" : \"namespace\");\n        }\n    },\n    AssignStatement(node, def) {\n        for (let child = node.node.firstChild; child; child = child.nextSibling) {\n            if (child.name == \"VariableName\")\n                def(child, \"variable\");\n            else if (child.name == \":\" || child.name == \"AssignOp\")\n                break;\n        }\n    },\n    ParamList(node, def) {\n        for (let prev = null, child = node.node.firstChild; child; child = child.nextSibling) {\n            if (child.name == \"VariableName\" && (!prev || !/\\*|AssignOp/.test(prev.name)))\n                def(child, \"variable\");\n            prev = child;\n        }\n    },\n    CapturePattern: /*@__PURE__*/defID(\"variable\"),\n    AsPattern: /*@__PURE__*/defID(\"variable\"),\n    __proto__: null\n};\nfunction getScope(doc, node) {\n    let cached = cache.get(node);\n    if (cached)\n        return cached;\n    let completions = [], top = true;\n    function def(node, type) {\n        let name = doc.sliceString(node.from, node.to);\n        completions.push({ label: name, type });\n    }\n    node.cursor(IterMode.IncludeAnonymous).iterate(node => {\n        if (node.name) {\n            let gather = gatherCompletions[node.name];\n            if (gather && gather(node, def, top) || !top && ScopeNodes.has(node.name))\n                return false;\n            top = false;\n        }\n        else if (node.to - node.from > 8192) {\n            // Allow caching for bigger internal nodes\n            for (let c of getScope(doc, node.node))\n                completions.push(c);\n            return false;\n        }\n    });\n    cache.set(node, completions);\n    return completions;\n}\nconst Identifier = /^[\\w\\xa1-\\uffff][\\w\\d\\xa1-\\uffff]*$/;\nconst dontComplete = [\"String\", \"FormatString\", \"Comment\", \"PropertyName\"];\n/**\nCompletion source that looks up locally defined names in\nPython code.\n*/\nfunction localCompletionSource(context) {\n    let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n    if (dontComplete.indexOf(inner.name) > -1)\n        return null;\n    let isWord = inner.name == \"VariableName\" ||\n        inner.to - inner.from < 20 && Identifier.test(context.state.sliceDoc(inner.from, inner.to));\n    if (!isWord && !context.explicit)\n        return null;\n    let options = [];\n    for (let pos = inner; pos; pos = pos.parent) {\n        if (ScopeNodes.has(pos.name))\n            options = options.concat(getScope(context.state.doc, pos));\n    }\n    return {\n        options,\n        from: isWord ? inner.from : context.pos,\n        validFor: Identifier\n    };\n}\nconst globals = /*@__PURE__*/[\n    \"__annotations__\", \"__builtins__\", \"__debug__\", \"__doc__\", \"__import__\", \"__name__\",\n    \"__loader__\", \"__package__\", \"__spec__\",\n    \"False\", \"None\", \"True\"\n].map(n => ({ label: n, type: \"constant\" })).concat(/*@__PURE__*/[\n    \"ArithmeticError\", \"AssertionError\", \"AttributeError\", \"BaseException\", \"BlockingIOError\",\n    \"BrokenPipeError\", \"BufferError\", \"BytesWarning\", \"ChildProcessError\", \"ConnectionAbortedError\",\n    \"ConnectionError\", \"ConnectionRefusedError\", \"ConnectionResetError\", \"DeprecationWarning\",\n    \"EOFError\", \"Ellipsis\", \"EncodingWarning\", \"EnvironmentError\", \"Exception\", \"FileExistsError\",\n    \"FileNotFoundError\", \"FloatingPointError\", \"FutureWarning\", \"GeneratorExit\", \"IOError\",\n    \"ImportError\", \"ImportWarning\", \"IndentationError\", \"IndexError\", \"InterruptedError\",\n    \"IsADirectoryError\", \"KeyError\", \"KeyboardInterrupt\", \"LookupError\", \"MemoryError\",\n    \"ModuleNotFoundError\", \"NameError\", \"NotADirectoryError\", \"NotImplemented\", \"NotImplementedError\",\n    \"OSError\", \"OverflowError\", \"PendingDeprecationWarning\", \"PermissionError\", \"ProcessLookupError\",\n    \"RecursionError\", \"ReferenceError\", \"ResourceWarning\", \"RuntimeError\", \"RuntimeWarning\",\n    \"StopAsyncIteration\", \"StopIteration\", \"SyntaxError\", \"SyntaxWarning\", \"SystemError\",\n    \"SystemExit\", \"TabError\", \"TimeoutError\", \"TypeError\", \"UnboundLocalError\", \"UnicodeDecodeError\",\n    \"UnicodeEncodeError\", \"UnicodeError\", \"UnicodeTranslateError\", \"UnicodeWarning\", \"UserWarning\",\n    \"ValueError\", \"Warning\", \"ZeroDivisionError\"\n].map(n => ({ label: n, type: \"type\" }))).concat(/*@__PURE__*/[\n    \"bool\", \"bytearray\", \"bytes\", \"classmethod\", \"complex\", \"float\", \"frozenset\", \"int\", \"list\",\n    \"map\", \"memoryview\", \"object\", \"range\", \"set\", \"staticmethod\", \"str\", \"super\", \"tuple\", \"type\"\n].map(n => ({ label: n, type: \"class\" }))).concat(/*@__PURE__*/[\n    \"abs\", \"aiter\", \"all\", \"anext\", \"any\", \"ascii\", \"bin\", \"breakpoint\", \"callable\", \"chr\",\n    \"compile\", \"delattr\", \"dict\", \"dir\", \"divmod\", \"enumerate\", \"eval\", \"exec\", \"exit\", \"filter\",\n    \"format\", \"getattr\", \"globals\", \"hasattr\", \"hash\", \"help\", \"hex\", \"id\", \"input\", \"isinstance\",\n    \"issubclass\", \"iter\", \"len\", \"license\", \"locals\", \"max\", \"min\", \"next\", \"oct\", \"open\",\n    \"ord\", \"pow\", \"print\", \"property\", \"quit\", \"repr\", \"reversed\", \"round\", \"setattr\", \"slice\",\n    \"sorted\", \"sum\", \"vars\", \"zip\"\n].map(n => ({ label: n, type: \"function\" })));\nconst snippets = [\n    /*@__PURE__*/snippetCompletion(\"def ${name}(${params}):\\n\\t${}\", {\n        label: \"def\",\n        detail: \"function\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"for ${name} in ${collection}:\\n\\t${}\", {\n        label: \"for\",\n        detail: \"loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"while ${}:\\n\\t${}\", {\n        label: \"while\",\n        detail: \"loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"try:\\n\\t${}\\nexcept ${error}:\\n\\t${}\", {\n        label: \"try\",\n        detail: \"/ except block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"if ${}:\\n\\t\\n\", {\n        label: \"if\",\n        detail: \"block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"if ${}:\\n\\t${}\\nelse:\\n\\t${}\", {\n        label: \"if\",\n        detail: \"/ else block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"class ${name}:\\n\\tdef __init__(self, ${params}):\\n\\t\\t\\t${}\", {\n        label: \"class\",\n        detail: \"definition\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"import ${module}\", {\n        label: \"import\",\n        detail: \"statement\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"from ${module} import ${names}\", {\n        label: \"from\",\n        detail: \"import\",\n        type: \"keyword\"\n    })\n];\n/**\nAutocompletion for built-in Python globals and keywords.\n*/\nconst globalCompletion = /*@__PURE__*/ifNotIn(dontComplete, /*@__PURE__*/completeFromList(/*@__PURE__*/globals.concat(snippets)));\n\nfunction innerBody(context) {\n    let { node, pos } = context;\n    let lineIndent = context.lineIndent(pos, -1);\n    let found = null;\n    for (;;) {\n        let before = node.childBefore(pos);\n        if (!before) {\n            break;\n        }\n        else if (before.name == \"Comment\") {\n            pos = before.from;\n        }\n        else if (before.name == \"Body\" || before.name == \"MatchBody\") {\n            if (context.baseIndentFor(before) + context.unit <= lineIndent)\n                found = before;\n            node = before;\n        }\n        else if (before.name == \"MatchClause\") {\n            node = before;\n        }\n        else if (before.type.is(\"Statement\")) {\n            node = before;\n        }\n        else {\n            break;\n        }\n    }\n    return found;\n}\nfunction indentBody(context, node) {\n    let base = context.baseIndentFor(node);\n    let line = context.lineAt(context.pos, -1), to = line.from + line.text.length;\n    // Don't consider blank, deindented lines at the end of the\n    // block part of the block\n    if (/^\\s*($|#)/.test(line.text) &&\n        context.node.to < to + 100 &&\n        !/\\S/.test(context.state.sliceDoc(to, context.node.to)) &&\n        context.lineIndent(context.pos, -1) <= base)\n        return null;\n    // A normally deindenting keyword that appears at a higher\n    // indentation than the block should probably be handled by the next\n    // level\n    if (/^\\s*(else:|elif |except |finally:|case\\s+[^=:]+:)/.test(context.textAfter) && context.lineIndent(context.pos, -1) > base)\n        return null;\n    return base + context.unit;\n}\n/**\nA language provider based on the [Lezer Python\nparser](https://github.com/lezer-parser/python), extended with\nhighlighting and indentation information.\n*/\nconst pythonLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"python\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                Body: context => {\n                    var _a;\n                    let inner = innerBody(context);\n                    return (_a = indentBody(context, inner || context.node)) !== null && _a !== void 0 ? _a : context.continue();\n                },\n                MatchBody: context => {\n                    var _a;\n                    let inner = innerBody(context);\n                    return (_a = indentBody(context, inner || context.node)) !== null && _a !== void 0 ? _a : context.continue();\n                },\n                IfStatement: cx => /^\\s*(else:|elif )/.test(cx.textAfter) ? cx.baseIndent : cx.continue(),\n                \"ForStatement WhileStatement\": cx => /^\\s*else:/.test(cx.textAfter) ? cx.baseIndent : cx.continue(),\n                TryStatement: cx => /^\\s*(except |finally:|else:)/.test(cx.textAfter) ? cx.baseIndent : cx.continue(),\n                MatchStatement: cx => {\n                    if (/^\\s*case /.test(cx.textAfter))\n                        return cx.baseIndent + cx.unit;\n                    return cx.continue();\n                },\n                \"TupleExpression ComprehensionExpression ParamList ArgList ParenthesizedExpression\": /*@__PURE__*/delimitedIndent({ closing: \")\" }),\n                \"DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression\": /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n                \"ArrayExpression ArrayComprehensionExpression\": /*@__PURE__*/delimitedIndent({ closing: \"]\" }),\n                \"String FormatString\": () => null,\n                Script: context => {\n                    var _a;\n                    let inner = innerBody(context);\n                    return (_a = (inner && indentBody(context, inner))) !== null && _a !== void 0 ? _a : context.continue();\n                }\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                \"ArrayExpression DictionaryExpression SetExpression TupleExpression\": foldInside,\n                Body: (node, state) => ({ from: node.from + 1, to: node.to - (node.to == state.doc.length ? 0 : 1) })\n            })\n        ],\n    }),\n    languageData: {\n        closeBrackets: {\n            brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"'''\", '\"\"\"'],\n            stringPrefixes: [\"f\", \"fr\", \"rf\", \"r\", \"u\", \"b\", \"br\", \"rb\",\n                \"F\", \"FR\", \"RF\", \"R\", \"U\", \"B\", \"BR\", \"RB\"]\n        },\n        commentTokens: { line: \"#\" },\n        // Indent logic logic are triggered upon below input patterns\n        indentOnInput: /^\\s*([\\}\\]\\)]|else:|elif |except |finally:|case\\s+[^:]*:?)$/,\n    }\n});\n/**\nPython language support.\n*/\nfunction python() {\n    return new LanguageSupport(pythonLanguage, [\n        pythonLanguage.data.of({ autocomplete: localCompletionSource }),\n        pythonLanguage.data.of({ autocomplete: globalCompletion }),\n    ]);\n}\n\nexport { globalCompletion, localCompletionSource, python, pythonLanguage };\n", "import { ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst closureParamDelim = 1,\n  tpOpen = 2,\n  tpClose = 3,\n  RawString = 4,\n  Float = 5;\n\nconst _b = 98, _e = 101, _f = 102, _r = 114, _E = 69, Zero = 48,\n      Dot = 46, Plus = 43, Minus = 45, Hash = 35, Quote = 34, Pipe = 124, LessThan = 60, GreaterThan = 62;\n\nfunction isNum(ch) { return ch >= 48 && ch <= 57 }\nfunction isNum_(ch) { return isNum(ch) || ch == 95 }\n\nconst literalTokens = new ExternalTokenizer((input, stack) => {\n  if (isNum(input.next)) {\n    let isFloat = false;\n    do { input.advance(); } while (isNum_(input.next))\n    if (input.next == Dot) {\n      isFloat = true;\n      input.advance();\n      if (isNum(input.next)) {\n        do { input.advance(); } while (isNum_(input.next))\n      } else if (input.next == Dot || input.next > 0x7f || /\\w/.test(String.fromCharCode(input.next))) {\n        return\n      }\n    }\n    if (input.next == _e || input.next == _E) {\n      isFloat = true;\n      input.advance();\n      if (input.next == Plus || input.next == Minus) input.advance();\n      if (!isNum_(input.next)) return\n      do { input.advance(); } while (isNum_(input.next))\n    }\n    if (input.next == _f) {\n      let after = input.peek(1);\n      if (after == Zero + 3 && input.peek(2) == Zero + 2 ||\n          after == Zero + 6 && input.peek(2) == Zero + 4) {\n        input.advance(3);\n        isFloat = true;\n      } else {\n        return\n      }\n    }\n    if (isFloat) input.acceptToken(Float);\n  } else if (input.next == _b || input.next == _r) {\n    if (input.next == _b) input.advance();\n    if (input.next != _r) return\n    input.advance();\n    let count = 0;\n    while (input.next == Hash) { count++; input.advance(); }\n    if (input.next != Quote) return\n    input.advance();\n    content: for (;;) {\n      if (input.next < 0) return\n      let isQuote = input.next == Quote;\n      input.advance();\n      if (isQuote) {\n        for (let i = 0; i < count; i++) {\n          if (input.next != Hash) continue content\n          input.advance();\n        }\n        input.acceptToken(RawString);\n        return\n      }\n    }\n  }\n});\n\nconst closureParam = new ExternalTokenizer(input => {\n  if (input.next == Pipe) input.acceptToken(closureParamDelim, 1);\n});\n\nconst tpDelim = new ExternalTokenizer(input => {\n  if (input.next == LessThan) input.acceptToken(tpOpen, 1);\n  else if (input.next == GreaterThan) input.acceptToken(tpClose, 1);\n});\n\nconst rustHighlighting = styleTags({\n  \"const macro_rules struct union enum type fn impl trait let static\": tags.definitionKeyword,\n  \"mod use crate\": tags.moduleKeyword,\n  \"pub unsafe async mut extern default move\": tags.modifier,\n  \"for if else loop while match continue break return await\": tags.controlKeyword,\n  \"as in ref\": tags.operatorKeyword,\n  \"where _ crate super dyn\": tags.keyword,\n  \"self\": tags.self,\n  String: tags.string,\n  Char: tags.character,\n  RawString: tags.special(tags.string),\n  Boolean: tags.bool,\n  Identifier: tags.variableName,\n  \"CallExpression/Identifier\": tags.function(tags.variableName),\n  BoundIdentifier: tags.definition(tags.variableName),\n  \"FunctionItem/BoundIdentifier\": tags.function(tags.definition(tags.variableName)),\n  LoopLabel: tags.labelName,\n  FieldIdentifier: tags.propertyName,\n  \"CallExpression/FieldExpression/FieldIdentifier\": tags.function(tags.propertyName),\n  Lifetime: tags.special(tags.variableName),\n  ScopeIdentifier: tags.namespace,\n  TypeIdentifier: tags.typeName,\n  \"MacroInvocation/Identifier MacroInvocation/ScopedIdentifier/Identifier\": tags.macroName,\n  \"MacroInvocation/TypeIdentifier MacroInvocation/ScopedIdentifier/TypeIdentifier\": tags.macroName,\n  \"\\\"!\\\"\": tags.macroName,\n  UpdateOp: tags.updateOperator,\n  LineComment: tags.lineComment,\n  BlockComment: tags.blockComment,\n  Integer: tags.integer,\n  Float: tags.float,\n  ArithOp: tags.arithmeticOperator,\n  LogicOp: tags.logicOperator,\n  BitOp: tags.bitwiseOperator,\n  CompareOp: tags.compareOperator,\n  \"=\": tags.definitionOperator,\n  \".. ... => ->\": tags.punctuation,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace,\n  \". DerefOp\": tags.derefOperator,\n  \"&\": tags.operator,\n  \", ; ::\": tags.separator,\n  \"Attribute/...\": tags.meta,\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,self:28, super:32, crate:34, impl:46, true:72, false:72, pub:88, in:92, const:96, unsafe:104, async:108, move:110, if:114, let:118, ref:142, mut:144, _:198, else:200, match:204, as:248, return:252, await:262, break:270, continue:276, while:312, loop:316, for:320, macro_rules:327, mod:334, extern:342, struct:346, where:364, union:379, enum:382, type:390, default:395, fn:396, trait:412, use:420, static:438, dyn:476};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"$2xQ]Q_OOP$wOWOOO&sQWO'#CnO)WQWO'#I`OOQP'#I`'#I`OOQQ'#Ie'#IeO)hO`O'#C}OOQR'#Ih'#IhO)sQWO'#IuOOQO'#Hk'#HkO)xQWO'#DpOOQR'#Iw'#IwO)xQWO'#DpO*ZQWO'#DpOOQO'#Iv'#IvO,SQWO'#J`O,ZQWO'#EiOOQV'#Hp'#HpO,cQYO'#F{OOQV'#El'#ElOOQV'#Em'#EmOOQV'#En'#EnO.YQ_O'#EkO0_Q_O'#EoO2gQWOOO4QQ_O'#FPO7hQWO'#J`OOQV'#FY'#FYO7{Q_O'#F^O:WQ_O'#FaOOQO'#F`'#F`O=sQ_O'#FcO=}Q_O'#FbO@VQWO'#FgOOQO'#J`'#J`OOQV'#Io'#IoOA]Q_O'#InOEPQWO'#InOOQV'#Fw'#FwOF[QWO'#JuOFcQWO'#F|OOQO'#IO'#IOOGrQWO'#GhOOQV'#Im'#ImOOQV'#Il'#IlOOQV'#Hj'#HjQGyQ_OOOKeQ_O'#DUOKlQYO'#CqOOQP'#I_'#I_OOQV'#Hg'#HgQ]Q_OOOLuQWO'#I`ONsQYO'#DXO!!eQWO'#JuO!!lQWO'#JuO!!vQ_O'#DfO!%]Q_O'#E}O!(sQ_O'#FWO!,ZQWO'#FZO!.^QXO'#FbO!.cQ_O'#EeO!!vQ_O'#FmO!0uQWO'#FoO!0zQWO'#FoO!1PQ^O'#FqO!1WQWO'#JuO!1_QWO'#FtO!1dQWO'#FxO!2WQWO'#JjO!2_QWO'#GOO!2_QWO'#G`O!2_QWO'#GbO!2_QWO'#GsOOQO'#Ju'#JuO!2dQWO'#GhO!2lQYO'#GpO!2_QWO'#GqO!3uQ^O'#GtO!3|QWO'#GuO!4hQWO'#HOP!4sOpO'#CcPOOO)CC})CC}OOOO'#Hi'#HiO!5OO`O,59iOOQV,59i,59iO!5ZQYO,5?aOOQO-E;i-E;iOOQO,5:[,5:[OOQP,59Z,59ZO)xQWO,5:[O)xQWO,5:[O!5oQWO,5?kO!5zQYO,5;qO!6PQYO,5;TO!6hQWO,59QO!7kQXO'#CnO!7xQXO'#I`O!9SQWO'#CoO,^QWO'#EiOOQV-E;n-E;nO!9eQWO'#FsOOQV,5<g,5<gO!9SQWO'#CoO!9jQWO'#CoO!9oQWO'#I`O! yQWO'#JuO!9yQWO'#J`O!:aQWO,5;VOOQO'#In'#InO!0zQWO'#DaO!<aQWO'#DcO!<iQWO,5;ZO.YQ_O,5;ZOOQO,5;[,5;[OOQV'#Er'#ErOOQV'#Es'#EsOOQV'#Et'#EtOOQV'#Eu'#EuOOQV'#Ev'#EvOOQV'#Ew'#EwOOQV'#Ex'#ExOOQV'#Ey'#EyO.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;fO!=PQ_O,5;kO!@gQ_O'#FROOQO,5;l,5;lO!BrQWO,5;pO.YQ_O,5;wOKlQYO,5;gO!D_QWO,5;kO!EOQWO,5;xOOQO,5;x,5;xO!E]QWO,5;xO!EbQ_O,5;xO!GmQWO'#CfO!GrQWO,5<QO!G|Q_O,5<QOOQO,5;{,5;{O!JjQXO'#CnO!K{QXO'#I`OOQS'#Dk'#DkOOQP'#Ir'#IrO!LuQ[O'#IrO!L}QXO'#DjO!M{QWO'#DnO!M{QWO'#DnO!N^QWO'#DnOOQP'#It'#ItO!NcQXO'#ItO# ^Q^O'#DoO# hQWO'#DrO# pQ^O'#DzO# zQ^O'#D|O#!RQWO'#EPO#!^QXO'#FdOOQP'#ES'#ESOOQP'#Iq'#IqO#!lQXO'#JfOOQP'#Je'#JeO#!tQXO,5;}O#!yQXO'#I`O!1PQ^O'#DyO!1PQ^O'#FdO##sQWO,5;|OOQO,5;|,5;|OKlQYO,5;|O#$ZQWO'#FhOOQO,5<R,5<ROOQV,5=l,5=lO#&`QYO'#FzOOQV,5<h,5<hO#&gQWO,5<hO#&nQWO,5=SO!1WQWO,59rO!1dQWO,5<dO#&uQWO,5=iO!2_QWO,5<jO!2_QWO,5<zO!2_QWO,5<|O!2_QWO,5=QO#&|QWO,5=]O#'TQWO,5=SO!2_QWO,5=]O!3|QWO,5=aO#']QWO,5=jOOQO-E;|-E;|O#'hQWO'#JjOOQV-E;h-E;hO#(PQWO'#HRO#(WQ_O,59pOOQV,59p,59pO#(_QWO,59pO#(dQ_O,59pO#)SQZO'#CuO#+[QZO'#CvOOQV'#C|'#C|O#-wQWO'#HTO#.OQYO'#IdOOQO'#Hh'#HhO#.WQWO'#CwO#.WQWO'#CwO#.iQWO'#CwOOQR'#Ic'#IcO#.nQZO'#IbO#1TQYO'#HTO#1qQYO'#H[O#2}QYO'#H_OKlQYO'#H`OOQR'#Hb'#HbO#4ZQWO'#HeO#4`QYO,59]OOQR'#Ib'#IbO#5PQZO'#CtO#7[QYO'#HUO#7aQWO'#HTO#7fQYO'#CrO#8VQWO'#H]O#7fQYO'#HcOOQV-E;e-E;eO#8_QWO,59sOOQV,59{,59{O#8mQYO,5=[OOQV,59},59}O!0zQWO,59}O#;aQWO'#IpOOQO'#Ip'#IpO!1PQ^O'#DhO!0zQWO,5:QO#;hQWO,5;iO#<OQWO,5;rO#<fQ_O,5;rOOQO,5;u,5;uO#@PQ_O,5;|O#BXQWO,5;PO!0zQWO,5<XO#B`QWO,5<ZOOQV,5<Z,5<ZO#BkQWO,5<]O!1PQ^O'#EOOOQQ'#D_'#D_O#BsQWO,59rO#BxQWO,5<`O#B}QWO,5<dOOQO,5@U,5@UO#CVQWO,5=iOOQQ'#Cv'#CvO#C[QYO,5<jO#CmQYO,5<zO#CxQYO,5<|O#DTQYO,5=_O#DcQYO,5=SO#E{QYO'#GQO#FYQYO,5=[O#FmQWO,5=[O#F{QYO,5=[O#HUQYO,5=]O#HdQWO,5=`O!1PQ^O,5=`O#HrQWO'#CnO#ITQWO'#I`OOQO'#Jy'#JyO#IfQWO'#IQO#IkQWO'#GwOOQO'#Jz'#JzO#JSQWO'#GzOOQO'#G|'#G|OOQO'#Jx'#JxO#IkQWO'#GwO#JZQWO'#GxO#J`QWO,5=aO#JeQWO,5=jO!1dQWO,5=jO#'`QWO,5=jPOOO'#Hf'#HfP#JjOpO,58}POOO,58},58}OOOO-E;g-E;gOOQV1G/T1G/TO#JuQWO1G4{O#JzQ^O'#CyPOQQ'#Cx'#CxOOQO1G/v1G/vOOQP1G.u1G.uO)xQWO1G/vO#NTQ!fO'#ETO#N[Q!fO'#EaO#NcQ!fO'#EbO$ kQWO1G1yO$!_Q_O1G1yOOQP1G5V1G5VOOQO1G1]1G1]O$&RQWO1G0oO$&WQWO'#CiO!7xQXO'#I`O!6PQYO1G.lO!5oQWO,5<_O!9SQWO,59ZO!9SQWO,59ZO!5oQWO,5?kO$&iQWO1G0uO$(vQWO1G0wO$*nQWO1G0wO$+UQWO1G0wO$-YQWO1G0wO$-aQWO1G0wO$/bQWO1G0wO$/iQWO1G0wO$1jQWO1G0wO$1qQWO1G0wO$3YQWO1G1QO$5ZQWO1G1VO$5zQ_O'#JcO$8SQWO'#JcOOQO'#Jb'#JbO$8^QWO,5;mOOQO'#Dw'#DwOOQO1G1[1G1[OOQO1G1Y1G1YO$8cQWO1G1cOOQO1G1R1G1RO$8jQ_O'#HrO$:xQWO,5@OO.YQ_O1G1dOOQO1G1d1G1dO$;QQWO1G1dO$;_QWO1G1dO$;dQWO1G1eOOQO1G1l1G1lO$;lQWO1G1lOOQP,5?^,5?^O$;vQ^O,5:kO$<aQXO,5:YO!M{QWO,5:YO!M{QWO,5:YO!1PQ^O,5:gO$=bQWO'#IyOOQO'#Ix'#IxO$=pQWO,5:ZO# ^Q^O,5:ZO$=uQWO'#DsOOQP,5:^,5:^O$>WQWO,5:fOOQP,5:h,5:hO!1PQ^O,5:hO!1PQ^O,5:mO$>]QYO,5<OO$>gQ_O'#HsO$>tQXO,5@QOOQV1G1i1G1iOOQP,5:e,5:eO$>|QXO,5<OO$?[QWO1G1hO$?dQWO'#CnO$?oQWO'#FiOOQO'#Fi'#FiO$?wQWO'#FjO.YQ_O'#FkOOQO'#Ji'#JiO$?|QWO'#JhOOQO'#Jg'#JgO$@UQWO,5<SOOQQ'#Hv'#HvO$@ZQYO,5<fOOQV,5<f,5<fO$@bQYO,5<fOOQV1G2S1G2SO$@iQWO1G2nO$@qQWO1G/^O$@vQWO1G2OO#CVQWO1G3TO$AOQYO1G2UO#CmQYO1G2fO#CxQYO1G2hO$AaQYO1G2lO!2_QWO1G2wO#DcQYO1G2nO#HUQYO1G2wO$AiQWO1G2{O$AnQWO1G3UO!1dQWO1G3UO$AsQWO1G3UOOQV1G/[1G/[O$A{QWO1G/[O$BQQ_O1G/[O#7aQWO,5=oO$BXQYO,5?OO$BmQWO,5?OO$BrQZO'#IeOOQO-E;f-E;fOOQR,59c,59cO#.WQWO,59cO#.WQWO,59cOOQR,5=n,5=nO$E_QYO'#HVO$FwQZO,5=oO!5oQWO,5={O$IZQWO,5=oO$IbQZO,5=vO$KqQYO,5=vO$>]QYO,5=vO$LRQWO'#KRO$L^QWO,5=xOOQR,5=y,5=yO$LcQWO,5=zO$>]QYO,5>PO$>]QYO,5>POOQO1G.w1G.wO$>]QYO1G.wO$LnQYO,5=pO$LvQZO,59^OOQR,59^,59^O$>]QYO,5=wO% YQZO,5=}OOQR,5=},5=}O%#lQWO1G/_O!6PQYO1G/_O#FYQYO1G2vO%#qQWO1G2vO%$PQYO1G2vOOQV1G/i1G/iO%%YQWO,5:SO%%bQ_O1G/lO%*kQWO1G1^O%+RQWO1G1hOOQO1G1h1G1hO$>]QYO1G1hO%+iQ^O'#EgOOQV1G0k1G0kOOQV1G1s1G1sO!!vQ_O1G1sO!0zQWO1G1uO!1PQ^O1G1wO!.cQ_O1G1wOOQP,5:j,5:jO$>]QYO1G/^OOQO'#Cn'#CnO%+vQWO1G1zOOQV1G2O1G2OO%,OQWO'#CnO%,WQWO1G3TO%,]QWO1G3TO%,bQYO'#GQO%,sQWO'#G]O%-UQYO'#G_O%.hQYO'#GXOOQV1G2U1G2UO%/wQWO1G2UO%/|QWO1G2UO$ARQWO1G2UOOQV1G2f1G2fO%/wQWO1G2fO#CpQWO1G2fO%0UQWO'#GdOOQV1G2h1G2hO%0gQWO1G2hO#C{QWO1G2hO%0lQYO'#GSO$>]QYO1G2lO$AdQWO1G2lOOQV1G2y1G2yO%1xQWO1G2yO%3hQ^O'#GkO%3rQWO1G2nO#DfQWO1G2nO%4QQYO,5<lO%4[QYO,5<lO%4jQYO,5<lO%5XQYO,5<lOOQQ,5<l,5<lO!1WQWO'#JuO%5dQYO,5<lO%5lQWO1G2vOOQV1G2v1G2vO%5tQWO1G2vO$>]QYO1G2vOOQV1G2w1G2wO%5tQWO1G2wO%5yQWO1G2wO#HXQWO1G2wOOQV1G2z1G2zO.YQ_O1G2zO$>]QYO1G2zO%6RQWO1G2zOOQO,5>l,5>lOOQO-E<O-E<OOOQO,5=c,5=cOOQO,5=e,5=eOOQO,5=g,5=gOOQO,5=h,5=hO%6aQWO'#J|OOQO'#J{'#J{O%6iQWO,5=fO%6nQWO,5=cO!1dQWO,5=dOOQV1G2{1G2{O$>]QYO1G3UPOOO-E;d-E;dPOOO1G.i1G.iOOQO7+*g7+*gO%7VQYO'#IcO%7nQYO'#IfO%7yQYO'#IfO%8RQYO'#IfO%8^QYO,59eOOQO7+%b7+%bOOQP7+$a7+$aO%8cQ!fO'#JTOOQS'#EX'#EXOOQS'#EY'#EYOOQS'#EZ'#EZOOQS'#JT'#JTO%;UQWO'#EWOOQS'#E`'#E`OOQS'#JR'#JROOQS'#Hn'#HnO%;ZQ!fO,5:oOOQV,5:o,5:oOOQV'#JQ'#JQO%;bQ!fO,5:{OOQV,5:{,5:{O%;iQ!fO,5:|OOQV,5:|,5:|OOQV7+'e7+'eOOQV7+&Z7+&ZO%;pQ!fO,59TOOQO,59T,59TO%>YQWO7+$WO%>_QWO1G1yOOQV1G1y1G1yO!9SQWO1G.uO%>dQWO,5?}O%>nQ_O'#HqO%@|QWO,5?}OOQO1G1X1G1XOOQO7+&}7+&}O%AUQWO,5>^OOQO-E;p-E;pO%AcQWO7+'OO.YQ_O7+'OOOQO7+'O7+'OOOQO7+'P7+'PO%AjQWO7+'POOQO7+'W7+'WOOQP1G0V1G0VO%ArQXO1G/tO!M{QWO1G/tO%BsQXO1G0RO%CkQ^O'#HlO%C{QWO,5?eOOQP1G/u1G/uO%DWQWO1G/uO%D]QWO'#D_OOQO'#Dt'#DtO%DhQWO'#DtO%DmQWO'#I{OOQO'#Iz'#IzO%DuQWO,5:_O%DzQWO'#DtO%EPQWO'#DtOOQP1G0Q1G0QOOQP1G0S1G0SOOQP1G0X1G0XO%EXQXO1G1jO%EdQXO'#FeOOQP,5>_,5>_O!1PQ^O'#FeOOQP-E;q-E;qO$>]QYO1G1jOOQO7+'S7+'SOOQO,5<T,5<TO%ErQWO,5<UO.YQ_O,5<UO%EwQWO,5<VO%FRQWO'#HtO%FdQWO,5@SOOQO1G1n1G1nOOQQ-E;t-E;tOOQV1G2Q1G2QO%FlQYO1G2QO#DcQYO7+(YO$>]QYO7+$xOOQV7+'j7+'jO%FsQWO7+(oO%FxQWO7+(oOOQV7+'p7+'pO%/wQWO7+'pO%F}QWO7+'pO%GVQWO7+'pOOQV7+(Q7+(QO%/wQWO7+(QO#CpQWO7+(QOOQV7+(S7+(SO%0gQWO7+(SO#C{QWO7+(SO$>]QYO7+(WO%GeQWO7+(WO#HUQYO7+(cO%GjQWO7+(YO#DfQWO7+(YOOQV7+(c7+(cO%5tQWO7+(cO%5yQWO7+(cO#HXQWO7+(cOOQV7+(g7+(gO$>]QYO7+(pO%GxQWO7+(pO!1dQWO7+(pOOQV7+$v7+$vO%G}QWO7+$vO%HSQZO1G3ZO%JfQWO1G4jOOQO1G4j1G4jOOQR1G.}1G.}O#.WQWO1G.}O%JkQWO'#KQOOQO'#HW'#HWO%J|QWO'#HXO%KXQWO'#KQOOQO'#KP'#KPO%KaQWO,5=qO%KfQYO'#H[O%LrQWO'#GmO%L}QYO'#CtO%MXQWO'#GmO$>]QYO1G3ZOOQR1G3g1G3gO#7aQWO1G3ZO%M^QZO1G3bO$>]QYO1G3bO& mQYO'#IVO& }QWO,5@mOOQR1G3d1G3dOOQR1G3f1G3fO.YQ_O1G3fOOQR1G3k1G3kO&!VQYO7+$cO&!_QYO'#KOOOQQ'#J}'#J}O&!gQYO1G3[O&!lQZO1G3cOOQQ7+$y7+$yO&${QWO7+$yO&%QQWO7+(bOOQV7+(b7+(bO%5tQWO7+(bO$>]QYO7+(bO#FYQYO7+(bO&%YQWO7+(bO!.cQ_O1G/nO&%hQWO7+%WO$?[QWO7+'SO&%pQWO'#EhO&%{Q^O'#EhOOQU'#Ho'#HoO&%{Q^O,5;ROOQV,5;R,5;RO&&VQWO,5;RO&&[Q^O,5;RO!0zQWO7+'_OOQV7+'a7+'aO&&iQWO7+'cO&&qQWO7+'cO&&xQWO7+$xO&'TQ!fO7+'fO&'[Q!fO7+'fOOQV7+(o7+(oO!1dQWO7+(oO&'cQYO,5<lO&'nQYO,5<lO!1dQWO'#GWO&'|QWO'#JpO&([QWO'#G^O!BxQWO'#G^O&(aQWO'#JpOOQO'#Jo'#JoO&(iQWO,5<wOOQO'#DX'#DXO&(nQYO'#JrO&)}QWO'#JrO$>]QYO'#JrOOQO'#Jq'#JqO&*YQWO,5<yO&*_QWO'#GZO#D^QWO'#G[O&*gQWO'#G[O&*oQWO'#JmOOQO'#Jl'#JlO&*zQYO'#GTOOQO,5<s,5<sO&+PQWO7+'pO&+UQWO'#JtO&+dQWO'#GeO#BxQWO'#GeO&+uQWO'#JtOOQO'#Js'#JsO&+}QWO,5=OO$>]QYO'#GUO&,SQYO'#JkOOQQ,5<n,5<nO&,kQWO7+(WOOQV7+(e7+(eO&.TQ^O'#D|O&._QWO'#GlO&.gQ^O'#JwOOQO'#Gn'#GnO&.nQWO'#JwOOQO'#Jv'#JvO&.vQWO,5=VO&.{QWO'#I`O&/]Q^O'#GmO&/dQWO'#IqO&/rQWO'#GmOOQV7+(Y7+(YO&/zQWO7+(YO$>]QYO7+(YO&0SQYO'#HxO&0hQYO1G2WOOQQ1G2W1G2WOOQQ,5<m,5<mO$>]QYO,5<qO&0pQWO,5<rO&0uQWO7+(bO&1QQWO7+(fO&1XQWO7+(fOOQV7+(f7+(fO.YQ_O7+(fO$>]QYO7+(fO&1dQWO'#IRO&1nQWO,5@hOOQO1G3Q1G3QOOQO1G2}1G2}OOQO1G3P1G3POOQO1G3R1G3ROOQO1G3S1G3SOOQO1G3O1G3OO&1vQWO7+(pO$>]QYO,59fO&2RQ^O'#ISO&2xQYO,5?QOOQR1G/P1G/PO&3QQ!bO,5:pO&3VQ!fO,5:rOOQS-E;l-E;lOOQV1G0Z1G0ZOOQV1G0g1G0gOOQV1G0h1G0hO&3^QWO'#JTOOQO1G.o1G.oOOQV<<Gr<<GrO&3iQWO1G5iO$5zQ_O,5>]O&3qQWO,5>]OOQO-E;o-E;oOOQO<<Jj<<JjO&3{QWO<<JjOOQO<<Jk<<JkO&4SQXO7+%`O&5TQWO,5>WOOQO-E;j-E;jOOQP7+%a7+%aO!1PQ^O,5:`O&5cQWO'#HmO&5wQWO,5?gOOQP1G/y1G/yOOQO,5:`,5:`O&6PQWO,5:`O%DzQWO,5:`O$>]QYO,5<PO&6UQXO,5<PO&6dQXO7+'UO.YQ_O1G1pO&6oQWO1G1pOOQO,5>`,5>`OOQO-E;r-E;rOOQV7+'l7+'lO&6yQWO<<KtO#DfQWO<<KtO&7XQWO<<HdOOQV<<LZ<<LZO!1dQWO<<LZOOQV<<K[<<K[O&7dQWO<<K[O%/wQWO<<K[O&7iQWO<<K[OOQV<<Kl<<KlO%/wQWO<<KlOOQV<<Kn<<KnO%0gQWO<<KnO&7qQWO<<KrO$>]QYO<<KrOOQV<<K}<<K}O%5tQWO<<K}O%5yQWO<<K}O#HXQWO<<K}OOQV<<Kt<<KtO&7yQWO<<KtO$>]QYO<<KtO&8RQWO<<L[O$>]QYO<<L[O&8^QWO<<L[OOQV<<Hb<<HbO$>]QYO7+(uOOQO7+*U7+*UOOQR7+$i7+$iO&8cQWO,5@lOOQO'#Gm'#GmO&8kQWO'#GmO&8vQYO'#IUO&8cQWO,5@lOOQR1G3]1G3]O&:cQYO,5=vO&;rQYO,5=XO&;|QWO,5=XOOQO,5=X,5=XOOQR7+(u7+(uO&<RQZO7+(uO&>eQZO7+(|O&@tQWO,5>qOOQO-E<T-E<TO&APQWO7+)QOOQO<<G}<<G}O&AWQYO'#ITO&AcQYO,5@jOOQQ7+(v7+(vOOQQ<<He<<HeO$>]QYO<<K|OOQV<<K|<<K|O&0uQWO<<K|O&AkQWO<<K|O%5tQWO<<K|O&AsQWO7+%YOOQV<<Hr<<HrOOQO<<Jn<<JnO.YQ_O,5;SO&AzQWO,5;SO.YQ_O'#EjO&BPQWO,5;SOOQU-E;m-E;mO&B[QWO1G0mOOQV1G0m1G0mO&%{Q^O1G0mOOQV<<Jy<<JyO!.cQ_O<<J}OOQV<<J}<<J}OOQV<<Hd<<HdO.YQ_O<<HdO&BaQWO'#FvO&BfQWO<<KQO&BnQ!fO<<KQO&BuQWO<<KQO&BzQWO<<KQO&CSQ!fO<<KQOOQV<<KQ<<KQO&CZQWO<<LZO&C`QWO,5@[O$>]QYO,5<xO&ChQWO,5<xO&CmQWO'#H{O&C`QWO,5@[OOQV1G2c1G2cO&DRQWO,5@^O$>]QYO,5@^O&D^QYO'#H|O&EsQWO,5@^OOQO1G2e1G2eO%,nQWO,5<uOOQO,5<v,5<vO&E{QYO'#HzO&G_QWO,5@XO%,bQYO,5=pO$>]QYO,5<oO&GjQWO,5@`O.YQ_O,5=PO&GrQWO,5=PO&G}QWO,5=PO&H`QWO'#H}O&GjQWO,5@`OOQV1G2j1G2jO&HtQYO,5<pO%0lQYO,5>PO&I]QYO,5@VOOQV<<Kr<<KrO&ItQWO,5=XO&KfQ^O,5:hO&KmQWO,5=XO$>]QYO,5=WO&KuQWO,5@cO&K}QWO,5@cO&MvQ^O'#IPO&KuQWO,5@cOOQO1G2q1G2qO&NTQWO,5=WO&N]QWO<<KtO&NkQYO,5>oO&NvQYO,5>dO' UQYO,5>dOOQQ,5>d,5>dOOQQ-E;v-E;vOOQQ7+'r7+'rO' aQYO1G2]O$>]QYO1G2^OOQV<<LQ<<LQO.YQ_O<<LQO' lQWO<<LQO' sQWO<<LQOOQO,5>m,5>mOOQO-E<P-E<POOQV<<L[<<L[O.YQ_O<<L[O'!OQYO1G/QO'!ZQYO,5>nOOQQ,5>n,5>nO'!fQYO,5>nOOQQ-E<Q-E<QOOQS1G0[1G0[O'$tQ!fO1G0^O'%RQ!fO1G0^O'%YQWO1G3wOOQOAN@UAN@UO'%dQWO1G/zOOQO,5>X,5>XOOQO-E;k-E;kO!1PQ^O1G/zOOQO1G/z1G/zO'%oQWO1G/zO'%tQXO1G1kO$>]QYO1G1kO'&PQWO7+'[OOQVANA`ANA`O'&ZQWOANA`O$>]QYOANA`O'&cQWOANA`OOQVAN>OAN>OO.YQ_OAN>OO'&qQWOANAuOOQVAN@vAN@vO'&vQWOAN@vOOQVANAWANAWOOQVANAYANAYOOQVANA^ANA^O'&{QWOANA^OOQVANAiANAiO%5tQWOANAiO%5yQWOANAiO''TQWOANA`OOQVANAvANAvO.YQ_OANAvO''cQWOANAvO$>]QYOANAvOOQR<<La<<LaO''nQWO1G6WO%JkQWO,5>pOOQO'#HY'#HYO''vQWO'#HZOOQO,5>p,5>pOOQO-E<S-E<SO'(RQYO1G2sO'(]QWO1G2sOOQO1G2s1G2sO$>]QYO<<LaOOQR<<Ll<<LlOOQQ,5>o,5>oOOQQ-E<R-E<RO&0uQWOANAhOOQVANAhANAhO%5tQWOANAhO$>]QYOANAhO'(bQWO1G1rO')UQ^O1G0nO.YQ_O1G0nO'*zQWO,5;UO'+RQWO1G0nP'+WQWO'#ERP&%{Q^O'#HpOOQV7+&X7+&XO'+cQWO7+&XO&&qQWOAN@iO'+hQWOAN>OO!5oQWO,5<bOOQS,5>a,5>aO'+oQWOAN@lO'+tQWOAN@lOOQS-E;s-E;sOOQVAN@lAN@lO'+|QWOAN@lOOQVANAuANAuO',UQWO1G5vO',^QWO1G2dO$>]QYO1G2dO&'|QWO,5>gOOQO,5>g,5>gOOQO-E;y-E;yO',iQWO1G5xO',qQWO1G5xO&(nQYO,5>hO',|QWO,5>hO$>]QYO,5>hOOQO-E;z-E;zO'-XQWO'#JnOOQO1G2a1G2aOOQO,5>f,5>fOOQO-E;x-E;xO&'cQYO,5<lO'-gQYO1G2ZO'.RQWO1G5zO'.ZQWO1G2kO.YQ_O1G2kO'.eQWO1G2kO&+UQWO,5>iOOQO,5>i,5>iOOQO-E;{-E;{OOQQ,5>c,5>cOOQQ-E;u-E;uO'.pQWO1G2sO'/QQWO1G2rO'/]QWO1G5}O'/eQ^O,5>kOOQO'#Go'#GoOOQO,5>k,5>kO'/lQWO,5>kOOQO-E;}-E;}O$>]QYO1G2rO'/zQYO7+'xO'0VQWOANAlOOQVANAlANAlO.YQ_OANAlO'0^QWOANAvOOQS7+%x7+%xO'0eQWO7+%xO'0pQ!fO7+%xO'0}QWO7+%fO!1PQ^O7+%fO'1YQXO7+'VOOQVG26zG26zO'1eQWOG26zO'1sQWOG26zO$>]QYOG26zO'1{QWOG23jOOQVG27aG27aOOQVG26bG26bOOQVG26xG26xOOQVG27TG27TO%5tQWOG27TO'2SQWOG27bOOQVG27bG27bO.YQ_OG27bO'2ZQWOG27bOOQO1G4[1G4[OOQO7+(_7+(_OOQRANA{ANA{OOQVG27SG27SO%5tQWOG27SO&0uQWOG27SO'2fQ^O7+&YO'4PQWO7+'^O'4sQ^O7+&YO.YQ_O7+&YP.YQ_O,5;SP'6PQWO,5;SP'6UQWO,5;SOOQV<<Is<<IsOOQVG26TG26TOOQVG23jG23jOOQO1G1|1G1|OOQVG26WG26WO'6aQWOG26WP&B}QWO'#HuO'6fQWO7+(OOOQO1G4R1G4RO'6qQWO7++dO'6yQWO1G4SO$>]QYO1G4SO%,nQWO'#HyO'7UQWO,5@YO'7dQWO7+(VO.YQ_O7+(VOOQO1G4T1G4TOOQO1G4V1G4VO'7nQWO1G4VO'7|QWO7+(^OOQVG27WG27WO'8XQWOG27WOOQS<<Id<<IdO'8`QWO<<IdO'8kQWO<<IQOOQVLD,fLD,fO'8vQWOLD,fO'9OQWOLD,fOOQVLD)ULD)UOOQVLD,oLD,oOOQVLD,|LD,|O'9^QWOLD,|O.YQ_OLD,|OOQVLD,nLD,nO%5tQWOLD,nO'9eQ^O<<ItO';OQWO<<JxO';rQ^O<<ItP'=OQWO1G0nP'=oQ^O1G0nP.YQ_O1G0nP'?bQWO1G0nOOQVLD+rLD+rO'?gQWO7+)nOOQO,5>e,5>eOOQO-E;w-E;wO'?rQWO<<KqOOQVLD,rLD,rOOQSAN?OAN?OOOQV!$(!Q!$(!QO'?|QWO!$(!QOOQV!$(!h!$(!hO'@UQWO!$(!hOOQV!$(!Y!$(!YO'@]Q^OAN?`POQU7+&Y7+&YP'AvQWO7+&YP'BgQ^O7+&YP.YQ_O7+&YOOQV!)9El!)9ElOOQV!)9FS!)9FSPOQU<<It<<ItP'DYQWO<<ItP'DyQ^O<<ItPOQUAN?`AN?`O'FlQWO'#CnO'FsQXO'#CnO'GlQWO'#I`O'IRQXO'#I`O'IxQWO'#DpO'IxQWO'#DpO!.cQ_O'#EkO'JZQ_O'#EoO'JbQ_O'#FPO'MfQ_O'#FbO'MmQXO'#I`O'NdQ_O'#E}O( gQ_O'#FWO'IxQWO,5:[O'IxQWO,5:[O!.cQ_O,5;ZO!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;fO(!jQ_O,5;kO(%nQWO,5;kO(&OQWO,5;|O(&VQYO'#CuO(&bQYO'#CvO(&mQWO'#CwO(&mQWO'#CwO('OQYO'#CtO('ZQWO,5;iO('bQWO,5;rO('iQ_O,5;rO((oQ_O,5;|O'IxQWO1G/vO((vQWO1G0uO(*eQWO1G0wO(*oQWO1G0wO(,dQWO1G0wO(,kQWO1G0wO(.]QWO1G0wO(.dQWO1G0wO(0UQWO1G0wO(0]QWO1G0wO(0dQWO1G1QO(0tQWO1G1VO(1UQYO'#IeO(&mQWO,59cO(&mQWO,59cO(1aQWO1G1^O(1hQWO1G1hO(&mQWO1G.}O(1oQWO'#DpO!.^QXO'#FbO(1tQWO,5;ZO(1{QWO'#Cw\",\n  stateData: \"(2_~O&|OSUOS&}PQ~OPoOQ!QOSVOTVOZeO[lO^RO_RO`ROa!UOd[Og!nOsVOtVOuVOw!POyvO|!VO}mO!Q!dO!U!WO!W!XO!X!^O!Z!YO!]!pO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'Q`O'TQO'ZkO'^UO'gcO'qiO(QdO~O&}!sO~OZbX[bXdbXdlXobXwjX}bX!lbX!qbX!tbX#ObX#PbX#pbX'gbX'qbX'rbX'xbX'ybX'zbX'{bX'|bX'}bX(ObX(PbX(QbX(RbX(TbX~OybXXbX!ebX!PbXvbX#RbX~P$|OZ'SX['SXd'SXd'XXo'SXw'kXy'SX}'SX!l'SX!q'SX!t'SX#O'SX#P'SX#p'SX'g'SX'q'SX'r'SX'x'SX'y'SX'z'SX'{'SX'|'SX'}'SX(O'SX(P'SX(Q'SX(R'SX(T'SXv'SX~OX'SX!e'SX!P'SX#R'SX~P'ZOr!uO']!wO'_!uO~Od!xO~O^RO_RO`ROaRO'TQO~Od!}O~Od#PO[(SXo(SXy(SX}(SX!l(SX!q(SX!t(SX#O(SX#P(SX#p(SX'g(SX'q(SX'r(SX'x(SX'y(SX'z(SX'{(SX'|(SX'}(SX(O(SX(P(SX(Q(SX(R(SX(T(SXv(SX~OZ#OO~P*`OZ#RO[#QO~OQ!QO^#TO_#TO`#TOa#]Od#ZOg!nOyvO|!VO!Q!dO!U#^O!W!lO!]!pO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'Q#VO'T#SO~OPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdO~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!j#eO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdO~P)xO[#}Oo#xO}#zO!l#yO!q#jO!t#yO#O#xO#P#uO#p$OO'g#gO'q#yO'r#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO~OPoOQ!QOSVOTVOZeOd[OsVOtVOuVOw!PO!U#bO!W#cO!X!^O!Z!YO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO[#sXo#sXy#sX}#sX!l#sX!q#sX!t#sX#O#sX#P#sX#p#sX'g#sX'q#sX'r#sX'x#sX'y#sX'z#sX'{#sX'|#sX'}#sX(O#sX(P#sX(Q#sX(R#sX(T#sXX#sX!e#sX!P#sXv#sX#R#sX~P)xOX(SX!e(SX!P(SXw(SX#R(SX~P*`OPoOQ!QOSVOTVOX$ROZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q$UO'ZkO'^UO'gcO'qiO(QdO~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!P$XO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q$UO'ZkO'^UO'gcO'qiO(QdO~P)xOQ!QOSVOTVO[$gO^$pO_$ZO`9yOa9yOd$aOsVOtVOuVO}$eO!i$qO!l$lO!q$hO#V$lO'T$YO'^UO'g$[O~O!j$rOP(XP~P<cOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Q$uO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdO~P)xOw$vO~Oo'bX#O'bX#P'bX#p'bX'r'bX'x'bX'y'bX'z'bX'{'bX'|'bX'}'bX(O'bX(P'bX(R'bX(T'bX~OP%tXQ%tXS%tXT%tXZ%tX[%tX^%tX_%tX`%tXa%tXd%tXg%tXs%tXt%tXu%tXw%tXy%tX|%tX}%tX!Q%tX!U%tX!W%tX!X%tX!Z%tX!]%tX!l%tX!q%tX!t%tX#Y%tX#r%tX#{%tX$O%tX$b%tX$d%tX$f%tX$i%tX$m%tX$q%tX$s%tX%T%tX%V%tX%Z%tX%]%tX%^%tX%f%tX%j%tX%s%tX&z%tX'Q%tX'T%tX'Z%tX'^%tX'g%tX'q%tX(Q%tXv%tX~P@[Oy$xO['bX}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bXv'bX~P@[Ow$yO!Q(iX!U(iX!W(iX$q(iX%](iX%^(iX~Oy$zO~PEsO!Q$}O!U%UO!W!lO$m%OO$q%PO$s%QO%T%RO%V%SO%Z%TO%]!lO%^%VO%f%WO%j%XO%s%YO~O!Q!lO!U!lO!W!lO$q%[O%]!lO~O%^%VO~PGaOPoOQ!QOSVOTVOZeO[lO^RO_RO`ROa!UOd[Og!nOsVOtVOuVOw!POyvO|!VO}mO!Q!dO!U!WO!W!XO!X!^O!Z!YO!]!pO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'Q#VO'TQO'ZkO'^UO'gcO'qiO(QdO~Ov%`O~P]OQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaO!Q{X!U{X!W{X$m{X$q{X$s{X%T{X%V{X%Z{X%]{X%^{X%f{X%j{X%s{X~P'ZO!Q{X!U{X!W{X$m{X$q{X$s{X%T{X%V{X%Z{X%]{X%^{X%f{X%j{X%s{X~O}%}O'T{XQ{XZ{X[{X^{X_{X`{Xa{Xd{Xg{X!q{X$f{X&W{X'Z{X(Q{X~PMuOg&PO%f%WO!Q(iX!U(iX!W(iX$q(iX%](iX%^(iX~Ow!PO~P! yOw!PO!X&RO~PEvOPoOQ!QOSVOTVOZeO[lO^9qO_9qO`9qOa9qOd9tOsVOtVOuVOw!PO}mO!U#bO!W#cO!X:zO!Z!YO!]&UO!l9wO!q9vO!t9wO#Y!_O#r9zO#{9{O$O!]O$b!`O$d!bO$f!cO'T9oO'ZkO'^UO'gcO'q9wO(QdO~OPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdOo#qXy#qX#O#qX#P#qX#p#qX'r#qX'x#qX'y#qX'z#qX'{#qX'|#qX'}#qX(O#qX(P#qX(R#qX(T#qXX#qX!e#qX!P#qXv#qX#R#qX~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdOo#zXy#zX#O#zX#P#zX#p#zX'r#zX'x#zX'y#zX'z#zX'{#zX'|#zX'}#zX(O#zX(P#zX(R#zX(T#zXX#zX!e#zX!P#zXv#zX#R#zX~P)xO'ZkO[#}Xo#}Xy#}X}#}X!l#}X!q#}X!t#}X#O#}X#P#}X#p#}X'g#}X'q#}X'r#}X'x#}X'y#}X'z#}X'{#}X'|#}X'}#}X(O#}X(P#}X(Q#}X(R#}X(T#}XX#}X!e#}X!P#}Xv#}Xw#}X#R#}X~OPoO~OPoOQ!QOSVOTVOZeO[lO^9qO_9qO`9qOa9qOd9tOsVOtVOuVOw!PO}mO!U#bO!W#cO!X:zO!Z!YO!l9wO!q9vO!t9wO#Y!_O#r9zO#{9{O$O!]O$b!`O$d!bO$f!cO'T9oO'ZkO'^UO'gcO'q9wO(QdO~O!S&_O~Ow!PO~O!j&bO~P<cO'T&cO~PEvOZ&eO~O'T&cO~O'^UOw(^Xy(^X!Q(^X!U(^X!W(^X$q(^X%](^X%^(^X~Oa&hO~P!1iO'T&iO~O_&nO'T&cO~OQ&oOZ&pO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaO!j&uO~P<cO^&wO_&wO`&wOa&wOd'POw&|O'T&vO(Q&}O~O!i'UO!j'TO'T&cO~O&}!sO'O'VO'P'XO~Or!uO']'ZO'_!uO~OQ']O^'ia_'ia`'iaa'ia'T'ia~O['cOw'dO}'bO~OQ']O~OQ!QO^#TO_#TO`#TOa'kOd#ZO'T#SO~O['lO~OZbXdlXXbXobXPbX!SbX!ebX'rbX!PbX!ObXybX!ZbX#RbXvbX~O[bXwbX}bX~P!6mOZ'SXd'XXX'SX['SXo'SXw'SX}'SX#p'SXP'SX!S'SX!e'SX'r'SX!P'SX!O'SXy'SX!Z'SX#R'SXv'SX~O^#TO_#TO`#TOa'kO'T#SO~OZ'mO~Od'oO~OZ'SXd'XX~PMuOZ'pOX(SX!e(SX!P(SXw(SX#R(SX~P*`O[#}O}#zO(O#|O(R#fOo#_ay#_a!l#_a!q#_a!t#_a#O#_a#P#_a#p#_a'g#_a'q#_a'r#_a'x#_a'y#_a'z#_a'{#_a'|#_a'}#_a(P#_a(Q#_a(T#_aX#_a!e#_a!P#_av#_aw#_a#R#_a~Ow!PO!X&RO~Oy#caX#ca!e#ca!P#cav#ca#R#ca~P2gOPoOQ!QOSVOTVOZeOd[OsVOtVOuVOw!PO!U#bO!W#cO!X!^O!Z!YO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO[#sao#say#sa}#sa!l#sa!q#sa!t#sa#O#sa#P#sa#p#sa'g#sa'q#sa'r#sa'x#sa'y#sa'z#sa'{#sa'|#sa'}#sa(O#sa(P#sa(Q#sa(R#sa(T#saX#sa!e#sa!P#sav#sa#R#sa~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q#VO'ZkO'^UO'gcO'qiO(QdO!P(UP~P)xOu(SO#w(TO'T(RO~O[#}O}#zO!q#jO'g#gO'r#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO!l#sa!t#sa#p#sa'q#sa~Oo#xO#O#xO#P#uOy#saX#sa!e#sa!P#sav#sa#R#sa~P!B}Oy(YO!e(WOX(WX~P2gOX(ZO~OPoOQ!QOSVOTVOX(ZOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q$UO'ZkO'^UO'gcO'qiO(QdO~P)xOZ#RO~O!P(_O!e(WO~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q$UO'ZkO'^UO'gcO'qiO(QdO~P)xOZbXdlXwjX}jX!tbX'qbX~OP!RX!S!RX!e!RX'p!RX'r!RX!O!RXo!RXy!RX!P!RXX!RX!Z!RX#R!RXv!RX~P!JUOZ'SXd'XXw'kX}'kX!t'SX'q'SX~OP!`X!S!`X!e!`X'r!`X!O!`Xo!`Xy!`X!P!`XX!`X!Z!`X#R!`Xv!`X~P!KgOT(aOu(aO~O!t(bO'q(bOP!^X!S!^X!e!^X'r!^X!O!^Xo!^Xy!^X!P!^XX!^X!Z!^X#R!^Xv!^X~O^9rO_9rO`9yOa9yO'T9pO~Od(eO~O'p(fOP'hX!S'hX!e'hX'r'hX!O'hXo'hXy'hX!P'hXX'hX!Z'hX#R'hXv'hX~O!j&bO!P'lP~P<cOw(kO}(jO~O!j&bOX'lP~P<cO!j(oO~P<cOZ'pO!t(bO'q(bO~O!S(qO'r(pOP$WX!e$WX~O!e(rOP(YX~OP(tO~OP!aX!S!aX!e!aX'r!aX!O!aXo!aXy!aX!P!aXX!aX!Z!aX#R!aXv!aX~P!KgOy$UaX$Ua!e$Ua!P$Uav$Ua#R$Ua~P2gO!l(|O'Q#VO'T(xOv(ZP~OQ!QO^#TO_#TO`#TOa#]Od#ZOg!nOyvO|!VO!Q!dO!U#^O!W!lO!]!pO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'Q`O'T#SO~Ov)TO~P#$iOy)VO~PEsO%^)WO~PGaOa)ZO~P!1iO%f)`O~PEvO_)aO'T&cO~O!i)fO!j)eO'T&cO~O'^UO!Q(^X!U(^X!W(^X$q(^X%](^X%^(^X~Ov%uX~P2gOv)gO~PGyOv)gO~Ov)gO~P]OQiXQ'XXZiXd'XX}iX#piX(PiX~ORiXwiX$fiX$|iX[iXoiXyiX!liX!qiX!tiX#OiX#PiX'giX'qiX'riX'xiX'yiX'ziX'{iX'|iX'}iX(OiX(QiX(RiX(TiX!PiX!eiXXiXPiXviX!SiX#RiX~P#(kOQjXQlXRjXZjXdlX}jX#pjX(PjXwjX$fjX$|jX[jXojXyjX!ljX!qjX!tjX#OjX#PjX'gjX'qjX'rjX'xjX'yjX'zjX'{jX'|jX'}jX(OjX(QjX(RjX(TjX!PjX!ejXXjX!SjXPjXvjX#RjX~O%^)jO~PGaOQ']Od)kO~O^)mO_)mO`)mOa)mO'T%dO~Od)qO~OQ']OZ)uO})sOR'UX#p'UX(P'UXw'UX$f'UX$|'UX['UXo'UXy'UX!l'UX!q'UX!t'UX#O'UX#P'UX'g'UX'q'UX'r'UX'x'UX'y'UX'z'UX'{'UX'|'UX'}'UX(O'UX(Q'UX(R'UX(T'UX!P'UX!e'UXX'UXP'UXv'UX!S'UX#R'UX~OQ!QO^:bO_:^O`TOaTOd:aO%^)jO'T:_O~PGaOQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!j)yO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaOQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!P)|O!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaO(P*OO~OR*QO#p*RO(P*PO~OQhXQ'XXZhXd'XX}hX(PhX~ORhX#phXwhX$fhX$|hX[hXohXyhX!lhX!qhX!thX#OhX#PhX'ghX'qhX'rhX'xhX'yhX'zhX'{hX'|hX'}hX(OhX(QhX(RhX(ThX!PhX!ehXXhXPhXvhX!ShX#RhX~P#4kOQ*SO~O})sO~OQ!QO^%vO_%cO`TOaTOd%jO$f%wO%^%xO'T%dO~PGaO!Q*VO!j*VO~O^*YO`*YOa*YO!O*ZO~OQ&oOZ*[O[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaO[#}Oo:YO}#zO!l:ZO!q#jO!t:ZO#O:YO#P:VO#p$OO'g#gO'q:ZO'r#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO~Ow'dX~P#9vOy#qaX#qa!e#qa!P#qav#qa#R#qa~P2gOy#zaX#za!e#za!P#zav#za#R#za~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!S&_O!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdOo#zay#za#O#za#P#za#p#za'r#za'x#za'y#za'z#za'{#za'|#za'}#za(O#za(P#za(R#za(T#zaX#za!e#za!P#zav#za#R#za~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Q*eO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdO~P)xOw*fO~P#9vO$b*iO$d*jO$f*kO~O!O*lO'r(pO~O!S*nO~O'T*oO~Ow$yOy*qO~O'T*rO~OQ*uOw*vOy*yO}*wO$|*xO~OQ*uOw*vO$|*xO~OQ*uOw+QO$|*xO~OQ*uOo+VOy+XO!S+UO~OQ*uO}+ZO~OQ!QOZ%rO[%qO^%vO`TOaTOd%jOg%yO}%pO!U!lO!W!lO!q%oO$f%wO$q%[O%]!lO%^%xO&W%{O'T%dO'Z%eO(Q%zO~OR+bO_+^O!Q+cO~P#DkO_%cO!Q!lOw&UX$|&UX(P&UX~P#DkOw$yO$f+hO$|*xO(P*PO~OQ!QOZ*[O[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaOQ*uOw$yO!S+UO$|*xO~Oo+nOy+mO!S+oO'r(pO~OdlXy!RX#pbXv!RX!e!RX~Od'XXy(mX#p'SXv(mX!e(mX~Od+qO~O^#TO_#TO`#TOa'kOw&|O'T&vO(Q+vO~Ov(oP~P!3|O#p+{O~Oy+|O~O!S+}O~O&}!sO'O'VO'P,PO~Od,QO~OSVOTVO_%cOsVOtVOuVOw!PO!Q!lO'^UO~P#DkOS,^OT,^OZ,^O['cO_,YOd,^Oo,^Os,^Ou,^Ow'dOy,^O}'bO!S,^O!e,^O!l,^O!q,[O!t,^O!y,^O#O,^O#P,^O#Q,^O#R,^O'Q,^O'Z%eO'^UO'g,ZO'r,[O'v,_O'x,ZO'y,[O'z,[O'{,[O'|,]O'},]O(O,^O(P,`O(Q,`O(R,aO~O!P,dO~P#KkOX,gO~P#KkOv,iO~P#KkOo'tX#O'tX#P'tX#p'tX'r'tX'x'tX'y'tX'z'tX'{'tX'|'tX'}'tX(O'tX(P'tX(R'tX(T'tX~Oy,jO['tX}'tX!l'tX!q'tX!t'tX'g'tX'q'tX(Q'tXv'tX~P#NjOP$giQ$giS$giT$giZ$gi[$gi^$gi_$gi`$gia$gid$gig$gis$git$giu$giw$giy$gi|$gi}$gi!Q$gi!U$gi!W$gi!X$gi!Z$gi!]$gi!l$gi!q$gi!t$gi#Y$gi#r$gi#{$gi$O$gi$b$gi$d$gi$f$gi$i$gi$m$gi$q$gi$s$gi%T$gi%V$gi%Z$gi%]$gi%^$gi%f$gi%j$gi%s$gi&z$gi'Q$gi'T$gi'Z$gi'^$gi'g$gi'q$gi(Q$giv$gi~P#NjOX,kO~O['cOo,lOw'dO}'bOX]X~Oy#ciX#ci!e#ci!P#civ#ci#R#ci~P2gO[#}O}#zO'x#hO(O#|O(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!q#ei!t#ei#O#ei#P#ei#p#ei'q#ei'r#ei'y#ei'z#ei'{#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#R#ei~O'g#ei(P#ei~P$'PO[#}O}#zO(O#|O(R#fOo#eiy#ei!l#ei!q#ei!t#ei#O#ei#P#ei#p#ei'q#ei'r#ei'y#ei'z#ei'{#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#R#ei~O'g#ei'x#ei(P#ei(Q#ei(T#eiw#ei~P$)QO'g#gO(P#gO~P$'PO[#}O}#zO'g#gO'x#hO'y#iO'z#iO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!t#ei#O#ei#P#ei#p#ei'q#ei'r#ei'{#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#R#ei~O!q#ei~P$+`O!q#jO~P$+`O[#}O}#zO!q#jO'g#gO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!t#ei#O#ei#P#ei#p#ei'q#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#R#ei~O'r#ei~P$-hO'r#lO~P$-hO[#}O}#zO!q#jO#P#uO'g#gO'r#lO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!t#ei#O#ei#p#ei'q#ei'|#eiX#ei!e#ei!P#eiv#ei#R#ei~O'}#ei~P$/pO'}#mO~P$/pO[#}O}#zO!q#jO'g#gO'r#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO!l#ni!t#ni#p#ni'q#ni~Oo#xO#O#xO#P#uOy#niX#ni!e#ni!P#niv#ni#R#ni~P$1xO[#}O}#zO!q#jO'g#gO'r#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO!l#si!t#si#p#si'q#si~Oo#xO#O#xO#P#uOy#siX#si!e#si!P#siv#si#R#si~P$3yOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q#VO'ZkO'^UO'gcO'qiO(QdO~P)xO!e,sO!P(VX~P2gO!P,uO~OX,vO~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO'gcO'qiO(QdOX&fX!e&fX!P&fX~P)xO!e(WOX(Wa~Oy,zO!e(WOX(WX~P2gOX,{O~O!P,|O!e(WO~O!P-OO!e(WO~P2gOSVOTVOsVOtVOuVO'^UO'g$[O~P!6POP!baZca!S!ba!e!ba!tca'qca'r!ba!O!bao!bay!ba!P!baX!ba!Z!ba#R!bav!ba~O!e-TO'r(pO!P'mXX'mX~O!P-VO~O!i-`O!j-_O!l-[O'T-XOv'nP~OX-aO~O_%cO!Q!lO~P#DkO!j-gOP&gX!e&gX~P<cO!e(rOP(Ya~O!S-iO'r(pOP$Wa!e$Wa~Ow!PO(P*PO~OvbX!S!kX!ebX~O'Q#VO'T(xO~O!S-mO~O!e-oOv([X~Ov-qO~Ov-sO~P,cOv-sO~P#$iO_-uO'T&cO~O!S-vO~Ow$yOy-wO~OQ*uOw*vOy-zO}*wO$|*xO~OQ*uOo.UO~Oy._O~O!S.`O~O!j.bO'T&cO~Ov.cO~Ov.cO~PGyOQ']O^'Wa_'Wa`'Waa'Wa'T'Wa~Od.gO~OQ'XXQ'kXR'kXZ'kXd'XX}'kX#p'kX(P'kXw'kX$f'kX$|'kX['kXo'kXy'kX!l'kX!q'kX!t'kX#O'kX#P'kX'g'kX'q'kX'r'kX'x'kX'y'kX'z'kX'{'kX'|'kX'}'kX(O'kX(Q'kX(R'kX(T'kX!P'kX!e'kXX'kXP'kXv'kX!S'kX#R'kX~OQ!QOZ%rO[%qO^.rO_%cO`TOaTOd%jOg%yO}%pO!j.sO!q.pO!t.kO#V.mO$f%wO%^%xO&W%{O'Q#VO'T%dO'Z%eO(Q%zO!P(sP~PGaO#Q.tOR%wa#p%wa(P%waw%wa$f%wa$|%wa[%wao%way%wa}%wa!l%wa!q%wa!t%wa#O%wa#P%wa'g%wa'q%wa'r%wa'x%wa'y%wa'z%wa'{%wa'|%wa'}%wa(O%wa(Q%wa(R%wa(T%wa!P%wa!e%waX%waP%wav%wa!S%wa#R%wa~O%^.vO~PGaO(P*POR&Oa#p&Oaw&Oa$f&Oa$|&Oa[&Oao&Oay&Oa}&Oa!l&Oa!q&Oa!t&Oa#O&Oa#P&Oa'g&Oa'q&Oa'r&Oa'x&Oa'y&Oa'z&Oa'{&Oa'|&Oa'}&Oa(O&Oa(Q&Oa(R&Oa(T&Oa!P&Oa!e&OaX&OaP&Oav&Oa!S&Oa#R&Oa~O_%cO!Q!lO!j.xO(P*OO~P#DkO!e.yO(P*PO!P(uX~O!P.{O~OX.|Oy.}O(P*PO~O'Z%eOR(qP~OQ']O})sORfa#pfa(Pfawfa$ffa$|fa[faofayfa!lfa!qfa!tfa#Ofa#Pfa'gfa'qfa'rfa'xfa'yfa'zfa'{fa'|fa'}fa(Ofa(Qfa(Rfa(Tfa!Pfa!efaXfaPfavfa!Sfa#Rfa~OQ']O})sOR&Va#p&Va(P&Vaw&Va$f&Va$|&Va[&Vao&Vay&Va!l&Va!q&Va!t&Va#O&Va#P&Va'g&Va'q&Va'r&Va'x&Va'y&Va'z&Va'{&Va'|&Va'}&Va(O&Va(Q&Va(R&Va(T&Va!P&Va!e&VaX&VaP&Vav&Va!S&Va#R&Va~O!P/UO~Ow$yO$f/ZO$|*xO(P*PO~OQ!QOZ/[O[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaOo/^O'r(pO~O#W/_OP!YiQ!YiS!YiT!YiZ!Yi[!Yi^!Yi_!Yi`!Yia!Yid!Yig!Yio!Yis!Yit!Yiu!Yiw!Yiy!Yi|!Yi}!Yi!Q!Yi!U!Yi!W!Yi!X!Yi!Z!Yi!]!Yi!l!Yi!q!Yi!t!Yi#O!Yi#P!Yi#Y!Yi#p!Yi#r!Yi#{!Yi$O!Yi$b!Yi$d!Yi$f!Yi$i!Yi$m!Yi$q!Yi$s!Yi%T!Yi%V!Yi%Z!Yi%]!Yi%^!Yi%f!Yi%j!Yi%s!Yi&z!Yi'Q!Yi'T!Yi'Z!Yi'^!Yi'g!Yi'q!Yi'r!Yi'x!Yi'y!Yi'z!Yi'{!Yi'|!Yi'}!Yi(O!Yi(P!Yi(Q!Yi(R!Yi(T!YiX!Yi!e!Yi!P!Yiv!Yi!i!Yi!j!Yi#V!Yi#R!Yi~Oy#ziX#zi!e#zi!P#ziv#zi#R#zi~P2gOy$UiX$Ui!e$Ui!P$Uiv$Ui#R$Ui~P2gOv/eO!j&bO'Q`O~P<cOw/nO}/mO~Oy!RX#pbX~Oy/oO~O#p/pO~OR+bO_+dO!Q/sO'T&iO'Z%eO~Oa/zO|!VO'Q#VO'T(ROv(cP~OQ!QOZ%rO[%qO^%vO_%cO`TOa/zOd%jOg%yO|!VO}%pO!q%oO$f%wO%^%xO&W%{O'Q#VO'T%dO'Z%eO(Q%zO!P(eP~PGaOQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f0VO%^%xO&W%{O'T%dO'Z%eO(Q%zOw(`Py(`P~PGaOw*vO~Oy-zO$|*xO~Oa/zO|!VO'Q#VO'T*oOv(gP~Ow+QO~OQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f0VO%^%xO&W%{O'T%dO'Z%eO(Q%zO(R0`O~PGaOy0dO~OQ!QOSVOTVO[$gO^0lO_$ZO`9yOa9yOd$aOsVOtVOuVO}$eO!i$qO!j0mO!l$lO!q0eO!t0hO'Q#VO'T$YO'Z%eO'^UO'g$[O~O#V0nO!P(jP~P%1}Ow!POy0pO#Q0rO$|*xO~OR0uO!e0sO~P#(kOR0uO!S+UO!e0sO(P*OO~OR0uOo0wO!S+UO!e0sOQ'VXZ'VX}'VX#p'VX(P'VX~OR0uOo0wO!e0sO~OR0uO!e0sO~O$f/ZO(P*PO~Ow$yO~Ow$yO$|*xO~Oo0}Oy0|O!S1OO'r(pO~O!e1POv(pX~Ov1RO~O^#TO_#TO`#TOa'kOw&|O'T&vO(Q1VO~Oo1YOQ'VXR'VXZ'VX}'VX!e'VX(P'VX~O!e1ZO(P*POR'YX~O!e1ZOR'YX~O!e1ZO(P*OOR'YX~OR1]O~O!S1^OS'wXT'wXZ'wX['wX_'wXd'wXo'wXs'wXu'wXw'wXy'wX}'wX!P'wX!e'wX!l'wX!q'wX!t'wX!y'wX#O'wX#P'wX#Q'wX#R'wX'Q'wX'Z'wX'^'wX'g'wX'r'wX'v'wX'x'wX'y'wX'z'wX'{'wX'|'wX'}'wX(O'wX(P'wX(Q'wX(R'wXX'wXv'wX~O}1_O~O!P1aO~P#KkOX1bO~P#KkOv1cO~P#KkOS,^OT,^OZ,^O['cO_1dOd,^Oo,^Os,^Ou,^Ow'dOy,^O}'bO!S,^O!e,^O!l,^O!q,[O!t,^O!y,^O#O,^O#P,^O#Q,^O#R,^O'Q,^O'Z%eO'^UO'g,ZO'r,[O'v,_O'x,ZO'y,[O'z,[O'{,[O'|,]O'},]O(O,^O(P,`O(Q,`O(R,aO~OX1fO~Oy,jO~O!e,sO!P(Va~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'Q#VO'ZkO'^UO'gcO'qiO(QdO!P&eX!e&eX~P)xO!e,sO!P(Va~OX&fa!e&fa!P&fa~P2gOX1kO~P2gO!P1mO!e(WO~OP!biZci!S!bi!e!bi!tci'qci'r!bi!O!bio!biy!bi!P!biX!bi!Z!bi#R!biv!bi~O'r(pOP!oi!S!oi!e!oi!O!oio!oiy!oi!P!oiX!oi!Z!oi#R!oiv!oi~O!j&bO!P&`X!e&`XX&`X~P<cO!e-TO!P'maX'ma~O!P1qO~Ov!RX!S!kX!e!RX~O!S1rO~O!e1sOv'oX~Ov1uO~O'T-XO~O!j1xO'T-XO~O(P*POP$Wi!e$Wi~O!S1yO'r(pOP$XX!e$XX~O!S1|O~Ov$_a!e$_a~P2gO!l(|O'Q#VO'T(xOv&hX!e&hX~O!e-oOv([a~Ov2QO~P,cOy2UO~O#p2VO~Oy2WO$|*xO~Ow*vOy2WO}*wO$|*xO~Oo2aO~Ow!POy2fO#Q2hO$|*xO~O!S2jO~Ov2lO~O#Q2mOR%wi#p%wi(P%wiw%wi$f%wi$|%wi[%wio%wiy%wi}%wi!l%wi!q%wi!t%wi#O%wi#P%wi'g%wi'q%wi'r%wi'x%wi'y%wi'z%wi'{%wi'|%wi'}%wi(O%wi(Q%wi(R%wi(T%wi!P%wi!e%wiX%wiP%wiv%wi!S%wi#R%wi~Od2nO~O^2qO!j.sO!q2rO'Q#VO'Z%eO~O(P*PO!P%{X!e%{X~O!e2sO!P(tX~O!P2uO~OQ!QOZ%rO[%qO^2wO_%cO`TOaTOd%jOg%yO}%pO!j2xO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(Q%zO~PGaO^2yO!j2xO(P*OO~O!P%aX!e%aX~P#4kO^2yO~O(P*POR&Oi#p&Oiw&Oi$f&Oi$|&Oi[&Oio&Oiy&Oi}&Oi!l&Oi!q&Oi!t&Oi#O&Oi#P&Oi'g&Oi'q&Oi'r&Oi'x&Oi'y&Oi'z&Oi'{&Oi'|&Oi'}&Oi(O&Oi(Q&Oi(R&Oi(T&Oi!P&Oi!e&OiX&OiP&Oiv&Oi!S&Oi#R&Oi~O_%cO!Q!lO!P&yX!e&yX~P#DkO!e.yO!P(ua~OR3QO(P*PO~O!e3ROR(rX~OR3TO~O(P*POR&Pi#p&Piw&Pi$f&Pi$|&Pi[&Pio&Piy&Pi}&Pi!l&Pi!q&Pi!t&Pi#O&Pi#P&Pi'g&Pi'q&Pi'r&Pi'x&Pi'y&Pi'z&Pi'{&Pi'|&Pi'}&Pi(O&Pi(Q&Pi(R&Pi(T&Pi!P&Pi!e&PiX&PiP&Piv&Pi!S&Pi#R&Pi~O!P3UO~O$f3VO(P*PO~Ow$yO$f3VO$|*xO(P*PO~Ow!PO!Z!YO~O!Z3aO#R3_O'r(pO~O!j&bO'Q#VO~P<cOv3eO~Ov3eO!j&bO'Q`O~P<cO!O3hO'r(pO~Ow!PO~P#9vOo3kOy3jO(P*PO~O!P3oO~P%;pOv3rO~P%;pOR0uO!S+UO!e0sO~OR0uOo0wO!S+UO!e0sO~Oa/zO|!VO'Q#VO'T(RO~O!S3uO~O!e3wOv(dX~Ov3yO~OQ!QOZ%rO[%qO^%vO_%cO`TOa/zOd%jOg%yO|!VO}%pO!q%oO$f%wO%^%xO&W%{O'Q#VO'T%dO'Z%eO(Q%zO~PGaO!e3|O(P*PO!P(fX~O!P4OO~O!S4PO(P*OO~O!S+UO(P*PO~O!e4ROw(aXy(aX~OQ4TO~Oy2WO~Oa/zO|!VO'Q#VO'T*oO~Oo4WOw*vO}*wOv%XX!e%XX~O!e4ZOv(hX~Ov4]O~O(P4_Oy(_Xw(_X$|(_XR(_Xo(_X!e(_X~Oy4aO(P*PO~OQ!QOSVOTVO[$gO^4bO_$ZO`9yOa9yOd$aOsVOtVOuVO}$eO!i$qO!l$lO!q$hO#V$lO'T$YO'^UO'g$[O~O!j4cO'Z%eO~P&,sO!S4eO'r(pO~O#V4gO~P%1}O!e4hO!P(kX~O!P4jO~O!P%aX!S!aX!e%aX'r!aX~P!KgO!j&bO~P&,sO!e4hO!P(kX!S'eX'r'eX~O^2yO!j2xO~Ow!POy2fO~O_4pO!Q/sO'T&iO'Z%eOR&lX!e&lX~OR4rO!e0sO~O!S4tO~Ow$yO$|*xO(P*PO~Oy4uO~P2gOo4vOy4uO(P*PO~Ov&uX!e&uX~P!3|O!e1POv(pa~Oo4|Oy4{O(P*PO~OSVOTVO_%cOsVOtVOuVOw!PO!Q!lO'^UOR&vX!e&vX~P#DkO!e1ZOR'Ya~O!y5SO~O!P5TO~P#KkO!S1^OX'wX#R'wX~O!e,sO!P(Vi~O!P&ea!e&ea~P2gOX5WO~P2gOP!bqZcq!S!bq!e!bq!tcq'qcq'r!bq!O!bqo!bqy!bq!P!bqX!bq!Z!bq#R!bqv!bq~O'r(pO!P&`a!e&`aX&`a~O!i-`O!j-_O!l5YO'T-XOv&aX!e&aX~O!e1sOv'oa~O!S5[O~O!S5`O'r(pOP$Xa!e$Xa~O(P*POP$Wq!e$Wq~Ov$^i!e$^i~P2gOw!POy5bO#Q5dO$|*xO~Oo5gOy5fO(P*PO~Oy5iO~Oy5iO$|*xO~Oy5mO(P*PO~Ow!POy5bO~Oo5tOy5sO(P*PO~O!S5vO~O!e2sO!P(ta~O^2yO!j2xO'Z%eO~OQ!QOZ%rO[%qO^.rO_%cO`TOaTOd%jOg%yO}%pO!j.sO!q.pO!t5zO#V5|O$f%wO%^%xO&W%{O'Q#VO'T%dO'Z%eO(Q%zO!P&xX!e&xX~PGaOQ!QOZ%rO[%qO^6OO_%cO`TOaTOd%jOg%yO}%pO!j6PO!q%oO$f%wO%^%xO&W%{O'T%dO'Z%eO(P*OO(Q%zO~PGaO!P%aa!e%aa~P#4kO^6QO~O#Q6ROR%wq#p%wq(P%wqw%wq$f%wq$|%wq[%wqo%wqy%wq}%wq!l%wq!q%wq!t%wq#O%wq#P%wq'g%wq'q%wq'r%wq'x%wq'y%wq'z%wq'{%wq'|%wq'}%wq(O%wq(Q%wq(R%wq(T%wq!P%wq!e%wqX%wqP%wqv%wq!S%wq#R%wq~O(P*POR&Oq#p&Oqw&Oq$f&Oq$|&Oq[&Oqo&Oqy&Oq}&Oq!l&Oq!q&Oq!t&Oq#O&Oq#P&Oq'g&Oq'q&Oq'r&Oq'x&Oq'y&Oq'z&Oq'{&Oq'|&Oq'}&Oq(O&Oq(Q&Oq(R&Oq(T&Oq!P&Oq!e&OqX&OqP&Oqv&Oq!S&Oq#R&Oq~O(P*PO!P&ya!e&ya~OX6SO~P2gO'Z%eOR&wX!e&wX~O!e3ROR(ra~O$f6YO(P*PO~Ow![q~P#9vO#R6]O~O!Z3aO#R6]O'r(pO~Ov6bO~O#R6fO~Oy6gO!P6hO~O!P6hO~P%;pOy6kO~Ov6kOy6gO~Ov6kO~P%;pOy6mO~O!e3wOv(da~O!S6pO~Oa/zO|!VO'Q#VO'T(ROv&oX!e&oX~O!e3|O(P*PO!P(fa~OQ!QOZ%rO[%qO^%vO_%cO`TOa/zOd%jOg%yO|!VO}%pO!q%oO$f%wO%^%xO&W%{O'Q#VO'T%dO'Z%eO(Q%zO!P&pX!e&pX~PGaO!e3|O!P(fa~OQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f0VO%^%xO&W%{O'T%dO'Z%eO(Q%zOw&nX!e&nXy&nX~PGaO!e4ROw(aay(aa~O!e4ZOv(ha~Oo7SOv%Xa!e%Xa~Oo7SOw*vO}*wOv%Xa!e%Xa~Oa/zO|!VO'Q#VO'T*oOv&qX!e&qX~O(P*POy$xaw$xa$|$xaR$xao$xa!e$xa~O(P4_Oy(_aw(_a$|(_aR(_ao(_a!e(_a~O!P%aa!S!aX!e%aa'r!aX~P!KgOQ!QOSVOTVO[$gO_$ZO`9yOa9yOd$aOsVOtVOuVO}$eO!i$qO!j&bO!l$lO!q$hO#V$lO'T$YO'^UO'g$[O~O^7ZO~P&JUO^6QO!j6PO~O!e4hO!P(ka~O!e4hO!P(ka!S'eX'r'eX~OQ!QOSVOTVO[$gO^0lO_$ZO`9yOa9yOd$aOsVOtVOuVO}$eO!i$qO!j0mO!l$lO!q0eO!t7_O'Q#VO'T$YO'Z%eO'^UO'g$[O~O#V7aO!P&sX!e&sX~P&L]O!S7cO'r(pO~Ow!POy5bO$|*xO(P*PO~O!S+UOR&la!e&la~Oo0wO!S+UOR&la!e&la~Oo0wOR&la!e&la~O(P*POR$yi!e$yi~Oy7fO~P2gOo7gOy7fO(P*PO~O(P*PORni!eni~O(P*POR&va!e&va~O(P*OOR&va!e&va~OS,^OT,^OZ,^O_,^Od,^Oo,^Os,^Ou,^Oy,^O!S,^O!e,^O!l,^O!q,[O!t,^O!y,^O#O,^O#P,^O#Q,^O#R,^O'Q,^O'Z%eO'^UO'g,ZO'r,[O'x,ZO'y,[O'z,[O'{,[O'|,]O'},]O(O,^O~O(P7iO(Q7iO(R7iO~P'!qO!P7kO~P#KkO!P&ei!e&ei~P2gO'r(pOv!hi!e!hi~O!S7mO~O(P*POP$Xi!e$Xi~Ov$^q!e$^q~P2gOw!POy7oO~Ow!POy7oO#Q7rO$|*xO~Oy7tO~Oy7uO~Oy7vO(P*PO~Ow!POy7oO$|*xO(P*PO~Oo7{Oy7zO(P*PO~O!e2sO!P(ti~O(P*PO!P%}X!e%}X~O!P%ai!e%ai~P#4kO^8OO~O!e8TO['bXv$`i}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bX~P@[OQ#[iS#[iT#[i[#[i^#[i_#[i`#[ia#[id#[is#[it#[iu#[iv$`i}#[i!i#[i!j#[i!l#[i!q#[i!t'bX#V#[i'Q#[i'T#[i'^#[i'g#[i'q'bX(Q'bX~P@[O#R#^a~P2gO#R8WO~O!Z3aO#R8XO'r(pO~Ov8[O~Oy8^O~P2gOy8`O~Oy6gO!P8aO~Ov8`Oy6gO~O!e3wOv(di~O(P*POv%Qi!e%Qi~O!e3|O!P(fi~O!e3|O(P*PO!P(fi~O(P*PO!P&pa!e&pa~O(P8hOw(bX!e(bXy(bX~O(P*PO!S$wiy$wiw$wi$|$wiR$wio$wi!e$wi~O!e4ZOv(hi~Ov%Xi!e%Xi~P2gOo8kOv%Xi!e%Xi~O!P%ai!S!aX!e%ai'r!aX~P!KgO(P*PO!P%`i!e%`i~O!e4hO!P(ki~O#V8nO~P&L]O!P&sa!S'eX!e&sa'r'eX~O(P*POR$zq!e$zq~Oy8pO~P2gOy7zO~P2gO(P8rO(Q8rO(R8rO~O(P8rO(Q8rO(R8rO~P'!qO'r(pOv!hq!e!hq~O(P*POP$Xq!e$Xq~Ow!POy8uO$|*xO(P*PO~Ow!POy8uO~Oy8xO~P2gOy8zO~P2gOo8|Oy8zO(P*PO~OQ#[qS#[qT#[q[#[q^#[q_#[q`#[qa#[qd#[qs#[qt#[qu#[qv$`q}#[q!i#[q!j#[q!l#[q!q#[q#V#[q'Q#[q'T#[q'^#[q'g#[q~O!e9PO['bXv$`q}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bX~P@[Oo'bX!t'bX#O'bX#P'bX#p'bX'q'bX'r'bX'x'bX'y'bX'z'bX'{'bX'|'bX'}'bX(O'bX(P'bX(Q'bX(R'bX(T'bX~P'2fO#R9UO~O!Z3aO#R9UO'r(pO~Oy9WO~O(P*POv%Qq!e%Qq~O!e3|O!P(fq~O(P*PO!P&pi!e&pi~O(P8hOw(ba!e(bay(ba~Ov%Xq!e%Xq~P2gO!P&si!S'eX!e&si'r'eX~O(P*PO!P%`q!e%`q~Oy9]O~P2gO(P9^O(Q9^O(R9^O~O'r(pOv!hy!e!hy~Ow!POy9_O~Ow!POy9_O$|*xO(P*PO~Oy9aO~P2gOQ#[yS#[yT#[y[#[y^#[y_#[y`#[ya#[yd#[ys#[yt#[yu#[yv$`y}#[y!i#[y!j#[y!l#[y!q#[y#V#[y'Q#[y'T#[y'^#[y'g#[y~O!e9dO['bXv$`y}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bX~P@[Oo'bX!t'bX#O'bX#P'bX#p'bX'q'bX'r'bX'x'bX'y'bX'z'bX'{'bX'|'bX'}'bX(O'bX(P'bX(Q'bX(R'bX(T'bX~P'9eO!e9eO['bX}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bX~P@[OQ#[iS#[iT#[i[#[i^#[i_#[i`#[ia#[id#[is#[it#[iu#[i}#[i!i#[i!j#[i!l#[i!q#[i!t'bX#V#[i'Q#[i'T#[i'^#[i'g#[i'q'bX(Q'bX~P@[O#R9hO~O(P*PO!P&pq!e&pq~Ov%Xy!e%Xy~P2gOw!POy9iO~Oy9jO~P2gOQ#[!RS#[!RT#[!R[#[!R^#[!R_#[!R`#[!Ra#[!Rd#[!Rs#[!Rt#[!Ru#[!Rv$`!R}#[!R!i#[!R!j#[!R!l#[!R!q#[!R#V#[!R'Q#[!R'T#[!R'^#[!R'g#[!R~O!e9kO['bX}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bX~P@[OQ#[qS#[qT#[q[#[q^#[q_#[q`#[qa#[qd#[qs#[qt#[qu#[q}#[q!i#[q!j#[q!l#[q!q#[q!t'bX#V#[q'Q#[q'T#[q'^#[q'g#[q'q'bX(Q'bX~P@[O!e9nO['bX}'bX!l'bX!q'bX!t'bX'g'bX'q'bX(Q'bX~P@[OQ#[yS#[yT#[y[#[y^#[y_#[y`#[ya#[yd#[ys#[yt#[yu#[y}#[y!i#[y!j#[y!l#[y!q#[y!t'bX#V#[y'Q#[y'T#[y'^#[y'g#[y'q'bX(Q'bX~P@[OwbX~P$|OwjX}jX!tbX'qbX~P!6mOZ'SXd'XXo'SXw'kX!t'SX'q'SX'r'SX~O['SXd'SXw'SX}'SX!l'SX!q'SX#O'SX#P'SX#p'SX'g'SX'x'SX'y'SX'z'SX'{'SX'|'SX'}'SX(O'SX(P'SX(Q'SX(R'SX(T'SX~P'GTOP'SX}'kX!S'SX!e'SX!O'SXy'SX!P'SXX'SX!Z'SX#R'SXv'SX~P'GTO^9qO_9qO`9qOa9qO'T9oO~O!j:OO~P!.cOPoOQ!QOSVOTVOZeOd9tOsVOtVOuVO!U#bO!W#cO!X:zO!Z!YO#Y!_O#r9zO#{9{O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO[#sXo#sXw#sX}#sX!l#sX!q#sX!t#sX#O#sX#P#sX#p#sX'g#sX'q#sX'r#sX'x#sX'y#sX'z#sX'{#sX'|#sX'}#sX(O#sX(P#sX(Q#sX(R#sX(T#sX~P'IxO#Q$uO~P!.cO}'kXP'SX!S'SX!e'SX!O'SXy'SX!P'SXX'SX!Z'SX#R'SXv'SX~P'GTOo#qX#O#qX#P#qX#p#qX'r#qX'x#qX'y#qX'z#qX'{#qX'|#qX'}#qX(O#qX(P#qX(R#qX(T#qX~P!.cOo#zX#O#zX#P#zX#p#zX'r#zX'x#zX'y#zX'z#zX'{#zX'|#zX'}#zX(O#zX(P#zX(R#zX(T#zX~P!.cOPoOQ!QOSVOTVOZeOd9tOsVOtVOuVO!U#bO!W#cO!X:zO!Z!YO#Y!_O#r9zO#{9{O$O!]O$b!`O$d!bO$f!cO'ZkO'^UO[#sao#saw#sa}#sa!l#sa!q#sa!t#sa#O#sa#P#sa#p#sa'g#sa'q#sa'r#sa'x#sa'y#sa'z#sa'{#sa'|#sa'}#sa(O#sa(P#sa(Q#sa(R#sa(T#sa~P'IxOo:YO#O:YO#P:VOw#sa~P!B}Ow$Ua~P#9vOQ'XXd'XX}iX~OQlXdlX}jX~O^:sO_:sO`:sOa:sO'T:_O~OQ'XXd'XX}hX~Ow#qa~P#9vOw#za~P#9vO!S&_Oo#za#O#za#P#za#p#za'r#za'x#za'y#za'z#za'{#za'|#za'}#za(O#za(P#za(R#za(T#za~P!.cO#Q*eO~P!.cOw#ci~P#9vO[#}O}#zO'x#hO(O#|O(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!q#ei!t#ei#O#ei#P#ei#p#ei'q#ei'r#ei'y#ei'z#ei'{#ei'|#ei'}#ei~O'g#ei(P#ei~P((}O'g#gO(P#gO~P((}O[#}O}#zO'g#gO'x#hO'y#iO'z#iO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!t#ei#O#ei#P#ei#p#ei'q#ei'r#ei'{#ei'|#ei'}#ei~O!q#ei~P(*yO!q#jO~P(*yO[#}O}#zO!q#jO'g#gO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!t#ei#O#ei#P#ei#p#ei'q#ei'|#ei'}#ei~O'r#ei~P(,rO'r#lO~P(,rO[#}O}#zO!q#jO#P:VO'g#gO'r#lO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!t#ei#O#ei#p#ei'q#ei'|#ei~O'}#ei~P(.kO'}#mO~P(.kOo:YO#O:YO#P:VOw#ni~P$1xOo:YO#O:YO#P:VOw#si~P$3yOQ'XXd'XX}'kX~Ow#zi~P#9vOw$Ui~P#9vOd9}O~Ow#ca~P#9vOd:uO~OU'x_'v'P'O'^s!y'^'T'Z~\",\n  goto: \"$Ku(vPPPPPPP(wPP)OPP)^PPPP)d-hP0f5aP7R7R8v7R>wD_DpPDvHQPPPPPPK`P! P! _PPPPP!!VP!$oP!$oPP!&oP!(rP!(w!)n!*f!*f!*f!(w!+]P!(w!.Q!.TPP!.ZP!(w!(w!(w!(wP!(w!(wP!(w!(w!.y!/dP!/dJ}J}J}PPPP!/d!.y!/sPP!$oP!0^!0a!0g!1h!1t!3t!3t!5r!7t!1t!1t!9p!;_!=O!>k!@U!Am!CS!De!1t!1tP!1tP!1t!1t!Et!1tP!Ge!1t!1tP!Ie!1tP!1t!7t!7t!1t!7t!1t!Kl!Mt!Mw!7t!1t!Mz!M}!M}!M}!NR!$oP!$oP!$oP! P! PP!N]! P! PP!Ni# }! PP! PP#!^##c##k#$Z#$_#$e#$e#$mP#&s#&s#&y#'o#'{! PP! PP#(]#(l! PP! PPP#(x#)W#)d#)|#)^! P! PP! P! P! PP#*S#*S#*Y#*`#*S#*S! P! PP#*m#*v#+Q#+Q#,x#.l#.x#.x#.{#.{5a5a5a5a5a5a5a5aP5a#/O#/U#/p#1{#2R#2b#6^#6d#6j#6|#7W#8w#9R#9b#9h#9n#9x#:S#:Y#:g#:m#:s#:}#;]#;g#=u#>R#>`#>f#>n#>u#?PPPPPPPP#?V#BaP#F^#Jx#Ls#Nr$&^P$&aPPP$)_$)h$)z$/U$1d$1m$3fP!(w$4`$7r$:i$>T$>^$>c$>fPPP$>i$A`$A|P$BaPPPPPPPPPP$BvP$EU$EX$E[$Eb$Ee$Eh$Ek$En$Et$HO$HR$HU$HX$H[$H_$Hb$He$Hh$Hk$Hn$Jt$Jw$Jz#*S$KW$K^$Ka$Kd$Kh$Kl$Ko$KrQ!tPT'V!s'Wi!SOlm!P!T$T$W$y%b)U*f/gQ'i#QR,n'l(OSOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!q!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%X%_%b&U&Y&[&b&u&z&|'P'a'l'n'o'}(W(Y(b(d(e(f(j(o(p(r(|)S)U)i*Z*f*i*k*l+Z+n+z,q,s,z-R-T-g-m-t.}/^/b/d/g0e0g0m0}1P1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9s9t9u9v9w9x9z9{9|9}:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f:gS(z$v-oQ*p&eQ*t&hQ-k(yQ-y)ZW0Z+Q0Y4Z7UR4Y0[&w!RObfgilmop!O!P!T!Y!Z![!_!`!c!p#Q#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r$y%_%b&U&Y&[&b&u'l'}(W(Y(b(f(j(o(p(r(|)S)U)i*Z*f*i*k*l+Z+n,s,z-T-g-m-t.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f#r]Ofgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i+n,s,z-m.}0}1h1|3_3a3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9hb#[b#Q$y'l(b)S)U*Z-t!h$bo!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7m$b%k!Q!n$O$u%o%p%q%y%{&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8g!W:y!Y!_!`*i*l/^3h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fR:|%n$_%u!Q!n$O$u%o%p%q&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8g$e%l!Q!n$O$u%n%o%p%q%y%{&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8g'hZOY[fgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r%_%b%i%j&U&Y&[&b&u'a'}(W(Y(d(e(f(j(o(p(r(|)i)p)q*f*i*k*l+Z+n,s,z-R-T-g-m.i.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9s9t9u9v9w9x9z9{9|9}:O:P:Q:R:S:T:U:V:W:X:Y:Z:`:a:e:f:g:t:u:x$^%l!Q!n$O$u%n%o%p%q%y%{&P&p&r(q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gQ&j!hQ&k!iQ&l!jQ&m!kQ&s!oQ)[%QQ)]%RQ)^%SQ)_%TQ)b%WQ+`&oS,R']1ZQ.W)`S/r*u4TR4n0s+yTOY[bfgilmop!O!P!Q!T!Y!Z![!_!`!c!n!p!q!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$O$T$W$`$a$e$g$h$q$r$u$y%X%_%b%i%j%n%o%p%q%y%{&P&U&Y&[&b&o&p&r&u&z&|'P']'a'l'n'o'}(W(Y(b(d(e(f(j(o(p(q(r(|)S)U)i)p)q)s)x)y*O*P*R*V*Z*[*^*e*f*i*k*l*n*w*x+U+V+Z+h+n+o+z+},q,s,z-R-T-g-i-m-t-v.U.`.i.p.t.x.y.}/Z/[/^/b/d/g/{/}0`0e0g0m0r0w0}1O1P1Y1Z1h1r1y1|2a2h2j2m2s2v3V3_3a3f3h3k3u3{3|4R4U4W4_4c4e4h4t4v4|5[5`5d5g5t5v6R6Y6]6a6p6v6x7S7^7c7g7m7r7{8W8X8g8k8|9U9h9s9t9u9v9w9x9z9{9|9}:O:P:Q:R:S:T:U:V:W:X:Y:Z:`:a:e:f:g:t:u:xQ'[!xQ'h#PQ)l%gU)r%m*T*WR.f)kQ,T']R5P1Z#t%s!Q!n$O$u%p%q&P&p&r(q)x)y*O*R*V*[*^*e*n*w+V+h+o+}-i-v.U.`.t.x.y/Z/[/{/}0`0r0w1O1Y1y2a2h2j2m2v3V3u3{3|4U4e4t5`5d5v6R6Y6p6v6x7c7r8gQ)x%oQ+_&oQ,U']n,^'b'c'd,c,f,h,l/m/n1_3n3q5T5U7kS.q)s2sQ/O*PQ/Q*SQ/q*uS0Q*x4RQ0a+U[0o+Z.j0g4h5y7^Q2v.pS4d0e2rQ4m0sQ5Q1ZQ6T3RQ6z4PQ7O4TQ7X4_R9Y8h&jVOfgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u']'}(W(Y(b(f(j(o(p(r(|)i*f*i*k*l+Z+n,s,z-T-g-m.}/^/b/d/g0e0g0m0}1Z1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fU&g!g%P%[o,^'b'c'd,c,f,h,l/m/n1_3n3q5T5U7k$nsOfgilm!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y'}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9z9{:O:P:Q:R:S:T:U:V:W:X:Y:eS$tp9xS&O!W#bS&Q!X#cQ&`!bQ*_&RQ*a&VS*d&[:fQ*h&^Q,T']Q-j(wQ/i*jQ0p+[S2f.X0qQ3]/_Q3^/`Q3g/hQ3i/kQ5P1ZU5b2R2g4lU7o5c5e5rQ8]6dS8u7p7qS9_8v8wR9i9`i{Ob!O!P!T$y%_%b)S)U)i-thxOb!O!P!T$y%_%b)S)U)i-tW/v*v/t3w6qQ/}*wW0[+Q0Y4Z7UQ3{/{Q6x3|R8g6v!h$do!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7mQ&d!dQ&f!fQ&n!mW&x!q%X&|1PQ'S!rQ)X$}Q)Y%OQ)a%VU)d%Y'T'UQ*s&hS+s&z'PS-Y(k1sQ-u)WQ-x)ZS.a)e)fS0x+c/sQ1S+zQ1W+{S1v-_-`Q2k.bQ3s/pQ5]1xR5h2V${sOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f$zsOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fR3]/_V&T!Y!`*i!i$lo!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7m!k$^o!c!p$e$g$h$q$r&U&b&u(b(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7m!i$co!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7m&e^Ofgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u'}(W(Y(f(j(o(p(r(|)i*f*i*k*l+Z+n,s,z-T-g-m.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fR(l$fQ-[(kR5Y1sQ(S#|S({$v-oS-Z(k1sQ-l(yW/u*v/t3w6qS1w-_-`Q3v/vR5^1xQ'e#Or,e'b'c'd'j'p)u,c,f,h,l/m/n1_3n3q5U6fR,o'mk,a'b'c'd,c,f,h,l/m/n1_3n3q5UQ'f#Or,e'b'c'd'j'p)u,c,f,h,l/m/n1_3n3q5U6fR,p'mR*g&]X/c*f/d/g3f!}aOb!O!P!T#z$v$y%_%b'}(y)S)U)i)s*f*v*w+Q+Z,s-o-t.j/b/d/g/t/{0Y0g1h2s3f3w3|4Z4h5y6a6q6v7U7^Q3`/aQ6_3bQ8Y6`R9V8Z${rOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f#nfOfglmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#z#}$T$W%_%b&Y&['}(W(Y(|)i+n,s,z-m.}0}1h1|3_3a3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h!T9u!Y!_!`*i*l/^3h9u9v9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:e:f#rfOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i+n,s,z-m.}0}1h1|3_3a3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h!X9u!Y!_!`*i*l/^3h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f$srOfglmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:e:f#U#oh#d$P$Q$V$s%^&W&X'q't'u'v'w'x'y'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9b}:P&S&]/k3[6d:[:]:c:d:h:j:k:l:m:n:o:p:q:r:v:w:{#W#ph#d$P$Q$V$s%^&W&X'q'r't'u'v'w'x'y'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9b!P:Q&S&]/k3[6d:[:]:c:d:h:i:j:k:l:m:n:o:p:q:r:v:w:{#S#qh#d$P$Q$V$s%^&W&X'q'u'v'w'x'y'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9b{:R&S&]/k3[6d:[:]:c:d:h:k:l:m:n:o:p:q:r:v:w:{#Q#rh#d$P$Q$V$s%^&W&X'q'v'w'x'y'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9by:S&S&]/k3[6d:[:]:c:d:h:l:m:n:o:p:q:r:v:w:{#O#sh#d$P$Q$V$s%^&W&X'q'w'x'y'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9bw:T&S&]/k3[6d:[:]:c:d:h:m:n:o:p:q:r:v:w:{!|#th#d$P$Q$V$s%^&W&X'q'x'y'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9bu:U&S&]/k3[6d:[:]:c:d:h:n:o:p:q:r:v:w:{!x#vh#d$P$Q$V$s%^&W&X'q'z'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9bq:W&S&]/k3[6d:[:]:c:d:h:p:q:r:v:w:{!v#wh#d$P$Q$V$s%^&W&X'q'{'|(O(U([(`*b*c,r,w,y-n0z1i1l1}3P4w5V5a6^6e7R7e7h7s7y8j8q8{9[9bo:X&S&]/k3[6d:[:]:c:d:h:q:r:v:w:{$]#{h#`#d$P$Q$V$s%^&S&W&X&]'q'r's't'u'v'w'x'y'z'{'|(O(U([(`*b*c,r,w,y-n/k0z1i1l1}3P3[4w5V5a6^6d6e7R7e7h7s7y8j8q8{9[9b:[:]:c:d:h:i:j:k:l:m:n:o:p:q:r:v:w:{${jOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f$v!aOfgilmp!O!P!T!Y!Z!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fQ&Y![Q&Z!]R:e9{#rpOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i+n,s,z-m.}0}1h1|3_3a3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9hQ&[!^!W9x!Y!_!`*i*l/^3h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fR:f:zR$moR-f(rR$wqT(}$v-oQ/f*fS3d/d/gR6c3fQ3m/mQ3p/nQ6i3nR6l3qQ$zwQ)V${Q*q&fQ+f&qQ+i&sQ-w)YW.Z)b+j+k+lS/X*]+gW2b.W.[.].^U3W/Y/]0yU5o2c2d2eS6W3X3ZS7w5p5qS8Q6V6XQ8y7xS8}8R8SR9c9O^|O!O!P!T%_%b)iX)R$y)S)U-tQ&r!nQ*^&PQ*|&jQ+P&kQ+T&lQ+W&mQ+]&nQ+l&sQ-})[Q.Q)]Q.T)^Q.V)_Q.Y)aQ.^)bQ2S-uQ2e.WR4U0VU+a&o*u4TR4o0sQ+Y&mQ+k&sS.])b+l^0v+_+`/q/r4m4n7OS2d.W.^S4Q0R0SR5q2eS0R*x4RQ0a+UR7X4_U+d&o*u4TR4p0sQ*z&jQ+O&kQ+S&lQ+g&qQ+j&sS-{)[*|S.P)]+PS.S)^+TU.[)b+k+lQ/Y*]Q0X*{Q0q+[Q2X-|Q2Y-}Q2].QQ2_.TU2c.W.].^Q2g.XS3Z/]0yS5c2R4lQ5j2ZS5p2d2eQ6X3XS7q5e5rQ7x5qQ8R6VQ8v7pQ9O8SR9`8wQ0T*xR6|4RQ*y&jQ*}&kU-z)[*z*|U.O)]+O+PS2W-{-}S2[.P.QQ4X0ZQ5i2YQ5k2]R7T4YQ/w*vQ3t/tQ6r3wR8d6qQ*{&jS-|)[*|Q2Z-}Q4X0ZR7T4YQ+R&lU.R)^+S+TS2^.S.TR5l2_Q0]+QQ4V0YQ7V4ZR8l7UQ+[&nS.X)a+]S2R-u.YR5e2SQ0i+ZQ4f0gQ7`4hR8m7^Q.m)sQ0i+ZQ2p.jQ4f0gQ5|2sQ7`4hQ7}5yR8m7^Q0i+ZR4f0gX'O!q%X&|1PX&{!q%X&|1PW'O!q%X&|1PS+u&z'PR1U+z_|O!O!P!T%_%b)iQ%a!PS)h%_%bR.d)i$^%u!Q!n$O$u%o%p%q&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gQ*U%yR*X%{$c%n!Q!n$O$u%o%p%q%y%{&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gW)t%m%x*T*WQ.e)jR2{.vR.m)sR5|2sQ'W!sR,O'WQ!TOQ$TlQ$WmQ%b!P[%|!T$T$W%b)U/gQ)U$yR/g*f$b%i!Q!n$O$u%o%p%q%y%{&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8g[)n%i)p.i:`:t:xQ)p%jQ.i)qQ:`%nQ:t:aR:x:uQ!vUR'Y!vS!OO!TU%]!O%_)iQ%_!PR)i%b#rYOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i+n,s,z-m.}0}1h1|3_3a3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9hh!yY!|#U$`'a'n(d,q-R9s9|:gQ!|[b#Ub#Q$y'l(b)S)U*Z-t!h$`o!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7mQ'a!}Q'n#ZQ(d$aQ,q'oQ-R(e!W9s!Y!_!`*i*l/^3h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fQ9|9tR:g9}Q-U(gR1p-UQ1t-[R5Z1tQ,c'bQ,f'cQ,h'dW1`,c,f,h5UR5U1_Q/d*fS3c/d3fR3f/gfbO!O!P!T$y%_%b)S)U)i-tp#Wb'}(y.j/b/t/{0Y0g1h5y6a6q6v7U7^Q'}#zS(y$v-oQ.j)sW/b*f/d/g3fQ/t*vQ/{*wQ0Y+QQ0g+ZQ1h,sQ5y2sQ6q3wQ6v3|Q7U4ZR7^4hQ,t(OQ1g,rT1j,t1gS(X$Q([Q(^$VU,x(X(^,}R,}(`Q(s$mR-h(sQ-p)OR2P-pQ3n/mQ3q/nT6j3n3qQ)S$yS-r)S-tR-t)UQ4`0aR7Y4``0t+^+_+`+a+d/q/r7OR4q0tQ8i6zR9Z8iQ4S0TR6}4SQ3x/wQ6n3tT6s3x6nQ3}/|Q6t3zU6y3}6t8eR8e6uQ4[0]Q7Q4VT7W4[7QhzOb!O!P!T$y%_%b)S)U)i-tQ$|xW%Zz$|%f)v$b%f!Q!n$O$u%o%p%q%y%{&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gR)v%nS4i0i0nS7]4f4gT7b4i7]W&z!q%X&|1PS+r&z+zR+z'PQ1Q+wR4z1QU1[,S,T,UR5R1[S3S/Q7OR6U3SQ2t.mQ5x2pT5}2t5xQ.z)zR3O.z^_O!O!P!T%_%b)iY#Xb$y)S)U-t$l#_fgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['}(W(Y(|*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f!h$io!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7mS'j#Q'lQ-P(bR/V*Z&v!RObfgilmop!O!P!T!Y!Z![!_!`!c!p#Q#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r$y%_%b&U&Y&[&b&u'l'}(W(Y(b(f(j(o(p(r(|)S)U)i*Z*f*i*k*l+Z+n,s,z-T-g-m-t.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f[!{Y[#U#Z9s9tW&{!q%X&|1P['`!|!}'n'o9|9}S(c$`$aS+t&z'PU,X'a,q:gS-Q(d(eQ1T+zR1n-RS%t!Q&oQ&q!nQ(V$OQ(w$uS)w%o.pQ)z%pQ)}%qS*]&P&rQ+e&pQ,S']Q-d(qQ.l)sU.w)x)y2vS/O*O*PQ/P*RQ/T*VQ/W*[Q/]*^Q/`*eQ/l*nQ/|*wS0S*x4RQ0a+UQ0c+VQ0y+hQ0{+oQ1X+}Q1{-iQ2T-vQ2`.UQ2i.`Q2z.tQ2|.xQ2}.yQ3X/ZQ3Y/[S3z/{/}Q4^0`Q4l0rQ4s0wQ4x1OQ4}1YQ5O1ZQ5_1yQ5n2aQ5r2hQ5u2jQ5w2mQ5{2sQ6V3VQ6o3uQ6u3{Q6w3|Q7P4UQ7X4_Q7[4eQ7d4tQ7n5`Q7p5dQ7|5vQ8P6RQ8S6YQ8c6pS8f6v6xQ8o7cQ8w7rR9X8g$^%m!Q!n$O$u%o%p%q&P&o&p&r'](q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gQ)j%nQ*T%yR*W%{$y%h!Q!n$O$u%i%j%n%o%p%q%y%{&P&o&p&r'](q)p)q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.i.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8g:`:a:t:u:x'pWOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%_%b&U&Y&[&b&u'a'l'n'o'}(W(Y(b(d(e(f(j(o(p(r(|)S)U)i*Z*f*i*k*l+Z+n,q,s,z-R-T-g-m-t.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9s9t9u9v9w9x9z9{9|9}:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f:g$x%g!Q!n$O$u%i%j%n%o%p%q%y%{&P&o&p&r'](q)p)q)s)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.i.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8g:`:a:t:u:x_&y!q%X&z&|'P+z1PR,V']$zrOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f!j$]o!c!p$e$g$h$q$r&U&b&u(b(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7mQ,T']R5P1Z_}O!O!P!T%_%b)i^|O!O!P!T%_%b)iQ#YbX)R$y)S)U-tbhO!O!T3_6]8W8X9U9hS#`f9uQ#dgQ$PiQ$QlQ$VmQ$spW%^!P%_%b)iU&S!Y!`*iQ&W!ZQ&X![Q&]!_Q'q#eQ'r#oS's#p:QQ't#qQ'u#rQ'v#sQ'w#tQ'x#uQ'y#vQ'z#wQ'{#xQ'|#yQ(O#zQ(U#}Q([$TQ(`$WQ*b&YQ*c&[Q,r'}Q,w(WQ,y(YQ-n(|Q/k*lQ0z+nQ1i,sQ1l,zQ1}-mQ3P.}Q3[/^Q4w0}Q5V1hQ5a1|Q6^3aQ6d3hQ6e3kQ7R4WQ7e4vQ7h4|Q7s5gQ7y5tQ8j7SQ8q7gQ8{7{Q9[8kQ9b8|Q:[9wQ:]9xQ:c9zQ:d9{Q:h:OQ:i:PQ:j:RQ:k:SQ:l:TQ:m:UQ:n:VQ:o:WQ:p:XQ:q:YQ:r:ZQ:v:eQ:w:fR:{9v^tO!O!P!T%_%b)i$`#afgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['}(W(Y(|*i*l+n,s,z-m.}/^0}1h1|3a3h3k4W4v4|5g5t7S7g7{8k8|9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fQ6[3_Q8V6]Q9R8WQ9T8XQ9g9UR9m9hQ&V!YQ&^!`R/h*iQ$joQ&a!cQ&t!pU(g$e$g(jS(n$h0eQ(u$qQ(v$rQ*`&UQ*m&bQ+p&uQ-S(fS-b(o4cQ-c(pQ-e(rW/a*f/d/g3fQ/j*kW0f+Z0g4h7^Q1o-TQ1z-gQ3b/bQ4k0mQ5X1rQ7l5[Q8Z6aR8t7m!h$_o!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7mR-P(b'qXOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%_%b&U&Y&[&b&u'a'l'n'o'}(W(Y(b(d(e(f(j(o(p(r(|)S)U)i*Z*f*i*k*l+Z+n,q,s,z-R-T-g-m-t.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9s9t9u9v9w9x9z9{9|9}:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f:g$zqOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f!i$fo!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7m&d^Ofgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u'}(W(Y(f(j(o(p(r(|)i*f*i*k*l+Z+n,s,z-T-g-m.}/^/b/d/g0e0g0m0}1h1r1|3_3a3f3h3k4W4c4h4v4|5[5g5t6]6a7S7^7g7m7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f[!zY[$`$a9s9t['_!|!}(d(e9|9}W)o%i%j:`:aU,W'a-R:gW.h)p)q:t:uT2o.i:xQ(i$eQ(m$gR-W(jV(h$e$g(jR-^(kR-](k$znOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['}(W(Y(|)i*i*l+n,s,z-m.}/^0}1h1|3_3a3h3k4W4v4|5g5t6]7S7g7{8W8X8k8|9U9h9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:f!i$ko!c!p$e$g$h$q$r&U&b&u(f(j(o(p(r*f*k+Z-T-g/b/d/g0e0g0m1r3f4c4h5[6a7^7mS'g#O'pj,a'b'c'd,c,f,h,l/m/n1_3n3q5UQ,m'jQ.u)uR8_6f`,b'b'c'd,c,f,h1_5UQ1e,lX3l/m/n3n3qj,a'b'c'd,c,f,h,l/m/n1_3n3q5UQ7j5TR8s7k^uO!O!P!T%_%b)i$`#afgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['}(W(Y(|*i*l+n,s,z-m.}/^0}1h1|3a3h3k4W4v4|5g5t7S7g7{8k8|9u9v9w9x9z9{:O:P:Q:R:S:T:U:V:W:X:Y:Z:e:fQ6Z3_Q8U6]Q9Q8WQ9S8XQ9f9UR9l9hR(Q#zR(P#zQ$SlR(]$TR$ooR$noR)Q$vR)P$vQ)O$vR2O-ohwOb!O!P!T$y%_%b)S)U)i-t$l!lz!Q!n$O$u$|%f%n%o%p%q%y%{&P&o&p&r'](q)s)v)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gR${xR0b+UR0W*xR0U*xR6{4PR/y*vR/x*vR0P*wR0O*wR0_+QR0^+Q%XyObxz!O!P!Q!T!n$O$u$y$|%_%b%f%n%o%p%q%y%{&P&o&p&r'](q)S)U)i)s)v)x)y*O*P*R*V*[*^*e*n*w*x+U+V+h+o+}-i-t-v.U.`.p.t.x.y/Z/[/{/}0`0r0w1O1Y1Z1y2a2h2j2m2s2v3V3u3{3|4R4U4_4e4t5`5d5v6R6Y6p6v6x7c7r8gR0k+ZR0j+ZQ'R!qQ)c%XQ+w&|R4y1PX'Q!q%X&|1PR+y&|R+x&|T/S*S4TT/R*S4TR.o)sR.n)sR){%p\",\n  nodeNames: \"\u26A0 | < > RawString Float LineComment BlockComment SourceFile ] InnerAttribute ! [ MetaItem self Metavariable super crate Identifier ScopedIdentifier :: QualifiedScope AbstractType impl SelfType MetaType TypeIdentifier ScopedTypeIdentifier ScopeIdentifier TypeArgList TypeBinding = Lifetime String Escape Char Boolean Integer } { Block ; ConstItem Vis pub ( in ) const BoundIdentifier : UnsafeBlock unsafe AsyncBlock async move IfExpression if LetDeclaration let LiteralPattern ArithOp MetaPattern SelfPattern ScopedIdentifier TuplePattern ScopedTypeIdentifier , StructPattern FieldPatternList FieldPattern ref mut FieldIdentifier .. RefPattern SlicePattern CapturedPattern ReferencePattern & MutPattern RangePattern ... OrPattern MacroPattern ParenthesizedTokens TokenBinding Identifier TokenRepetition ArithOp BitOp LogicOp UpdateOp CompareOp -> => ArithOp BracketedTokens BracedTokens _ else MatchExpression match MatchBlock MatchArm Attribute Guard UnaryExpression ArithOp DerefOp LogicOp ReferenceExpression TryExpression BinaryExpression ArithOp ArithOp BitOp BitOp BitOp BitOp LogicOp LogicOp AssignmentExpression TypeCastExpression as ReturnExpression return RangeExpression CallExpression ArgList AwaitExpression await FieldExpression GenericFunction BreakExpression break LoopLabel ContinueExpression continue IndexExpression ArrayExpression TupleExpression MacroInvocation UnitExpression ClosureExpression ParamList Parameter Parameter ParenthesizedExpression StructExpression FieldInitializerList ShorthandFieldInitializer FieldInitializer BaseFieldInitializer MatchArm WhileExpression while LoopExpression loop ForExpression for MacroInvocation MacroDefinition macro_rules MacroRule EmptyStatement ModItem mod DeclarationList AttributeItem ForeignModItem extern StructItem struct TypeParamList ConstrainedTypeParameter TraitBounds HigherRankedTraitBound RemovedTraitBound OptionalTypeParameter ConstParameter WhereClause where LifetimeClause TypeBoundClause FieldDeclarationList FieldDeclaration OrderedFieldDeclarationList UnionItem union EnumItem enum EnumVariantList EnumVariant TypeItem type FunctionItem default fn ParamList Parameter SelfParameter VariadicParameter VariadicParameter ImplItem TraitItem trait AssociatedType LetDeclaration UseDeclaration use ScopedIdentifier UseAsClause ScopedIdentifier UseList ScopedUseList UseWildcard ExternCrateDeclaration StaticItem static ExpressionStatement ExpressionStatement GenericType FunctionType ForLifetimes ParamList VariadicParameter Parameter VariadicParameter Parameter ReferenceType PointerType TupleType UnitType ArrayType MacroInvocation EmptyType DynamicType dyn BoundedType\",\n  maxTerm: 359,\n  nodeProps: [\n    [\"group\", -42,4,5,14,15,16,17,18,19,33,35,36,37,40,51,53,56,101,107,111,112,113,122,123,125,127,128,130,132,133,134,137,139,140,141,142,143,144,148,149,155,157,159,\"Expression\",-16,22,24,25,26,27,222,223,230,231,232,233,234,235,236,237,239,\"Type\",-20,42,161,162,165,166,169,170,172,188,190,194,196,204,205,207,208,209,217,218,220,\"Statement\",-17,49,60,62,63,64,65,68,74,75,76,77,78,80,81,83,84,99,\"Pattern\"],\n    [\"openedBy\", 9,\"[\",38,\"{\",47,\"(\"],\n    [\"closedBy\", 12,\"]\",39,\"}\",45,\")\"]\n  ],\n  propSources: [rustHighlighting],\n  skippedNodes: [0,6,7,240],\n  repeatNodeCount: 32,\n  tokenData: \"#?|_R!VOX$hXY1_YZ2ZZ]$h]^1_^p$hpq1_qr2srs4qst5Ztu6Vuv9lvw;jwx=nxy!!ayz!#]z{!$X{|!&R|}!'T}!O!(P!O!P!*Q!P!Q!-|!Q!R!6X!R![!7|![!]!Jw!]!^!Lu!^!_!Mq!_!`# x!`!a##y!a!b#&Q!b!c#&|!c!}#'x!}#O#)o#O#P#*k#P#Q#1b#Q#R#2^#R#S#'x#S#T$h#T#U#'x#U#V#3`#V#f#'x#f#g#6s#g#o#'x#o#p#<Q#p#q#<|#q#r#?Q#r${$h${$|#'x$|4w$h4w5b#'x5b5i$h5i6S#'x6S~$hU$oZ'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hU%iT'_Q'OSOz%xz{&^{!P%x!P!Q'S!Q~%xS%}T'OSOz%xz{&^{!P%x!P!Q'S!Q~%xS&aTOz&pz{&^{!P&p!P!Q({!Q~&pS&sTOz%xz{&^{!P%x!P!Q'S!Q~%xS'VSOz&p{!P&p!P!Q'c!Q~&pS'fSOz'r{!P'r!P!Q'c!Q~'rS'uTOz(Uz{(l{!P(U!P!Q'c!Q~(US(]T'PS'OSOz(Uz{(l{!P(U!P!Q'c!Q~(US(oSOz'rz{(l{!P'r!Q~'rS)QO'PSU)VZ'_QOY)xYZ+hZr)xrs&psz)xz{)Q{!P)x!P!Q0w!Q#O)x#O#P&p#P~)xU)}Z'_QOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hU*uZ'_QOY)xYZ+hZr)xrs&psz)xz{+|{!P)x!P!Q,g!Q#O)x#O#P&p#P~)xU+mT'_QOz%xz{&^{!P%x!P!Q'S!Q~%xQ,RT'_QOY+|YZ,bZr+|s#O+|#P~+|Q,gO'_QU,lZ'_QOY-_YZ0cZr-_rs'rsz-_z{+|{!P-_!P!Q,g!Q#O-_#O#P'r#P~-_U-dZ'_QOY.VYZ/RZr.Vrs(Usz.Vz{/k{!P.V!P!Q,g!Q#O.V#O#P(U#P~.VU.`Z'_Q'PS'OSOY.VYZ/RZr.Vrs(Usz.Vz{/k{!P.V!P!Q,g!Q#O.V#O#P(U#P~.VU/[T'_Q'PS'OSOz(Uz{(l{!P(U!P!Q'c!Q~(UU/pZ'_QOY-_YZ0cZr-_rs'rsz-_z{/k{!P-_!P!Q+|!Q#O-_#O#P'r#P~-_U0hT'_QOz(Uz{(l{!P(U!P!Q'c!Q~(UU1OT'_Q'PSOY+|YZ,bZr+|s#O+|#P~+|_1hZ'_Q&|X'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_2dT'_Q&|X'OSOz%xz{&^{!P%x!P!Q'S!Q~%x_2|]ZX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`3u!`#O$h#O#P%x#P~$h_4OZ#PX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_4zT']Q'OS'^XOz%xz{&^{!P%x!P!Q'S!Q~%x_5dZ'QX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_6`g'_Q'vW'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!c$h!c!}7w!}#O$h#O#P%x#P#R$h#R#S7w#S#T$h#T#o7w#o${$h${$|7w$|4w$h4w5b7w5b5i$h5i6S7w6S~$h_8Qh'_Q_X'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![7w![!c$h!c!}7w!}#O$h#O#P%x#P#R$h#R#S7w#S#T$h#T#o7w#o${$h${$|7w$|4w$h4w5b7w5b5i$h5i6S7w6S~$h_9u](TP'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_:wZ#OX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_;s_!qX'_Q'OSOY$hYZ%bZr$hrs%xsv$hvw<rwz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_<{Z'}X'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_=ui'_Q'OSOY?dYZA`Zr?drsBdsw?dwx@dxz?dz{CO{!P?d!P!QDv!Q!c?d!c!}Et!}#O?d#O#PId#P#R?d#R#SEt#S#T?d#T#oEt#o${?d${$|Et$|4w?d4w5bEt5b5i?d5i6SEt6S~?d_?k]'_Q'OSOY$hYZ%bZr$hrs%xsw$hwx@dxz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_@mZ'_Q'OSsXOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_AgV'_Q'OSOw%xwxA|xz%xz{&^{!P%x!P!Q'S!Q~%x]BTT'OSsXOz%xz{&^{!P%x!P!Q'S!Q~%x]BiV'OSOw%xwxA|xz%xz{&^{!P%x!P!Q'S!Q~%x_CT]'_QOY)xYZ+hZr)xrs&psw)xwxC|xz)xz{)Q{!P)x!P!Q0w!Q#O)x#O#P&p#P~)x_DTZ'_QsXOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_D{]'_QOY)xYZ+hZr)xrs&psw)xwxC|xz)xz{+|{!P)x!P!Q,g!Q#O)x#O#P&p#P~)x_E}j'_Q'OS'ZXOY$hYZ%bZr$hrs%xsw$hwx@dxz$hz{)Q{!P$h!P!Q*p!Q![Go![!c$h!c!}Go!}#O$h#O#P%x#P#R$h#R#SGo#S#T$h#T#oGo#o${$h${$|Go$|4w$h4w5bGo5b5i$h5i6SGo6S~$h_Gxh'_Q'OS'ZXOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![Go![!c$h!c!}Go!}#O$h#O#P%x#P#R$h#R#SGo#S#T$h#T#oGo#o${$h${$|Go$|4w$h4w5bGo5b5i$h5i6SGo6S~$h]IiX'OSOzBdz{JU{!PBd!P!QKS!Q#iBd#i#jKi#j#lBd#l#mMX#m~Bd]JXVOw&pwxJnxz&pz{&^{!P&p!P!Q({!Q~&p]JsTsXOz%xz{&^{!P%x!P!Q'S!Q~%x]KVUOw&pwxJnxz&p{!P&p!P!Q'c!Q~&p]Kn['OSOz%xz{&^{!P%x!P!Q'S!Q![Ld![!c%x!c!iLd!i#T%x#T#ZLd#Z#o%x#o#pNq#p~%x]LiY'OSOz%xz{&^{!P%x!P!Q'S!Q![MX![!c%x!c!iMX!i#T%x#T#ZMX#Z~%x]M^Y'OSOz%xz{&^{!P%x!P!Q'S!Q![M|![!c%x!c!iM|!i#T%x#T#ZM|#Z~%x]NRY'OSOz%xz{&^{!P%x!P!Q'S!Q![Bd![!c%x!c!iBd!i#T%x#T#ZBd#Z~%x]NvY'OSOz%xz{&^{!P%x!P!Q'S!Q![! f![!c%x!c!i! f!i#T%x#T#Z! f#Z~%x]! k['OSOz%xz{&^{!P%x!P!Q'S!Q![! f![!c%x!c!i! f!i#T%x#T#Z! f#Z#q%x#q#rBd#r~%x_!!jZ}X'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!#fZ!PX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!$`](QX'_QOY)xYZ+hZr)xrs&psz)xz{)Q{!P)x!P!Q0w!Q!_)x!_!`!%X!`#O)x#O#P&p#P~)x_!%`Z#OX'_QOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!&[](PX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_!'^Z!eX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!(Y^'gX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`!a!)U!a#O$h#O#P%x#P~$h_!)_Z#QX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!*Z[(OX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!O$h!O!P!+P!P!Q*p!Q#O$h#O#P%x#P~$h_!+Y^!lX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!O$h!O!P!,U!P!Q*p!Q!_$h!_!`!-Q!`#O$h#O#P%x#P~$h_!,_Z!tX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hV!-ZZ'qP'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!.T]'_Q'xXOY)xYZ+hZr)xrs&psz)xz{!.|{!P)x!P!Q!/d!Q!_)x!_!`!%X!`#O)x#O#P&p#P~)x_!/TT&}]'_QOY+|YZ,bZr+|s#O+|#P~+|_!/kZ'_QUXOY!0^YZ0cZr!0^rs!3`sz!0^z{!5k{!P!0^!P!Q!/d!Q#O!0^#O#P!3`#P~!0^_!0eZ'_QUXOY!1WYZ/RZr!1Wrs!2Usz!1Wz{!4q{!P!1W!P!Q!/d!Q#O!1W#O#P!2U#P~!1W_!1cZ'_QUX'PS'OSOY!1WYZ/RZr!1Wrs!2Usz!1Wz{!4q{!P!1W!P!Q!/d!Q#O!1W#O#P!2U#P~!1W]!2_VUX'PS'OSOY!2UYZ(UZz!2Uz{!2t{!P!2U!P!Q!3z!Q~!2U]!2yVUXOY!3`YZ'rZz!3`z{!2t{!P!3`!P!Q!4f!Q~!3`]!3eVUXOY!2UYZ(UZz!2Uz{!2t{!P!2U!P!Q!3z!Q~!2U]!4PVUXOY!3`YZ'rZz!3`z{!4f{!P!3`!P!Q!3z!Q~!3`X!4kQUXOY!4fZ~!4f_!4xZ'_QUXOY!0^YZ0cZr!0^rs!3`sz!0^z{!4q{!P!0^!P!Q!5k!Q#O!0^#O#P!3`#P~!0^Z!5rV'_QUXOY!5kYZ,bZr!5krs!4fs#O!5k#O#P!4f#P~!5k_!6bhuX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!7|![#O$h#O#P%x#P#R$h#R#S!7|#S#U$h#U#V!By#V#]$h#]#^!9_#^#c$h#c#d!Ee#d#i$h#i#j!9_#j#l$h#l#m!Gy#m~$h_!8VbuX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!7|![#O$h#O#P%x#P#R$h#R#S!7|#S#]$h#]#^!9_#^#i$h#i#j!9_#j~$h_!9fe'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!R$h!R!S!:w!S!T$h!T!U!=y!U!W$h!W!X!>y!X!Y$h!Y!Z!<}!Z#O$h#O#P%x#P#g$h#g#h!?y#h~$h_!;O_'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!S$h!S!T!;}!T!W$h!W!X!<}!X#O$h#O#P%x#P~$h_!<U]'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!Y$h!Y!Z!<}!Z#O$h#O#P%x#P~$h_!=WZuX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!>Q]'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!S$h!S!T!<}!T#O$h#O#P%x#P~$h_!?Q]'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!U$h!U!V!<}!V#O$h#O#P%x#P~$h_!@Q]'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P#]$h#]#^!@y#^~$h_!AQ]'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P#n$h#n#o!Ay#o~$h_!BQ]'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P#X$h#X#Y!<}#Y~$h_!CQ_'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!R!DP!R!S!DP!S#O$h#O#P%x#P#R$h#R#S!DP#S~$h_!DYcuX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!R!DP!R!S!DP!S#O$h#O#P%x#P#R$h#R#S!DP#S#]$h#]#^!9_#^#i$h#i#j!9_#j~$h_!El^'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!Y!Fh!Y#O$h#O#P%x#P#R$h#R#S!Fh#S~$h_!FqbuX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!Y!Fh!Y#O$h#O#P%x#P#R$h#R#S!Fh#S#]$h#]#^!9_#^#i$h#i#j!9_#j~$h_!HQb'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!IY![!c$h!c!i!IY!i#O$h#O#P%x#P#R$h#R#S!IY#S#T$h#T#Z!IY#Z~$h_!IcfuX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!IY![!c$h!c!i!IY!i#O$h#O#P%x#P#R$h#R#S!IY#S#T$h#T#Z!IY#Z#]$h#]#^!9_#^#i$h#i#j!9_#j~$h_!KQ]!SX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![$h![!]!Ky!]#O$h#O#P%x#P~$h_!LSZdX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!MOZyX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!Mz^#PX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!^$h!^!_!Nv!_!`3u!`#O$h#O#P%x#P~$h_# P]'yX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_#!R^oX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`3u!`!a#!}!a#O$h#O#P%x#P~$h_##WZ#RX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#$S^#PX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`3u!`!a#%O!a#O$h#O#P%x#P~$h_#%X]'zX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_#&ZZ(RX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hV#'VZ'pP'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#(Th'_Q'OS!yW'TPOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![#'x![!c$h!c!}#'x!}#O$h#O#P%x#P#R$h#R#S#'x#S#T$h#T#o#'x#o${$h${$|#'x$|4w$h4w5b#'x5b5i$h5i6S#'x6S~$h_#)xZ[X'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hU#*pX'OSOz#+]z{#+s{!P#+]!P!Q#,X!Q#i#+]#i#j#,j#j#l#+]#l#m#.Y#m~#+]U#+dTrQ'OSOz%xz{&^{!P%x!P!Q'S!Q~%xU#+xTrQOz&pz{&^{!P&p!P!Q({!Q~&pU#,^SrQOz&p{!P&p!P!Q'c!Q~&pU#,o['OSOz%xz{&^{!P%x!P!Q'S!Q![#-e![!c%x!c!i#-e!i#T%x#T#Z#-e#Z#o%x#o#p#/r#p~%xU#-jY'OSOz%xz{&^{!P%x!P!Q'S!Q![#.Y![!c%x!c!i#.Y!i#T%x#T#Z#.Y#Z~%xU#._Y'OSOz%xz{&^{!P%x!P!Q'S!Q![#.}![!c%x!c!i#.}!i#T%x#T#Z#.}#Z~%xU#/SY'OSOz%xz{&^{!P%x!P!Q'S!Q![#+]![!c%x!c!i#+]!i#T%x#T#Z#+]#Z~%xU#/wY'OSOz%xz{&^{!P%x!P!Q'S!Q![#0g![!c%x!c!i#0g!i#T%x#T#Z#0g#Z~%xU#0l['OSOz%xz{&^{!P%x!P!Q'S!Q![#0g![!c%x!c!i#0g!i#T%x#T#Z#0g#Z#q%x#q#r#+]#r~%x_#1kZXX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#2g]'{X'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_#3kj'_Q'OS!yW'TPOY$hYZ%bZr$hrs#5]sw$hwx#5sxz$hz{)Q{!P$h!P!Q*p!Q![#'x![!c$h!c!}#'x!}#O$h#O#P%x#P#R$h#R#S#'x#S#T$h#T#o#'x#o${$h${$|#'x$|4w$h4w5b#'x5b5i$h5i6S#'x6S~$h]#5dT'OS'^XOz%xz{&^{!P%x!P!Q'S!Q~%x_#5z]'_Q'OSOY?dYZA`Zr?drsBdsw?dwx@dxz?dz{CO{!P?d!P!QDv!Q#O?d#O#PId#P~?d_#7Oi'_Q'OS!yW'TPOY$hYZ%bZr$hrs%xst#8mtz$hz{)Q{!P$h!P!Q*p!Q![#'x![!c$h!c!}#'x!}#O$h#O#P%x#P#R$h#R#S#'x#S#T$h#T#o#'x#o${$h${$|#'x$|4w$h4w5b#'x5b5i$h5i6S#'x6S~$hV#8tg'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!c$h!c!}#:]!}#O$h#O#P%x#P#R$h#R#S#:]#S#T$h#T#o#:]#o${$h${$|#:]$|4w$h4w5b#:]5b5i$h5i6S#:]6S~$hV#:fh'_Q'OS'TPOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![#:]![!c$h!c!}#:]!}#O$h#O#P%x#P#R$h#R#S#:]#S#T$h#T#o#:]#o${$h${$|#:]$|4w$h4w5b#:]5b5i$h5i6S#:]6S~$h_#<ZZwX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#=V_'rX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P#p$h#p#q#>U#q~$h_#>_Z'|X'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#?ZZvX'_Q'OSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h\",\n  tokenizers: [closureParam, tpDelim, literalTokens, 0, 1, 2, 3],\n  topRules: {\"SourceFile\":[0,8]},\n  specialized: [{term: 281, get: value => spec_identifier[value] || -1}],\n  tokenPrec: 15596\n});\n\nexport { parser };\n", "import { parser } from '@lezer/rust';\nimport { LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nA syntax provider based on the [Lezer Rust\nparser](https://github.com/lezer-parser/rust), extended with\nhighlighting and indentation information.\n*/\nconst rustLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"rust\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                IfExpression: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b)/ }),\n                \"String BlockComment\": () => null,\n                \"AttributeItem\": cx => cx.continue(),\n                \"Statement MatchArm\": /*@__PURE__*/continuedIndent()\n            }),\n            /*@__PURE__*/foldNodeProp.add(type => {\n                if (/(Block|edTokens|List)$/.test(type.name))\n                    return foldInside;\n                if (type.name == \"BlockComment\")\n                    return tree => ({ from: tree.from + 2, to: tree.to - 2 });\n                return undefined;\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n        indentOnInput: /^\\s*(?:\\{|\\})$/,\n        closeBrackets: { stringPrefixes: [\"b\", \"r\", \"br\"] }\n    }\n});\n/**\nRust language support\n*/\nfunction rust() {\n    return new LanguageSupport(rustLanguage);\n}\n\nexport { rust, rustLanguage };\n", "import { syntaxTree, indentNodeProp, continuedIndent, foldNodeProp, LRLanguage, LanguageSupport } from '@codemirror/language';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { ifNotIn, completeFromList } from '@codemirror/autocomplete';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst whitespace = 36,\n  LineComment = 1,\n  BlockComment = 2,\n  String$1 = 3,\n  Number = 4,\n  Bool = 5,\n  Null = 6,\n  ParenL = 7,\n  ParenR = 8,\n  BraceL = 9,\n  BraceR = 10,\n  BracketL = 11,\n  BracketR = 12,\n  Semi = 13,\n  Dot = 14,\n  Operator = 15,\n  Punctuation = 16,\n  SpecialVar = 17,\n  Identifier = 18,\n  QuotedIdentifier = 19,\n  Keyword = 20,\n  Type = 21,\n  Bits = 22,\n  Bytes = 23,\n  Builtin = 24;\n\nfunction isAlpha(ch) {\n    return ch >= 65 /* Ch.A */ && ch <= 90 /* Ch.Z */ || ch >= 97 /* Ch.a */ && ch <= 122 /* Ch.z */ || ch >= 48 /* Ch._0 */ && ch <= 57 /* Ch._9 */;\n}\nfunction isHexDigit(ch) {\n    return ch >= 48 /* Ch._0 */ && ch <= 57 /* Ch._9 */ || ch >= 97 /* Ch.a */ && ch <= 102 /* Ch.f */ || ch >= 65 /* Ch.A */ && ch <= 70 /* Ch.F */;\n}\nfunction readLiteral(input, endQuote, backslashEscapes) {\n    for (let escaped = false;;) {\n        if (input.next < 0)\n            return;\n        if (input.next == endQuote && !escaped) {\n            input.advance();\n            return;\n        }\n        escaped = backslashEscapes && !escaped && input.next == 92 /* Ch.Backslash */;\n        input.advance();\n    }\n}\nfunction readDoubleDollarLiteral(input, tag) {\n    scan: for (;;) {\n        if (input.next < 0)\n            return;\n        if (input.next == 36 /* Ch.Dollar */) {\n            input.advance();\n            for (let i = 0; i < tag.length; i++) {\n                if (input.next != tag.charCodeAt(i))\n                    continue scan;\n                input.advance();\n            }\n            if (input.next == 36 /* Ch.Dollar */) {\n                input.advance();\n                return;\n            }\n        }\n        else {\n            input.advance();\n        }\n    }\n}\nfunction readPLSQLQuotedLiteral(input, openDelim) {\n    let matchingDelim = \"[{<(\".indexOf(String.fromCharCode(openDelim));\n    let closeDelim = matchingDelim < 0 ? openDelim : \"]}>)\".charCodeAt(matchingDelim);\n    for (;;) {\n        if (input.next < 0)\n            return;\n        if (input.next == closeDelim && input.peek(1) == 39 /* Ch.SingleQuote */) {\n            input.advance(2);\n            return;\n        }\n        input.advance();\n    }\n}\nfunction readWord(input, result) {\n    for (;;) {\n        if (input.next != 95 /* Ch.Underscore */ && !isAlpha(input.next))\n            break;\n        if (result != null)\n            result += String.fromCharCode(input.next);\n        input.advance();\n    }\n    return result;\n}\nfunction readWordOrQuoted(input) {\n    if (input.next == 39 /* Ch.SingleQuote */ || input.next == 34 /* Ch.DoubleQuote */ || input.next == 96 /* Ch.Backtick */) {\n        let quote = input.next;\n        input.advance();\n        readLiteral(input, quote, false);\n    }\n    else {\n        readWord(input);\n    }\n}\nfunction readBits(input, endQuote) {\n    while (input.next == 48 /* Ch._0 */ || input.next == 49 /* Ch._1 */)\n        input.advance();\n    if (endQuote && input.next == endQuote)\n        input.advance();\n}\nfunction readNumber(input, sawDot) {\n    for (;;) {\n        if (input.next == 46 /* Ch.Dot */) {\n            if (sawDot)\n                break;\n            sawDot = true;\n        }\n        else if (input.next < 48 /* Ch._0 */ || input.next > 57 /* Ch._9 */) {\n            break;\n        }\n        input.advance();\n    }\n    if (input.next == 69 /* Ch.E */ || input.next == 101 /* Ch.e */) {\n        input.advance();\n        if (input.next == 43 /* Ch.Plus */ || input.next == 45 /* Ch.Dash */)\n            input.advance();\n        while (input.next >= 48 /* Ch._0 */ && input.next <= 57 /* Ch._9 */)\n            input.advance();\n    }\n}\nfunction eol(input) {\n    while (!(input.next < 0 || input.next == 10 /* Ch.Newline */))\n        input.advance();\n}\nfunction inString(ch, str) {\n    for (let i = 0; i < str.length; i++)\n        if (str.charCodeAt(i) == ch)\n            return true;\n    return false;\n}\nconst Space = \" \\t\\r\\n\";\nfunction keywords(keywords, types, builtin) {\n    let result = Object.create(null);\n    result[\"true\"] = result[\"false\"] = Bool;\n    result[\"null\"] = result[\"unknown\"] = Null;\n    for (let kw of keywords.split(\" \"))\n        if (kw)\n            result[kw] = Keyword;\n    for (let tp of types.split(\" \"))\n        if (tp)\n            result[tp] = Type;\n    for (let kw of (builtin || \"\").split(\" \"))\n        if (kw)\n            result[kw] = Builtin;\n    return result;\n}\nconst SQLTypes = \"array binary bit boolean char character clob date decimal double float int integer interval large national nchar nclob numeric object precision real smallint time timestamp varchar varying \";\nconst SQLKeywords = \"absolute action add after all allocate alter and any are as asc assertion at authorization before begin between both breadth by call cascade cascaded case cast catalog check close collate collation column commit condition connect connection constraint constraints constructor continue corresponding count create cross cube current current_date current_default_transform_group current_transform_group_for_type current_path current_role current_time current_timestamp current_user cursor cycle data day deallocate declare default deferrable deferred delete depth deref desc describe descriptor deterministic diagnostics disconnect distinct do domain drop dynamic each else elseif end end-exec equals escape except exception exec execute exists exit external fetch first for foreign found from free full function general get global go goto grant group grouping handle having hold hour identity if immediate in indicator initially inner inout input insert intersect into is isolation join key language last lateral leading leave left level like limit local localtime localtimestamp locator loop map match method minute modifies module month names natural nesting new next no none not of old on only open option or order ordinality out outer output overlaps pad parameter partial path prepare preserve primary prior privileges procedure public read reads recursive redo ref references referencing relative release repeat resignal restrict result return returns revoke right role rollback rollup routine row rows savepoint schema scroll search second section select session session_user set sets signal similar size some space specific specifictype sql sqlexception sqlstate sqlwarning start state static system_user table temporary then timezone_hour timezone_minute to trailing transaction translation treat trigger under undo union unique unnest until update usage user using value values view when whenever where while with without work write year zone \";\nconst defaults = {\n    backslashEscapes: false,\n    hashComments: false,\n    spaceAfterDashes: false,\n    slashComments: false,\n    doubleQuotedStrings: false,\n    doubleDollarQuotedStrings: false,\n    unquotedBitLiterals: false,\n    treatBitsAsBytes: false,\n    charSetCasts: false,\n    plsqlQuotingMechanism: false,\n    operatorChars: \"*+\\-%<>!=&|~^/\",\n    specialVar: \"?\",\n    identifierQuotes: '\"',\n    caseInsensitiveIdentifiers: false,\n    words: /*@__PURE__*/keywords(SQLKeywords, SQLTypes)\n};\nfunction dialect(spec, kws, types, builtin) {\n    let dialect = {};\n    for (let prop in defaults)\n        dialect[prop] = (spec.hasOwnProperty(prop) ? spec : defaults)[prop];\n    if (kws)\n        dialect.words = keywords(kws, types || \"\", builtin);\n    return dialect;\n}\nfunction tokensFor(d) {\n    return new ExternalTokenizer(input => {\n        var _a;\n        let { next } = input;\n        input.advance();\n        if (inString(next, Space)) {\n            while (inString(input.next, Space))\n                input.advance();\n            input.acceptToken(whitespace);\n        }\n        else if (next == 36 /* Ch.Dollar */ && d.doubleDollarQuotedStrings) {\n            let tag = readWord(input, \"\");\n            if (input.next == 36 /* Ch.Dollar */) {\n                input.advance();\n                readDoubleDollarLiteral(input, tag);\n                input.acceptToken(String$1);\n            }\n        }\n        else if (next == 39 /* Ch.SingleQuote */ || next == 34 /* Ch.DoubleQuote */ && d.doubleQuotedStrings) {\n            readLiteral(input, next, d.backslashEscapes);\n            input.acceptToken(String$1);\n        }\n        else if (next == 35 /* Ch.Hash */ && d.hashComments ||\n            next == 47 /* Ch.Slash */ && input.next == 47 /* Ch.Slash */ && d.slashComments) {\n            eol(input);\n            input.acceptToken(LineComment);\n        }\n        else if (next == 45 /* Ch.Dash */ && input.next == 45 /* Ch.Dash */ &&\n            (!d.spaceAfterDashes || input.peek(1) == 32 /* Ch.Space */)) {\n            eol(input);\n            input.acceptToken(LineComment);\n        }\n        else if (next == 47 /* Ch.Slash */ && input.next == 42 /* Ch.Star */) {\n            input.advance();\n            for (let depth = 1;;) {\n                let cur = input.next;\n                if (input.next < 0)\n                    break;\n                input.advance();\n                if (cur == 42 /* Ch.Star */ && input.next == 47 /* Ch.Slash */) {\n                    depth--;\n                    input.advance();\n                    if (!depth)\n                        break;\n                }\n                else if (cur == 47 /* Ch.Slash */ && input.next == 42 /* Ch.Star */) {\n                    depth++;\n                    input.advance();\n                }\n            }\n            input.acceptToken(BlockComment);\n        }\n        else if ((next == 101 /* Ch.e */ || next == 69 /* Ch.E */) && input.next == 39 /* Ch.SingleQuote */) {\n            input.advance();\n            readLiteral(input, 39 /* Ch.SingleQuote */, true);\n            input.acceptToken(String$1);\n        }\n        else if ((next == 110 /* Ch.n */ || next == 78 /* Ch.N */) && input.next == 39 /* Ch.SingleQuote */ &&\n            d.charSetCasts) {\n            input.advance();\n            readLiteral(input, 39 /* Ch.SingleQuote */, d.backslashEscapes);\n            input.acceptToken(String$1);\n        }\n        else if (next == 95 /* Ch.Underscore */ && d.charSetCasts) {\n            for (let i = 0;; i++) {\n                if (input.next == 39 /* Ch.SingleQuote */ && i > 1) {\n                    input.advance();\n                    readLiteral(input, 39 /* Ch.SingleQuote */, d.backslashEscapes);\n                    input.acceptToken(String$1);\n                    break;\n                }\n                if (!isAlpha(input.next))\n                    break;\n                input.advance();\n            }\n        }\n        else if (d.plsqlQuotingMechanism &&\n            (next == 113 /* Ch.q */ || next == 81 /* Ch.Q */) && input.next == 39 /* Ch.SingleQuote */ &&\n            input.peek(1) > 0 && !inString(input.peek(1), Space)) {\n            let openDelim = input.peek(1);\n            input.advance(2);\n            readPLSQLQuotedLiteral(input, openDelim);\n            input.acceptToken(String$1);\n        }\n        else if (next == 40 /* Ch.ParenL */) {\n            input.acceptToken(ParenL);\n        }\n        else if (next == 41 /* Ch.ParenR */) {\n            input.acceptToken(ParenR);\n        }\n        else if (next == 123 /* Ch.BraceL */) {\n            input.acceptToken(BraceL);\n        }\n        else if (next == 125 /* Ch.BraceR */) {\n            input.acceptToken(BraceR);\n        }\n        else if (next == 91 /* Ch.BracketL */) {\n            input.acceptToken(BracketL);\n        }\n        else if (next == 93 /* Ch.BracketR */) {\n            input.acceptToken(BracketR);\n        }\n        else if (next == 59 /* Ch.Semi */) {\n            input.acceptToken(Semi);\n        }\n        else if (d.unquotedBitLiterals && next == 48 /* Ch._0 */ && input.next == 98 /* Ch.b */) {\n            input.advance();\n            readBits(input);\n            input.acceptToken(Bits);\n        }\n        else if ((next == 98 /* Ch.b */ || next == 66 /* Ch.B */) && (input.next == 39 /* Ch.SingleQuote */ || input.next == 34 /* Ch.DoubleQuote */)) {\n            const quoteStyle = input.next;\n            input.advance();\n            if (d.treatBitsAsBytes) {\n                readLiteral(input, quoteStyle, d.backslashEscapes);\n                input.acceptToken(Bytes);\n            }\n            else {\n                readBits(input, quoteStyle);\n                input.acceptToken(Bits);\n            }\n        }\n        else if (next == 48 /* Ch._0 */ && (input.next == 120 /* Ch.x */ || input.next == 88 /* Ch.X */) ||\n            (next == 120 /* Ch.x */ || next == 88 /* Ch.X */) && input.next == 39 /* Ch.SingleQuote */) {\n            let quoted = input.next == 39 /* Ch.SingleQuote */;\n            input.advance();\n            while (isHexDigit(input.next))\n                input.advance();\n            if (quoted && input.next == 39 /* Ch.SingleQuote */)\n                input.advance();\n            input.acceptToken(Number);\n        }\n        else if (next == 46 /* Ch.Dot */ && input.next >= 48 /* Ch._0 */ && input.next <= 57 /* Ch._9 */) {\n            readNumber(input, true);\n            input.acceptToken(Number);\n        }\n        else if (next == 46 /* Ch.Dot */) {\n            input.acceptToken(Dot);\n        }\n        else if (next >= 48 /* Ch._0 */ && next <= 57 /* Ch._9 */) {\n            readNumber(input, false);\n            input.acceptToken(Number);\n        }\n        else if (inString(next, d.operatorChars)) {\n            while (inString(input.next, d.operatorChars))\n                input.advance();\n            input.acceptToken(Operator);\n        }\n        else if (inString(next, d.specialVar)) {\n            if (input.next == next)\n                input.advance();\n            readWordOrQuoted(input);\n            input.acceptToken(SpecialVar);\n        }\n        else if (inString(next, d.identifierQuotes)) {\n            readLiteral(input, next, false);\n            input.acceptToken(QuotedIdentifier);\n        }\n        else if (next == 58 /* Ch.Colon */ || next == 44 /* Ch.Comma */) {\n            input.acceptToken(Punctuation);\n        }\n        else if (isAlpha(next)) {\n            let word = readWord(input, String.fromCharCode(next));\n            input.acceptToken(input.next == 46 /* Ch.Dot */ || input.peek(-word.length - 1) == 46 /* Ch.Dot */\n                ? Identifier : (_a = d.words[word.toLowerCase()]) !== null && _a !== void 0 ? _a : Identifier);\n        }\n    });\n}\nconst tokens = /*@__PURE__*/tokensFor(defaults);\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser$1 = /*@__PURE__*/LRParser.deserialize({\n  version: 14,\n  states: \"%vQ]QQOOO#wQRO'#DSO$OQQO'#CwO%eQQO'#CxO%lQQO'#CyO%sQQO'#CzOOQQ'#DS'#DSOOQQ'#C}'#C}O'UQRO'#C{OOQQ'#Cv'#CvOOQQ'#C|'#C|Q]QQOOQOQQOOO'`QQO'#DOO(xQRO,59cO)PQQO,59cO)UQQO'#DSOOQQ,59d,59dO)cQQO,59dOOQQ,59e,59eO)jQQO,59eOOQQ,59f,59fO)qQQO,59fOOQQ-E6{-E6{OOQQ,59b,59bOOQQ-E6z-E6zOOQQ,59j,59jOOQQ-E6|-E6|O+VQRO1G.}O+^QQO,59cOOQQ1G/O1G/OOOQQ1G/P1G/POOQQ1G/Q1G/QP+kQQO'#C}O+rQQO1G.}O)PQQO,59cO,PQQO'#Cw\",\n  stateData: \",[~OtOSPOSQOS~ORUOSUOTUOUUOVROXSOZTO]XO^QO_UO`UOaPObPOcPOdUOeUOfUOgUOhUO~O^]ORvXSvXTvXUvXVvXXvXZvX]vX_vX`vXavXbvXcvXdvXevXfvXgvXhvX~OsvX~P!jOa_Ob_Oc_O~ORUOSUOTUOUUOVROXSOZTO^tO_UO`UOa`Ob`Oc`OdUOeUOfUOgUOhUO~OWaO~P$ZOYcO~P$ZO[eO~P$ZORUOSUOTUOUUOVROXSOZTO^QO_UO`UOaPObPOcPOdUOeUOfUOgUOhUO~O]hOsoX~P%zOajObjOcjO~O^]ORkaSkaTkaUkaVkaXkaZka]ka_ka`kaakabkackadkaekafkagkahka~Oska~P'kO^]O~OWvXYvX[vX~P!jOWnO~P$ZOYoO~P$ZO[pO~P$ZO^]ORkiSkiTkiUkiVkiXkiZki]ki_ki`kiakibkickidkiekifkigkihki~Oski~P)xOWkaYka[ka~P'kO]hO~P$ZOWkiYki[ki~P)xOasObsOcsO~O\",\n  goto: \"#hwPPPPPPPPPPPPPPPPPPPPPPPPPPx||||!Y!^!d!xPPP#[TYOZeUORSTWZbdfqT[OZQZORiZSWOZQbRQdSQfTZgWbdfqQ^PWk^lmrQl_Qm`RrseVORSTWZbdfq\",\n  nodeNames: \"\u26A0 LineComment BlockComment String Number Bool Null ( ) { } [ ] ; . Operator Punctuation SpecialVar Identifier QuotedIdentifier Keyword Type Bits Bytes Builtin Script Statement CompositeIdentifier Parens Braces Brackets Statement\",\n  maxTerm: 38,\n  nodeProps: [\n    [\"isolate\", -4,1,2,3,19,\"\"]\n  ],\n  skippedNodes: [0,1,2],\n  repeatNodeCount: 3,\n  tokenData: \"RORO\",\n  tokenizers: [0, tokens],\n  topRules: {\"Script\":[0,25]},\n  tokenPrec: 0\n});\n\nfunction tokenBefore(tree) {\n    let cursor = tree.cursor().moveTo(tree.from, -1);\n    while (/Comment/.test(cursor.name))\n        cursor.moveTo(cursor.from, -1);\n    return cursor.node;\n}\nfunction idName(doc, node) {\n    let text = doc.sliceString(node.from, node.to);\n    let quoted = /^([`'\"])(.*)\\1$/.exec(text);\n    return quoted ? quoted[2] : text;\n}\nfunction plainID(node) {\n    return node && (node.name == \"Identifier\" || node.name == \"QuotedIdentifier\");\n}\nfunction pathFor(doc, id) {\n    if (id.name == \"CompositeIdentifier\") {\n        let path = [];\n        for (let ch = id.firstChild; ch; ch = ch.nextSibling)\n            if (plainID(ch))\n                path.push(idName(doc, ch));\n        return path;\n    }\n    return [idName(doc, id)];\n}\nfunction parentsFor(doc, node) {\n    for (let path = [];;) {\n        if (!node || node.name != \".\")\n            return path;\n        let name = tokenBefore(node);\n        if (!plainID(name))\n            return path;\n        path.unshift(idName(doc, name));\n        node = tokenBefore(name);\n    }\n}\nfunction sourceContext(state, startPos) {\n    let pos = syntaxTree(state).resolveInner(startPos, -1);\n    let aliases = getAliases(state.doc, pos);\n    if (pos.name == \"Identifier\" || pos.name == \"QuotedIdentifier\" || pos.name == \"Keyword\") {\n        return { from: pos.from,\n            quoted: pos.name == \"QuotedIdentifier\" ? state.doc.sliceString(pos.from, pos.from + 1) : null,\n            parents: parentsFor(state.doc, tokenBefore(pos)),\n            aliases };\n    }\n    if (pos.name == \".\") {\n        return { from: startPos, quoted: null, parents: parentsFor(state.doc, pos), aliases };\n    }\n    else {\n        return { from: startPos, quoted: null, parents: [], empty: true, aliases };\n    }\n}\nconst EndFrom = /*@__PURE__*/new Set(/*@__PURE__*/\"where group having order union intersect except all distinct limit offset fetch for\".split(\" \"));\nfunction getAliases(doc, at) {\n    let statement;\n    for (let parent = at; !statement; parent = parent.parent) {\n        if (!parent)\n            return null;\n        if (parent.name == \"Statement\")\n            statement = parent;\n    }\n    let aliases = null;\n    for (let scan = statement.firstChild, sawFrom = false, prevID = null; scan; scan = scan.nextSibling) {\n        let kw = scan.name == \"Keyword\" ? doc.sliceString(scan.from, scan.to).toLowerCase() : null;\n        let alias = null;\n        if (!sawFrom) {\n            sawFrom = kw == \"from\";\n        }\n        else if (kw == \"as\" && prevID && plainID(scan.nextSibling)) {\n            alias = idName(doc, scan.nextSibling);\n        }\n        else if (kw && EndFrom.has(kw)) {\n            break;\n        }\n        else if (prevID && plainID(scan)) {\n            alias = idName(doc, scan);\n        }\n        if (alias) {\n            if (!aliases)\n                aliases = Object.create(null);\n            aliases[alias] = pathFor(doc, prevID);\n        }\n        prevID = /Identifier$/.test(scan.name) ? scan : null;\n    }\n    return aliases;\n}\nfunction maybeQuoteCompletions(quote, completions) {\n    if (!quote)\n        return completions;\n    return completions.map(c => (Object.assign(Object.assign({}, c), { label: c.label[0] == quote ? c.label : quote + c.label + quote, apply: undefined })));\n}\nconst Span = /^\\w*$/, QuotedSpan = /^[`'\"]?\\w*[`'\"]?$/;\nfunction isSelfTag(namespace) {\n    return namespace.self && typeof namespace.self.label == \"string\";\n}\nclass CompletionLevel {\n    constructor(idQuote, idCaseInsensitive) {\n        this.idQuote = idQuote;\n        this.idCaseInsensitive = idCaseInsensitive;\n        this.list = [];\n        this.children = undefined;\n    }\n    child(name) {\n        let children = this.children || (this.children = Object.create(null));\n        let found = children[name];\n        if (found)\n            return found;\n        if (name && !this.list.some(c => c.label == name))\n            this.list.push(nameCompletion(name, \"type\", this.idQuote, this.idCaseInsensitive));\n        return (children[name] = new CompletionLevel(this.idQuote, this.idCaseInsensitive));\n    }\n    maybeChild(name) {\n        return this.children ? this.children[name] : null;\n    }\n    addCompletion(option) {\n        let found = this.list.findIndex(o => o.label == option.label);\n        if (found > -1)\n            this.list[found] = option;\n        else\n            this.list.push(option);\n    }\n    addCompletions(completions) {\n        for (let option of completions)\n            this.addCompletion(typeof option == \"string\" ? nameCompletion(option, \"property\", this.idQuote, this.idCaseInsensitive) : option);\n    }\n    addNamespace(namespace) {\n        if (Array.isArray(namespace)) {\n            this.addCompletions(namespace);\n        }\n        else if (isSelfTag(namespace)) {\n            this.addNamespace(namespace.children);\n        }\n        else {\n            this.addNamespaceObject(namespace);\n        }\n    }\n    addNamespaceObject(namespace) {\n        for (let name of Object.keys(namespace)) {\n            let children = namespace[name], self = null;\n            let parts = name.replace(/\\\\?\\./g, p => p == \".\" ? \"\\0\" : p).split(\"\\0\");\n            let scope = this;\n            if (isSelfTag(children)) {\n                self = children.self;\n                children = children.children;\n            }\n            for (let i = 0; i < parts.length; i++) {\n                if (self && i == parts.length - 1)\n                    scope.addCompletion(self);\n                scope = scope.child(parts[i].replace(/\\\\\\./g, \".\"));\n            }\n            scope.addNamespace(children);\n        }\n    }\n}\nfunction nameCompletion(label, type, idQuote, idCaseInsensitive) {\n    if ((new RegExp(\"^[a-z_][a-z_\\\\d]*$\", idCaseInsensitive ? \"i\" : \"\")).test(label))\n        return { label, type };\n    return { label, type, apply: idQuote + label + idQuote };\n}\n// Some of this is more gnarly than it has to be because we're also\n// supporting the deprecated, not-so-well-considered style of\n// supplying the schema (dotted property names for schemas, separate\n// `tables` and `schemas` completions).\nfunction completeFromSchema(schema, tables, schemas, defaultTableName, defaultSchemaName, dialect) {\n    var _a;\n    let idQuote = ((_a = dialect === null || dialect === void 0 ? void 0 : dialect.spec.identifierQuotes) === null || _a === void 0 ? void 0 : _a[0]) || '\"';\n    let top = new CompletionLevel(idQuote, !!(dialect === null || dialect === void 0 ? void 0 : dialect.spec.caseInsensitiveIdentifiers));\n    let defaultSchema = defaultSchemaName ? top.child(defaultSchemaName) : null;\n    top.addNamespace(schema);\n    if (tables)\n        (defaultSchema || top).addCompletions(tables);\n    if (schemas)\n        top.addCompletions(schemas);\n    if (defaultSchema)\n        top.addCompletions(defaultSchema.list);\n    if (defaultTableName)\n        top.addCompletions((defaultSchema || top).child(defaultTableName).list);\n    return (context) => {\n        let { parents, from, quoted, empty, aliases } = sourceContext(context.state, context.pos);\n        if (empty && !context.explicit)\n            return null;\n        if (aliases && parents.length == 1)\n            parents = aliases[parents[0]] || parents;\n        let level = top;\n        for (let name of parents) {\n            while (!level.children || !level.children[name]) {\n                if (level == top && defaultSchema)\n                    level = defaultSchema;\n                else if (level == defaultSchema && defaultTableName)\n                    level = level.child(defaultTableName);\n                else\n                    return null;\n            }\n            let next = level.maybeChild(name);\n            if (!next)\n                return null;\n            level = next;\n        }\n        let quoteAfter = quoted && context.state.sliceDoc(context.pos, context.pos + 1) == quoted;\n        let options = level.list;\n        if (level == top && aliases)\n            options = options.concat(Object.keys(aliases).map(name => ({ label: name, type: \"constant\" })));\n        return {\n            from,\n            to: quoteAfter ? context.pos + 1 : undefined,\n            options: maybeQuoteCompletions(quoted, options),\n            validFor: quoted ? QuotedSpan : Span\n        };\n    };\n}\nfunction completionType(tokenType) {\n    return tokenType == Type ? \"type\" : tokenType == Keyword ? \"keyword\" : \"variable\";\n}\nfunction completeKeywords(keywords, upperCase, build) {\n    let completions = Object.keys(keywords)\n        .map(keyword => build(upperCase ? keyword.toUpperCase() : keyword, completionType(keywords[keyword])));\n    return ifNotIn([\"QuotedIdentifier\", \"SpecialVar\", \"String\", \"LineComment\", \"BlockComment\", \".\"], completeFromList(completions));\n}\n\nlet parser = /*@__PURE__*/parser$1.configure({\n    props: [\n        /*@__PURE__*/indentNodeProp.add({\n            Statement: /*@__PURE__*/continuedIndent()\n        }),\n        /*@__PURE__*/foldNodeProp.add({\n            Statement(tree, state) { return { from: Math.min(tree.from + 100, state.doc.lineAt(tree.from).to), to: tree.to }; },\n            BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n        }),\n        /*@__PURE__*/styleTags({\n            Keyword: tags.keyword,\n            Type: tags.typeName,\n            Builtin: /*@__PURE__*/tags.standard(tags.name),\n            Bits: tags.number,\n            Bytes: tags.string,\n            Bool: tags.bool,\n            Null: tags.null,\n            Number: tags.number,\n            String: tags.string,\n            Identifier: tags.name,\n            QuotedIdentifier: /*@__PURE__*/tags.special(tags.string),\n            SpecialVar: /*@__PURE__*/tags.special(tags.name),\n            LineComment: tags.lineComment,\n            BlockComment: tags.blockComment,\n            Operator: tags.operator,\n            \"Semi Punctuation\": tags.punctuation,\n            \"( )\": tags.paren,\n            \"{ }\": tags.brace,\n            \"[ ]\": tags.squareBracket\n        })\n    ]\n});\n/**\nRepresents an SQL dialect.\n*/\nclass SQLDialect {\n    constructor(\n    /**\n    @internal\n    */\n    dialect, \n    /**\n    The language for this dialect.\n    */\n    language, \n    /**\n    The spec used to define this dialect.\n    */\n    spec) {\n        this.dialect = dialect;\n        this.language = language;\n        this.spec = spec;\n    }\n    /**\n    Returns the language for this dialect as an extension.\n    */\n    get extension() { return this.language.extension; }\n    /**\n    Define a new dialect.\n    */\n    static define(spec) {\n        let d = dialect(spec, spec.keywords, spec.types, spec.builtin);\n        let language = LRLanguage.define({\n            name: \"sql\",\n            parser: parser.configure({\n                tokenizers: [{ from: tokens, to: tokensFor(d) }]\n            }),\n            languageData: {\n                commentTokens: { line: \"--\", block: { open: \"/*\", close: \"*/\" } },\n                closeBrackets: { brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"] }\n            }\n        });\n        return new SQLDialect(d, language, spec);\n    }\n}\nfunction defaultKeyword(label, type) { return { label, type, boost: -1 }; }\n/**\nReturns a completion source that provides keyword completion for\nthe given SQL dialect.\n*/\nfunction keywordCompletionSource(dialect, upperCase = false, build) {\n    return completeKeywords(dialect.dialect.words, upperCase, build || defaultKeyword);\n}\n/**\nReturns a completion sources that provides schema-based completion\nfor the given configuration.\n*/\nfunction schemaCompletionSource(config) {\n    return config.schema ? completeFromSchema(config.schema, config.tables, config.schemas, config.defaultTable, config.defaultSchema, config.dialect || StandardSQL)\n        : () => null;\n}\nfunction schemaCompletion(config) {\n    return config.schema ? (config.dialect || StandardSQL).language.data.of({\n        autocomplete: schemaCompletionSource(config)\n    }) : [];\n}\n/**\nSQL language support for the given SQL dialect, with keyword\ncompletion, and, if provided, schema-based completion as extra\nextensions.\n*/\nfunction sql(config = {}) {\n    let lang = config.dialect || StandardSQL;\n    return new LanguageSupport(lang.language, [\n        schemaCompletion(config),\n        lang.language.data.of({\n            autocomplete: keywordCompletionSource(lang, config.upperCaseKeywords, config.keywordCompletion)\n        })\n    ]);\n}\n/**\nThe standard SQL dialect.\n*/\nconst StandardSQL = /*@__PURE__*/SQLDialect.define({});\n/**\nDialect for [PostgreSQL](https://www.postgresql.org).\n*/\nconst PostgreSQL = /*@__PURE__*/SQLDialect.define({\n    charSetCasts: true,\n    doubleDollarQuotedStrings: true,\n    operatorChars: \"+-*/<>=~!@#%^&|`?\",\n    specialVar: \"\",\n    keywords: SQLKeywords + \"abort abs absent access according ada admin aggregate alias also always analyse analyze array_agg array_max_cardinality asensitive assert assignment asymmetric atomic attach attribute attributes avg backward base64 begin_frame begin_partition bernoulli bit_length blocked bom cache called cardinality catalog_name ceil ceiling chain char_length character_length character_set_catalog character_set_name character_set_schema characteristics characters checkpoint class class_origin cluster coalesce cobol collation_catalog collation_name collation_schema collect column_name columns command_function command_function_code comment comments committed concurrently condition_number configuration conflict connection_name constant constraint_catalog constraint_name constraint_schema contains content control conversion convert copy corr cost covar_pop covar_samp csv cume_dist current_catalog current_row current_schema cursor_name database datalink datatype datetime_interval_code datetime_interval_precision db debug defaults defined definer degree delimiter delimiters dense_rank depends derived detach detail dictionary disable discard dispatch dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue document dump dynamic_function dynamic_function_code element elsif empty enable encoding encrypted end_frame end_partition endexec enforced enum errcode error event every exclude excluding exclusive exp explain expression extension extract family file filter final first_value flag floor following force foreach fortran forward frame_row freeze fs functions fusion generated granted greatest groups handler header hex hierarchy hint id ignore ilike immediately immutable implementation implicit import include including increment indent index indexes info inherit inherits inline insensitive instance instantiable instead integrity intersection invoker isnull key_member key_type label lag last_value lead leakproof least length library like_regex link listen ln load location lock locked log logged lower mapping matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text min minvalue mod mode more move multiset mumps name namespace nfc nfd nfkc nfkd nil normalize normalized nothing notice notify notnull nowait nth_value ntile nullable nullif nulls number occurrences_regex octet_length octets off offset oids operator options ordering others over overlay overriding owned owner parallel parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partition pascal passing passthrough password percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding prepared print_strict_params procedural procedures program publication query quote raise range rank reassign recheck recovery refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex rename repeatable replace replica requiring reset respect restart restore result_oid returned_cardinality returned_length returned_octet_length returned_sqlstate returning reverse routine_catalog routine_name routine_schema routines row_count row_number rowtype rule scale schema_name schemas scope scope_catalog scope_name scope_schema security selective self sensitive sequence sequences serializable server server_name setof share show simple skip slice snapshot source specific_name sqlcode sqlerror sqrt stable stacked standalone statement statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time table_name tables tablesample tablespace temp template ties token top_level_count transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex trigger_catalog trigger_name trigger_schema trim trim_array truncate trusted type types uescape unbounded uncommitted unencrypted unlink unlisten unlogged unnamed untyped upper uri use_column use_variable user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema vacuum valid validate validator value_of var_pop var_samp varbinary variable_conflict variadic verbose version versioning views volatile warning whitespace width_bucket window within wrapper xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate yes\",\n    types: SQLTypes + \"bigint int8 bigserial serial8 varbit bool box bytea cidr circle precision float8 inet int4 json jsonb line lseg macaddr macaddr8 money numeric pg_lsn point polygon float4 int2 smallserial serial2 serial serial4 text timetz timestamptz tsquery tsvector txid_snapshot uuid xml\"\n});\nconst MySQLKeywords = \"accessible algorithm analyze asensitive authors auto_increment autocommit avg avg_row_length binlog btree cache catalog_name chain change changed checkpoint checksum class_origin client_statistics coalesce code collations columns comment committed completion concurrent consistent contains contributors convert database databases day_hour day_microsecond day_minute day_second delay_key_write delayed delimiter des_key_file dev_pop dev_samp deviance directory disable discard distinctrow div dual dumpfile enable enclosed ends engine engines enum errors escaped even event events every explain extended fast field fields flush force found_rows fulltext grants handler hash high_priority hosts hour_microsecond hour_minute hour_second ignore ignore_server_ids import index index_statistics infile innodb insensitive insert_method install invoker iterate keys kill linear lines list load lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modify mutex mysql_errno no_write_to_binlog offline offset one online optimize optionally outfile pack_keys parser partition partitions password phase plugin plugins prev processlist profile profiles purge query quick range read_write rebuild recover regexp relaylog remove rename reorganize repair repeatable replace require resume rlike row_format rtree schedule schema_name schemas second_microsecond security sensitive separator serializable server share show slave slow snapshot soname spatial sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result ssl starting starts std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace terminated triggers truncate uncommitted uninstall unlock upgrade use use_frm user_resources user_statistics utc_date utc_time utc_timestamp variables views warnings xa xor year_month zerofill\";\nconst MySQLTypes = SQLTypes + \"bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int1 int2 int3 int4 int8 float4 float8 varbinary varcharacter precision datetime unsigned signed\";\nconst MySQLBuiltin = \"charset clear edit ego help nopager notee nowarning pager print prompt quit rehash source status system tee\";\n/**\n[MySQL](https://dev.mysql.com/) dialect.\n*/\nconst MySQL = /*@__PURE__*/SQLDialect.define({\n    operatorChars: \"*+-%<>!=&|^\",\n    charSetCasts: true,\n    doubleQuotedStrings: true,\n    unquotedBitLiterals: true,\n    hashComments: true,\n    spaceAfterDashes: true,\n    specialVar: \"@?\",\n    identifierQuotes: \"`\",\n    keywords: SQLKeywords + \"group_concat \" + MySQLKeywords,\n    types: MySQLTypes,\n    builtin: MySQLBuiltin\n});\n/**\nVariant of [`MySQL`](https://codemirror.net/6/docs/ref/#lang-sql.MySQL) for\n[MariaDB](https://mariadb.org/).\n*/\nconst MariaSQL = /*@__PURE__*/SQLDialect.define({\n    operatorChars: \"*+-%<>!=&|^\",\n    charSetCasts: true,\n    doubleQuotedStrings: true,\n    unquotedBitLiterals: true,\n    hashComments: true,\n    spaceAfterDashes: true,\n    specialVar: \"@?\",\n    identifierQuotes: \"`\",\n    keywords: SQLKeywords + \"always generated groupby_concat hard persistent shutdown soft virtual \" + MySQLKeywords,\n    types: MySQLTypes,\n    builtin: MySQLBuiltin\n});\n/**\nSQL dialect for Microsoft [SQL\nServer](https://www.microsoft.com/en-us/sql-server).\n*/\nconst MSSQL = /*@__PURE__*/SQLDialect.define({\n    keywords: SQLKeywords + \"trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare exec go if use index holdlock nolock nowait paglock pivot readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot tablock tablockx unpivot updlock with\",\n    types: SQLTypes + \"bigint smallint smallmoney tinyint money real text nvarchar ntext varbinary image hierarchyid uniqueidentifier sql_variant xml\",\n    builtin: \"binary_checksum checksum connectionproperty context_info current_request_id error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big xact_state object_id\",\n    operatorChars: \"*+-%<>!=^&|/\",\n    specialVar: \"@\"\n});\n/**\n[SQLite](https://sqlite.org/) dialect.\n*/\nconst SQLite = /*@__PURE__*/SQLDialect.define({\n    keywords: SQLKeywords + \"abort analyze attach autoincrement conflict database detach exclusive fail glob ignore index indexed instead isnull notnull offset plan pragma query raise regexp reindex rename replace temp vacuum virtual\",\n    types: SQLTypes + \"bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int2 int8 unsigned signed real\",\n    builtin: \"auth backup bail changes clone databases dbinfo dump echo eqp explain fullschema headers help import imposter indexes iotrace lint load log mode nullvalue once print prompt quit restore save scanstats separator shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width\",\n    operatorChars: \"*+-%<>!=&|/~\",\n    identifierQuotes: \"`\\\"\",\n    specialVar: \"@:?$\"\n});\n/**\nDialect for [Cassandra](https://cassandra.apache.org/)'s SQL-ish query language.\n*/\nconst Cassandra = /*@__PURE__*/SQLDialect.define({\n    keywords: \"add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime infinity NaN\",\n    types: SQLTypes + \"ascii bigint blob counter frozen inet list map static text timeuuid tuple uuid varint\",\n    slashComments: true\n});\n/**\n[PL/SQL](https://en.wikipedia.org/wiki/PL/SQL) dialect.\n*/\nconst PLSQL = /*@__PURE__*/SQLDialect.define({\n    keywords: SQLKeywords + \"abort accept access add all alter and any arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body by case cast char_base check close cluster clusters colauth column comment commit compress connected constant constraint crash create current currval cursor data_base database dba deallocate debugoff debugon declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry exception exception_init exchange exclusive exists external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base of off offline on online only option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw rebuild record ref references refresh rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work\",\n    builtin: \"appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define echo editfile embedded feedback flagger flush heading headsep instance linesize lno loboffset logsource longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar repfooter repheader serveroutput shiftinout show showmode spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout timing trimout trimspool ttitle underline verify version wrap\",\n    types: SQLTypes + \"ascii bfile bfilename bigserial bit blob dec long number nvarchar nvarchar2 serial smallint string text uid varchar2 xml\",\n    operatorChars: \"*/+-%<>!=~\",\n    doubleQuotedStrings: true,\n    charSetCasts: true,\n    plsqlQuotingMechanism: true\n});\n\nexport { Cassandra, MSSQL, MariaSQL, MySQL, PLSQL, PostgreSQL, SQLDialect, SQLite, StandardSQL, keywordCompletionSource, schemaCompletionSource, sql };\n", "import { LRLanguage, LanguageSupport } from '@codemirror/language';\nimport { html } from '@codemirror/lang-html';\nimport { javascriptLanguage } from '@codemirror/lang-javascript';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { parseMixed } from '@lezer/common';\nimport { LRParser, LocalTokenGroup } from '@lezer/lr';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = /*@__PURE__*/LRParser.deserialize({\n  version: 14,\n  states: \"%pOVOWOOObQPOOOpOSO'#C_OOOO'#Cp'#CpQVOWOOQxQPOOO!TQQOOQ!YQPOOOOOO,58y,58yO!_OSO,58yOOOO-E6n-E6nO!dQQO'#CqQ{QPOOO!iQPOOQ{QPOOO!qQPOOOOOO1G.e1G.eOOQO,59],59]OOQO-E6o-E6oO!yOpO'#CiO#RO`O'#CiQOQPOOO#ZO#tO'#CmO#fO!bO'#CmOOQO,59T,59TO#qOpO,59TO#vO`O,59TOOOO'#Cr'#CrO#{O#tO,59XOOQO,59X,59XOOOO'#Cs'#CsO$WO!bO,59XOOQO1G.o1G.oOOOO-E6p-E6pOOQO1G.s1G.sOOOO-E6q-E6q\",\n  stateData: \"$g~OjOS~OQROUROkQO~OWTOXUOZUO`VO~OSXOTWO~OXUO[]OlZO~OY^O~O[_O~OT`O~OYaO~OmcOodO~OmfOogO~O^iOnhO~O_jOphO~ObkOqkOrmO~OcnOsnOtmO~OnpO~OppO~ObkOqkOrrO~OcnOsnOtrO~OWX`~\",\n  goto: \"!^hPPPiPPPPPPPPPmPPPpPPsy!Q!WTROSRe]Re_QSORYSS[T^Rb[QlfRqlQogRso\",\n  nodeNames: \"\u26A0 Content Text Interpolation InterpolationContent }} Entity Attribute VueAttributeName : Identifier @ Is ScriptAttributeValue AttributeScript AttributeScript AttributeName AttributeValue Entity Entity\",\n  maxTerm: 36,\n  nodeProps: [\n    [\"isolate\", -3,3,13,17,\"\"]\n  ],\n  skippedNodes: [0],\n  repeatNodeCount: 4,\n  tokenData: \"'y~RdXY!aYZ!a]^!apq!ars!rwx!w}!O!|!O!P#t!Q![#y![!]$s!_!`%g!b!c%l!c!}#y#R#S#y#T#j#y#j#k%q#k#o#y%W;'S#y;'S;:j$m<%lO#y~!fSj~XY!aYZ!a]^!apq!a~!wOm~~!|Oo~!b#RX`!b}!O!|!Q![!|![!]!|!c!}!|#R#S!|#T#o!|%W;'S!|;'S;:j#n<%lO!|!b#qP;=`<%l!|~#yOl~%W$QXY#t`!b}!O!|!Q![#y![!]!|!c!}#y#R#S#y#T#o#y%W;'S#y;'S;:j$m<%lO#y%W$pP;=`<%l#y~$zXX~`!b}!O!|!Q![!|![!]!|!c!}!|#R#S!|#T#o!|%W;'S!|;'S;:j#n<%lO!|~%lO[~~%qOZ~%W%xXY#t`!b}!O&e!Q![#y![!]!|!c!}#y#R#S#y#T#o#y%W;'S#y;'S;:j$m<%lO#y!b&jX`!b}!O!|!Q![!|![!]!|!c!}'V#R#S!|#T#o'V%W;'S!|;'S;:j#n<%lO!|!b'^XW!b`!b}!O!|!Q![!|![!]!|!c!}'V#R#S!|#T#o'V%W;'S!|;'S;:j#n<%lO!|\",\n  tokenizers: [6, 7, /*@__PURE__*/new LocalTokenGroup(\"b~RP#q#rU~XP#q#r[~aOT~~\", 17, 4), /*@__PURE__*/new LocalTokenGroup(\"!k~RQvwX#o#p!_~^TU~Opmq!]m!^;'Sm;'S;=`!X<%lOm~pUOpmq!]m!]!^!S!^;'Sm;'S;=`!X<%lOm~!XOU~~![P;=`<%lm~!bP#o#p!e~!jOk~~\", 72, 2), /*@__PURE__*/new LocalTokenGroup(\"[~RPwxU~ZOp~~\", 11, 15), /*@__PURE__*/new LocalTokenGroup(\"[~RPrsU~ZOn~~\", 11, 14), /*@__PURE__*/new LocalTokenGroup(\"!e~RQvwXwx!_~^Tc~Opmq!]m!^;'Sm;'S;=`!X<%lOm~pUOpmq!]m!]!^!S!^;'Sm;'S;=`!X<%lOm~!XOc~~![P;=`<%lm~!dOt~~\", 66, 35), /*@__PURE__*/new LocalTokenGroup(\"!e~RQrsXvw^~^Or~~cTb~Oprq!]r!^;'Sr;'S;=`!^<%lOr~uUOprq!]r!]!^!X!^;'Sr;'S;=`!^<%lOr~!^Ob~~!aP;=`<%lr~\", 66, 33)],\n  topRules: {\"Content\":[0,1],\"Attribute\":[1,7]},\n  tokenPrec: 157\n});\n\nconst exprParser = /*@__PURE__*/javascriptLanguage.parser.configure({\n    top: \"SingleExpression\"\n});\nconst baseParser = /*@__PURE__*/parser.configure({\n    props: [\n        /*@__PURE__*/styleTags({\n            Text: tags.content,\n            Is: tags.definitionOperator,\n            AttributeName: tags.attributeName,\n            VueAttributeName: tags.keyword,\n            Identifier: tags.variableName,\n            \"AttributeValue ScriptAttributeValue\": tags.attributeValue,\n            Entity: tags.character,\n            \"{{ }}\": tags.brace,\n            \"@ :\": tags.punctuation\n        })\n    ]\n});\nconst exprMixed = { parser: exprParser };\nconst textParser = /*@__PURE__*/baseParser.configure({\n    wrap: /*@__PURE__*/parseMixed((node, input) => node.name == \"InterpolationContent\" ? exprMixed : null),\n});\nconst attrParser = /*@__PURE__*/baseParser.configure({\n    wrap: /*@__PURE__*/parseMixed((node, input) => node.name == \"AttributeScript\" ? exprMixed : null),\n    top: \"Attribute\"\n});\nconst textMixed = { parser: textParser }, attrMixed = { parser: attrParser };\nconst baseHTML = /*@__PURE__*/html();\nfunction makeVue(base) {\n    return base.configure({\n        dialect: \"selfClosing\",\n        wrap: parseMixed(mixVue)\n    }, \"vue\");\n}\n/**\nA language provider for Vue templates.\n*/\nconst vueLanguage = /*@__PURE__*/makeVue(baseHTML.language);\nfunction mixVue(node, input) {\n    switch (node.name) {\n        case \"Attribute\":\n            return /^(@|:|v-)/.test(input.read(node.from, node.from + 2)) ? attrMixed : null;\n        case \"Text\":\n            return textMixed;\n    }\n    return null;\n}\n/**\nVue template support.\n*/\nfunction vue(config = {}) {\n    let base = baseHTML;\n    if (config.base) {\n        if (config.base.language.name != \"html\" || !(config.base.language instanceof LRLanguage))\n            throw new RangeError(\"The base option must be the result of calling html(...)\");\n        base = config.base;\n    }\n    return new LanguageSupport(base.language == baseHTML.language ? vueLanguage : makeVue(base.language), [\n        base.support,\n        base.language.data.of({ closeBrackets: { brackets: [\"{\", '\"'] } })\n    ]);\n}\n\nexport { vue, vueLanguage };\n", "function Context(indented, column, type, info, align, prev) {\n  this.indented = indented;\n  this.column = column;\n  this.type = type;\n  this.info = info;\n  this.align = align;\n  this.prev = prev;\n}\nfunction pushContext(state, col, type, info) {\n  var indent = state.indented;\n  if (state.context && state.context.type == \"statement\" && type != \"statement\")\n    indent = state.context.indented;\n  return state.context = new Context(indent, col, type, info, null, state.context);\n}\nfunction popContext(state) {\n  var t = state.context.type;\n  if (t == \")\" || t == \"]\" || t == \"}\")\n    state.indented = state.context.indented;\n  return state.context = state.context.prev;\n}\n\nfunction typeBefore(stream, state, pos) {\n  if (state.prevToken == \"variable\" || state.prevToken == \"type\") return true;\n  if (/\\S(?:[^- ]>|[*\\]])\\s*$|\\*$/.test(stream.string.slice(0, pos))) return true;\n  if (state.typeAtEndOfLine && stream.column() == stream.indentation()) return true;\n}\n\nfunction isTopScope(context) {\n  for (;;) {\n    if (!context || context.type == \"top\") return true;\n    if (context.type == \"}\" && context.prev.info != \"namespace\") return false;\n    context = context.prev;\n  }\n}\n\nexport function clike(parserConfig) {\n  var statementIndentUnit = parserConfig.statementIndentUnit,\n      dontAlignCalls = parserConfig.dontAlignCalls,\n      keywords = parserConfig.keywords || {},\n      types = parserConfig.types || {},\n      builtin = parserConfig.builtin || {},\n      blockKeywords = parserConfig.blockKeywords || {},\n      defKeywords = parserConfig.defKeywords || {},\n      atoms = parserConfig.atoms || {},\n      hooks = parserConfig.hooks || {},\n      multiLineStrings = parserConfig.multiLineStrings,\n      indentStatements = parserConfig.indentStatements !== false,\n      indentSwitch = parserConfig.indentSwitch !== false,\n      namespaceSeparator = parserConfig.namespaceSeparator,\n      isPunctuationChar = parserConfig.isPunctuationChar || /[\\[\\]{}\\(\\),;\\:\\.]/,\n      numberStart = parserConfig.numberStart || /[\\d\\.]/,\n      number = parserConfig.number || /^(?:0x[a-f\\d]+|0b[01]+|(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?)(u|ll?|l|f)?/i,\n      isOperatorChar = parserConfig.isOperatorChar || /[+\\-*&%=<>!?|\\/]/,\n      isIdentifierChar = parserConfig.isIdentifierChar || /[\\w\\$_\\xa1-\\uffff]/,\n      // An optional function that takes a {string} token and returns true if it\n      // should be treated as a builtin.\n      isReservedIdentifier = parserConfig.isReservedIdentifier || false;\n\n  var curPunc, isDefKeyword;\n\n  function tokenBase(stream, state) {\n    var ch = stream.next();\n    if (hooks[ch]) {\n      var result = hooks[ch](stream, state);\n      if (result !== false) return result;\n    }\n    if (ch == '\"' || ch == \"'\") {\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    }\n    if (numberStart.test(ch)) {\n      stream.backUp(1)\n      if (stream.match(number)) return \"number\"\n      stream.next()\n    }\n    if (isPunctuationChar.test(ch)) {\n      curPunc = ch;\n      return null;\n    }\n    if (ch == \"/\") {\n      if (stream.eat(\"*\")) {\n        state.tokenize = tokenComment;\n        return tokenComment(stream, state);\n      }\n      if (stream.eat(\"/\")) {\n        stream.skipToEnd();\n        return \"comment\";\n      }\n    }\n    if (isOperatorChar.test(ch)) {\n      while (!stream.match(/^\\/[\\/*]/, false) && stream.eat(isOperatorChar)) {}\n      return \"operator\";\n    }\n    stream.eatWhile(isIdentifierChar);\n    if (namespaceSeparator) while (stream.match(namespaceSeparator))\n      stream.eatWhile(isIdentifierChar);\n\n    var cur = stream.current();\n    if (contains(keywords, cur)) {\n      if (contains(blockKeywords, cur)) curPunc = \"newstatement\";\n      if (contains(defKeywords, cur)) isDefKeyword = true;\n      return \"keyword\";\n    }\n    if (contains(types, cur)) return \"type\";\n    if (contains(builtin, cur)\n        || (isReservedIdentifier && isReservedIdentifier(cur))) {\n      if (contains(blockKeywords, cur)) curPunc = \"newstatement\";\n      return \"builtin\";\n    }\n    if (contains(atoms, cur)) return \"atom\";\n    return \"variable\";\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, next, end = false;\n      while ((next = stream.next()) != null) {\n        if (next == quote && !escaped) {end = true; break;}\n        escaped = !escaped && next == \"\\\\\";\n      }\n      if (end || !(escaped || multiLineStrings))\n        state.tokenize = null;\n      return \"string\";\n    };\n  }\n\n  function tokenComment(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"/\" && maybeEnd) {\n        state.tokenize = null;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return \"comment\";\n  }\n\n  function maybeEOL(stream, state) {\n    if (parserConfig.typeFirstDefinitions && stream.eol() && isTopScope(state.context))\n      state.typeAtEndOfLine = typeBefore(stream, state, stream.pos)\n  }\n\n  // Interface\n\n  return {\n    name: parserConfig.name,\n    startState: function(indentUnit) {\n      return {\n        tokenize: null,\n        context: new Context(-indentUnit, 0, \"top\", null, false),\n        indented: 0,\n        startOfLine: true,\n        prevToken: null\n      };\n    },\n\n    token: function(stream, state) {\n      var ctx = state.context;\n      if (stream.sol()) {\n        if (ctx.align == null) ctx.align = false;\n        state.indented = stream.indentation();\n        state.startOfLine = true;\n      }\n      if (stream.eatSpace()) { maybeEOL(stream, state); return null; }\n      curPunc = isDefKeyword = null;\n      var style = (state.tokenize || tokenBase)(stream, state);\n      if (style == \"comment\" || style == \"meta\") return style;\n      if (ctx.align == null) ctx.align = true;\n\n      if (curPunc == \";\" || curPunc == \":\" || (curPunc == \",\" && stream.match(/^\\s*(?:\\/\\/.*)?$/, false)))\n        while (state.context.type == \"statement\") popContext(state);\n      else if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n      else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n      else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n      else if (curPunc == \"}\") {\n        while (ctx.type == \"statement\") ctx = popContext(state);\n        if (ctx.type == \"}\") ctx = popContext(state);\n        while (ctx.type == \"statement\") ctx = popContext(state);\n      }\n      else if (curPunc == ctx.type) popContext(state);\n      else if (indentStatements &&\n               (((ctx.type == \"}\" || ctx.type == \"top\") && curPunc != \";\") ||\n                (ctx.type == \"statement\" && curPunc == \"newstatement\"))) {\n        pushContext(state, stream.column(), \"statement\", stream.current());\n      }\n\n      if (style == \"variable\" &&\n          ((state.prevToken == \"def\" ||\n            (parserConfig.typeFirstDefinitions && typeBefore(stream, state, stream.start) &&\n             isTopScope(state.context) && stream.match(/^\\s*\\(/, false)))))\n        style = \"def\";\n\n      if (hooks.token) {\n        var result = hooks.token(stream, state, style);\n        if (result !== undefined) style = result;\n      }\n\n      if (style == \"def\" && parserConfig.styleDefs === false) style = \"variable\";\n\n      state.startOfLine = false;\n      state.prevToken = isDefKeyword ? \"def\" : style || curPunc;\n      maybeEOL(stream, state);\n      return style;\n    },\n\n    indent: function(state, textAfter, context) {\n      if (state.tokenize != tokenBase && state.tokenize != null || state.typeAtEndOfLine && isTopScope(state.context))\n        return null;\n      var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);\n      var closing = firstChar == ctx.type;\n      if (ctx.type == \"statement\" && firstChar == \"}\") ctx = ctx.prev;\n      if (parserConfig.dontIndentStatements)\n        while (ctx.type == \"statement\" && parserConfig.dontIndentStatements.test(ctx.info))\n          ctx = ctx.prev\n      if (hooks.indent) {\n        var hook = hooks.indent(state, ctx, textAfter, context.unit);\n        if (typeof hook == \"number\") return hook\n      }\n      var switchBlock = ctx.prev && ctx.prev.info == \"switch\";\n      if (parserConfig.allmanIndentation && /[{(]/.test(firstChar)) {\n        while (ctx.type != \"top\" && ctx.type != \"}\") ctx = ctx.prev\n        return ctx.indented\n      }\n      if (ctx.type == \"statement\")\n        return ctx.indented + (firstChar == \"{\" ? 0 : statementIndentUnit || context.unit);\n      if (ctx.align && (!dontAlignCalls || ctx.type != \")\"))\n        return ctx.column + (closing ? 0 : 1);\n      if (ctx.type == \")\" && !closing)\n        return ctx.indented + (statementIndentUnit || context.unit);\n\n      return ctx.indented + (closing ? 0 : context.unit) +\n        (!closing && switchBlock && !/^(?:case|default)\\b/.test(textAfter) ? context.unit : 0);\n    },\n\n    languageData: {\n      indentOnInput: indentSwitch ? /^\\s*(?:case .*?:|default:|\\{\\}?|\\})$/ : /^\\s*[{}]$/,\n      commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}},\n      autocomplete: Object.keys(keywords).concat(Object.keys(types)).concat(Object.keys(builtin)).concat(Object.keys(atoms)),\n      ...parserConfig.languageData\n    }\n  };\n};\n\nfunction words(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\nfunction contains(words, word) {\n  if (typeof words === \"function\") {\n    return words(word);\n  } else {\n    return words.propertyIsEnumerable(word);\n  }\n}\nvar cKeywords = \"auto if break case register continue return default do sizeof \" +\n    \"static else struct switch extern typedef union for goto while enum const \" +\n    \"volatile inline restrict asm fortran\";\n\n// Keywords from https://en.cppreference.com/w/cpp/keyword includes C++20.\nvar cppKeywords = \"alignas alignof and and_eq audit axiom bitand bitor catch \" +\n    \"class compl concept constexpr const_cast decltype delete dynamic_cast \" +\n    \"explicit export final friend import module mutable namespace new noexcept \" +\n    \"not not_eq operator or or_eq override private protected public \" +\n    \"reinterpret_cast requires static_assert static_cast template this \" +\n    \"thread_local throw try typeid typename using virtual xor xor_eq\";\n\nvar objCKeywords = \"bycopy byref in inout oneway out self super atomic nonatomic retain copy \" +\n    \"readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd \" +\n    \"@interface @implementation @end @protocol @encode @property @synthesize @dynamic @class \" +\n    \"@public @package @private @protected @required @optional @try @catch @finally @import \" +\n    \"@selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available\";\n\nvar objCBuiltins = \"FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION \" +\n    \" NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER \" +\n    \"NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION \" +\n    \"NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT\"\n\n// Do not use this. Use the cTypes function below. This is global just to avoid\n// excessive calls when cTypes is being called multiple times during a parse.\nvar basicCTypes = words(\"int long char short double float unsigned signed \" +\n                        \"void bool\");\n\n// Do not use this. Use the objCTypes function below. This is global just to avoid\n// excessive calls when objCTypes is being called multiple times during a parse.\nvar basicObjCTypes = words(\"SEL instancetype id Class Protocol BOOL\");\n\n// Returns true if identifier is a \"C\" type.\n// C type is defined as those that are reserved by the compiler (basicTypes),\n// and those that end in _t (Reserved by POSIX for types)\n// http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html\nfunction cTypes(identifier) {\n  return contains(basicCTypes, identifier) || /.+_t$/.test(identifier);\n}\n\n// Returns true if identifier is a \"Objective C\" type.\nfunction objCTypes(identifier) {\n  return cTypes(identifier) || contains(basicObjCTypes, identifier);\n}\n\nvar cBlockKeywords = \"case do else for if switch while struct enum union\";\nvar cDefKeywords = \"struct enum union\";\n\nfunction cppHook(stream, state) {\n  if (!state.startOfLine) return false\n  for (var ch, next = null; ch = stream.peek();) {\n    if (ch == \"\\\\\" && stream.match(/^.$/)) {\n      next = cppHook\n      break\n    } else if (ch == \"/\" && stream.match(/^\\/[\\/\\*]/, false)) {\n      break\n    }\n    stream.next()\n  }\n  state.tokenize = next\n  return \"meta\"\n}\n\nfunction pointerHook(_stream, state) {\n  if (state.prevToken == \"type\") return \"type\";\n  return false;\n}\n\n// For C and C++ (and ObjC): identifiers starting with __\n// or _ followed by a capital letter are reserved for the compiler.\nfunction cIsReservedIdentifier(token) {\n  if (!token || token.length < 2) return false;\n  if (token[0] != '_') return false;\n  return (token[1] == '_') || (token[1] !== token[1].toLowerCase());\n}\n\nfunction cpp14Literal(stream) {\n  stream.eatWhile(/[\\w\\.']/);\n  return \"number\";\n}\n\nfunction cpp11StringHook(stream, state) {\n  stream.backUp(1);\n  // Raw strings.\n  if (stream.match(/^(?:R|u8R|uR|UR|LR)/)) {\n    var match = stream.match(/^\"([^\\s\\\\()]{0,16})\\(/);\n    if (!match) {\n      return false;\n    }\n    state.cpp11RawStringDelim = match[1];\n    state.tokenize = tokenRawString;\n    return tokenRawString(stream, state);\n  }\n  // Unicode strings/chars.\n  if (stream.match(/^(?:u8|u|U|L)/)) {\n    if (stream.match(/^[\"']/, /* eat */ false)) {\n      return \"string\";\n    }\n    return false;\n  }\n  // Ignore this hook.\n  stream.next();\n  return false;\n}\n\nfunction cppLooksLikeConstructor(word) {\n  var lastTwo = /(\\w+)::~?(\\w+)$/.exec(word);\n  return lastTwo && lastTwo[1] == lastTwo[2];\n}\n\n// C#-style strings where \"\" escapes a quote.\nfunction tokenAtString(stream, state) {\n  var next;\n  while ((next = stream.next()) != null) {\n    if (next == '\"' && !stream.eat('\"')) {\n      state.tokenize = null;\n      break;\n    }\n  }\n  return \"string\";\n}\n\n// C++11 raw string literal is <prefix>\"<delim>( anything )<delim>\", where\n// <delim> can be a string up to 16 characters long.\nfunction tokenRawString(stream, state) {\n  // Escape characters that have special regex meanings.\n  var delim = state.cpp11RawStringDelim.replace(/[^\\w\\s]/g, '\\\\$&');\n  var match = stream.match(new RegExp(\".*?\\\\)\" + delim + '\"'));\n  if (match)\n    state.tokenize = null;\n  else\n    stream.skipToEnd();\n  return \"string\";\n}\n\nexport const c = clike({\n  name: \"c\",\n  keywords: words(cKeywords),\n  types: cTypes,\n  blockKeywords: words(cBlockKeywords),\n  defKeywords: words(cDefKeywords),\n  typeFirstDefinitions: true,\n  atoms: words(\"NULL true false\"),\n  isReservedIdentifier: cIsReservedIdentifier,\n  hooks: {\n    \"#\": cppHook,\n    \"*\": pointerHook,\n  }\n})\n\nexport const cpp = clike({\n  name: \"cpp\",\n  keywords: words(cKeywords + \" \" + cppKeywords),\n  types: cTypes,\n  blockKeywords: words(cBlockKeywords + \" class try catch\"),\n  defKeywords: words(cDefKeywords + \" class namespace\"),\n  typeFirstDefinitions: true,\n  atoms: words(\"true false NULL nullptr\"),\n  dontIndentStatements: /^template$/,\n  isIdentifierChar: /[\\w\\$_~\\xa1-\\uffff]/,\n  isReservedIdentifier: cIsReservedIdentifier,\n  hooks: {\n    \"#\": cppHook,\n    \"*\": pointerHook,\n    \"u\": cpp11StringHook,\n    \"U\": cpp11StringHook,\n    \"L\": cpp11StringHook,\n    \"R\": cpp11StringHook,\n    \"0\": cpp14Literal,\n    \"1\": cpp14Literal,\n    \"2\": cpp14Literal,\n    \"3\": cpp14Literal,\n    \"4\": cpp14Literal,\n    \"5\": cpp14Literal,\n    \"6\": cpp14Literal,\n    \"7\": cpp14Literal,\n    \"8\": cpp14Literal,\n    \"9\": cpp14Literal,\n    token: function(stream, state, style) {\n      if (style == \"variable\" && stream.peek() == \"(\" &&\n          (state.prevToken == \";\" || state.prevToken == null ||\n           state.prevToken == \"}\") &&\n          cppLooksLikeConstructor(stream.current()))\n        return \"def\";\n    }\n  },\n  namespaceSeparator: \"::\"\n});\n\nexport const java = clike({\n  name: \"java\",\n  keywords: words(\"abstract assert break case catch class const continue default \" +\n                  \"do else enum extends final finally for goto if implements import \" +\n                  \"instanceof interface native new package private protected public \" +\n                  \"return static strictfp super switch synchronized this throw throws transient \" +\n                  \"try volatile while @interface\"),\n  types: words(\"var byte short int long float double boolean char void Boolean Byte Character Double Float \" +\n               \"Integer Long Number Object Short String StringBuffer StringBuilder Void\"),\n  blockKeywords: words(\"catch class do else finally for if switch try while\"),\n  defKeywords: words(\"class interface enum @interface\"),\n  typeFirstDefinitions: true,\n  atoms: words(\"true false null\"),\n  number: /^(?:0x[a-f\\d_]+|0b[01_]+|(?:[\\d_]+\\.?\\d*|\\.\\d+)(?:e[-+]?[\\d_]+)?)(u|ll?|l|f)?/i,\n  hooks: {\n    \"@\": function(stream) {\n      // Don't match the @interface keyword.\n      if (stream.match('interface', false)) return false;\n\n      stream.eatWhile(/[\\w\\$_]/);\n      return \"meta\";\n    },\n    '\"': function(stream, state) {\n      if (!stream.match(/\"\"$/)) return false;\n      state.tokenize = tokenTripleString;\n      return state.tokenize(stream, state);\n    }\n  }\n})\n\nexport const csharp = clike({\n  name: \"csharp\",\n  keywords: words(\"abstract as async await base break case catch checked class const continue\" +\n                  \" default delegate do else enum event explicit extern finally fixed for\" +\n                  \" foreach goto if implicit in init interface internal is lock namespace new\" +\n                  \" operator out override params private protected public readonly record ref required return sealed\" +\n                  \" sizeof stackalloc static struct switch this throw try typeof unchecked\" +\n                  \" unsafe using virtual void volatile while add alias ascending descending dynamic from get\" +\n                  \" global group into join let orderby partial remove select set value var yield\"),\n  types: words(\"Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func\" +\n               \" Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32\" +\n               \" UInt64 bool byte char decimal double short int long object\"  +\n               \" sbyte float string ushort uint ulong\"),\n  blockKeywords: words(\"catch class do else finally for foreach if struct switch try while\"),\n  defKeywords: words(\"class interface namespace record struct var\"),\n  typeFirstDefinitions: true,\n  atoms: words(\"true false null\"),\n  hooks: {\n    \"@\": function(stream, state) {\n      if (stream.eat('\"')) {\n        state.tokenize = tokenAtString;\n        return tokenAtString(stream, state);\n      }\n      stream.eatWhile(/[\\w\\$_]/);\n      return \"meta\";\n    }\n  }\n});\n\nfunction tokenTripleString(stream, state) {\n  var escaped = false;\n  while (!stream.eol()) {\n    if (!escaped && stream.match('\"\"\"')) {\n      state.tokenize = null;\n      break;\n    }\n    escaped = stream.next() == \"\\\\\" && !escaped;\n  }\n  return \"string\";\n}\n\nfunction tokenNestedComment(depth) {\n  return function (stream, state) {\n    var ch\n    while (ch = stream.next()) {\n      if (ch == \"*\" && stream.eat(\"/\")) {\n        if (depth == 1) {\n          state.tokenize = null\n          break\n        } else {\n          state.tokenize = tokenNestedComment(depth - 1)\n          return state.tokenize(stream, state)\n        }\n      } else if (ch == \"/\" && stream.eat(\"*\")) {\n        state.tokenize = tokenNestedComment(depth + 1)\n        return state.tokenize(stream, state)\n      }\n    }\n    return \"comment\"\n  }\n}\n\nexport const scala = clike({\n  name: \"scala\",\n  keywords: words(\n    /* scala */\n    \"abstract case catch class def do else extends final finally for forSome if \" +\n      \"implicit import lazy match new null object override package private protected return \" +\n      \"sealed super this throw trait try type val var while with yield _ \" +\n\n    /* package scala */\n    \"assert assume require print println printf readLine readBoolean readByte readShort \" +\n      \"readChar readInt readLong readFloat readDouble\"\n  ),\n  types: words(\n    \"AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either \" +\n      \"Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable \" +\n      \"Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering \" +\n      \"Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder \" +\n      \"StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector \" +\n\n    /* package java.lang */\n    \"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable \" +\n      \"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process \" +\n      \"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String \" +\n      \"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void\"\n  ),\n  multiLineStrings: true,\n  blockKeywords: words(\"catch class enum do else finally for forSome if match switch try while\"),\n  defKeywords: words(\"class enum def object package trait type val var\"),\n  atoms: words(\"true false null\"),\n  indentStatements: false,\n  indentSwitch: false,\n  isOperatorChar: /[+\\-*&%=<>!?|\\/#:@]/,\n  hooks: {\n    \"@\": function(stream) {\n      stream.eatWhile(/[\\w\\$_]/);\n      return \"meta\";\n    },\n    '\"': function(stream, state) {\n      if (!stream.match('\"\"')) return false;\n      state.tokenize = tokenTripleString;\n      return state.tokenize(stream, state);\n    },\n    \"'\": function(stream) {\n      if (stream.match(/^(\\\\[^'\\s]+|[^\\\\'])'/)) return \"character\"\n      stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n      return \"atom\";\n    },\n    \"=\": function(stream, state) {\n      var cx = state.context\n      if (cx.type == \"}\" && cx.align && stream.eat(\">\")) {\n        state.context = new Context(cx.indented, cx.column, cx.type, cx.info, null, cx.prev)\n        return \"operator\"\n      } else {\n        return false\n      }\n    },\n\n    \"/\": function(stream, state) {\n      if (!stream.eat(\"*\")) return false\n      state.tokenize = tokenNestedComment(1)\n      return state.tokenize(stream, state)\n    }\n  },\n  languageData: {\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', '\"\"\"']}\n  }\n});\n\nfunction tokenKotlinString(tripleString){\n  return function (stream, state) {\n    var escaped = false, next, end = false;\n    while (!stream.eol()) {\n      if (!tripleString && !escaped && stream.match('\"') ) {end = true; break;}\n      if (tripleString && stream.match('\"\"\"')) {end = true; break;}\n      next = stream.next();\n      if(!escaped && next == \"$\" && stream.match('{'))\n        stream.skipTo(\"}\");\n      escaped = !escaped && next == \"\\\\\" && !tripleString;\n    }\n    if (end || !tripleString)\n      state.tokenize = null;\n    return \"string\";\n  }\n}\n\nexport const kotlin = clike({\n  name: \"kotlin\",\n  keywords: words(\n    /*keywords*/\n    \"package as typealias class interface this super val operator \" +\n      \"var fun for is in This throw return annotation \" +\n      \"break continue object if else while do try when !in !is as? \" +\n\n    /*soft keywords*/\n    \"file import where by get set abstract enum open inner override private public internal \" +\n      \"protected catch finally out final vararg reified dynamic companion constructor init \" +\n      \"sealed field property receiver param sparam lateinit data inline noinline tailrec \" +\n      \"external annotation crossinline const operator infix suspend actual expect setparam\"\n  ),\n  types: words(\n    /* package java.lang */\n    \"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable \" +\n      \"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process \" +\n      \"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String \" +\n      \"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray \" +\n      \"ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy \" +\n      \"LazyThreadSafetyMode LongArray Nothing ShortArray Unit\"\n  ),\n  intendSwitch: false,\n  indentStatements: false,\n  multiLineStrings: true,\n  number: /^(?:0x[a-f\\d_]+|0b[01_]+|(?:[\\d_]+(\\.\\d+)?|\\.\\d+)(?:e[-+]?[\\d_]+)?)(u|ll?|l|f)?/i,\n  blockKeywords: words(\"catch class do else finally for if where try while enum\"),\n  defKeywords: words(\"class val var object interface fun\"),\n  atoms: words(\"true false null this\"),\n  hooks: {\n    \"@\": function(stream) {\n      stream.eatWhile(/[\\w\\$_]/);\n      return \"meta\";\n    },\n    '*': function(_stream, state) {\n      return state.prevToken == '.' ? 'variable' : 'operator';\n    },\n    '\"': function(stream, state) {\n      state.tokenize = tokenKotlinString(stream.match('\"\"'));\n      return state.tokenize(stream, state);\n    },\n    \"/\": function(stream, state) {\n      if (!stream.eat(\"*\")) return false;\n      state.tokenize = tokenNestedComment(1);\n      return state.tokenize(stream, state)\n    },\n    indent: function(state, ctx, textAfter, indentUnit) {\n      var firstChar = textAfter && textAfter.charAt(0);\n      if ((state.prevToken == \"}\" || state.prevToken == \")\") && textAfter == \"\")\n        return state.indented;\n      if ((state.prevToken == \"operator\" && textAfter != \"}\" && state.context.type != \"}\") ||\n          state.prevToken == \"variable\" && firstChar == \".\" ||\n          (state.prevToken == \"}\" || state.prevToken == \")\") && firstChar == \".\")\n        return indentUnit * 2 + ctx.indented;\n      if (ctx.align && ctx.type == \"}\")\n        return ctx.indented + (state.context.type == (textAfter || \"\").charAt(0) ? 0 : indentUnit);\n    }\n  },\n  languageData: {\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', '\"\"\"']}\n  }\n});\n\nexport const shader = clike({\n  name: \"shader\",\n  keywords: words(\"sampler1D sampler2D sampler3D samplerCube \" +\n                  \"sampler1DShadow sampler2DShadow \" +\n                  \"const attribute uniform varying \" +\n                  \"break continue discard return \" +\n                  \"for while do if else struct \" +\n                  \"in out inout\"),\n  types: words(\"float int bool void \" +\n               \"vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 \" +\n               \"mat2 mat3 mat4\"),\n  blockKeywords: words(\"for while do if else struct\"),\n  builtin: words(\"radians degrees sin cos tan asin acos atan \" +\n                 \"pow exp log exp2 sqrt inversesqrt \" +\n                 \"abs sign floor ceil fract mod min max clamp mix step smoothstep \" +\n                 \"length distance dot cross normalize ftransform faceforward \" +\n                 \"reflect refract matrixCompMult \" +\n                 \"lessThan lessThanEqual greaterThan greaterThanEqual \" +\n                 \"equal notEqual any all not \" +\n                 \"texture1D texture1DProj texture1DLod texture1DProjLod \" +\n                 \"texture2D texture2DProj texture2DLod texture2DProjLod \" +\n                 \"texture3D texture3DProj texture3DLod texture3DProjLod \" +\n                 \"textureCube textureCubeLod \" +\n                 \"shadow1D shadow2D shadow1DProj shadow2DProj \" +\n                 \"shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod \" +\n                 \"dFdx dFdy fwidth \" +\n                 \"noise1 noise2 noise3 noise4\"),\n  atoms: words(\"true false \" +\n               \"gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex \" +\n               \"gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 \" +\n               \"gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 \" +\n               \"gl_FogCoord gl_PointCoord \" +\n               \"gl_Position gl_PointSize gl_ClipVertex \" +\n               \"gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor \" +\n               \"gl_TexCoord gl_FogFragCoord \" +\n               \"gl_FragCoord gl_FrontFacing \" +\n               \"gl_FragData gl_FragDepth \" +\n               \"gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix \" +\n               \"gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse \" +\n               \"gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse \" +\n               \"gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose \" +\n               \"gl_ProjectionMatrixInverseTranspose \" +\n               \"gl_ModelViewProjectionMatrixInverseTranspose \" +\n               \"gl_TextureMatrixInverseTranspose \" +\n               \"gl_NormalScale gl_DepthRange gl_ClipPlane \" +\n               \"gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel \" +\n               \"gl_FrontLightModelProduct gl_BackLightModelProduct \" +\n               \"gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ \" +\n               \"gl_FogParameters \" +\n               \"gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords \" +\n               \"gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats \" +\n               \"gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits \" +\n               \"gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits \" +\n               \"gl_MaxDrawBuffers\"),\n  indentSwitch: false,\n  hooks: {\"#\": cppHook}\n})\n\nexport const nesC = clike({\n  name: \"nesc\",\n  keywords: words(cKeywords + \" as atomic async call command component components configuration event generic \" +\n                  \"implementation includes interface module new norace nx_struct nx_union post provides \" +\n                  \"signal task uses abstract extends\"),\n  types: cTypes,\n  blockKeywords: words(cBlockKeywords),\n  atoms: words(\"null true false\"),\n  hooks: {\"#\": cppHook}\n})\n\nexport const objectiveC = clike({\n  name: \"objectivec\",\n  keywords: words(cKeywords + \" \" + objCKeywords),\n  types: objCTypes,\n  builtin: words(objCBuiltins),\n  blockKeywords: words(cBlockKeywords + \" @synthesize @try @catch @finally @autoreleasepool @synchronized\"),\n  defKeywords: words(cDefKeywords + \" @interface @implementation @protocol @class\"),\n  dontIndentStatements: /^@.*$/,\n  typeFirstDefinitions: true,\n  atoms: words(\"YES NO NULL Nil nil true false nullptr\"),\n  isReservedIdentifier: cIsReservedIdentifier,\n  hooks: {\n    \"#\": cppHook,\n    \"*\": pointerHook,\n  }\n})\n\nexport const objectiveCpp = clike({\n  name: \"objectivecpp\",\n  keywords: words(cKeywords + \" \" + objCKeywords + \" \" + cppKeywords),\n  types: objCTypes,\n  builtin: words(objCBuiltins),\n  blockKeywords: words(cBlockKeywords + \" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch\"),\n  defKeywords: words(cDefKeywords + \" @interface @implementation @protocol @class class namespace\"),\n  dontIndentStatements: /^@.*$|^template$/,\n  typeFirstDefinitions: true,\n  atoms: words(\"YES NO NULL Nil nil true false nullptr\"),\n  isReservedIdentifier: cIsReservedIdentifier,\n  hooks: {\n    \"#\": cppHook,\n    \"*\": pointerHook,\n    \"u\": cpp11StringHook,\n    \"U\": cpp11StringHook,\n    \"L\": cpp11StringHook,\n    \"R\": cpp11StringHook,\n    \"0\": cpp14Literal,\n    \"1\": cpp14Literal,\n    \"2\": cpp14Literal,\n    \"3\": cpp14Literal,\n    \"4\": cpp14Literal,\n    \"5\": cpp14Literal,\n    \"6\": cpp14Literal,\n    \"7\": cpp14Literal,\n    \"8\": cpp14Literal,\n    \"9\": cpp14Literal,\n    token: function(stream, state, style) {\n      if (style == \"variable\" && stream.peek() == \"(\" &&\n          (state.prevToken == \";\" || state.prevToken == null ||\n           state.prevToken == \"}\") &&\n          cppLooksLikeConstructor(stream.current()))\n        return \"def\";\n    }\n  },\n  namespaceSeparator: \"::\"\n})\n\nexport const squirrel = clike({\n  name: \"squirrel\",\n  keywords: words(\"base break clone continue const default delete enum extends function in class\" +\n                  \" foreach local resume return this throw typeof yield constructor instanceof static\"),\n  types: cTypes,\n  blockKeywords: words(\"case catch class else for foreach if switch try while\"),\n  defKeywords: words(\"function local class\"),\n  typeFirstDefinitions: true,\n  atoms: words(\"true false null\"),\n  hooks: {\"#\": cppHook}\n})\n\n// Ceylon Strings need to deal with interpolation\nvar stringTokenizer = null;\nfunction tokenCeylonString(type) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while (!stream.eol()) {\n      if (!escaped && stream.match('\"') &&\n          (type == \"single\" || stream.match('\"\"'))) {\n        end = true;\n        break;\n      }\n      if (!escaped && stream.match('``')) {\n        stringTokenizer = tokenCeylonString(type);\n        end = true;\n        break;\n      }\n      next = stream.next();\n      escaped = type == \"single\" && !escaped && next == \"\\\\\";\n    }\n    if (end)\n      state.tokenize = null;\n    return \"string\";\n  }\n}\n\nexport const ceylon = clike({\n  name: \"ceylon\",\n  keywords: words(\"abstracts alias assembly assert assign break case catch class continue dynamic else\" +\n                  \" exists extends finally for function given if import in interface is let module new\" +\n                  \" nonempty object of out outer package return satisfies super switch then this throw\" +\n                  \" try value void while\"),\n  types: function(word) {\n    // In Ceylon all identifiers that start with an uppercase are types\n    var first = word.charAt(0);\n    return (first === first.toUpperCase() && first !== first.toLowerCase());\n  },\n  blockKeywords: words(\"case catch class dynamic else finally for function if interface module new object switch try while\"),\n  defKeywords: words(\"class dynamic function interface module object package value\"),\n  builtin: words(\"abstract actual aliased annotation by default deprecated doc final formal late license\" +\n                 \" native optional sealed see serializable shared suppressWarnings tagged throws variable\"),\n  isPunctuationChar: /[\\[\\]{}\\(\\),;\\:\\.`]/,\n  isOperatorChar: /[+\\-*&%=<>!?|^~:\\/]/,\n  numberStart: /[\\d#$]/,\n  number: /^(?:#[\\da-fA-F_]+|\\$[01_]+|[\\d_]+[kMGTPmunpf]?|[\\d_]+\\.[\\d_]+(?:[eE][-+]?\\d+|[kMGTPmunpf]|)|)/i,\n  multiLineStrings: true,\n  typeFirstDefinitions: true,\n  atoms: words(\"true false null larger smaller equal empty finished\"),\n  indentSwitch: false,\n  styleDefs: false,\n  hooks: {\n    \"@\": function(stream) {\n      stream.eatWhile(/[\\w\\$_]/);\n      return \"meta\";\n    },\n    '\"': function(stream, state) {\n      state.tokenize = tokenCeylonString(stream.match('\"\"') ? \"triple\" : \"single\");\n      return state.tokenize(stream, state);\n    },\n    '`': function(stream, state) {\n      if (!stringTokenizer || !stream.match('`')) return false;\n      state.tokenize = stringTokenizer;\n      stringTokenizer = null;\n      return state.tokenize(stream, state);\n    },\n    \"'\": function(stream) {\n      if (stream.match(/^(\\\\[^'\\s]+|[^\\\\'])'/)) return \"string.special\"\n      stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n      return \"atom\";\n    },\n    token: function(_stream, state, style) {\n      if ((style == \"variable\" || style == \"type\") &&\n          state.prevToken == \".\") {\n        return \"variableName.special\";\n      }\n    }\n  },\n  languageData: {\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', '\"\"\"']}\n  }\n})\n\nfunction pushInterpolationStack(state) {\n  (state.interpolationStack || (state.interpolationStack = [])).push(state.tokenize);\n}\n\nfunction popInterpolationStack(state) {\n  return (state.interpolationStack || (state.interpolationStack = [])).pop();\n}\n\nfunction sizeInterpolationStack(state) {\n  return state.interpolationStack ? state.interpolationStack.length : 0;\n}\n\nfunction tokenDartString(quote, stream, state, raw) {\n  var tripleQuoted = false;\n  if (stream.eat(quote)) {\n    if (stream.eat(quote)) tripleQuoted = true;\n    else return \"string\"; //empty string\n  }\n  function tokenStringHelper(stream, state) {\n    var escaped = false;\n    while (!stream.eol()) {\n      if (!raw && !escaped && stream.peek() == \"$\") {\n        pushInterpolationStack(state);\n        state.tokenize = tokenInterpolation;\n        return \"string\";\n      }\n      var next = stream.next();\n      if (next == quote && !escaped && (!tripleQuoted || stream.match(quote + quote))) {\n        state.tokenize = null;\n        break;\n      }\n      escaped = !raw && !escaped && next == \"\\\\\";\n    }\n    return \"string\";\n  }\n  state.tokenize = tokenStringHelper;\n  return tokenStringHelper(stream, state);\n}\n\nfunction tokenInterpolation(stream, state) {\n  stream.eat(\"$\");\n  if (stream.eat(\"{\")) {\n    // let clike handle the content of ${...},\n    // we take over again when \"}\" appears (see hooks).\n    state.tokenize = null;\n  } else {\n    state.tokenize = tokenInterpolationIdentifier;\n  }\n  return null;\n}\n\nfunction tokenInterpolationIdentifier(stream, state) {\n  stream.eatWhile(/[\\w_]/);\n  state.tokenize = popInterpolationStack(state);\n  return \"variable\";\n}\n\nexport const dart = clike({\n  name: \"dart\",\n  keywords: words(\"this super static final const abstract class extends external factory \" +\n                  \"implements mixin get native set typedef with enum throw rethrow assert break case \" +\n                  \"continue default in return new deferred async await covariant try catch finally \" +\n                  \"do else for if switch while import library export part of show hide is as extension \" +\n                  \"on yield late required sealed base interface when inline\"),\n  blockKeywords: words(\"try catch finally do else for if switch while\"),\n  builtin: words(\"void bool num int double dynamic var String Null Never\"),\n  atoms: words(\"true false null\"),\n  // clike numbers without the suffixes, and with '_' separators.\n  number: /^(?:0x[a-f\\d_]+|(?:[\\d_]+\\.?[\\d_]*|\\.[\\d_]+)(?:e[-+]?[\\d_]+)?)/i,\n  hooks: {\n    \"@\": function(stream) {\n      stream.eatWhile(/[\\w\\$_\\.]/);\n      return \"meta\";\n    },\n\n    // custom string handling to deal with triple-quoted strings and string interpolation\n    \"'\": function(stream, state) {\n      return tokenDartString(\"'\", stream, state, false);\n    },\n    \"\\\"\": function(stream, state) {\n      return tokenDartString(\"\\\"\", stream, state, false);\n    },\n    \"r\": function(stream, state) {\n      var peek = stream.peek();\n      if (peek == \"'\" || peek == \"\\\"\") {\n        return tokenDartString(stream.next(), stream, state, true);\n      }\n      return false;\n    },\n\n    \"}\": function(_stream, state) {\n      // \"}\" is end of interpolation, if interpolation stack is non-empty\n      if (sizeInterpolationStack(state) > 0) {\n        state.tokenize = popInterpolationStack(state);\n        return null;\n      }\n      return false;\n    },\n\n    \"/\": function(stream, state) {\n      if (!stream.eat(\"*\")) return false\n      state.tokenize = tokenNestedComment(1)\n      return state.tokenize(stream, state)\n    },\n    token: function(stream, _, style) {\n      if (style == \"variable\") {\n        // Assume uppercase symbols are classes\n        var isUpper = RegExp('^[_$]*[A-Z][a-zA-Z0-9_$]*$','g');\n        if (isUpper.test(stream.current())) {\n          return 'type';\n        }\n      }\n    }\n  }\n})\n", "var keywords = {\n  \"break\":true, \"case\":true, \"chan\":true, \"const\":true, \"continue\":true,\n  \"default\":true, \"defer\":true, \"else\":true, \"fallthrough\":true, \"for\":true,\n  \"func\":true, \"go\":true, \"goto\":true, \"if\":true, \"import\":true,\n  \"interface\":true, \"map\":true, \"package\":true, \"range\":true, \"return\":true,\n  \"select\":true, \"struct\":true, \"switch\":true, \"type\":true, \"var\":true,\n  \"bool\":true, \"byte\":true, \"complex64\":true, \"complex128\":true,\n  \"float32\":true, \"float64\":true, \"int8\":true, \"int16\":true, \"int32\":true,\n  \"int64\":true, \"string\":true, \"uint8\":true, \"uint16\":true, \"uint32\":true,\n  \"uint64\":true, \"int\":true, \"uint\":true, \"uintptr\":true, \"error\": true,\n  \"rune\":true, \"any\":true, \"comparable\":true\n};\n\nvar atoms = {\n  \"true\":true, \"false\":true, \"iota\":true, \"nil\":true, \"append\":true,\n  \"cap\":true, \"close\":true, \"complex\":true, \"copy\":true, \"delete\":true, \"imag\":true,\n  \"len\":true, \"make\":true, \"new\":true, \"panic\":true, \"print\":true,\n  \"println\":true, \"real\":true, \"recover\":true\n};\n\nvar isOperatorChar = /[+\\-*&^%:=<>!|\\/]/;\n\nvar curPunc;\n\nfunction tokenBase(stream, state) {\n  var ch = stream.next();\n  if (ch == '\"' || ch == \"'\" || ch == \"`\") {\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  }\n  if (/[\\d\\.]/.test(ch)) {\n    if (ch == \".\") {\n      stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n    } else if (ch == \"0\") {\n      stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n    } else {\n      stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n    }\n    return \"number\";\n  }\n  if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n    curPunc = ch;\n    return null;\n  }\n  if (ch == \"/\") {\n    if (stream.eat(\"*\")) {\n      state.tokenize = tokenComment;\n      return tokenComment(stream, state);\n    }\n    if (stream.eat(\"/\")) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n  }\n  if (isOperatorChar.test(ch)) {\n    stream.eatWhile(isOperatorChar);\n    return \"operator\";\n  }\n  stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n  var cur = stream.current();\n  if (keywords.propertyIsEnumerable(cur)) {\n    if (cur == \"case\" || cur == \"default\") curPunc = \"case\";\n    return \"keyword\";\n  }\n  if (atoms.propertyIsEnumerable(cur)) return \"atom\";\n  return \"variable\";\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) {end = true; break;}\n      escaped = !escaped && quote != \"`\" && next == \"\\\\\";\n    }\n    if (end || !(escaped || quote == \"`\"))\n      state.tokenize = tokenBase;\n    return \"string\";\n  };\n}\n\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"/\" && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\n\nfunction Context(indented, column, type, align, prev) {\n  this.indented = indented;\n  this.column = column;\n  this.type = type;\n  this.align = align;\n  this.prev = prev;\n}\nfunction pushContext(state, col, type) {\n  return state.context = new Context(state.indented, col, type, null, state.context);\n}\nfunction popContext(state) {\n  if (!state.context.prev) return;\n  var t = state.context.type;\n  if (t == \")\" || t == \"]\" || t == \"}\")\n    state.indented = state.context.indented;\n  return state.context = state.context.prev;\n}\n\n// Interface\n\nexport const go = {\n  name: \"go\",\n  startState: function(indentUnit) {\n    return {\n      tokenize: null,\n      context: new Context(-indentUnit, 0, \"top\", false),\n      indented: 0,\n      startOfLine: true\n    };\n  },\n\n  token: function(stream, state) {\n    var ctx = state.context;\n    if (stream.sol()) {\n      if (ctx.align == null) ctx.align = false;\n      state.indented = stream.indentation();\n      state.startOfLine = true;\n      if (ctx.type == \"case\") ctx.type = \"}\";\n    }\n    if (stream.eatSpace()) return null;\n    curPunc = null;\n    var style = (state.tokenize || tokenBase)(stream, state);\n    if (style == \"comment\") return style;\n    if (ctx.align == null) ctx.align = true;\n\n    if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n    else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n    else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n    else if (curPunc == \"case\") ctx.type = \"case\";\n    else if (curPunc == \"}\" && ctx.type == \"}\") popContext(state);\n    else if (curPunc == ctx.type) popContext(state);\n    state.startOfLine = false;\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    if (state.tokenize != tokenBase && state.tokenize != null) return null;\n    var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);\n    if (ctx.type == \"case\" && /^(?:case|default)\\b/.test(textAfter)) return ctx.indented;\n    var closing = firstChar == ctx.type;\n    if (ctx.align) return ctx.column + (closing ? 0 : 1);\n    else return ctx.indented + (closing ? 0 : cx.unit);\n  },\n\n  languageData: {\n    indentOnInput: /^\\s([{}]|case |default\\s*:)$/,\n    commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}}\n  }\n};\n\n", "function switchState(source, setState, f) {\n  setState(f);\n  return f(source, setState);\n}\n\n// These should all be Unicode extended, as per the Haskell 2010 report\nvar smallRE = /[a-z_]/;\nvar largeRE = /[A-Z]/;\nvar digitRE = /\\d/;\nvar hexitRE = /[0-9A-Fa-f]/;\nvar octitRE = /[0-7]/;\nvar idRE = /[a-z_A-Z0-9'\\xa1-\\uffff]/;\nvar symbolRE = /[-!#$%&*+.\\/<=>?@\\\\^|~:]/;\nvar specialRE = /[(),;[\\]`{}]/;\nvar whiteCharRE = /[ \\t\\v\\f]/; // newlines are handled in tokenizer\n\nfunction normal(source, setState) {\n  if (source.eatWhile(whiteCharRE)) {\n    return null;\n  }\n\n  var ch = source.next();\n  if (specialRE.test(ch)) {\n    if (ch == '{' && source.eat('-')) {\n      var t = \"comment\";\n      if (source.eat('#')) {\n        t = \"meta\";\n      }\n      return switchState(source, setState, ncomment(t, 1));\n    }\n    return null;\n  }\n\n  if (ch == '\\'') {\n    if (source.eat('\\\\')) {\n      source.next();  // should handle other escapes here\n    }\n    else {\n      source.next();\n    }\n    if (source.eat('\\'')) {\n      return \"string\";\n    }\n    return \"error\";\n  }\n\n  if (ch == '\"') {\n    return switchState(source, setState, stringLiteral);\n  }\n\n  if (largeRE.test(ch)) {\n    source.eatWhile(idRE);\n    if (source.eat('.')) {\n      return \"qualifier\";\n    }\n    return \"type\";\n  }\n\n  if (smallRE.test(ch)) {\n    source.eatWhile(idRE);\n    return \"variable\";\n  }\n\n  if (digitRE.test(ch)) {\n    if (ch == '0') {\n      if (source.eat(/[xX]/)) {\n        source.eatWhile(hexitRE); // should require at least 1\n        return \"integer\";\n      }\n      if (source.eat(/[oO]/)) {\n        source.eatWhile(octitRE); // should require at least 1\n        return \"number\";\n      }\n    }\n    source.eatWhile(digitRE);\n    var t = \"number\";\n    if (source.match(/^\\.\\d+/)) {\n      t = \"number\";\n    }\n    if (source.eat(/[eE]/)) {\n      t = \"number\";\n      source.eat(/[-+]/);\n      source.eatWhile(digitRE); // should require at least 1\n    }\n    return t;\n  }\n\n  if (ch == \".\" && source.eat(\".\"))\n    return \"keyword\";\n\n  if (symbolRE.test(ch)) {\n    if (ch == '-' && source.eat(/-/)) {\n      source.eatWhile(/-/);\n      if (!source.eat(symbolRE)) {\n        source.skipToEnd();\n        return \"comment\";\n      }\n    }\n    source.eatWhile(symbolRE);\n    return \"variable\"\n  }\n\n  return \"error\";\n}\n\nfunction ncomment(type, nest) {\n  if (nest == 0) {\n    return normal;\n  }\n  return function(source, setState) {\n    var currNest = nest;\n    while (!source.eol()) {\n      var ch = source.next();\n      if (ch == '{' && source.eat('-')) {\n        ++currNest;\n      }\n      else if (ch == '-' && source.eat('}')) {\n        --currNest;\n        if (currNest == 0) {\n          setState(normal);\n          return type;\n        }\n      }\n    }\n    setState(ncomment(type, currNest));\n    return type;\n  };\n}\n\nfunction stringLiteral(source, setState) {\n  while (!source.eol()) {\n    var ch = source.next();\n    if (ch == '\"') {\n      setState(normal);\n      return \"string\";\n    }\n    if (ch == '\\\\') {\n      if (source.eol() || source.eat(whiteCharRE)) {\n        setState(stringGap);\n        return \"string\";\n      }\n      if (source.eat('&')) {\n      }\n      else {\n        source.next(); // should handle other escapes here\n      }\n    }\n  }\n  setState(normal);\n  return \"error\";\n}\n\nfunction stringGap(source, setState) {\n  if (source.eat('\\\\')) {\n    return switchState(source, setState, stringLiteral);\n  }\n  source.next();\n  setState(normal);\n  return \"error\";\n}\n\n\nvar wellKnownWords = (function() {\n  var wkw = {};\n  function setType(t) {\n    return function () {\n      for (var i = 0; i < arguments.length; i++)\n        wkw[arguments[i]] = t;\n    };\n  }\n\n  setType(\"keyword\")(\n    \"case\", \"class\", \"data\", \"default\", \"deriving\", \"do\", \"else\", \"foreign\",\n    \"if\", \"import\", \"in\", \"infix\", \"infixl\", \"infixr\", \"instance\", \"let\",\n    \"module\", \"newtype\", \"of\", \"then\", \"type\", \"where\", \"_\");\n\n  setType(\"keyword\")(\n    \"\\.\\.\", \":\", \"::\", \"=\", \"\\\\\", \"<-\", \"->\", \"@\", \"~\", \"=>\");\n\n  setType(\"builtin\")(\n    \"!!\", \"$!\", \"$\", \"&&\", \"+\", \"++\", \"-\", \".\", \"/\", \"/=\", \"<\", \"<*\", \"<=\",\n    \"<$>\", \"<*>\", \"=<<\", \"==\", \">\", \">=\", \">>\", \">>=\", \"^\", \"^^\", \"||\", \"*\",\n    \"*>\", \"**\");\n\n  setType(\"builtin\")(\n    \"Applicative\", \"Bool\", \"Bounded\", \"Char\", \"Double\", \"EQ\", \"Either\", \"Enum\",\n    \"Eq\", \"False\", \"FilePath\", \"Float\", \"Floating\", \"Fractional\", \"Functor\",\n    \"GT\", \"IO\", \"IOError\", \"Int\", \"Integer\", \"Integral\", \"Just\", \"LT\", \"Left\",\n    \"Maybe\", \"Monad\", \"Nothing\", \"Num\", \"Ord\", \"Ordering\", \"Rational\", \"Read\",\n    \"ReadS\", \"Real\", \"RealFloat\", \"RealFrac\", \"Right\", \"Show\", \"ShowS\",\n    \"String\", \"True\");\n\n  setType(\"builtin\")(\n    \"abs\", \"acos\", \"acosh\", \"all\", \"and\", \"any\", \"appendFile\", \"asTypeOf\",\n    \"asin\", \"asinh\", \"atan\", \"atan2\", \"atanh\", \"break\", \"catch\", \"ceiling\",\n    \"compare\", \"concat\", \"concatMap\", \"const\", \"cos\", \"cosh\", \"curry\",\n    \"cycle\", \"decodeFloat\", \"div\", \"divMod\", \"drop\", \"dropWhile\", \"either\",\n    \"elem\", \"encodeFloat\", \"enumFrom\", \"enumFromThen\", \"enumFromThenTo\",\n    \"enumFromTo\", \"error\", \"even\", \"exp\", \"exponent\", \"fail\", \"filter\",\n    \"flip\", \"floatDigits\", \"floatRadix\", \"floatRange\", \"floor\", \"fmap\",\n    \"foldl\", \"foldl1\", \"foldr\", \"foldr1\", \"fromEnum\", \"fromInteger\",\n    \"fromIntegral\", \"fromRational\", \"fst\", \"gcd\", \"getChar\", \"getContents\",\n    \"getLine\", \"head\", \"id\", \"init\", \"interact\", \"ioError\", \"isDenormalized\",\n    \"isIEEE\", \"isInfinite\", \"isNaN\", \"isNegativeZero\", \"iterate\", \"last\",\n    \"lcm\", \"length\", \"lex\", \"lines\", \"log\", \"logBase\", \"lookup\", \"map\",\n    \"mapM\", \"mapM_\", \"max\", \"maxBound\", \"maximum\", \"maybe\", \"min\", \"minBound\",\n    \"minimum\", \"mod\", \"negate\", \"not\", \"notElem\", \"null\", \"odd\", \"or\",\n    \"otherwise\", \"pi\", \"pred\", \"print\", \"product\", \"properFraction\", \"pure\",\n    \"putChar\", \"putStr\", \"putStrLn\", \"quot\", \"quotRem\", \"read\", \"readFile\",\n    \"readIO\", \"readList\", \"readLn\", \"readParen\", \"reads\", \"readsPrec\",\n    \"realToFrac\", \"recip\", \"rem\", \"repeat\", \"replicate\", \"return\", \"reverse\",\n    \"round\", \"scaleFloat\", \"scanl\", \"scanl1\", \"scanr\", \"scanr1\", \"seq\",\n    \"sequence\", \"sequence_\", \"show\", \"showChar\", \"showList\", \"showParen\",\n    \"showString\", \"shows\", \"showsPrec\", \"significand\", \"signum\", \"sin\",\n    \"sinh\", \"snd\", \"span\", \"splitAt\", \"sqrt\", \"subtract\", \"succ\", \"sum\",\n    \"tail\", \"take\", \"takeWhile\", \"tan\", \"tanh\", \"toEnum\", \"toInteger\",\n    \"toRational\", \"truncate\", \"uncurry\", \"undefined\", \"unlines\", \"until\",\n    \"unwords\", \"unzip\", \"unzip3\", \"userError\", \"words\", \"writeFile\", \"zip\",\n    \"zip3\", \"zipWith\", \"zipWith3\");\n\n  return wkw;\n})();\n\nexport const haskell = {\n  name: \"haskell\",\n  startState: function ()  { return { f: normal }; },\n  copyState:  function (s) { return { f: s.f }; },\n\n  token: function(stream, state) {\n    var t = state.f(stream, function(s) { state.f = s; });\n    var w = stream.current();\n    return wellKnownWords.hasOwnProperty(w) ? wellKnownWords[w] : t;\n  },\n\n  languageData: {\n    commentTokens: {line: \"--\", block: {open: \"{-\", close: \"-}\"}}\n  }\n};\n", "function wordRegexp(words, end, pre) {\n  if (typeof pre === \"undefined\") pre = \"\";\n  if (typeof end === \"undefined\") { end = \"\\\\b\"; }\n  return new RegExp(\"^\" + pre + \"((\" + words.join(\")|(\") + \"))\" + end);\n}\n\nvar octChar = \"\\\\\\\\[0-7]{1,3}\";\nvar hexChar = \"\\\\\\\\x[A-Fa-f0-9]{1,2}\";\nvar sChar = \"\\\\\\\\[abefnrtv0%?'\\\"\\\\\\\\]\";\nvar uChar = \"([^\\\\u0027\\\\u005C\\\\uD800-\\\\uDFFF]|[\\\\uD800-\\\\uDFFF][\\\\uDC00-\\\\uDFFF])\";\n\nvar asciiOperatorsList = [\n  \"[<>]:\", \"[<>=]=\", \"<<=?\", \">>>?=?\", \"=>\", \"--?>\", \"<--[->]?\", \"\\\\/\\\\/\",\n  \"\\\\.{2,3}\", \"[\\\\.\\\\\\\\%*+\\\\-<>!\\\\/^|&]=?\", \"\\\\?\", \"\\\\$\", \"~\", \":\"\n];\nvar operators = wordRegexp([\n  \"[<>]:\", \"[<>=]=\", \"[!=]==\", \"<<=?\", \">>>?=?\", \"=>?\", \"--?>\", \"<--[->]?\", \"\\\\/\\\\/\",\n  \"[\\\\\\\\%*+\\\\-<>!\\\\/^|&\\\\u00F7\\\\u22BB]=?\", \"\\\\?\", \"\\\\$\", \"~\", \":\",\n  \"\\\\u00D7\", \"\\\\u2208\", \"\\\\u2209\", \"\\\\u220B\", \"\\\\u220C\", \"\\\\u2218\",\n  \"\\\\u221A\", \"\\\\u221B\", \"\\\\u2229\", \"\\\\u222A\", \"\\\\u2260\", \"\\\\u2264\",\n  \"\\\\u2265\", \"\\\\u2286\", \"\\\\u2288\", \"\\\\u228A\", \"\\\\u22C5\",\n  \"\\\\b(in|isa)\\\\b(?!\\.?\\\\()\"\n], \"\");\nvar delimiters = /^[;,()[\\]{}]/;\nvar identifiers = /^[_A-Za-z\\u00A1-\\u2217\\u2219-\\uFFFF][\\w\\u00A1-\\u2217\\u2219-\\uFFFF]*!*/;\n\nvar chars = wordRegexp([octChar, hexChar, sChar, uChar], \"'\");\n\nvar openersList = [\"begin\", \"function\", \"type\", \"struct\", \"immutable\", \"let\",\n                   \"macro\", \"for\", \"while\", \"quote\", \"if\", \"else\", \"elseif\", \"try\",\n                   \"finally\", \"catch\", \"do\"];\n\nvar closersList = [\"end\", \"else\", \"elseif\", \"catch\", \"finally\"];\n\nvar keywordsList = [\"if\", \"else\", \"elseif\", \"while\", \"for\", \"begin\", \"let\",\n                    \"end\", \"do\", \"try\", \"catch\", \"finally\", \"return\", \"break\", \"continue\",\n                    \"global\", \"local\", \"const\", \"export\", \"import\", \"importall\", \"using\",\n                    \"function\", \"where\", \"macro\", \"module\", \"baremodule\", \"struct\", \"type\",\n                    \"mutable\", \"immutable\", \"quote\", \"typealias\", \"abstract\", \"primitive\",\n                    \"bitstype\"];\n\nvar builtinsList = [\"true\", \"false\", \"nothing\", \"NaN\", \"Inf\"];\n\nvar openers = wordRegexp(openersList);\nvar closers = wordRegexp(closersList);\nvar keywords = wordRegexp(keywordsList);\nvar builtins = wordRegexp(builtinsList);\n\nvar macro = /^@[_A-Za-z\\u00A1-\\uFFFF][\\w\\u00A1-\\uFFFF]*!*/;\nvar symbol = /^:[_A-Za-z\\u00A1-\\uFFFF][\\w\\u00A1-\\uFFFF]*!*/;\nvar stringPrefixes = /^(`|([_A-Za-z\\u00A1-\\uFFFF]*\"(\"\")?))/;\n\nvar macroOperators = wordRegexp(asciiOperatorsList, \"\", \"@\");\nvar symbolOperators = wordRegexp(asciiOperatorsList, \"\", \":\");\n\nfunction inArray(state) {\n  return (state.nestedArrays > 0);\n}\n\nfunction inGenerator(state) {\n  return (state.nestedGenerators > 0);\n}\n\nfunction currentScope(state, n) {\n  if (typeof(n) === \"undefined\") { n = 0; }\n  if (state.scopes.length <= n) {\n    return null;\n  }\n  return state.scopes[state.scopes.length - (n + 1)];\n}\n\n// tokenizers\nfunction tokenBase(stream, state) {\n  // Handle multiline comments\n  if (stream.match('#=', false)) {\n    state.tokenize = tokenComment;\n    return state.tokenize(stream, state);\n  }\n\n  // Handle scope changes\n  var leavingExpr = state.leavingExpr;\n  if (stream.sol()) {\n    leavingExpr = false;\n  }\n  state.leavingExpr = false;\n\n  if (leavingExpr) {\n    if (stream.match(/^'+/)) {\n      return \"operator\";\n    }\n  }\n\n  if (stream.match(/\\.{4,}/)) {\n    return \"error\";\n  } else if (stream.match(/\\.{1,3}/)) {\n    return \"operator\";\n  }\n\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  var ch = stream.peek();\n\n  // Handle single line comments\n  if (ch === '#') {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n\n  if (ch === '[') {\n    state.scopes.push('[');\n    state.nestedArrays++;\n  }\n\n  if (ch === '(') {\n    state.scopes.push('(');\n    state.nestedGenerators++;\n  }\n\n  if (inArray(state) && ch === ']') {\n    while (state.scopes.length && currentScope(state) !== \"[\") { state.scopes.pop(); }\n    state.scopes.pop();\n    state.nestedArrays--;\n    state.leavingExpr = true;\n  }\n\n  if (inGenerator(state) && ch === ')') {\n    while (state.scopes.length && currentScope(state) !== \"(\") { state.scopes.pop(); }\n    state.scopes.pop();\n    state.nestedGenerators--;\n    state.leavingExpr = true;\n  }\n\n  if (inArray(state)) {\n    if (state.lastToken == \"end\" && stream.match(':')) {\n      return \"operator\";\n    }\n    if (stream.match('end')) {\n      return \"number\";\n    }\n  }\n\n  var match;\n  if (match = stream.match(openers, false)) {\n    state.scopes.push(match[0]);\n  }\n\n  if (stream.match(closers, false)) {\n    state.scopes.pop();\n  }\n\n  // Handle type annotations\n  if (stream.match(/^::(?![:\\$])/)) {\n    state.tokenize = tokenAnnotation;\n    return state.tokenize(stream, state);\n  }\n\n  // Handle symbols\n  if (!leavingExpr && (stream.match(symbol) || stream.match(symbolOperators))) {\n    return \"builtin\";\n  }\n\n  // Handle parametric types\n  //if (stream.match(/^{[^}]*}(?=\\()/)) {\n  //  return \"builtin\";\n  //}\n\n  // Handle operators and Delimiters\n  if (stream.match(operators)) {\n    return \"operator\";\n  }\n\n  // Handle Number Literals\n  if (stream.match(/^\\.?\\d/, false)) {\n    var imMatcher = RegExp(/^im\\b/);\n    var numberLiteral = false;\n    if (stream.match(/^0x\\.[0-9a-f_]+p[\\+\\-]?[_\\d]+/i)) { numberLiteral = true; }\n    // Integers\n    if (stream.match(/^0x[0-9a-f_]+/i)) { numberLiteral = true; } // Hex\n    if (stream.match(/^0b[01_]+/i)) { numberLiteral = true; } // Binary\n    if (stream.match(/^0o[0-7_]+/i)) { numberLiteral = true; } // Octal\n    // Floats\n    if (stream.match(/^(?:(?:\\d[_\\d]*)?\\.(?!\\.)(?:\\d[_\\d]*)?|\\d[_\\d]*\\.(?!\\.)(?:\\d[_\\d]*))?([Eef][\\+\\-]?[_\\d]+)?/i)) { numberLiteral = true; }\n    if (stream.match(/^\\d[_\\d]*(e[\\+\\-]?\\d+)?/i)) { numberLiteral = true; } // Decimal\n    if (numberLiteral) {\n      // Integer literals may be \"long\"\n      stream.match(imMatcher);\n      state.leavingExpr = true;\n      return \"number\";\n    }\n  }\n\n  // Handle Chars\n  if (stream.match(\"'\")) {\n    state.tokenize = tokenChar;\n    return state.tokenize(stream, state);\n  }\n\n  // Handle Strings\n  if (stream.match(stringPrefixes)) {\n    state.tokenize = tokenStringFactory(stream.current());\n    return state.tokenize(stream, state);\n  }\n\n  if (stream.match(macro) || stream.match(macroOperators)) {\n    return \"meta\";\n  }\n\n  if (stream.match(delimiters)) {\n    return null;\n  }\n\n  if (stream.match(keywords)) {\n    return \"keyword\";\n  }\n\n  if (stream.match(builtins)) {\n    return \"builtin\";\n  }\n\n  var isDefinition = state.isDefinition || state.lastToken == \"function\" ||\n      state.lastToken == \"macro\" || state.lastToken == \"type\" ||\n      state.lastToken == \"struct\" || state.lastToken == \"immutable\";\n\n  if (stream.match(identifiers)) {\n    if (isDefinition) {\n      if (stream.peek() === '.') {\n        state.isDefinition = true;\n        return \"variable\";\n      }\n      state.isDefinition = false;\n      return \"def\";\n    }\n    state.leavingExpr = true;\n    return \"variable\";\n  }\n\n  // Handle non-detected items\n  stream.next();\n  return \"error\";\n}\n\nfunction tokenAnnotation(stream, state) {\n  stream.match(/.*?(?=[,;{}()=\\s]|$)/);\n  if (stream.match('{')) {\n    state.nestedParameters++;\n  } else if (stream.match('}') && state.nestedParameters > 0) {\n    state.nestedParameters--;\n  }\n  if (state.nestedParameters > 0) {\n    stream.match(/.*?(?={|})/) || stream.next();\n  } else if (state.nestedParameters == 0) {\n    state.tokenize = tokenBase;\n  }\n  return \"builtin\";\n}\n\nfunction tokenComment(stream, state) {\n  if (stream.match('#=')) {\n    state.nestedComments++;\n  }\n  if (!stream.match(/.*?(?=(#=|=#))/)) {\n    stream.skipToEnd();\n  }\n  if (stream.match('=#')) {\n    state.nestedComments--;\n    if (state.nestedComments == 0)\n      state.tokenize = tokenBase;\n  }\n  return \"comment\";\n}\n\nfunction tokenChar(stream, state) {\n  var isChar = false, match;\n  if (stream.match(chars)) {\n    isChar = true;\n  } else if (match = stream.match(/\\\\u([a-f0-9]{1,4})(?=')/i)) {\n    var value = parseInt(match[1], 16);\n    if (value <= 55295 || value >= 57344) { // (U+0,U+D7FF), (U+E000,U+FFFF)\n      isChar = true;\n      stream.next();\n    }\n  } else if (match = stream.match(/\\\\U([A-Fa-f0-9]{5,8})(?=')/)) {\n    var value = parseInt(match[1], 16);\n    if (value <= 1114111) { // U+10FFFF\n      isChar = true;\n      stream.next();\n    }\n  }\n  if (isChar) {\n    state.leavingExpr = true;\n    state.tokenize = tokenBase;\n    return \"string\";\n  }\n  if (!stream.match(/^[^']+(?=')/)) { stream.skipToEnd(); }\n  if (stream.match(\"'\")) { state.tokenize = tokenBase; }\n  return \"error\";\n}\n\nfunction tokenStringFactory(delimiter) {\n  if (delimiter.substr(-3) === '\"\"\"') {\n    delimiter = '\"\"\"';\n  } else if (delimiter.substr(-1) === '\"') {\n    delimiter = '\"';\n  }\n  function tokenString(stream, state) {\n    if (stream.eat('\\\\')) {\n      stream.next();\n    } else if (stream.match(delimiter)) {\n      state.tokenize = tokenBase;\n      state.leavingExpr = true;\n      return \"string\";\n    } else {\n      stream.eat(/[`\"]/);\n    }\n    stream.eatWhile(/[^\\\\`\"]/);\n    return \"string\";\n  }\n  return tokenString;\n}\n\nexport const julia = {\n  name: \"julia\",\n  startState: function() {\n    return {\n      tokenize: tokenBase,\n      scopes: [],\n      lastToken: null,\n      leavingExpr: false,\n      isDefinition: false,\n      nestedArrays: 0,\n      nestedComments: 0,\n      nestedGenerators: 0,\n      nestedParameters: 0,\n      firstParenPos: -1\n    };\n  },\n\n  token: function(stream, state) {\n    var style = state.tokenize(stream, state);\n    var current = stream.current();\n\n    if (current && style) {\n      state.lastToken = current;\n    }\n\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    var delta = 0;\n    if ( textAfter === ']' || textAfter === ')' || /^end\\b/.test(textAfter) ||\n         /^else/.test(textAfter) || /^catch\\b/.test(textAfter) || /^elseif\\b/.test(textAfter) ||\n         /^finally/.test(textAfter) ) {\n      delta = -1;\n    }\n    return (state.scopes.length + delta) * cx.unit;\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*(end|else|catch|finally)\\b$/,\n    commentTokens: {line: \"#\", block: {open: \"#=\", close: \"=#\"}},\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", '\"']},\n    autocomplete: keywordsList.concat(builtinsList)\n  }\n};\n", "function prefixRE(words) {\n  return new RegExp(\"^(?:\" + words.join(\"|\") + \")\", \"i\");\n}\nfunction wordRE(words) {\n  return new RegExp(\"^(?:\" + words.join(\"|\") + \")$\", \"i\");\n}\n\n// long list of standard functions from lua manual\nvar builtins = wordRE([\n  \"_G\",\"_VERSION\",\"assert\",\"collectgarbage\",\"dofile\",\"error\",\"getfenv\",\"getmetatable\",\"ipairs\",\"load\",\n  \"loadfile\",\"loadstring\",\"module\",\"next\",\"pairs\",\"pcall\",\"print\",\"rawequal\",\"rawget\",\"rawset\",\"require\",\n  \"select\",\"setfenv\",\"setmetatable\",\"tonumber\",\"tostring\",\"type\",\"unpack\",\"xpcall\",\n\n  \"coroutine.create\",\"coroutine.resume\",\"coroutine.running\",\"coroutine.status\",\"coroutine.wrap\",\"coroutine.yield\",\n\n  \"debug.debug\",\"debug.getfenv\",\"debug.gethook\",\"debug.getinfo\",\"debug.getlocal\",\"debug.getmetatable\",\n  \"debug.getregistry\",\"debug.getupvalue\",\"debug.setfenv\",\"debug.sethook\",\"debug.setlocal\",\"debug.setmetatable\",\n  \"debug.setupvalue\",\"debug.traceback\",\n\n  \"close\",\"flush\",\"lines\",\"read\",\"seek\",\"setvbuf\",\"write\",\n\n  \"io.close\",\"io.flush\",\"io.input\",\"io.lines\",\"io.open\",\"io.output\",\"io.popen\",\"io.read\",\"io.stderr\",\"io.stdin\",\n  \"io.stdout\",\"io.tmpfile\",\"io.type\",\"io.write\",\n\n  \"math.abs\",\"math.acos\",\"math.asin\",\"math.atan\",\"math.atan2\",\"math.ceil\",\"math.cos\",\"math.cosh\",\"math.deg\",\n  \"math.exp\",\"math.floor\",\"math.fmod\",\"math.frexp\",\"math.huge\",\"math.ldexp\",\"math.log\",\"math.log10\",\"math.max\",\n  \"math.min\",\"math.modf\",\"math.pi\",\"math.pow\",\"math.rad\",\"math.random\",\"math.randomseed\",\"math.sin\",\"math.sinh\",\n  \"math.sqrt\",\"math.tan\",\"math.tanh\",\n\n  \"os.clock\",\"os.date\",\"os.difftime\",\"os.execute\",\"os.exit\",\"os.getenv\",\"os.remove\",\"os.rename\",\"os.setlocale\",\n  \"os.time\",\"os.tmpname\",\n\n  \"package.cpath\",\"package.loaded\",\"package.loaders\",\"package.loadlib\",\"package.path\",\"package.preload\",\n  \"package.seeall\",\n\n  \"string.byte\",\"string.char\",\"string.dump\",\"string.find\",\"string.format\",\"string.gmatch\",\"string.gsub\",\n  \"string.len\",\"string.lower\",\"string.match\",\"string.rep\",\"string.reverse\",\"string.sub\",\"string.upper\",\n\n  \"table.concat\",\"table.insert\",\"table.maxn\",\"table.remove\",\"table.sort\"\n]);\nvar keywords = wordRE([\"and\",\"break\",\"elseif\",\"false\",\"nil\",\"not\",\"or\",\"return\",\n                       \"true\",\"function\", \"end\", \"if\", \"then\", \"else\", \"do\",\n                       \"while\", \"repeat\", \"until\", \"for\", \"in\", \"local\" ]);\n\nvar indentTokens = wordRE([\"function\", \"if\",\"repeat\",\"do\", \"\\\\(\", \"{\"]);\nvar dedentTokens = wordRE([\"end\", \"until\", \"\\\\)\", \"}\"]);\nvar dedentPartial = prefixRE([\"end\", \"until\", \"\\\\)\", \"}\", \"else\", \"elseif\"]);\n\nfunction readBracket(stream) {\n  var level = 0;\n  while (stream.eat(\"=\")) ++level;\n  stream.eat(\"[\");\n  return level;\n}\n\nfunction normal(stream, state) {\n  var ch = stream.next();\n  if (ch == \"-\" && stream.eat(\"-\")) {\n    if (stream.eat(\"[\") && stream.eat(\"[\"))\n      return (state.cur = bracketed(readBracket(stream), \"comment\"))(stream, state);\n    stream.skipToEnd();\n    return \"comment\";\n  }\n  if (ch == \"\\\"\" || ch == \"'\")\n    return (state.cur = string(ch))(stream, state);\n  if (ch == \"[\" && /[\\[=]/.test(stream.peek()))\n    return (state.cur = bracketed(readBracket(stream), \"string\"))(stream, state);\n  if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w.%]/);\n    return \"number\";\n  }\n  if (/[\\w_]/.test(ch)) {\n    stream.eatWhile(/[\\w\\\\\\-_.]/);\n    return \"variable\";\n  }\n  return null;\n}\n\nfunction bracketed(level, style) {\n  return function(stream, state) {\n    var curlev = null, ch;\n    while ((ch = stream.next()) != null) {\n      if (curlev == null) {if (ch == \"]\") curlev = 0;}\n      else if (ch == \"=\") ++curlev;\n      else if (ch == \"]\" && curlev == level) { state.cur = normal; break; }\n      else curlev = null;\n    }\n    return style;\n  };\n}\n\nfunction string(quote) {\n  return function(stream, state) {\n    var escaped = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (ch == quote && !escaped) break;\n      escaped = !escaped && ch == \"\\\\\";\n    }\n    if (!escaped) state.cur = normal;\n    return \"string\";\n  };\n}\n\nexport const lua = {\n  name: \"lua\",\n\n  startState: function() {\n    return {basecol: 0, indentDepth: 0, cur: normal};\n  },\n\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    var style = state.cur(stream, state);\n    var word = stream.current();\n    if (style == \"variable\") {\n      if (keywords.test(word)) style = \"keyword\";\n      else if (builtins.test(word)) style = \"builtin\";\n    }\n    if ((style != \"comment\") && (style != \"string\")){\n      if (indentTokens.test(word)) ++state.indentDepth;\n      else if (dedentTokens.test(word)) --state.indentDepth;\n    }\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    var closing = dedentPartial.test(textAfter);\n    return state.basecol + cx.unit * (state.indentDepth - (closing ? 1 : 0));\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*(?:end|until|else|\\)|\\})$/,\n    commentTokens: {line: \"--\", block: {open: \"--[[\", close: \"]]--\"}}\n  }\n};\n", "function words(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\n\nvar keywords = words(\n  /* ngxDirectiveControl */ \"break return rewrite set\" +\n    /* ngxDirective */ \" accept_mutex accept_mutex_delay access_log add_after_body add_before_body add_header addition_types aio alias allow ancient_browser ancient_browser_value auth_basic auth_basic_user_file auth_http auth_http_header auth_http_timeout autoindex autoindex_exact_size autoindex_localtime charset charset_types client_body_buffer_size client_body_in_file_only client_body_in_single_buffer client_body_temp_path client_body_timeout client_header_buffer_size client_header_timeout client_max_body_size connection_pool_size create_full_put_path daemon dav_access dav_methods debug_connection debug_points default_type degradation degrade deny devpoll_changes devpoll_events directio directio_alignment empty_gif env epoll_events error_log eventport_events expires fastcgi_bind fastcgi_buffer_size fastcgi_buffers fastcgi_busy_buffers_size fastcgi_cache fastcgi_cache_key fastcgi_cache_methods fastcgi_cache_min_uses fastcgi_cache_path fastcgi_cache_use_stale fastcgi_cache_valid fastcgi_catch_stderr fastcgi_connect_timeout fastcgi_hide_header fastcgi_ignore_client_abort fastcgi_ignore_headers fastcgi_index fastcgi_intercept_errors fastcgi_max_temp_file_size fastcgi_next_upstream fastcgi_param fastcgi_pass_header fastcgi_pass_request_body fastcgi_pass_request_headers fastcgi_read_timeout fastcgi_send_lowat fastcgi_send_timeout fastcgi_split_path_info fastcgi_store fastcgi_store_access fastcgi_temp_file_write_size fastcgi_temp_path fastcgi_upstream_fail_timeout fastcgi_upstream_max_fails flv geoip_city geoip_country google_perftools_profiles gzip gzip_buffers gzip_comp_level gzip_disable gzip_hash gzip_http_version gzip_min_length gzip_no_buffer gzip_proxied gzip_static gzip_types gzip_vary gzip_window if_modified_since ignore_invalid_headers image_filter image_filter_buffer image_filter_jpeg_quality image_filter_transparency imap_auth imap_capabilities imap_client_buffer index ip_hash keepalive_requests keepalive_timeout kqueue_changes kqueue_events large_client_header_buffers limit_conn limit_conn_log_level limit_rate limit_rate_after limit_req limit_req_log_level limit_req_zone limit_zone lingering_time lingering_timeout lock_file log_format log_not_found log_subrequest map_hash_bucket_size map_hash_max_size master_process memcached_bind memcached_buffer_size memcached_connect_timeout memcached_next_upstream memcached_read_timeout memcached_send_timeout memcached_upstream_fail_timeout memcached_upstream_max_fails merge_slashes min_delete_depth modern_browser modern_browser_value msie_padding msie_refresh multi_accept open_file_cache open_file_cache_errors open_file_cache_events open_file_cache_min_uses open_file_cache_valid open_log_file_cache output_buffers override_charset perl perl_modules perl_require perl_set pid pop3_auth pop3_capabilities port_in_redirect postpone_gzipping postpone_output protocol proxy proxy_bind proxy_buffer proxy_buffer_size proxy_buffering proxy_buffers proxy_busy_buffers_size proxy_cache proxy_cache_key proxy_cache_methods proxy_cache_min_uses proxy_cache_path proxy_cache_use_stale proxy_cache_valid proxy_connect_timeout proxy_headers_hash_bucket_size proxy_headers_hash_max_size proxy_hide_header proxy_ignore_client_abort proxy_ignore_headers proxy_intercept_errors proxy_max_temp_file_size proxy_method proxy_next_upstream proxy_pass_error_message proxy_pass_header proxy_pass_request_body proxy_pass_request_headers proxy_read_timeout proxy_redirect proxy_send_lowat proxy_send_timeout proxy_set_body proxy_set_header proxy_ssl_session_reuse proxy_store proxy_store_access proxy_temp_file_write_size proxy_temp_path proxy_timeout proxy_upstream_fail_timeout proxy_upstream_max_fails random_index read_ahead real_ip_header recursive_error_pages request_pool_size reset_timedout_connection resolver resolver_timeout rewrite_log rtsig_overflow_events rtsig_overflow_test rtsig_overflow_threshold rtsig_signo satisfy secure_link_secret send_lowat send_timeout sendfile sendfile_max_chunk server_name_in_redirect server_names_hash_bucket_size server_names_hash_max_size server_tokens set_real_ip_from smtp_auth smtp_capabilities smtp_client_buffer smtp_greeting_delay so_keepalive source_charset ssi ssi_ignore_recycled_buffers ssi_min_file_chunk ssi_silent_errors ssi_types ssi_value_length ssl ssl_certificate ssl_certificate_key ssl_ciphers ssl_client_certificate ssl_crl ssl_dhparam ssl_engine ssl_prefer_server_ciphers ssl_protocols ssl_session_cache ssl_session_timeout ssl_verify_client ssl_verify_depth starttls stub_status sub_filter sub_filter_once sub_filter_types tcp_nodelay tcp_nopush thread_stack_size timeout timer_resolution types_hash_bucket_size types_hash_max_size underscores_in_headers uninitialized_variable_warn use user userid userid_domain userid_expires userid_mark userid_name userid_p3p userid_path userid_service valid_referers variables_hash_bucket_size variables_hash_max_size worker_connections worker_cpu_affinity worker_priority worker_processes worker_rlimit_core worker_rlimit_nofile worker_rlimit_sigpending worker_threads working_directory xclient xml_entities xslt_stylesheet xslt_typesdrew@li229-23\"\n);\n\nvar keywords_block = words(\n  /* ngxDirectiveBlock */ \"http mail events server types location upstream charset_map limit_except if geo map\"\n);\n\nvar keywords_important = words(\n  /* ngxDirectiveImportant */ \"include root server server_name listen internal proxy_pass memcached_pass fastcgi_pass try_files\"\n);\n\nvar type;\nfunction ret(style, tp) {type = tp; return style;}\n\nfunction tokenBase(stream, state) {\n\n\n  stream.eatWhile(/[\\w\\$_]/);\n\n  var cur = stream.current();\n\n\n  if (keywords.propertyIsEnumerable(cur)) {\n    return \"keyword\";\n  }\n  else if (keywords_block.propertyIsEnumerable(cur)) {\n    return \"controlKeyword\";\n  }\n  else if (keywords_important.propertyIsEnumerable(cur)) {\n    return \"controlKeyword\";\n  }\n  /**/\n\n  var ch = stream.next();\n  if (ch == \"@\") {stream.eatWhile(/[\\w\\\\\\-]/); return ret(\"meta\", stream.current());}\n  else if (ch == \"/\" && stream.eat(\"*\")) {\n    state.tokenize = tokenCComment;\n    return tokenCComment(stream, state);\n  }\n  else if (ch == \"<\" && stream.eat(\"!\")) {\n    state.tokenize = tokenSGMLComment;\n    return tokenSGMLComment(stream, state);\n  }\n  else if (ch == \"=\") ret(null, \"compare\");\n  else if ((ch == \"~\" || ch == \"|\") && stream.eat(\"=\")) return ret(null, \"compare\");\n  else if (ch == \"\\\"\" || ch == \"'\") {\n    state.tokenize = tokenString(ch);\n    return state.tokenize(stream, state);\n  }\n  else if (ch == \"#\") {\n    stream.skipToEnd();\n    return ret(\"comment\", \"comment\");\n  }\n  else if (ch == \"!\") {\n    stream.match(/^\\s*\\w*/);\n    return ret(\"keyword\", \"important\");\n  }\n  else if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w.%]/);\n    return ret(\"number\", \"unit\");\n  }\n  else if (/[,.+>*\\/]/.test(ch)) {\n    return ret(null, \"select-op\");\n  }\n  else if (/[;{}:\\[\\]]/.test(ch)) {\n    return ret(null, ch);\n  }\n  else {\n    stream.eatWhile(/[\\w\\\\\\-]/);\n    return ret(\"variable\", \"variable\");\n  }\n}\n\nfunction tokenCComment(stream, state) {\n  var maybeEnd = false, ch;\n  while ((ch = stream.next()) != null) {\n    if (maybeEnd && ch == \"/\") {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return ret(\"comment\", \"comment\");\n}\n\nfunction tokenSGMLComment(stream, state) {\n  var dashes = 0, ch;\n  while ((ch = stream.next()) != null) {\n    if (dashes >= 2 && ch == \">\") {\n      state.tokenize = tokenBase;\n      break;\n    }\n    dashes = (ch == \"-\") ? dashes + 1 : 0;\n  }\n  return ret(\"comment\", \"comment\");\n}\n\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (ch == quote && !escaped)\n        break;\n      escaped = !escaped && ch == \"\\\\\";\n    }\n    if (!escaped) state.tokenize = tokenBase;\n    return ret(\"string\", \"string\");\n  };\n}\n\nexport const nginx = {\n  name: \"nginx\",\n  startState: function() {\n    return {tokenize: tokenBase,\n            baseIndent: 0,\n            stack: []};\n  },\n\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    type = null;\n    var style = state.tokenize(stream, state);\n\n    var context = state.stack[state.stack.length-1];\n    if (type == \"hash\" && context == \"rule\") style = \"atom\";\n    else if (style == \"variable\") {\n      if (context == \"rule\") style = \"number\";\n      else if (!context || context == \"@media{\") style = \"tag\";\n    }\n\n    if (context == \"rule\" && /^[\\{\\};]$/.test(type))\n      state.stack.pop();\n    if (type == \"{\") {\n      if (context == \"@media\") state.stack[state.stack.length-1] = \"@media{\";\n      else state.stack.push(\"{\");\n    }\n    else if (type == \"}\") state.stack.pop();\n    else if (type == \"@media\") state.stack.push(\"@media\");\n    else if (context == \"{\" && type != \"comment\") state.stack.push(\"rule\");\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    var n = state.stack.length;\n    if (/^\\}/.test(textAfter))\n      n -= state.stack[state.stack.length-1] == \"rule\" ? 2 : 1;\n    return state.baseIndent + n * cx.unit;\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*\\}$/\n  }\n};\n", "function wordRegexp(words) {\n  return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n}\n\nvar singleOperators = new RegExp(\"^[\\\\+\\\\-\\\\*/&|\\\\^~<>!@'\\\\\\\\]\");\nvar singleDelimiters = new RegExp('^[\\\\(\\\\[\\\\{\\\\},:=;\\\\.]');\nvar doubleOperators = new RegExp(\"^((==)|(~=)|(<=)|(>=)|(<<)|(>>)|(\\\\.[\\\\+\\\\-\\\\*/\\\\^\\\\\\\\]))\");\nvar doubleDelimiters = new RegExp(\"^((!=)|(\\\\+=)|(\\\\-=)|(\\\\*=)|(/=)|(&=)|(\\\\|=)|(\\\\^=))\");\nvar tripleDelimiters = new RegExp(\"^((>>=)|(<<=))\");\nvar expressionEnd = new RegExp(\"^[\\\\]\\\\)]\");\nvar identifiers = new RegExp(\"^[_A-Za-z\\xa1-\\uffff][_A-Za-z0-9\\xa1-\\uffff]*\");\n\nvar builtins = wordRegexp([\n  'error', 'eval', 'function', 'abs', 'acos', 'atan', 'asin', 'cos',\n  'cosh', 'exp', 'log', 'prod', 'sum', 'log10', 'max', 'min', 'sign', 'sin', 'sinh',\n  'sqrt', 'tan', 'reshape', 'break', 'zeros', 'default', 'margin', 'round', 'ones',\n  'rand', 'syn', 'ceil', 'floor', 'size', 'clear', 'zeros', 'eye', 'mean', 'std', 'cov',\n  'det', 'eig', 'inv', 'norm', 'rank', 'trace', 'expm', 'logm', 'sqrtm', 'linspace', 'plot',\n  'title', 'xlabel', 'ylabel', 'legend', 'text', 'grid', 'meshgrid', 'mesh', 'num2str',\n  'fft', 'ifft', 'arrayfun', 'cellfun', 'input', 'fliplr', 'flipud', 'ismember'\n]);\n\nvar keywords = wordRegexp([\n  'return', 'case', 'switch', 'else', 'elseif', 'end', 'endif', 'endfunction',\n  'if', 'otherwise', 'do', 'for', 'while', 'try', 'catch', 'classdef', 'properties', 'events',\n  'methods', 'global', 'persistent', 'endfor', 'endwhile', 'printf', 'sprintf', 'disp', 'until',\n  'continue', 'pkg'\n]);\n\n\n// tokenizers\nfunction tokenTranspose(stream, state) {\n  if (!stream.sol() && stream.peek() === '\\'') {\n    stream.next();\n    state.tokenize = tokenBase;\n    return 'operator';\n  }\n  state.tokenize = tokenBase;\n  return tokenBase(stream, state);\n}\n\n\nfunction tokenComment(stream, state) {\n  if (stream.match(/^.*%}/)) {\n    state.tokenize = tokenBase;\n    return 'comment';\n  };\n  stream.skipToEnd();\n  return 'comment';\n}\n\nfunction tokenBase(stream, state) {\n  // whitespaces\n  if (stream.eatSpace()) return null;\n\n  // Handle one line Comments\n  if (stream.match('%{')){\n    state.tokenize = tokenComment;\n    stream.skipToEnd();\n    return 'comment';\n  }\n\n  if (stream.match(/^[%#]/)){\n    stream.skipToEnd();\n    return 'comment';\n  }\n\n  // Handle Number Literals\n  if (stream.match(/^[0-9\\.+-]/, false)) {\n    if (stream.match(/^[+-]?0x[0-9a-fA-F]+[ij]?/)) {\n      stream.tokenize = tokenBase;\n      return 'number'; };\n    if (stream.match(/^[+-]?\\d*\\.\\d+([EeDd][+-]?\\d+)?[ij]?/)) { return 'number'; };\n    if (stream.match(/^[+-]?\\d+([EeDd][+-]?\\d+)?[ij]?/)) { return 'number'; };\n  }\n  if (stream.match(wordRegexp(['nan','NaN','inf','Inf']))) { return 'number'; };\n\n  // Handle Strings\n  var m = stream.match(/^\"(?:[^\"]|\"\")*(\"|$)/) || stream.match(/^'(?:[^']|'')*('|$)/)\n  if (m) { return m[1] ? 'string' : \"error\"; }\n\n  // Handle words\n  if (stream.match(keywords)) { return 'keyword'; } ;\n  if (stream.match(builtins)) { return 'builtin'; } ;\n  if (stream.match(identifiers)) { return 'variable'; } ;\n\n  if (stream.match(singleOperators) || stream.match(doubleOperators)) { return 'operator'; };\n  if (stream.match(singleDelimiters) || stream.match(doubleDelimiters) || stream.match(tripleDelimiters)) { return null; };\n\n  if (stream.match(expressionEnd)) {\n    state.tokenize = tokenTranspose;\n    return null;\n  };\n\n\n  // Handle non-detected items\n  stream.next();\n  return 'error';\n};\n\n\nexport const octave = {\n  name: \"octave\",\n\n  startState: function() {\n    return {\n      tokenize: tokenBase\n    };\n  },\n\n  token: function(stream, state) {\n    var style = state.tokenize(stream, state);\n    if (style === 'number' || style === 'variable'){\n      state.tokenize = tokenTranspose;\n    }\n    return style;\n  },\n\n  languageData: {\n    commentTokens: {line: \"%\"}\n  }\n};\n\n", "\n// it's like \"peek\", but need for look-ahead or look-behind if index < 0\nfunction look(stream, c){\n  return stream.string.charAt(stream.pos+(c||0));\n}\n\n// return a part of prefix of current stream from current position\nfunction prefix(stream, c){\n  if(c){\n    var x=stream.pos-c;\n    return stream.string.substr((x>=0?x:0),c);}\n  else{\n    return stream.string.substr(0,stream.pos-1);\n  }\n}\n\n// return a part of suffix of current stream from current position\nfunction suffix(stream, c){\n  var y=stream.string.length;\n  var x=y-stream.pos+1;\n  return stream.string.substr(stream.pos,(c&&c<y?c:x));\n}\n\n// eating and vomiting a part of stream from current position\nfunction eatSuffix(stream, c){\n  var x=stream.pos+c;\n  var y;\n  if(x<=0)\n    stream.pos=0;\n  else if(x>=(y=stream.string.length-1))\n    stream.pos=y;\n  else\n    stream.pos=x;\n}\n\n// http://perldoc.perl.org\nvar PERL={                                      //   null - magic touch\n  //   1 - keyword\n  //   2 - def\n  //   3 - atom\n  //   4 - operator\n  //   5 - builtin (predefined)\n  //   [x,y] - x=1,2,3; y=must be defined if x{...}\n  //      PERL operators\n  '->':   4,\n  '++':   4,\n  '--':   4,\n  '**':   4,\n  //   ! ~ \\ and unary + and -\n  '=~':   4,\n  '!~':   4,\n  '*':   4,\n  '/':   4,\n  '%':   4,\n  'x':   4,\n  '+':   4,\n  '-':   4,\n  '.':   4,\n  '<<':   4,\n  '>>':   4,\n  //   named unary operators\n  '<':   4,\n  '>':   4,\n  '<=':   4,\n  '>=':   4,\n  'lt':   4,\n  'gt':   4,\n  'le':   4,\n  'ge':   4,\n  '==':   4,\n  '!=':   4,\n  '<=>':   4,\n  'eq':   4,\n  'ne':   4,\n  'cmp':   4,\n  '~~':   4,\n  '&':   4,\n  '|':   4,\n  '^':   4,\n  '&&':   4,\n  '||':   4,\n  '//':   4,\n  '..':   4,\n  '...':   4,\n  '?':   4,\n  ':':   4,\n  '=':   4,\n  '+=':   4,\n  '-=':   4,\n  '*=':   4,  //   etc. ???\n  ',':   4,\n  '=>':   4,\n  '::':   4,\n  //   list operators (rightward)\n  'not':   4,\n  'and':   4,\n  'or':   4,\n  'xor':   4,\n  //      PERL predefined variables (I know, what this is a paranoid idea, but may be needed for people, who learn PERL, and for me as well, ...and may be for you?;)\n  'BEGIN':   [5,1],\n  'END':   [5,1],\n  'PRINT':   [5,1],\n  'PRINTF':   [5,1],\n  'GETC':   [5,1],\n  'READ':   [5,1],\n  'READLINE':   [5,1],\n  'DESTROY':   [5,1],\n  'TIE':   [5,1],\n  'TIEHANDLE':   [5,1],\n  'UNTIE':   [5,1],\n  'STDIN':    5,\n  'STDIN_TOP':    5,\n  'STDOUT':    5,\n  'STDOUT_TOP':    5,\n  'STDERR':    5,\n  'STDERR_TOP':    5,\n  '$ARG':    5,\n  '$_':    5,\n  '@ARG':    5,\n  '@_':    5,\n  '$LIST_SEPARATOR':    5,\n  '$\"':    5,\n  '$PROCESS_ID':    5,\n  '$PID':    5,\n  '$$':    5,\n  '$REAL_GROUP_ID':    5,\n  '$GID':    5,\n  '$(':    5,\n  '$EFFECTIVE_GROUP_ID':    5,\n  '$EGID':    5,\n  '$)':    5,\n  '$PROGRAM_NAME':    5,\n  '$0':    5,\n  '$SUBSCRIPT_SEPARATOR':    5,\n  '$SUBSEP':    5,\n  '$;':    5,\n  '$REAL_USER_ID':    5,\n  '$UID':    5,\n  '$<':    5,\n  '$EFFECTIVE_USER_ID':    5,\n  '$EUID':    5,\n  '$>':    5,\n  '$a':    5,\n  '$b':    5,\n  '$COMPILING':    5,\n  '$^C':    5,\n  '$DEBUGGING':    5,\n  '$^D':    5,\n  '${^ENCODING}':    5,\n  '$ENV':    5,\n  '%ENV':    5,\n  '$SYSTEM_FD_MAX':    5,\n  '$^F':    5,\n  '@F':    5,\n  '${^GLOBAL_PHASE}':    5,\n  '$^H':    5,\n  '%^H':    5,\n  '@INC':    5,\n  '%INC':    5,\n  '$INPLACE_EDIT':    5,\n  '$^I':    5,\n  '$^M':    5,\n  '$OSNAME':    5,\n  '$^O':    5,\n  '${^OPEN}':    5,\n  '$PERLDB':    5,\n  '$^P':    5,\n  '$SIG':    5,\n  '%SIG':    5,\n  '$BASETIME':    5,\n  '$^T':    5,\n  '${^TAINT}':    5,\n  '${^UNICODE}':    5,\n  '${^UTF8CACHE}':    5,\n  '${^UTF8LOCALE}':    5,\n  '$PERL_VERSION':    5,\n  '$^V':    5,\n  '${^WIN32_SLOPPY_STAT}':    5,\n  '$EXECUTABLE_NAME':    5,\n  '$^X':    5,\n  '$1':    5, // - regexp $1, $2...\n  '$MATCH':    5,\n  '$&':    5,\n  '${^MATCH}':    5,\n  '$PREMATCH':    5,\n  '$`':    5,\n  '${^PREMATCH}':    5,\n  '$POSTMATCH':    5,\n  \"$'\":    5,\n  '${^POSTMATCH}':    5,\n  '$LAST_PAREN_MATCH':    5,\n  '$+':    5,\n  '$LAST_SUBMATCH_RESULT':    5,\n  '$^N':    5,\n  '@LAST_MATCH_END':    5,\n  '@+':    5,\n  '%LAST_PAREN_MATCH':    5,\n  '%+':    5,\n  '@LAST_MATCH_START':    5,\n  '@-':    5,\n  '%LAST_MATCH_START':    5,\n  '%-':    5,\n  '$LAST_REGEXP_CODE_RESULT':    5,\n  '$^R':    5,\n  '${^RE_DEBUG_FLAGS}':    5,\n  '${^RE_TRIE_MAXBUF}':    5,\n  '$ARGV':    5,\n  '@ARGV':    5,\n  'ARGV':    5,\n  'ARGVOUT':    5,\n  '$OUTPUT_FIELD_SEPARATOR':    5,\n  '$OFS':    5,\n  '$,':    5,\n  '$INPUT_LINE_NUMBER':    5,\n  '$NR':    5,\n  '$.':    5,\n  '$INPUT_RECORD_SEPARATOR':    5,\n  '$RS':    5,\n  '$/':    5,\n  '$OUTPUT_RECORD_SEPARATOR':    5,\n  '$ORS':    5,\n  '$\\\\':    5,\n  '$OUTPUT_AUTOFLUSH':    5,\n  '$|':    5,\n  '$ACCUMULATOR':    5,\n  '$^A':    5,\n  '$FORMAT_FORMFEED':    5,\n  '$^L':    5,\n  '$FORMAT_PAGE_NUMBER':    5,\n  '$%':    5,\n  '$FORMAT_LINES_LEFT':    5,\n  '$-':    5,\n  '$FORMAT_LINE_BREAK_CHARACTERS':    5,\n  '$:':    5,\n  '$FORMAT_LINES_PER_PAGE':    5,\n  '$=':    5,\n  '$FORMAT_TOP_NAME':    5,\n  '$^':    5,\n  '$FORMAT_NAME':    5,\n  '$~':    5,\n  '${^CHILD_ERROR_NATIVE}':    5,\n  '$EXTENDED_OS_ERROR':    5,\n  '$^E':    5,\n  '$EXCEPTIONS_BEING_CAUGHT':    5,\n  '$^S':    5,\n  '$WARNING':    5,\n  '$^W':    5,\n  '${^WARNING_BITS}':    5,\n  '$OS_ERROR':    5,\n  '$ERRNO':    5,\n  '$!':    5,\n  '%OS_ERROR':    5,\n  '%ERRNO':    5,\n  '%!':    5,\n  '$CHILD_ERROR':    5,\n  '$?':    5,\n  '$EVAL_ERROR':    5,\n  '$@':    5,\n  '$OFMT':    5,\n  '$#':    5,\n  '$*':    5,\n  '$ARRAY_BASE':    5,\n  '$[':    5,\n  '$OLD_PERL_VERSION':    5,\n  '$]':    5,\n  //      PERL blocks\n  'if':[1,1],\n  elsif:[1,1],\n  'else':[1,1],\n  'while':[1,1],\n  unless:[1,1],\n  'for':[1,1],\n  foreach:[1,1],\n  //      PERL functions\n  'abs':1,     // - absolute value function\n  accept:1,     // - accept an incoming socket connect\n  alarm:1,     // - schedule a SIGALRM\n  'atan2':1,     // - arctangent of Y/X in the range -PI to PI\n  bind:1,     // - binds an address to a socket\n  binmode:1,     // - prepare binary files for I/O\n  bless:1,     // - create an object\n  bootstrap:1,     //\n  'break':1,     // - break out of a \"given\" block\n  caller:1,     // - get context of the current subroutine call\n  chdir:1,     // - change your current working directory\n  chmod:1,     // - changes the permissions on a list of files\n  chomp:1,     // - remove a trailing record separator from a string\n  chop:1,     // - remove the last character from a string\n  chown:1,     // - change the ownership on a list of files\n  chr:1,     // - get character this number represents\n  chroot:1,     // - make directory new root for path lookups\n  close:1,     // - close file (or pipe or socket) handle\n  closedir:1,     // - close directory handle\n  connect:1,     // - connect to a remote socket\n  'continue':[1,1], // - optional trailing block in a while or foreach\n  'cos':1,     // - cosine function\n  crypt:1,     // - one-way passwd-style encryption\n  dbmclose:1,     // - breaks binding on a tied dbm file\n  dbmopen:1,     // - create binding on a tied dbm file\n  'default':1,     //\n  defined:1,     // - test whether a value, variable, or function is defined\n  'delete':1,     // - deletes a value from a hash\n  die:1,     // - raise an exception or bail out\n  'do':1,     // - turn a BLOCK into a TERM\n  dump:1,     // - create an immediate core dump\n  each:1,     // - retrieve the next key/value pair from a hash\n  endgrent:1,     // - be done using group file\n  endhostent:1,     // - be done using hosts file\n  endnetent:1,     // - be done using networks file\n  endprotoent:1,     // - be done using protocols file\n  endpwent:1,     // - be done using passwd file\n  endservent:1,     // - be done using services file\n  eof:1,     // - test a filehandle for its end\n  'eval':1,     // - catch exceptions or compile and run code\n  'exec':1,     // - abandon this program to run another\n  exists:1,     // - test whether a hash key is present\n  exit:1,     // - terminate this program\n  'exp':1,     // - raise I to a power\n  fcntl:1,     // - file control system call\n  fileno:1,     // - return file descriptor from filehandle\n  flock:1,     // - lock an entire file with an advisory lock\n  fork:1,     // - create a new process just like this one\n  format:1,     // - declare a picture format with use by the write() function\n  formline:1,     // - internal function used for formats\n  getc:1,     // - get the next character from the filehandle\n  getgrent:1,     // - get next group record\n  getgrgid:1,     // - get group record given group user ID\n  getgrnam:1,     // - get group record given group name\n  gethostbyaddr:1,     // - get host record given its address\n  gethostbyname:1,     // - get host record given name\n  gethostent:1,     // - get next hosts record\n  getlogin:1,     // - return who logged in at this tty\n  getnetbyaddr:1,     // - get network record given its address\n  getnetbyname:1,     // - get networks record given name\n  getnetent:1,     // - get next networks record\n  getpeername:1,     // - find the other end of a socket connection\n  getpgrp:1,     // - get process group\n  getppid:1,     // - get parent process ID\n  getpriority:1,     // - get current nice value\n  getprotobyname:1,     // - get protocol record given name\n  getprotobynumber:1,     // - get protocol record numeric protocol\n  getprotoent:1,     // - get next protocols record\n  getpwent:1,     // - get next passwd record\n  getpwnam:1,     // - get passwd record given user login name\n  getpwuid:1,     // - get passwd record given user ID\n  getservbyname:1,     // - get services record given its name\n  getservbyport:1,     // - get services record given numeric port\n  getservent:1,     // - get next services record\n  getsockname:1,     // - retrieve the sockaddr for a given socket\n  getsockopt:1,     // - get socket options on a given socket\n  given:1,     //\n  glob:1,     // - expand filenames using wildcards\n  gmtime:1,     // - convert UNIX time into record or string using Greenwich time\n  'goto':1,     // - create spaghetti code\n  grep:1,     // - locate elements in a list test true against a given criterion\n  hex:1,     // - convert a string to a hexadecimal number\n  'import':1,     // - patch a module's namespace into your own\n  index:1,     // - find a substring within a string\n  'int':1,     // - get the integer portion of a number\n  ioctl:1,     // - system-dependent device control system call\n  'join':1,     // - join a list into a string using a separator\n  keys:1,     // - retrieve list of indices from a hash\n  kill:1,     // - send a signal to a process or process group\n  last:1,     // - exit a block prematurely\n  lc:1,     // - return lower-case version of a string\n  lcfirst:1,     // - return a string with just the next letter in lower case\n  length:1,     // - return the number of bytes in a string\n  'link':1,     // - create a hard link in the filesystem\n  listen:1,     // - register your socket as a server\n  local: 2,    // - create a temporary value for a global variable (dynamic scoping)\n  localtime:1,     // - convert UNIX time into record or string using local time\n  lock:1,     // - get a thread lock on a variable, subroutine, or method\n  'log':1,     // - retrieve the natural logarithm for a number\n  lstat:1,     // - stat a symbolic link\n  m:null,  // - match a string with a regular expression pattern\n  map:1,     // - apply a change to a list to get back a new list with the changes\n  mkdir:1,     // - create a directory\n  msgctl:1,     // - SysV IPC message control operations\n  msgget:1,     // - get SysV IPC message queue\n  msgrcv:1,     // - receive a SysV IPC message from a message queue\n  msgsnd:1,     // - send a SysV IPC message to a message queue\n  my: 2,    // - declare and assign a local variable (lexical scoping)\n  'new':1,     //\n  next:1,     // - iterate a block prematurely\n  no:1,     // - unimport some module symbols or semantics at compile time\n  oct:1,     // - convert a string to an octal number\n  open:1,     // - open a file, pipe, or descriptor\n  opendir:1,     // - open a directory\n  ord:1,     // - find a character's numeric representation\n  our: 2,    // - declare and assign a package variable (lexical scoping)\n  pack:1,     // - convert a list into a binary representation\n  'package':1,     // - declare a separate global namespace\n  pipe:1,     // - open a pair of connected filehandles\n  pop:1,     // - remove the last element from an array and return it\n  pos:1,     // - find or set the offset for the last/next m//g search\n  print:1,     // - output a list to a filehandle\n  printf:1,     // - output a formatted list to a filehandle\n  prototype:1,     // - get the prototype (if any) of a subroutine\n  push:1,     // - append one or more elements to an array\n  q:null,  // - singly quote a string\n  qq:null,  // - doubly quote a string\n  qr:null,  // - Compile pattern\n  quotemeta:null,  // - quote regular expression magic characters\n  qw:null,  // - quote a list of words\n  qx:null,  // - backquote quote a string\n  rand:1,     // - retrieve the next pseudorandom number\n  read:1,     // - fixed-length buffered input from a filehandle\n  readdir:1,     // - get a directory from a directory handle\n  readline:1,     // - fetch a record from a file\n  readlink:1,     // - determine where a symbolic link is pointing\n  readpipe:1,     // - execute a system command and collect standard output\n  recv:1,     // - receive a message over a Socket\n  redo:1,     // - start this loop iteration over again\n  ref:1,     // - find out the type of thing being referenced\n  rename:1,     // - change a filename\n  require:1,     // - load in external functions from a library at runtime\n  reset:1,     // - clear all variables of a given name\n  'return':1,     // - get out of a function early\n  reverse:1,     // - flip a string or a list\n  rewinddir:1,     // - reset directory handle\n  rindex:1,     // - right-to-left substring search\n  rmdir:1,     // - remove a directory\n  s:null,  // - replace a pattern with a string\n  say:1,     // - print with newline\n  scalar:1,     // - force a scalar context\n  seek:1,     // - reposition file pointer for random-access I/O\n  seekdir:1,     // - reposition directory pointer\n  select:1,     // - reset default output or do I/O multiplexing\n  semctl:1,     // - SysV semaphore control operations\n  semget:1,     // - get set of SysV semaphores\n  semop:1,     // - SysV semaphore operations\n  send:1,     // - send a message over a socket\n  setgrent:1,     // - prepare group file for use\n  sethostent:1,     // - prepare hosts file for use\n  setnetent:1,     // - prepare networks file for use\n  setpgrp:1,     // - set the process group of a process\n  setpriority:1,     // - set a process's nice value\n  setprotoent:1,     // - prepare protocols file for use\n  setpwent:1,     // - prepare passwd file for use\n  setservent:1,     // - prepare services file for use\n  setsockopt:1,     // - set some socket options\n  shift:1,     // - remove the first element of an array, and return it\n  shmctl:1,     // - SysV shared memory operations\n  shmget:1,     // - get SysV shared memory segment identifier\n  shmread:1,     // - read SysV shared memory\n  shmwrite:1,     // - write SysV shared memory\n  shutdown:1,     // - close down just half of a socket connection\n  'sin':1,     // - return the sine of a number\n  sleep:1,     // - block for some number of seconds\n  socket:1,     // - create a socket\n  socketpair:1,     // - create a pair of sockets\n  'sort':1,     // - sort a list of values\n  splice:1,     // - add or remove elements anywhere in an array\n  'split':1,     // - split up a string using a regexp delimiter\n  sprintf:1,     // - formatted print into a string\n  'sqrt':1,     // - square root function\n  srand:1,     // - seed the random number generator\n  stat:1,     // - get a file's status information\n  state:1,     // - declare and assign a state variable (persistent lexical scoping)\n  study:1,     // - optimize input data for repeated searches\n  'sub':1,     // - declare a subroutine, possibly anonymously\n  'substr':1,     // - get or alter a portion of a string\n  symlink:1,     // - create a symbolic link to a file\n  syscall:1,     // - execute an arbitrary system call\n  sysopen:1,     // - open a file, pipe, or descriptor\n  sysread:1,     // - fixed-length unbuffered input from a filehandle\n  sysseek:1,     // - position I/O pointer on handle used with sysread and syswrite\n  system:1,     // - run a separate program\n  syswrite:1,     // - fixed-length unbuffered output to a filehandle\n  tell:1,     // - get current seekpointer on a filehandle\n  telldir:1,     // - get current seekpointer on a directory handle\n  tie:1,     // - bind a variable to an object class\n  tied:1,     // - get a reference to the object underlying a tied variable\n  time:1,     // - return number of seconds since 1970\n  times:1,     // - return elapsed time for self and child processes\n  tr:null,  // - transliterate a string\n  truncate:1,     // - shorten a file\n  uc:1,     // - return upper-case version of a string\n  ucfirst:1,     // - return a string with just the next letter in upper case\n  umask:1,     // - set file creation mode mask\n  undef:1,     // - remove a variable or function definition\n  unlink:1,     // - remove one link to a file\n  unpack:1,     // - convert binary structure into normal perl variables\n  unshift:1,     // - prepend more elements to the beginning of a list\n  untie:1,     // - break a tie binding to a variable\n  use:1,     // - load in a module at compile time\n  utime:1,     // - set a file's last access and modify times\n  values:1,     // - return a list of the values in a hash\n  vec:1,     // - test or set particular bits in a string\n  wait:1,     // - wait for any child process to die\n  waitpid:1,     // - wait for a particular child process to die\n  wantarray:1,     // - get void vs scalar vs list context of current subroutine call\n  warn:1,     // - print debugging info\n  when:1,     //\n  write:1,     // - print a picture record\n  y:null}; // - transliterate a string\n\nvar RXstyle=\"string.special\";\nvar RXmodifiers=/[goseximacplud]/;              // NOTE: \"m\", \"s\", \"y\" and \"tr\" need to correct real modifiers for each regexp type\n\nfunction tokenChain(stream,state,chain,style,tail){     // NOTE: chain.length > 2 is not working now (it's for s[...][...]geos;)\n  state.chain=null;                               //                                                          12   3tail\n  state.style=null;\n  state.tail=null;\n  state.tokenize=function(stream,state){\n    var e=false,c,i=0;\n    while(c=stream.next()){\n      if(c===chain[i]&&!e){\n        if(chain[++i]!==undefined){\n          state.chain=chain[i];\n          state.style=style;\n          state.tail=tail;}\n        else if(tail)\n          stream.eatWhile(tail);\n        state.tokenize=tokenPerl;\n        return style;}\n      e=!e&&c==\"\\\\\";}\n    return style;};\n  return state.tokenize(stream,state);}\n\nfunction tokenSOMETHING(stream,state,string){\n  state.tokenize=function(stream,state){\n    if(stream.string==string)\n      state.tokenize=tokenPerl;\n    stream.skipToEnd();\n    return \"string\";};\n  return state.tokenize(stream,state);}\n\nfunction tokenPerl(stream,state){\n  if(stream.eatSpace())\n    return null;\n  if(state.chain)\n    return tokenChain(stream,state,state.chain,state.style,state.tail);\n  if(stream.match(/^(\\-?((\\d[\\d_]*)?\\.\\d+(e[+-]?\\d+)?|\\d+\\.\\d*)|0x[\\da-fA-F_]+|0b[01_]+|\\d[\\d_]*(e[+-]?\\d+)?)/))\n    return 'number';\n  if(stream.match(/^<<(?=[_a-zA-Z])/)){                  // NOTE: <<SOMETHING\\n...\\nSOMETHING\\n\n    stream.eatWhile(/\\w/);\n    return tokenSOMETHING(stream,state,stream.current().substr(2));}\n  if(stream.sol()&&stream.match(/^\\=item(?!\\w)/)){// NOTE: \\n=item...\\n=cut\\n\n    return tokenSOMETHING(stream,state,'=cut');}\n  var ch=stream.next();\n  if(ch=='\"'||ch==\"'\"){                           // NOTE: ' or \" or <<'SOMETHING'\\n...\\nSOMETHING\\n or <<\"SOMETHING\"\\n...\\nSOMETHING\\n\n    if(prefix(stream, 3)==\"<<\"+ch){\n      var p=stream.pos;\n      stream.eatWhile(/\\w/);\n      var n=stream.current().substr(1);\n      if(n&&stream.eat(ch))\n        return tokenSOMETHING(stream,state,n);\n      stream.pos=p;}\n    return tokenChain(stream,state,[ch],\"string\");}\n  if(ch==\"q\"){\n    var c=look(stream, -2);\n    if(!(c&&/\\w/.test(c))){\n      c=look(stream, 0);\n      if(c==\"x\"){\n        c=look(stream, 1);\n        if(c==\"(\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\")\"],RXstyle,RXmodifiers);}\n        if(c==\"[\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"]\"],RXstyle,RXmodifiers);}\n        if(c==\"{\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"}\"],RXstyle,RXmodifiers);}\n        if(c==\"<\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\">\"],RXstyle,RXmodifiers);}\n        if(/[\\^'\"!~\\/]/.test(c)){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}}\n      else if(c==\"q\"){\n        c=look(stream, 1);\n        if(c==\"(\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\")\"],\"string\");}\n        if(c==\"[\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"]\"],\"string\");}\n        if(c==\"{\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"}\"],\"string\");}\n        if(c==\"<\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\">\"],\"string\");}\n        if(/[\\^'\"!~\\/]/.test(c)){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[stream.eat(c)],\"string\");}}\n      else if(c==\"w\"){\n        c=look(stream, 1);\n        if(c==\"(\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\")\"],\"bracket\");}\n        if(c==\"[\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"]\"],\"bracket\");}\n        if(c==\"{\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"}\"],\"bracket\");}\n        if(c==\"<\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\">\"],\"bracket\");}\n        if(/[\\^'\"!~\\/]/.test(c)){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[stream.eat(c)],\"bracket\");}}\n      else if(c==\"r\"){\n        c=look(stream, 1);\n        if(c==\"(\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\")\"],RXstyle,RXmodifiers);}\n        if(c==\"[\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"]\"],RXstyle,RXmodifiers);}\n        if(c==\"{\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\"}\"],RXstyle,RXmodifiers);}\n        if(c==\"<\"){\n          eatSuffix(stream, 2);\n          return tokenChain(stream,state,[\">\"],RXstyle,RXmodifiers);}\n        if(/[\\^'\"!~\\/]/.test(c)){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}}\n      else if(/[\\^'\"!~\\/(\\[{<]/.test(c)){\n        if(c==\"(\"){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[\")\"],\"string\");}\n        if(c==\"[\"){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[\"]\"],\"string\");}\n        if(c==\"{\"){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[\"}\"],\"string\");}\n        if(c==\"<\"){\n          eatSuffix(stream, 1);\n          return tokenChain(stream,state,[\">\"],\"string\");}\n        if(/[\\^'\"!~\\/]/.test(c)){\n          return tokenChain(stream,state,[stream.eat(c)],\"string\");}}}}\n  if(ch==\"m\"){\n    var c=look(stream, -2);\n    if(!(c&&/\\w/.test(c))){\n      c=stream.eat(/[(\\[{<\\^'\"!~\\/]/);\n      if(c){\n        if(/[\\^'\"!~\\/]/.test(c)){\n          return tokenChain(stream,state,[c],RXstyle,RXmodifiers);}\n        if(c==\"(\"){\n          return tokenChain(stream,state,[\")\"],RXstyle,RXmodifiers);}\n        if(c==\"[\"){\n          return tokenChain(stream,state,[\"]\"],RXstyle,RXmodifiers);}\n        if(c==\"{\"){\n          return tokenChain(stream,state,[\"}\"],RXstyle,RXmodifiers);}\n        if(c==\"<\"){\n          return tokenChain(stream,state,[\">\"],RXstyle,RXmodifiers);}}}}\n  if(ch==\"s\"){\n    var c=/[\\/>\\]})\\w]/.test(look(stream, -2));\n    if(!c){\n      c=stream.eat(/[(\\[{<\\^'\"!~\\/]/);\n      if(c){\n        if(c==\"[\")\n          return tokenChain(stream,state,[\"]\",\"]\"],RXstyle,RXmodifiers);\n        if(c==\"{\")\n          return tokenChain(stream,state,[\"}\",\"}\"],RXstyle,RXmodifiers);\n        if(c==\"<\")\n          return tokenChain(stream,state,[\">\",\">\"],RXstyle,RXmodifiers);\n        if(c==\"(\")\n          return tokenChain(stream,state,[\")\",\")\"],RXstyle,RXmodifiers);\n        return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}\n  if(ch==\"y\"){\n    var c=/[\\/>\\]})\\w]/.test(look(stream, -2));\n    if(!c){\n      c=stream.eat(/[(\\[{<\\^'\"!~\\/]/);\n      if(c){\n        if(c==\"[\")\n          return tokenChain(stream,state,[\"]\",\"]\"],RXstyle,RXmodifiers);\n        if(c==\"{\")\n          return tokenChain(stream,state,[\"}\",\"}\"],RXstyle,RXmodifiers);\n        if(c==\"<\")\n          return tokenChain(stream,state,[\">\",\">\"],RXstyle,RXmodifiers);\n        if(c==\"(\")\n          return tokenChain(stream,state,[\")\",\")\"],RXstyle,RXmodifiers);\n        return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}\n  if(ch==\"t\"){\n    var c=/[\\/>\\]})\\w]/.test(look(stream, -2));\n    if(!c){\n      c=stream.eat(\"r\");if(c){\n        c=stream.eat(/[(\\[{<\\^'\"!~\\/]/);\n        if(c){\n          if(c==\"[\")\n            return tokenChain(stream,state,[\"]\",\"]\"],RXstyle,RXmodifiers);\n          if(c==\"{\")\n            return tokenChain(stream,state,[\"}\",\"}\"],RXstyle,RXmodifiers);\n          if(c==\"<\")\n            return tokenChain(stream,state,[\">\",\">\"],RXstyle,RXmodifiers);\n          if(c==\"(\")\n            return tokenChain(stream,state,[\")\",\")\"],RXstyle,RXmodifiers);\n          return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}}\n  if(ch==\"`\"){\n    return tokenChain(stream,state,[ch],\"builtin\");}\n  if(ch==\"/\"){\n    if(!/~\\s*$/.test(prefix(stream)))\n      return \"operator\";\n    else\n      return tokenChain(stream,state,[ch],RXstyle,RXmodifiers);}\n  if(ch==\"$\"){\n    var p=stream.pos;\n    if(stream.eatWhile(/\\d/)||stream.eat(\"{\")&&stream.eatWhile(/\\d/)&&stream.eat(\"}\"))\n      return \"builtin\";\n    else\n      stream.pos=p;}\n  if(/[$@%]/.test(ch)){\n    var p=stream.pos;\n    if(stream.eat(\"^\")&&stream.eat(/[A-Z]/)||!/[@$%&]/.test(look(stream, -2))&&stream.eat(/[=|\\\\\\-#?@;:&`~\\^!\\[\\]*'\"$+.,\\/<>()]/)){\n      var c=stream.current();\n      if(PERL[c])\n        return \"builtin\";}\n    stream.pos=p;}\n  if(/[$@%&]/.test(ch)){\n    if(stream.eatWhile(/[\\w$]/)||stream.eat(\"{\")&&stream.eatWhile(/[\\w$]/)&&stream.eat(\"}\")){\n      var c=stream.current();\n      if(PERL[c])\n        return \"builtin\";\n      else\n        return \"variable\";}}\n  if(ch==\"#\"){\n    if(look(stream, -2)!=\"$\"){\n      stream.skipToEnd();\n      return \"comment\";}}\n  if(/[:+\\-\\^*$&%@=<>!?|\\/~\\.]/.test(ch)){\n    var p=stream.pos;\n    stream.eatWhile(/[:+\\-\\^*$&%@=<>!?|\\/~\\.]/);\n    if(PERL[stream.current()])\n      return \"operator\";\n    else\n      stream.pos=p;}\n  if(ch==\"_\"){\n    if(stream.pos==1){\n      if(suffix(stream, 6)==\"_END__\"){\n        return tokenChain(stream,state,['\\0'],\"comment\");}\n      else if(suffix(stream, 7)==\"_DATA__\"){\n        return tokenChain(stream,state,['\\0'],\"builtin\");}\n      else if(suffix(stream, 7)==\"_C__\"){\n        return tokenChain(stream,state,['\\0'],\"string\");}}}\n  if(/\\w/.test(ch)){\n    var p=stream.pos;\n    if(look(stream, -2)==\"{\"&&(look(stream, 0)==\"}\"||stream.eatWhile(/\\w/)&&look(stream, 0)==\"}\"))\n      return \"string\";\n    else\n      stream.pos=p;}\n  if(/[A-Z]/.test(ch)){\n    var l=look(stream, -2);\n    var p=stream.pos;\n    stream.eatWhile(/[A-Z_]/);\n    if(/[\\da-z]/.test(look(stream, 0))){\n      stream.pos=p;}\n    else{\n      var c=PERL[stream.current()];\n      if(!c)\n        return \"meta\";\n      if(c[1])\n        c=c[0];\n      if(l!=\":\"){\n        if(c==1)\n          return \"keyword\";\n        else if(c==2)\n          return \"def\";\n        else if(c==3)\n          return \"atom\";\n        else if(c==4)\n          return \"operator\";\n        else if(c==5)\n          return \"builtin\";\n        else\n          return \"meta\";}\n      else\n        return \"meta\";}}\n  if(/[a-zA-Z_]/.test(ch)){\n    var l=look(stream, -2);\n    stream.eatWhile(/\\w/);\n    var c=PERL[stream.current()];\n    if(!c)\n      return \"meta\";\n    if(c[1])\n      c=c[0];\n    if(l!=\":\"){\n      if(c==1)\n        return \"keyword\";\n      else if(c==2)\n        return \"def\";\n      else if(c==3)\n        return \"atom\";\n      else if(c==4)\n        return \"operator\";\n      else if(c==5)\n        return \"builtin\";\n      else\n        return \"meta\";}\n    else\n      return \"meta\";}\n  return null;}\n\nexport const perl = {\n  name: \"perl\",\n\n  startState: function() {\n    return {\n      tokenize: tokenPerl,\n      chain: null,\n      style: null,\n      tail: null\n    };\n  },\n  token: function(stream, state) {\n    return (state.tokenize || tokenPerl)(stream, state);\n  },\n  languageData: {\n    commentTokens: {line: \"#\"},\n    wordChars: \"$\"\n  }\n};\n", "function wordObj(words) {\n  var o = {};\n  for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true;\n  return o;\n}\n\nvar keywordList = [\n  \"alias\", \"and\", \"BEGIN\", \"begin\", \"break\", \"case\", \"class\", \"def\", \"defined?\", \"do\", \"else\",\n  \"elsif\", \"END\", \"end\", \"ensure\", \"false\", \"for\", \"if\", \"in\", \"module\", \"next\", \"not\", \"or\",\n  \"redo\", \"rescue\", \"retry\", \"return\", \"self\", \"super\", \"then\", \"true\", \"undef\", \"unless\",\n  \"until\", \"when\", \"while\", \"yield\", \"nil\", \"raise\", \"throw\", \"catch\", \"fail\", \"loop\", \"callcc\",\n  \"caller\", \"lambda\", \"proc\", \"public\", \"protected\", \"private\", \"require\", \"load\",\n  \"require_relative\", \"extend\", \"autoload\", \"__END__\", \"__FILE__\", \"__LINE__\", \"__dir__\"\n], keywords = wordObj(keywordList);\n\nvar indentWords = wordObj([\"def\", \"class\", \"case\", \"for\", \"while\", \"until\", \"module\",\n                           \"catch\", \"loop\", \"proc\", \"begin\"]);\nvar dedentWords = wordObj([\"end\", \"until\"]);\nvar opening = {\"[\": \"]\", \"{\": \"}\", \"(\": \")\"};\nvar closing = {\"]\": \"[\", \"}\": \"{\", \")\": \"(\"};\n\nvar curPunc;\n\nfunction chain(newtok, stream, state) {\n  state.tokenize.push(newtok);\n  return newtok(stream, state);\n}\n\nfunction tokenBase(stream, state) {\n  if (stream.sol() && stream.match(\"=begin\") && stream.eol()) {\n    state.tokenize.push(readBlockComment);\n    return \"comment\";\n  }\n  if (stream.eatSpace()) return null;\n  var ch = stream.next(), m;\n  if (ch == \"`\" || ch == \"'\" || ch == '\"') {\n    return chain(readQuoted(ch, \"string\", ch == '\"' || ch == \"`\"), stream, state);\n  } else if (ch == \"/\") {\n    if (regexpAhead(stream))\n      return chain(readQuoted(ch, \"string.special\", true), stream, state);\n    else\n      return \"operator\";\n  } else if (ch == \"%\") {\n    var style = \"string\", embed = true;\n    if (stream.eat(\"s\")) style = \"atom\";\n    else if (stream.eat(/[WQ]/)) style = \"string\";\n    else if (stream.eat(/[r]/)) style = \"string.special\";\n    else if (stream.eat(/[wxq]/)) { style = \"string\"; embed = false; }\n    var delim = stream.eat(/[^\\w\\s=]/);\n    if (!delim) return \"operator\";\n    if (opening.propertyIsEnumerable(delim)) delim = opening[delim];\n    return chain(readQuoted(delim, style, embed, true), stream, state);\n  } else if (ch == \"#\") {\n    stream.skipToEnd();\n    return \"comment\";\n  } else if (ch == \"<\" && (m = stream.match(/^<([-~])[\\`\\\"\\']?([a-zA-Z_?]\\w*)[\\`\\\"\\']?(?:;|$)/))) {\n    return chain(readHereDoc(m[2], m[1]), stream, state);\n  } else if (ch == \"0\") {\n    if (stream.eat(\"x\")) stream.eatWhile(/[\\da-fA-F]/);\n    else if (stream.eat(\"b\")) stream.eatWhile(/[01]/);\n    else stream.eatWhile(/[0-7]/);\n    return \"number\";\n  } else if (/\\d/.test(ch)) {\n    stream.match(/^[\\d_]*(?:\\.[\\d_]+)?(?:[eE][+\\-]?[\\d_]+)?/);\n    return \"number\";\n  } else if (ch == \"?\") {\n    while (stream.match(/^\\\\[CM]-/)) {}\n    if (stream.eat(\"\\\\\")) stream.eatWhile(/\\w/);\n    else stream.next();\n    return \"string\";\n  } else if (ch == \":\") {\n    if (stream.eat(\"'\")) return chain(readQuoted(\"'\", \"atom\", false), stream, state);\n    if (stream.eat('\"')) return chain(readQuoted('\"', \"atom\", true), stream, state);\n\n    // :> :>> :< :<< are valid symbols\n    if (stream.eat(/[\\<\\>]/)) {\n      stream.eat(/[\\<\\>]/);\n      return \"atom\";\n    }\n\n    // :+ :- :/ :* :| :& :! are valid symbols\n    if (stream.eat(/[\\+\\-\\*\\/\\&\\|\\:\\!]/)) {\n      return \"atom\";\n    }\n\n    // Symbols can't start by a digit\n    if (stream.eat(/[a-zA-Z$@_\\xa1-\\uffff]/)) {\n      stream.eatWhile(/[\\w$\\xa1-\\uffff]/);\n      // Only one ? ! = is allowed and only as the last character\n      stream.eat(/[\\?\\!\\=]/);\n      return \"atom\";\n    }\n    return \"operator\";\n  } else if (ch == \"@\" && stream.match(/^@?[a-zA-Z_\\xa1-\\uffff]/)) {\n    stream.eat(\"@\");\n    stream.eatWhile(/[\\w\\xa1-\\uffff]/);\n    return \"propertyName\";\n  } else if (ch == \"$\") {\n    if (stream.eat(/[a-zA-Z_]/)) {\n      stream.eatWhile(/[\\w]/);\n    } else if (stream.eat(/\\d/)) {\n      stream.eat(/\\d/);\n    } else {\n      stream.next(); // Must be a special global like $: or $!\n    }\n    return \"variableName.special\";\n  } else if (/[a-zA-Z_\\xa1-\\uffff]/.test(ch)) {\n    stream.eatWhile(/[\\w\\xa1-\\uffff]/);\n    stream.eat(/[\\?\\!]/);\n    if (stream.eat(\":\")) return \"atom\";\n    return \"variable\";\n  } else if (ch == \"|\" && (state.varList || state.lastTok == \"{\" || state.lastTok == \"do\")) {\n    curPunc = \"|\";\n    return null;\n  } else if (/[\\(\\)\\[\\]{}\\\\;]/.test(ch)) {\n    curPunc = ch;\n    return null;\n  } else if (ch == \"-\" && stream.eat(\">\")) {\n    return \"operator\";\n  } else if (/[=+\\-\\/*:\\.^%<>~|]/.test(ch)) {\n    var more = stream.eatWhile(/[=+\\-\\/*:\\.^%<>~|]/);\n    if (ch == \".\" && !more) curPunc = \".\";\n    return \"operator\";\n  } else {\n    return null;\n  }\n}\n\nfunction regexpAhead(stream) {\n  var start = stream.pos, depth = 0, next, found = false, escaped = false\n  while ((next = stream.next()) != null) {\n    if (!escaped) {\n      if (\"[{(\".indexOf(next) > -1) {\n        depth++\n      } else if (\"]})\".indexOf(next) > -1) {\n        depth--\n        if (depth < 0) break\n      } else if (next == \"/\" && depth == 0) {\n        found = true\n        break\n      }\n      escaped = next == \"\\\\\"\n    } else {\n      escaped = false\n    }\n  }\n  stream.backUp(stream.pos - start)\n  return found\n}\n\nfunction tokenBaseUntilBrace(depth) {\n  if (!depth) depth = 1;\n  return function(stream, state) {\n    if (stream.peek() == \"}\") {\n      if (depth == 1) {\n        state.tokenize.pop();\n        return state.tokenize[state.tokenize.length-1](stream, state);\n      } else {\n        state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth - 1);\n      }\n    } else if (stream.peek() == \"{\") {\n      state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth + 1);\n    }\n    return tokenBase(stream, state);\n  };\n}\nfunction tokenBaseOnce() {\n  var alreadyCalled = false;\n  return function(stream, state) {\n    if (alreadyCalled) {\n      state.tokenize.pop();\n      return state.tokenize[state.tokenize.length-1](stream, state);\n    }\n    alreadyCalled = true;\n    return tokenBase(stream, state);\n  };\n}\nfunction readQuoted(quote, style, embed, unescaped) {\n  return function(stream, state) {\n    var escaped = false, ch;\n\n    if (state.context.type === 'read-quoted-paused') {\n      state.context = state.context.prev;\n      stream.eat(\"}\");\n    }\n\n    while ((ch = stream.next()) != null) {\n      if (ch == quote && (unescaped || !escaped)) {\n        state.tokenize.pop();\n        break;\n      }\n      if (embed && ch == \"#\" && !escaped) {\n        if (stream.eat(\"{\")) {\n          if (quote == \"}\") {\n            state.context = {prev: state.context, type: 'read-quoted-paused'};\n          }\n          state.tokenize.push(tokenBaseUntilBrace());\n          break;\n        } else if (/[@\\$]/.test(stream.peek())) {\n          state.tokenize.push(tokenBaseOnce());\n          break;\n        }\n      }\n      escaped = !escaped && ch == \"\\\\\";\n    }\n    return style;\n  };\n}\nfunction readHereDoc(phrase, mayIndent) {\n  return function(stream, state) {\n    if (mayIndent) stream.eatSpace()\n    if (stream.match(phrase)) state.tokenize.pop();\n    else stream.skipToEnd();\n    return \"string\";\n  };\n}\nfunction readBlockComment(stream, state) {\n  if (stream.sol() && stream.match(\"=end\") && stream.eol())\n    state.tokenize.pop();\n  stream.skipToEnd();\n  return \"comment\";\n}\n\nexport const ruby = {\n  name: \"ruby\",\n  startState: function(indentUnit) {\n    return {tokenize: [tokenBase],\n            indented: 0,\n            context: {type: \"top\", indented: -indentUnit},\n            continuedLine: false,\n            lastTok: null,\n            varList: false};\n  },\n\n  token: function(stream, state) {\n    curPunc = null;\n    if (stream.sol()) state.indented = stream.indentation();\n    var style = state.tokenize[state.tokenize.length-1](stream, state), kwtype;\n    var thisTok = curPunc;\n    if (style == \"variable\") {\n      var word = stream.current();\n      style = state.lastTok == \".\" ? \"property\"\n        : keywords.propertyIsEnumerable(stream.current()) ? \"keyword\"\n        : /^[A-Z]/.test(word) ? \"tag\"\n        : (state.lastTok == \"def\" || state.lastTok == \"class\" || state.varList) ? \"def\"\n        : \"variable\";\n      if (style == \"keyword\") {\n        thisTok = word;\n        if (indentWords.propertyIsEnumerable(word)) kwtype = \"indent\";\n        else if (dedentWords.propertyIsEnumerable(word)) kwtype = \"dedent\";\n        else if ((word == \"if\" || word == \"unless\") && stream.column() == stream.indentation())\n          kwtype = \"indent\";\n        else if (word == \"do\" && state.context.indented < state.indented)\n          kwtype = \"indent\";\n      }\n    }\n    if (curPunc || (style && style != \"comment\")) state.lastTok = thisTok;\n    if (curPunc == \"|\") state.varList = !state.varList;\n\n    if (kwtype == \"indent\" || /[\\(\\[\\{]/.test(curPunc))\n      state.context = {prev: state.context, type: curPunc || style, indented: state.indented};\n    else if ((kwtype == \"dedent\" || /[\\)\\]\\}]/.test(curPunc)) && state.context.prev)\n      state.context = state.context.prev;\n\n    if (stream.eol())\n      state.continuedLine = (curPunc == \"\\\\\" || style == \"operator\");\n    return style;\n  },\n\n  indent: function(state, textAfter, cx) {\n    if (state.tokenize[state.tokenize.length-1] != tokenBase) return null;\n    var firstChar = textAfter && textAfter.charAt(0);\n    var ct = state.context;\n    var closed = ct.type == closing[firstChar] ||\n        ct.type == \"keyword\" && /^(?:end|until|else|elsif|when|rescue)\\b/.test(textAfter);\n    return ct.indented + (closed ? 0 : cx.unit) +\n      (state.continuedLine ? cx.unit : 0);\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*(?:end|rescue|elsif|else|\\})$/,\n    commentTokens: {line: \"#\"},\n    autocomplete: keywordList\n  }\n};\n\n", "var words = {};\nfunction define(style, dict) {\n  for(var i = 0; i < dict.length; i++) {\n    words[dict[i]] = style;\n  }\n};\n\nvar commonAtoms = [\"true\", \"false\"];\nvar commonKeywords = [\"if\", \"then\", \"do\", \"else\", \"elif\", \"while\", \"until\", \"for\", \"in\", \"esac\", \"fi\",\n                      \"fin\", \"fil\", \"done\", \"exit\", \"set\", \"unset\", \"export\", \"function\"];\nvar commonCommands = [\"ab\", \"awk\", \"bash\", \"beep\", \"cat\", \"cc\", \"cd\", \"chown\", \"chmod\", \"chroot\", \"clear\",\n                      \"cp\", \"curl\", \"cut\", \"diff\", \"echo\", \"find\", \"gawk\", \"gcc\", \"get\", \"git\", \"grep\", \"hg\", \"kill\", \"killall\",\n                      \"ln\", \"ls\", \"make\", \"mkdir\", \"openssl\", \"mv\", \"nc\", \"nl\", \"node\", \"npm\", \"ping\", \"ps\", \"restart\", \"rm\",\n                      \"rmdir\", \"sed\", \"service\", \"sh\", \"shopt\", \"shred\", \"source\", \"sort\", \"sleep\", \"ssh\", \"start\", \"stop\",\n                      \"su\", \"sudo\", \"svn\", \"tee\", \"telnet\", \"top\", \"touch\", \"vi\", \"vim\", \"wall\", \"wc\", \"wget\", \"who\", \"write\",\n                      \"yes\", \"zsh\"];\n\ndefine('atom', commonAtoms);\ndefine('keyword', commonKeywords);\ndefine('builtin', commonCommands);\n\nfunction tokenBase(stream, state) {\n  if (stream.eatSpace()) return null;\n\n  var sol = stream.sol();\n  var ch = stream.next();\n\n  if (ch === '\\\\') {\n    stream.next();\n    return null;\n  }\n  if (ch === '\\'' || ch === '\"' || ch === '`') {\n    state.tokens.unshift(tokenString(ch, ch === \"`\" ? \"quote\" : \"string\"));\n    return tokenize(stream, state);\n  }\n  if (ch === '#') {\n    if (sol && stream.eat('!')) {\n      stream.skipToEnd();\n      return 'meta'; // 'comment'?\n    }\n    stream.skipToEnd();\n    return 'comment';\n  }\n  if (ch === '$') {\n    state.tokens.unshift(tokenDollar);\n    return tokenize(stream, state);\n  }\n  if (ch === '+' || ch === '=') {\n    return 'operator';\n  }\n  if (ch === '-') {\n    stream.eat('-');\n    stream.eatWhile(/\\w/);\n    return 'attribute';\n  }\n  if (ch == \"<\") {\n    if (stream.match(\"<<\")) return \"operator\"\n    var heredoc = stream.match(/^<-?\\s*(?:['\"]([^'\"]*)['\"]|([^'\"\\s]*))/)\n    if (heredoc) {\n      state.tokens.unshift(tokenHeredoc(heredoc[1] || heredoc[2]))\n      return 'string.special'\n    }\n  }\n  if (/\\d/.test(ch)) {\n    stream.eatWhile(/\\d/);\n    if(stream.eol() || !/\\w/.test(stream.peek())) {\n      return 'number';\n    }\n  }\n  stream.eatWhile(/[\\w-]/);\n  var cur = stream.current();\n  if (stream.peek() === '=' && /\\w+/.test(cur)) return 'def';\n  return words.hasOwnProperty(cur) ? words[cur] : null;\n}\n\nfunction tokenString(quote, style) {\n  var close = quote == \"(\" ? \")\" : quote == \"{\" ? \"}\" : quote\n  return function(stream, state) {\n    var next, escaped = false;\n    while ((next = stream.next()) != null) {\n      if (next === close && !escaped) {\n        state.tokens.shift();\n        break;\n      } else if (next === '$' && !escaped && quote !== \"'\" && stream.peek() != close) {\n        escaped = true;\n        stream.backUp(1);\n        state.tokens.unshift(tokenDollar);\n        break;\n      } else if (!escaped && quote !== close && next === quote) {\n        state.tokens.unshift(tokenString(quote, style))\n        return tokenize(stream, state)\n      } else if (!escaped && /['\"]/.test(next) && !/['\"]/.test(quote)) {\n        state.tokens.unshift(tokenStringStart(next, \"string\"));\n        stream.backUp(1);\n        break;\n      }\n      escaped = !escaped && next === '\\\\';\n    }\n    return style;\n  };\n};\n\nfunction tokenStringStart(quote, style) {\n  return function(stream, state) {\n    state.tokens[0] = tokenString(quote, style)\n    stream.next()\n    return tokenize(stream, state)\n  }\n}\n\nvar tokenDollar = function(stream, state) {\n  if (state.tokens.length > 1) stream.eat('$');\n  var ch = stream.next()\n  if (/['\"({]/.test(ch)) {\n    state.tokens[0] = tokenString(ch, ch == \"(\" ? \"quote\" : ch == \"{\" ? \"def\" : \"string\");\n    return tokenize(stream, state);\n  }\n  if (!/\\d/.test(ch)) stream.eatWhile(/\\w/);\n  state.tokens.shift();\n  return 'def';\n};\n\nfunction tokenHeredoc(delim) {\n  return function(stream, state) {\n    if (stream.sol() && stream.string == delim) state.tokens.shift()\n    stream.skipToEnd()\n    return \"string.special\"\n  }\n}\n\nfunction tokenize(stream, state) {\n  return (state.tokens[0] || tokenBase) (stream, state);\n};\n\nexport const shell = {\n  name: \"shell\",\n  startState: function() {return {tokens:[]};},\n  token: function(stream, state) {\n    return tokenize(stream, state);\n  },\n  languageData: {\n    autocomplete: commonAtoms.concat(commonKeywords, commonCommands),\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"]},\n    commentTokens: {line: \"#\"}\n  }\n};\n", "function wordSet(words) {\n  var set = {}\n  for (var i = 0; i < words.length; i++) set[words[i]] = true\n  return set\n}\n\nvar keywords = wordSet([\"_\",\"var\",\"let\",\"actor\",\"class\",\"enum\",\"extension\",\"import\",\"protocol\",\"struct\",\"func\",\"typealias\",\"associatedtype\",\n                        \"open\",\"public\",\"internal\",\"fileprivate\",\"private\",\"deinit\",\"init\",\"new\",\"override\",\"self\",\"subscript\",\"super\",\n                        \"convenience\",\"dynamic\",\"final\",\"indirect\",\"lazy\",\"required\",\"static\",\"unowned\",\"unowned(safe)\",\"unowned(unsafe)\",\"weak\",\"as\",\"is\",\n                        \"break\",\"case\",\"continue\",\"default\",\"else\",\"fallthrough\",\"for\",\"guard\",\"if\",\"in\",\"repeat\",\"switch\",\"where\",\"while\",\n                        \"defer\",\"return\",\"inout\",\"mutating\",\"nonmutating\",\"isolated\",\"nonisolated\",\"catch\",\"do\",\"rethrows\",\"throw\",\"throws\",\"async\",\"await\",\"try\",\"didSet\",\"get\",\"set\",\"willSet\",\n                        \"assignment\",\"associativity\",\"infix\",\"left\",\"none\",\"operator\",\"postfix\",\"precedence\",\"precedencegroup\",\"prefix\",\"right\",\n                        \"Any\",\"AnyObject\",\"Type\",\"dynamicType\",\"Self\",\"Protocol\",\"__COLUMN__\",\"__FILE__\",\"__FUNCTION__\",\"__LINE__\"])\nvar definingKeywords = wordSet([\"var\",\"let\",\"actor\",\"class\",\"enum\",\"extension\",\"import\",\"protocol\",\"struct\",\"func\",\"typealias\",\"associatedtype\",\"for\"])\nvar atoms = wordSet([\"true\",\"false\",\"nil\",\"self\",\"super\",\"_\"])\nvar types = wordSet([\"Array\",\"Bool\",\"Character\",\"Dictionary\",\"Double\",\"Float\",\"Int\",\"Int8\",\"Int16\",\"Int32\",\"Int64\",\"Never\",\"Optional\",\"Set\",\"String\",\n                     \"UInt8\",\"UInt16\",\"UInt32\",\"UInt64\",\"Void\"])\nvar operators = \"+-/*%=|&<>~^?!\"\nvar punc = \":;,.(){}[]\"\nvar binary = /^\\-?0b[01][01_]*/\nvar octal = /^\\-?0o[0-7][0-7_]*/\nvar hexadecimal = /^\\-?0x[\\dA-Fa-f][\\dA-Fa-f_]*(?:(?:\\.[\\dA-Fa-f][\\dA-Fa-f_]*)?[Pp]\\-?\\d[\\d_]*)?/\nvar decimal = /^\\-?\\d[\\d_]*(?:\\.\\d[\\d_]*)?(?:[Ee]\\-?\\d[\\d_]*)?/\nvar identifier = /^\\$\\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\\1/\nvar property = /^\\.(?:\\$\\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\\1)/\nvar instruction = /^\\#[A-Za-z]+/\nvar attribute = /^@(?:\\$\\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\\1)/\n//var regexp = /^\\/(?!\\s)(?:\\/\\/)?(?:\\\\.|[^\\/])+\\//\n\nfunction tokenBase(stream, state, prev) {\n  if (stream.sol()) state.indented = stream.indentation()\n  if (stream.eatSpace()) return null\n\n  var ch = stream.peek()\n  if (ch == \"/\") {\n    if (stream.match(\"//\")) {\n      stream.skipToEnd()\n      return \"comment\"\n    }\n    if (stream.match(\"/*\")) {\n      state.tokenize.push(tokenComment)\n      return tokenComment(stream, state)\n    }\n  }\n  if (stream.match(instruction)) return \"builtin\"\n  if (stream.match(attribute)) return \"attribute\"\n  if (stream.match(binary)) return \"number\"\n  if (stream.match(octal)) return \"number\"\n  if (stream.match(hexadecimal)) return \"number\"\n  if (stream.match(decimal)) return \"number\"\n  if (stream.match(property)) return \"property\"\n  if (operators.indexOf(ch) > -1) {\n    stream.next()\n    return \"operator\"\n  }\n  if (punc.indexOf(ch) > -1) {\n    stream.next()\n    stream.match(\"..\")\n    return \"punctuation\"\n  }\n  var stringMatch\n  if (stringMatch = stream.match(/(\"\"\"|\"|')/)) {\n    var tokenize = tokenString.bind(null, stringMatch[0])\n    state.tokenize.push(tokenize)\n    return tokenize(stream, state)\n  }\n\n  if (stream.match(identifier)) {\n    var ident = stream.current()\n    if (types.hasOwnProperty(ident)) return \"type\"\n    if (atoms.hasOwnProperty(ident)) return \"atom\"\n    if (keywords.hasOwnProperty(ident)) {\n      if (definingKeywords.hasOwnProperty(ident))\n        state.prev = \"define\"\n      return \"keyword\"\n    }\n    if (prev == \"define\") return \"def\"\n    return \"variable\"\n  }\n\n  stream.next()\n  return null\n}\n\nfunction tokenUntilClosingParen() {\n  var depth = 0\n  return function(stream, state, prev) {\n    var inner = tokenBase(stream, state, prev)\n    if (inner == \"punctuation\") {\n      if (stream.current() == \"(\") ++depth\n      else if (stream.current() == \")\") {\n        if (depth == 0) {\n          stream.backUp(1)\n          state.tokenize.pop()\n          return state.tokenize[state.tokenize.length - 1](stream, state)\n        }\n        else --depth\n      }\n    }\n    return inner\n  }\n}\n\nfunction tokenString(openQuote, stream, state) {\n  var singleLine = openQuote.length == 1\n  var ch, escaped = false\n  while (ch = stream.peek()) {\n    if (escaped) {\n      stream.next()\n      if (ch == \"(\") {\n        state.tokenize.push(tokenUntilClosingParen())\n        return \"string\"\n      }\n      escaped = false\n    } else if (stream.match(openQuote)) {\n      state.tokenize.pop()\n      return \"string\"\n    } else {\n      stream.next()\n      escaped = ch == \"\\\\\"\n    }\n  }\n  if (singleLine) {\n    state.tokenize.pop()\n  }\n  return \"string\"\n}\n\nfunction tokenComment(stream, state) {\n  var ch\n  while (ch = stream.next()) {\n    if (ch === \"/\" && stream.eat(\"*\")) {\n      state.tokenize.push(tokenComment)\n    } else if (ch === \"*\" && stream.eat(\"/\")) {\n      state.tokenize.pop()\n      break\n    }\n  }\n  return \"comment\"\n}\n\nfunction Context(prev, align, indented) {\n  this.prev = prev\n  this.align = align\n  this.indented = indented\n}\n\nfunction pushContext(state, stream) {\n  var align = stream.match(/^\\s*($|\\/[\\/\\*]|[)}\\]])/, false) ? null : stream.column() + 1\n  state.context = new Context(state.context, align, state.indented)\n}\n\nfunction popContext(state) {\n  if (state.context) {\n    state.indented = state.context.indented\n    state.context = state.context.prev\n  }\n}\n\nexport const swift = {\n  name: \"swift\",\n  startState: function() {\n    return {\n      prev: null,\n      context: null,\n      indented: 0,\n      tokenize: []\n    }\n  },\n\n  token: function(stream, state) {\n    var prev = state.prev\n    state.prev = null\n    var tokenize = state.tokenize[state.tokenize.length - 1] || tokenBase\n    var style = tokenize(stream, state, prev)\n    if (!style || style == \"comment\") state.prev = prev\n    else if (!state.prev) state.prev = style\n\n    if (style == \"punctuation\") {\n      var bracket = /[\\(\\[\\{]|([\\]\\)\\}])/.exec(stream.current())\n      if (bracket) (bracket[1] ? popContext : pushContext)(state, stream)\n    }\n\n    return style\n  },\n\n  indent: function(state, textAfter, iCx) {\n    var cx = state.context\n    if (!cx) return 0\n    var closing = /^[\\]\\}\\)]/.test(textAfter)\n    if (cx.align != null) return cx.align - (closing ? 1 : 0)\n    return cx.indented + (closing ? 0 : iCx.unit)\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*[\\)\\}\\]]$/,\n    commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}},\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"]}\n  }\n}\n", "var cons = ['true', 'false', 'on', 'off', 'yes', 'no'];\nvar keywordRegex = new RegExp(\"\\\\b((\"+cons.join(\")|(\")+\"))$\", 'i');\n\nexport const yaml = {\n  name: \"yaml\",\n  token: function(stream, state) {\n    var ch = stream.peek();\n    var esc = state.escaped;\n    state.escaped = false;\n    /* comments */\n    if (ch == \"#\" && (stream.pos == 0 || /\\s/.test(stream.string.charAt(stream.pos - 1)))) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n\n    if (stream.match(/^('([^']|\\\\.)*'?|\"([^\"]|\\\\.)*\"?)/))\n      return \"string\";\n\n    if (state.literal && stream.indentation() > state.keyCol) {\n      stream.skipToEnd(); return \"string\";\n    } else if (state.literal) { state.literal = false; }\n    if (stream.sol()) {\n      state.keyCol = 0;\n      state.pair = false;\n      state.pairStart = false;\n      /* document start */\n      if(stream.match('---')) { return \"def\"; }\n      /* document end */\n      if (stream.match('...')) { return \"def\"; }\n      /* array list item */\n      if (stream.match(/^\\s*-\\s+/)) { return 'meta'; }\n    }\n    /* inline pairs/lists */\n    if (stream.match(/^(\\{|\\}|\\[|\\])/)) {\n      if (ch == '{')\n        state.inlinePairs++;\n      else if (ch == '}')\n        state.inlinePairs--;\n      else if (ch == '[')\n        state.inlineList++;\n      else\n        state.inlineList--;\n      return 'meta';\n    }\n\n    /* list separator */\n    if (state.inlineList > 0 && !esc && ch == ',') {\n      stream.next();\n      return 'meta';\n    }\n    /* pairs separator */\n    if (state.inlinePairs > 0 && !esc && ch == ',') {\n      state.keyCol = 0;\n      state.pair = false;\n      state.pairStart = false;\n      stream.next();\n      return 'meta';\n    }\n\n    /* start of value of a pair */\n    if (state.pairStart) {\n      /* block literals */\n      if (stream.match(/^\\s*(\\||\\>)\\s*/)) { state.literal = true; return 'meta'; };\n      /* references */\n      if (stream.match(/^\\s*(\\&|\\*)[a-z0-9\\._-]+\\b/i)) { return 'variable'; }\n      /* numbers */\n      if (state.inlinePairs == 0 && stream.match(/^\\s*-?[0-9\\.\\,]+\\s?$/)) { return 'number'; }\n      if (state.inlinePairs > 0 && stream.match(/^\\s*-?[0-9\\.\\,]+\\s?(?=(,|}))/)) { return 'number'; }\n      /* keywords */\n      if (stream.match(keywordRegex)) { return 'keyword'; }\n    }\n\n    /* pairs (associative arrays) -> key */\n    if (!state.pair && stream.match(/^\\s*(?:[,\\[\\]{}&*!|>'\"%@`][^\\s'\":]|[^,\\[\\]{}#&*!|>'\"%@`])[^#]*?(?=\\s*:($|\\s))/)) {\n      state.pair = true;\n      state.keyCol = stream.indentation();\n      return \"atom\";\n    }\n    if (state.pair && stream.match(/^:\\s*/)) { state.pairStart = true; return 'meta'; }\n\n    /* nothing found, continue */\n    state.pairStart = false;\n    state.escaped = (ch == '\\\\');\n    stream.next();\n    return null;\n  },\n  startState: function() {\n    return {\n      pair: false,\n      pairStart: false,\n      keyCol: 0,\n      inlinePairs: 0,\n      inlineList: 0,\n      literal: false,\n      escaped: false\n    };\n  },\n  languageData: {\n    commentTokens: {line: \"#\"}\n  }\n};\n", "import { angular } from \"@codemirror/lang-angular\"\nimport { cpp } from \"@codemirror/lang-cpp\"\nimport { css } from \"@codemirror/lang-css\"\nimport { html } from \"@codemirror/lang-html\"\nimport { java } from \"@codemirror/lang-java\"\nimport { javascript } from \"@codemirror/lang-javascript\"\nimport { markdown } from \"@codemirror/lang-markdown\"\nimport { php } from \"@codemirror/lang-php\"\nimport { python } from \"@codemirror/lang-python\"\nimport { rust } from \"@codemirror/lang-rust\"\nimport { sql } from \"@codemirror/lang-sql\"\nimport { vue } from \"@codemirror/lang-vue\"\nimport { LanguageSupport, StreamLanguage } from \"@codemirror/language\"\nimport { c, csharp, kotlin, objectiveC, scala } from \"@codemirror/legacy-modes/mode/clike\"\nimport { go } from \"@codemirror/legacy-modes/mode/go\"\nimport { haskell } from \"@codemirror/legacy-modes/mode/haskell\"\nimport { julia } from \"@codemirror/legacy-modes/mode/julia\"\nimport { lua } from \"@codemirror/legacy-modes/mode/lua\"\nimport { nginx } from \"@codemirror/legacy-modes/mode/nginx\"\nimport { octave } from \"@codemirror/legacy-modes/mode/octave\"\nimport { perl } from \"@codemirror/legacy-modes/mode/perl\"\nimport { ruby } from \"@codemirror/legacy-modes/mode/ruby\"\nimport { shell } from \"@codemirror/legacy-modes/mode/shell\"\nimport { swift } from \"@codemirror/legacy-modes/mode/swift\"\nimport { yaml } from \"@codemirror/legacy-modes/mode/yaml\"\nimport { assertNever } from \"@framerjs/shared\"\nimport { DEFAULT_LANGUAGE_ALIAS } from \"prosemirror/schema/module.ts\"\n\n/**\n * Retrieves a language support object for a given language name.\n *\n * @param {string} name - The name of the code block\n * @returns {LanguageSupport} The language support object\n */\nexport function getLanguageForCodeBlock(name: string): LanguageSupport {\n\tswitch (name) {\n\t\tcase \"Angular\":\n\t\t\treturn angular()\n\t\tcase \"C\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(c))\n\t\tcase \"C#\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(csharp))\n\t\tcase \"C++\":\n\t\t\treturn cpp()\n\t\tcase \"CSS\":\n\t\t\treturn css()\n\t\tcase \"Go\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(go))\n\t\tcase \"Haskell\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(haskell))\n\t\tcase \"HTML\":\n\t\t\treturn html()\n\t\tcase \"Java\":\n\t\t\treturn java()\n\t\tcase \"JavaScript\":\n\t\tcase \"JSX\":\n\t\t\treturn javascript({ jsx: true, typescript: false })\n\t\tcase \"Julia\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(julia))\n\t\tcase \"Kotlin\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(kotlin))\n\t\tcase \"Lua\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(lua))\n\t\tcase \"Markdown\":\n\t\t\treturn markdown()\n\t\tcase \"MATLAB\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(octave))\n\t\tcase \"Nginx\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(nginx))\n\t\tcase \"Objective-C\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(objectiveC))\n\t\tcase \"Perl\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(perl))\n\t\tcase \"PHP\":\n\t\t\treturn php()\n\t\tcase \"Python\":\n\t\t\treturn python()\n\t\tcase \"Ruby\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(ruby))\n\t\tcase \"Rust\":\n\t\t\treturn rust()\n\t\tcase \"Scala\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(scala))\n\t\tcase \"Shell\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(shell))\n\t\tcase \"SQL\":\n\t\t\treturn sql()\n\t\tcase \"Swift\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(swift))\n\t\tcase \"TypeScript\":\n\t\t\treturn javascript({ jsx: true, typescript: true })\n\t\tcase \"Vue\":\n\t\t\treturn vue()\n\t\tcase \"YAML\":\n\t\t\treturn new LanguageSupport(StreamLanguage.define(yaml))\n\t\tdefault:\n\t\t\tif (DEFAULT_LANGUAGE_ALIAS !== \"js\") {\n\t\t\t\t// This ensures the default language in ProseMirror schema (prosemirror/schema.ts)\n\t\t\t\t// is kept in sync with the default CodeMirror language choice in this file. This is\n\t\t\t\t// important because when a Code Block module has no explicit `language` prop set\n\t\t\t\t// (and thus uses the language from this `default` case), ProseMirror can\u2019t infer\n\t\t\t\t// the actually used language just by looking at module props. So it has to guess.\n\t\t\t\t// And if it guesses wrong, the clipboard-serialized code block will have a wrong\n\t\t\t\t// language attribute.\n\t\t\t\tassertNever(DEFAULT_LANGUAGE_ALIAS)\n\t\t\t}\n\t\t\treturn javascript({ jsx: true, typescript: true })\n\t}\n}\n", "import { closeBrackets, closeBracketsKeymap, completionKeymap } from \"@codemirror/autocomplete\"\nimport { defaultKeymap, indentLess, indentMore } from \"@codemirror/commands\"\nimport { foldKeymap } from \"@codemirror/language\"\nimport { Compartment, EditorSelection } from \"@codemirror/state\"\nimport { EditorView as CodeMirror, highlightSpecialChars, keymap } from \"@codemirror/view\"\nimport { assert, hostInfo, unhandledError } from \"@framerjs/shared\"\nimport { isCommandKeyPressed } from \"@framerjs/shared/src/environment.ts\"\nimport { ensureModulesAreLoaded } from \"code-generation/components/helpers/ensureModulesAreLoaded.ts\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { getModuleProps } from \"document/models/CanvasTree/nodes/utils/compileRichText.tsx\"\nimport type { RawControlProps } from \"document/models/controlProps/RawControlProp.ts\"\nimport { filterComponentPresetControls } from \"document/models/controlProps/filterComponentPresetControls.ts\"\nimport { getControlPropValues } from \"document/models/controlProps/getControlPropValues.ts\"\nimport { isEqual } from \"library/index.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { escapeHTML } from \"library/render/utils/dom.ts\"\nimport { GapCursor } from \"prosemirror-gapcursor\"\nimport { redo, undo } from \"prosemirror-history\"\nimport type { Node as PMNode, ResolvedPos } from \"prosemirror-model\"\nimport type { Selection, SelectionBookmark } from \"prosemirror-state\"\nimport {\n\tNodeSelection as PMNodeSelection,\n\tSelection as PMSelection,\n\tTextSelection as PMTextSelection,\n} from \"prosemirror-state\"\nimport type { Mappable } from \"prosemirror-transform\"\nimport type { EditorView, NodeView } from \"prosemirror-view\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport {\n\ttype ModuleNode,\n\tgetInteroperableLanguageClassName,\n\tgetLanguage,\n\tisModuleNode,\n} from \"prosemirror/schema/module.ts\"\nimport { entries } from \"utils/entries.ts\"\nimport { isDefined, isNullish, isString } from \"utils/typeChecks.ts\"\nimport type { ComponentPresets } from \"../getModuleNodeViewConstructor.ts\"\nimport * as styles from \"./CodeBlockView.styles.ts\"\nimport { codeBlockPluginKey } from \"./codeBlockPlugin.ts\"\nimport { createBaseTheme } from \"./themes/createBaseTheme.ts\"\nimport { createCodeMirrorThemeByThemeDefinition } from \"./themes/createCodeMirrorThemeByThemeDefinition.ts\"\nimport { type ThemeOverrideProps, createOverrideTheme } from \"./themes/createOverrideTheme.ts\"\nimport { createSyntaxHighlightByThemeDefinition } from \"./themes/createSyntaxHighlightByThemeDefinition.ts\"\nimport { type ThemeProps, getThemeDefinition } from \"./themes/getThemeDefinition.ts\"\nimport { getLanguageForCodeBlock } from \"./utils/getLanguageForCodeBlock.ts\"\n\ninterface CodeBlockProps {\n\tcode: string\n\tlanguage: string\n}\n\ninterface CodeBlockPresetProps extends ThemeProps, ThemeOverrideProps {}\n\nexport function isCodeBlockIdentifier(identifier: string) {\n\treturn hostInfo.isProduction\n\t\t? identifier.startsWith(\"module:pVk4QsoHxASnVtUBp6jr/\")\n\t\t: identifier.startsWith(\"module:6eN18igOQtrq1Mhbdl4w/\")\n}\n\n// Copied from https://github.com/ProseMirror/prosemirror-state/blob/master/src/selection.ts#L309\nclass TextBookmark {\n\tconstructor(\n\t\treadonly anchor: number,\n\t\treadonly head: number,\n\t) {}\n\n\tmap(mapping: Mappable) {\n\t\tconst newAnchor = mapping.map(this.anchor)\n\t\tconst newHead = mapping.map(this.head)\n\n\t\treturn new TextBookmark(newAnchor, newHead)\n\t}\n\n\tresolve(doc: PMNode) {\n\t\tconst resolvedAnchor = doc.resolve(this.anchor)\n\t\tconst resolvedHead = doc.resolve(this.head)\n\n\t\treturn PMTextSelection.between(resolvedAnchor, resolvedHead)\n\t}\n}\n\nclass CodeBlockBookmark implements SelectionBookmark {\n\tconstructor(\n\t\treadonly anchor: number,\n\t\treadonly cmSelection: EditorSelection,\n\t) {}\n\n\tmap(mapping: Mappable) {\n\t\tconst { deleted, pos: newAnchor } = mapping.mapResult(this.anchor)\n\n\t\tif (deleted) {\n\t\t\treturn new TextBookmark(newAnchor, newAnchor)\n\t\t}\n\n\t\treturn new CodeBlockBookmark(newAnchor, this.cmSelection)\n\t}\n\n\tresolve(doc: PMNode) {\n\t\tconst $anchor = doc.resolve(this.anchor)\n\t\tconst node = $anchor.nodeAfter ?? undefined\n\n\t\tif (isModuleNode(node) && isCodeBlockIdentifier(node.attrs.identifier)) {\n\t\t\treturn new CodeBlockSelection($anchor, this.cmSelection)\n\t\t}\n\n\t\treturn PMSelection.near($anchor)\n\t}\n}\n\nclass CodeBlockSelection extends PMNodeSelection {\n\tconstructor(\n\t\t$position: ResolvedPos,\n\t\treadonly cmSelection: EditorSelection,\n\t) {\n\t\tsuper($position)\n\t}\n\n\tstatic is(selection: Selection): selection is CodeBlockSelection {\n\t\treturn selection instanceof CodeBlockSelection\n\t}\n\n\toverride getBookmark() {\n\t\treturn new CodeBlockBookmark(this.anchor, this.cmSelection)\n\t}\n\n\toverride eq(other: PMSelection) {\n\t\tif (other instanceof CodeBlockSelection) {\n\t\t\treturn super.eq(other) && this.cmSelection.eq(other.cmSelection)\n\t\t}\n\n\t\treturn false\n\t}\n}\n\nexport class CodeBlockView implements NodeView {\n\treadonly dom = document.createElement(\"div\")\n\n\tprivate previousLanguage: string | undefined\n\n\tprivate readonly languageCompartment = new Compartment()\n\tprivate readonly editableCompartment = new Compartment()\n\tprivate readonly themeCompartment = new Compartment()\n\n\tprivate codeMirrorView: CodeMirror | undefined\n\n\t// This flag is true if we are updating CodeMirror from ProseMirror.\n\tprivate isProseMirrorUpdate = false\n\n\tconstructor(\n\t\tprivate readonly engine: BaseEngine,\n\t\tprivate readonly schema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithEmbeds,\n\t\tprivate node: ModuleNode,\n\t\tprivate readonly pmView: EditorView,\n\t\tprivate readonly getPosition: () => number,\n\t\tprivate componentPresets: ComponentPresets | undefined,\n\t\tprivate readonly enabledChangeListeners: Set<VoidFunction>,\n\t\tprivate readonly darkModeChangeListeners: Set<VoidFunction>,\n\t\tprivate readonly componentPresetsChangeListeners: Set<(presets: ComponentPresets | undefined) => void>,\n\t) {\n\t\tthis.dom.classList.add(styles.codeBlock)\n\n\t\tthis.loadComponentDefinition().catch(unhandledError)\n\t\tthis.enabledChangeListeners.add(this.updateEditable)\n\t\tthis.darkModeChangeListeners.add(this.updateTheme)\n\t\tthis.componentPresetsChangeListeners?.add(this.updateComponentPresets)\n\t\tthis.render()\n\t}\n\n\tprivate get componentDefinition() {\n\t\treturn this.engine.componentLoader.reactComponentForIdentifier(this.node.attrs.identifier)\n\t}\n\n\tprivate get hasFocus() {\n\t\treturn Boolean(this.codeMirrorView?.hasFocus)\n\t}\n\n\tprivate getEditableExtension() {\n\t\treturn CodeMirror.editable.of(this.pmView.editable)\n\t}\n\n\tprivate getThemeExtensions() {\n\t\tconst props = this.getPresetProps()\n\n\t\tconst isDark = document.body.dataset.framerTheme === \"dark\"\n\n\t\tconst themeDefinition = getThemeDefinition(props, isDark)\n\n\t\tconst extensions = [\n\t\t\tcreateCodeMirrorThemeByThemeDefinition(themeDefinition),\n\t\t\tcreateSyntaxHighlightByThemeDefinition(themeDefinition),\n\t\t]\n\n\t\tif (props) {\n\t\t\tconst overrideTheme = createOverrideTheme(props)\n\t\t\textensions.push(overrideTheme)\n\t\t}\n\n\t\treturn extensions\n\t}\n\n\t// This is called when the enabled state changes. This context is lost as is passed as a\n\t// callback so we need to use an arrow here.\n\tprivate updateEditable = () => {\n\t\tif (!this.codeMirrorView) return\n\n\t\tconst editableExtension = this.getEditableExtension()\n\n\t\tthis.codeMirrorView.dispatch({\n\t\t\teffects: this.editableCompartment.reconfigure(editableExtension),\n\t\t})\n\t}\n\n\tprivate updateComponentPresets = (presets: ComponentPresets) => {\n\t\tif (presets === this.componentPresets) return\n\n\t\tthis.componentPresets = presets\n\t\tthis.updateTheme()\n\t}\n\n\tprivate async loadComponentDefinition() {\n\t\tif (this.componentDefinition) return\n\n\t\tawait ensureModulesAreLoaded(\n\t\t\t[this.node.attrs.identifier],\n\t\t\tthis.engine.stores.modulesStore,\n\t\t\tthis.engine.componentLoader,\n\t\t)\n\t\tassert(this.componentDefinition, \"Component not loaded\")\n\n\t\tthis.render()\n\t}\n\n\tprivate getProps(): CodeBlockProps {\n\t\tconst { identifier, props: rawControlProps } = this.node.attrs\n\n\t\tconst componentDefinition = this.engine.componentLoader.reactComponentForIdentifier(identifier)\n\t\tconst moduleProps = getModuleProps(componentDefinition, rawControlProps)\n\t\tconst language = moduleProps.language?.value ?? \"\"\n\t\tassert(isString(language), \"Language must be a string\")\n\t\tconst code = moduleProps.code?.value ?? \"\"\n\t\tassert(isString(code), \"Code must be a string\")\n\t\treturn { code, language }\n\t}\n\n\tprivate getPresetProps() {\n\t\tconst { identifier } = this.node.attrs\n\t\tconst controlProps = this.componentPresets?.[identifier]\n\t\tif (!controlProps) return undefined\n\n\t\tconst definition = this.componentDefinition\n\t\tif (!definition) return undefined\n\n\t\tconst controls = filterComponentPresetControls(definition, \"onlyPresets\")\n\t\tconst presetProps = getControlPropValues(controls, controlProps) as CodeBlockPresetProps\n\t\tconst normalizedPresetProps = Object.fromEntries(entries(presetProps).filter(([, value]) => !isNullish(value)))\n\t\tconst hasPresetValues = Object.values(normalizedPresetProps).some(isDefined)\n\n\t\treturn hasPresetValues ? normalizedPresetProps : undefined\n\t}\n\n\tprivate updateTheme = () => {\n\t\tif (!this.codeMirrorView) return\n\n\t\tconst themeExtensions = this.getThemeExtensions()\n\n\t\tthis.codeMirrorView.dispatch({\n\t\t\teffects: this.themeCompartment.reconfigure(themeExtensions),\n\t\t})\n\t}\n\n\tprivate render = () => {\n\t\tif (!this.componentDefinition) return\n\n\t\tthis.isProseMirrorUpdate = true\n\n\t\ttry {\n\t\t\tconst { code, language } = this.getProps()\n\n\t\t\tif (this.codeMirrorView) {\n\t\t\t\tif (language !== this.previousLanguage) {\n\t\t\t\t\tconst languageSupport = getLanguageForCodeBlock(language)\n\n\t\t\t\t\tthis.codeMirrorView.dispatch({\n\t\t\t\t\t\teffects: this.languageCompartment.reconfigure(languageSupport),\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tif (this.codeMirrorView.state.doc.toString() !== code) {\n\t\t\t\t\tthis.codeMirrorView.dispatch({\n\t\t\t\t\t\tchanges: {\n\t\t\t\t\t\t\tfrom: 0,\n\t\t\t\t\t\t\tto: this.codeMirrorView.state.doc.length,\n\t\t\t\t\t\t\tinsert: code,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst languageSupport = getLanguageForCodeBlock(language)\n\t\t\t\tconst editableExtension = this.getEditableExtension()\n\t\t\t\tconst themeExtensions = this.getThemeExtensions()\n\n\t\t\t\tthis.codeMirrorView = new CodeMirror({\n\t\t\t\t\tdoc: code,\n\t\t\t\t\tparent: this.dom,\n\t\t\t\t\textensions: [\n\t\t\t\t\t\t...this.extensions,\n\t\t\t\t\t\tthis.editableCompartment.of(editableExtension),\n\t\t\t\t\t\tcreateBaseTheme(),\n\t\t\t\t\t\tthis.themeCompartment.of(themeExtensions),\n\t\t\t\t\t\tthis.languageCompartment.of(languageSupport),\n\t\t\t\t\t\thighlightSpecialChars(),\n\t\t\t\t\t\tcloseBrackets(),\n\t\t\t\t\t\tkeymap.of([\n\t\t\t\t\t\t\t// Closed-brackets aware backspace\n\t\t\t\t\t\t\t...closeBracketsKeymap,\n\t\t\t\t\t\t\t// A large set of basic bindings\n\t\t\t\t\t\t\t...defaultKeymap,\n\t\t\t\t\t\t\t// Code folding bindings\n\t\t\t\t\t\t\t...foldKeymap,\n\t\t\t\t\t\t\t// Autocompletion keys\n\t\t\t\t\t\t\t...completionKeymap,\n\t\t\t\t\t\t]),\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tthis.previousLanguage = language\n\n\t\t\tthis.updateCMSelection()\n\t\t} finally {\n\t\t\tthis.isProseMirrorUpdate = false\n\t\t}\n\t}\n\n\tprivate updateExtension = CodeMirror.updateListener.of(update => {\n\t\tif (this.isProseMirrorUpdate) return\n\n\t\tconst cmView = this.codeMirrorView\n\t\tif (!cmView || !this.hasFocus) return\n\n\t\tconst cmState = cmView.state\n\n\t\tconst node = this.node\n\t\tconst attrs = node.attrs\n\t\tconst props = attrs.props\n\n\t\tconst pmView = this.pmView\n\t\tconst pmState = pmView.state\n\t\tconst pmSelection = pmState.selection\n\t\tconst position = this.getPosition()\n\n\t\tconst transaction = pmState.tr\n\n\t\tif (update.docChanged) {\n\t\t\tconst newProps: RawControlProps = {\n\t\t\t\t...props,\n\t\t\t\tcode: {\n\t\t\t\t\ttype: ControlType.String,\n\t\t\t\t\tvalue: cmState.doc.toString(),\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tif (!isEqual(newProps, props)) {\n\t\t\t\ttransaction.setNodeMarkup(position, this.schema.nodes.module, {\n\t\t\t\t\t...attrs,\n\t\t\t\t\tprops: newProps,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (update.selectionSet) {\n\t\t\tconst $position = transaction.doc.resolve(position)\n\t\t\tconst selection = new CodeBlockSelection($position, cmState.selection)\n\n\t\t\tif (!selection.eq(pmSelection)) {\n\t\t\t\ttransaction.setSelection(selection)\n\t\t\t}\n\t\t}\n\n\t\tif (transaction.docChanged || transaction.selectionSet) {\n\t\t\tpmView.dispatch(transaction)\n\t\t}\n\t})\n\n\tprivate keymapExtension = keymap.of([\n\t\t{\n\t\t\tkey: \"ArrowUp\",\n\t\t\trun: () => this.maybeEscape(\"line\", -1),\n\t\t},\n\n\t\t{\n\t\t\tkey: \"ArrowLeft\",\n\t\t\trun: () => this.maybeEscape(\"char\", -1),\n\t\t},\n\n\t\t{\n\t\t\tkey: \"ArrowDown\",\n\t\t\trun: () => this.maybeEscape(\"line\", 1),\n\t\t},\n\n\t\t{\n\t\t\tkey: \"ArrowRight\",\n\t\t\trun: () => this.maybeEscape(\"char\", 1),\n\t\t},\n\n\t\t{\n\t\t\tkey: \"Ctrl-z\",\n\t\t\tmac: \"Cmd-z\",\n\t\t\trun: () => undo(this.pmView.state, this.pmView.dispatch) || true,\n\t\t},\n\n\t\t{\n\t\t\tkey: \"Shift-Ctrl-z\",\n\t\t\tmac: \"Shift-Cmd-z\",\n\t\t\trun: () => redo(this.pmView.state, this.pmView.dispatch) || true,\n\t\t},\n\n\t\t{\n\t\t\tkey: \"Ctrl-y\",\n\t\t\tmac: \"Cmd-y\",\n\t\t\trun: () => redo(this.pmView.state, this.pmView.dispatch) || true,\n\t\t},\n\n\t\t{\n\t\t\tkey: \"Backspace\",\n\t\t\trun: () => this.maybeBackspace(),\n\t\t},\n\t\t{\n\t\t\tkey: \"Tab\",\n\t\t\trun: (view): boolean => {\n\t\t\t\treturn indentMore(view)\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tkey: \"Shift-Tab\",\n\t\t\trun: (view): boolean => {\n\t\t\t\treturn indentLess({ state: view.state, dispatch: view.dispatch })\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tkey: \"Escape\",\n\t\t\trun: () => {\n\t\t\t\tthis.pmView.focus()\n\t\t\t\treturn true\n\t\t\t},\n\t\t},\n\t])\n\n\tprivate copyExtension = CodeMirror.domEventHandlers({\n\t\tcopy: event => {\n\t\t\tconst cmView = this.codeMirrorView\n\t\t\tif (!cmView) return\n\n\t\t\tconst clipboardData = event.clipboardData\n\t\t\tif (!clipboardData) return\n\n\t\t\tif (this.shouldIgnoreCopyCutEvent()) return\n\n\t\t\tconst cmState = cmView.state\n\t\t\tconst cmSelection = cmState.selection\n\t\t\tconst main = cmSelection.main\n\n\t\t\tconst code = cmState.doc.sliceString(main.from, main.to)\n\t\t\tconst props = this.getProps()\n\t\t\tconst className = `class=\"${getInteroperableLanguageClassName(getLanguage(props.language))}\"`\n\n\t\t\tclipboardData.setData(\"text/plain\", code)\n\t\t\tclipboardData.setData(\"text/html\", `<pre ${className}><code ${className}>${escapeHTML(code)}</code></pre>`)\n\n\t\t\treturn true\n\t\t},\n\t})\n\n\tprivate extensions = [this.updateExtension, this.keymapExtension, this.copyExtension]\n\n\tupdate(node: PMNode) {\n\t\tif (!isModuleNode(node)) return false\n\t\tif (!isCodeBlockIdentifier(node.attrs.identifier)) return false\n\n\t\tthis.node = node\n\t\tthis.render()\n\n\t\treturn true\n\t}\n\n\tprivate updateCMSelection() {\n\t\tconst cmView = this.codeMirrorView\n\t\tif (!cmView || !this.hasFocus) return\n\n\t\tconst pmView = this.pmView\n\t\tconst pmState = pmView.state\n\t\tconst pmSelection = pmState.selection\n\n\t\tif (!CodeBlockSelection.is(pmSelection)) return\n\n\t\tconst cmState = cmView.state\n\t\tconst cmSelection = cmState.selection\n\n\t\tconst newSelection = pmSelection.cmSelection\n\t\tif (newSelection.eq(cmSelection)) return\n\n\t\tconst code = cmState.doc.toString()\n\t\tfor (const range of newSelection.ranges) {\n\t\t\t// If the selection is outside the document, we can't update it.\n\t\t\tif (range.from > code.length || range.to > code.length) return\n\t\t}\n\n\t\tcmView.dispatch({ selection: newSelection })\n\t}\n\n\tprivate updatePMSelection() {\n\t\tconst cmView = this.codeMirrorView\n\t\tif (!cmView || !this.hasFocus) return\n\n\t\tconst pmView = this.pmView\n\t\tconst pmState = pmView.state\n\t\tconst pmSelection = pmState.selection\n\n\t\tif (CodeBlockSelection.is(pmSelection)) return\n\n\t\tconst pmPosition = this.getPosition()\n\t\tconst $pmPosition = pmState.doc.resolve(pmPosition)\n\n\t\tconst pluginState = codeBlockPluginKey.getState(pmState)\n\t\tconst previousPosition = pluginState?.previousSelection?.head ?? 0\n\n\t\tconst cmPosition = pmPosition >= previousPosition ? 0 : cmView.state.doc.length\n\t\tconst newCMSelection = EditorSelection.single(cmPosition)\n\n\t\tconst newPMSelection = new CodeBlockSelection($pmPosition, newCMSelection)\n\t\tif (newPMSelection.eq(pmSelection)) return\n\n\t\tconst transaction = pmState.tr\n\t\ttransaction.setSelection(newPMSelection)\n\t\tpmView.dispatch(transaction)\n\t}\n\n\t// From https://prosemirror.net/examples/codemirror/\n\tprivate maybeEscape(unit: \"char\" | \"line\", direction: -1 | 1) {\n\t\tconst cmView = this.codeMirrorView\n\t\tassert(cmView, \"Can't find CodeMirror instance\")\n\n\t\tconst cmState = cmView.state\n\t\tconst cmSelection = cmState.selection\n\n\t\tconst main = cmSelection.main\n\t\tif (!main.empty) return false\n\n\t\tconst line = cmState.doc.lineAt(main.head)\n\n\t\tif (direction === -1) {\n\t\t\t// Check if the cursor is at the start of the document.\n\t\t\tconst from = unit === \"line\" ? line.from : main.from\n\t\t\tif (from > 0) return false\n\t\t} else {\n\t\t\t// Check if the cursor is at the end of the document.\n\t\t\tconst to = unit === \"line\" ? line.to : main.to\n\t\t\tif (to < cmState.doc.length) return false\n\t\t}\n\n\t\tlet targetPosition = this.getPosition()\n\t\tif (direction === 1) targetPosition += this.node.nodeSize\n\n\t\tconst pmView = this.pmView\n\t\tconst pmState = pmView.state\n\n\t\tconst $targetPosition = pmState.doc.resolve(targetPosition)\n\t\tlet newSelection = PMSelection.near($targetPosition, direction)\n\n\t\tif (newSelection instanceof PMNodeSelection) {\n\t\t\tnewSelection = new GapCursor($targetPosition)\n\t\t}\n\n\t\tconst transaction = pmState.tr\n\n\t\ttransaction.setSelection(newSelection)\n\t\t// TODO: Fix for gap cursor.\n\t\t// transaction.scrollIntoView()\n\n\t\tpmView.dispatch(transaction)\n\t\tpmView.focus()\n\n\t\treturn true\n\t}\n\n\tprivate maybeBackspace() {\n\t\tconst cmView = this.codeMirrorView\n\t\tassert(cmView, \"Can't find CodeMirror instance\")\n\n\t\tconst cmState = cmView.state\n\t\tif (cmState.doc.length > 0) return false\n\n\t\tconst position = this.getPosition()\n\n\t\tconst pmView = this.pmView\n\t\tconst pmState = pmView.state\n\t\tconst pmTransaction = pmState.tr\n\n\t\tpmTransaction.delete(position, position + 1)\n\n\t\tconst $position = pmTransaction.doc.resolve(position)\n\t\tconst newSelection = PMSelection.near($position, -1)\n\t\tpmTransaction.setSelection(newSelection)\n\n\t\tpmView.dispatch(pmTransaction)\n\t\tpmView.focus()\n\n\t\treturn true\n\t}\n\n\tstopEvent(event: Event) {\n\t\tif ((event.type === \"copy\" || event.type === \"cut\") && this.shouldIgnoreCopyCutEvent()) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Let Cmd/Ctrl+S bubble to ProseMirror so it can trigger saveChanges\n\t\tif (event instanceof KeyboardEvent) {\n\t\t\tif (isCommandKeyPressed(event) && event.key === \"s\") {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n\n\t/**\n\t * Check if copy/cut events should be ignored (i.e., passed to ProseMirror instead of\n\t * being handled by CodeMirror).\n\t *\n\t * This returns true when the DOM selection begins and ends outside this CodeMirror.\n\t * This happens when:\n\t * - CodeMirror is the first (or last) element in ProseMirror\n\t * - in ProseMirror, you press Cmd+A and then Cmd+C\n\t * - without this check, we'd end up copying an empty string because CodeMirror's\n\t *   selection is not in sync with the actual DOM selection (and is empty)\n\t *\n\t * This basically copies logic from https://github.com/codemirror/view/pull/79,\n\t * but for our custom copy-paste handler.\n\t */\n\tprivate shouldIgnoreCopyCutEvent() {\n\t\tconst cmView = this.codeMirrorView\n\t\tif (!cmView) return false\n\n\t\tconst domSel = window.getSelection()\n\t\treturn Boolean(\n\t\t\tdomSel?.anchorNode &&\n\t\t\tdomSel.focusNode &&\n\t\t\t!cmView.contentDOM.contains(domSel.anchorNode) &&\n\t\t\t!cmView.contentDOM.contains(domSel.focusNode),\n\t\t)\n\t}\n\n\tselectNode() {\n\t\tthis.focusCodeMirror()\n\t\tthis.updatePMSelection()\n\t\tthis.render()\n\t}\n\n\tdeselectNode() {\n\t\tthis.focusProseMirror()\n\t}\n\n\tignoreMutation() {\n\t\treturn true\n\t}\n\n\tdestroy() {\n\t\tthis.enabledChangeListeners.delete(this.updateEditable)\n\t\tthis.darkModeChangeListeners.delete(this.updateTheme)\n\t\tthis.componentPresetsChangeListeners?.delete(this.updateComponentPresets)\n\t\tthis.codeMirrorView?.destroy()\n\t\tthis.focusProseMirror()\n\t}\n\n\tprivate focusCodeMirror() {\n\t\t// We need to set focus inside a setImmediate because when shifting\n\t\t// focus from one CodeBlock to another we need to override the\n\t\t// setImmediate that focuses ProseMirror below.\n\t\tsetImmediate(() => {\n\t\t\tthis.codeMirrorView?.focus()\n\t\t})\n\t}\n\n\tprivate focusProseMirror() {\n\t\tsetImmediate(() => {\n\t\t\tconst isMounted = document.body.contains(this.pmView.dom)\n\t\t\tif (isMounted) this.pmView.focus()\n\t\t})\n\t}\n}\n", "import { Button, Popover, Stack, useReadOnly } from \"@framerjs/fresco\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { cx } from \"@linaria/core\"\nimport { useDimensionValue } from \"app/agent/hooks/useDimensionValue.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { DynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { WithLinkUpdate } from \"document/models/CanvasTree/traits/WithLink.ts\"\nimport { type Link, isLink } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport { type Reduced, isFoundAndNotUndefined } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport {\n\ttype SupportedLinkRelValue,\n\tisSupportedLinkRelValueArray,\n\tsupportedLinkRelValues,\n} from \"document/models/SupportedRelValue.ts\"\nimport { ScopeType } from \"document/utils/scopeType.ts\"\nimport type { LinkAttrs } from \"prosemirror/schema/link.ts\"\nimport React from \"react\"\nimport { isArray, isBoolean, isDefined, isString } from \"utils/typeChecks.ts\"\nimport { OpenInNewTabRow, PreserveParamsRow, SmoothScrollRow } from \"../properties/panels/LinkOptionBooleanRow.tsx\"\nimport { LinkRelValuesRow } from \"../properties/panels/LinkRelValuesRow.tsx\"\nimport { PageLinkingRows } from \"../properties/panels/PageLinkingRows.tsx\"\nimport { TrackingIdRow } from \"../properties/panels/TrackingIdRow.tsx\"\nimport { PanelRow } from \"../properties/rows/PanelRow.tsx\"\nimport { doubleColumnClass } from \"../properties/utils/doubleColumn.styles.ts\"\nimport {\n\ttype LinkOptionsVisibility,\n\tgetLinkOptionsAdditionalMenuItems,\n\tuseLinkOptionVisibility,\n} from \"../properties/utils/linkOptions.ts\"\nimport { DarkOnDarkThemeOverride } from \"../shared/DarkOnDarkThemeOverride.tsx\"\nimport { PopoutButtonWithPreviewSuggestion } from \"../shared/PopoutButtonWithPreviewSuggestion.tsx\"\nimport * as styles from \"./PopoverForRichText.styles.ts\"\nimport { type LinkAttrsUpdate, getLinkAttrs } from \"./toolbarUtils.ts\"\n\nfunction isInteractiveElement(element: Element | null) {\n\tif (element instanceof HTMLInputElement) return true\n\tif (element instanceof HTMLTextAreaElement) return true\n\tif (element instanceof HTMLSelectElement) return true\n\treturn false\n}\n\nexport type PageLinkPopoverForRichTextChangeHandler = (\n\tlink: Link,\n\tattrs: Omit<LinkAttrs, \"link\" | \"linkStylePreset\">,\n) => void\n\ninterface Props {\n\tanchor: HTMLElement\n\tscopeType: ScopeType\n\tlink: Reduced<Link>\n\topenInNewTab: Reduced<boolean>\n\tsmoothScroll: Reduced<boolean>\n\tclickTrackingId: Reduced<string | undefined>\n\trelValues: Reduced<readonly SupportedLinkRelValue[] | undefined>\n\tpreserveParams: Reduced<boolean | undefined>\n\tclickTrackingIdAIPrompt: Reduced<string>\n\thasLinkSelected: boolean\n\tonChange: PageLinkPopoverForRichTextChangeHandler\n\tonRemove(): void\n\tdismiss(): void\n}\n\nexport function PageLinkPopoverForRichText({\n\tanchor,\n\tlink,\n\topenInNewTab,\n\tsmoothScroll,\n\tclickTrackingId,\n\trelValues,\n\tpreserveParams,\n\tclickTrackingIdAIPrompt,\n\thasLinkSelected,\n\tscopeType,\n\tonChange,\n\tonRemove,\n\tdismiss,\n}: Props) {\n\tconst isReadOnly = useReadOnly()\n\n\tconst panelPadding = useDimensionValue(\"panelPadding\")\n\n\tconst clearHandler = React.useCallback(() => {\n\t\tonRemove()\n\t\tdismiss()\n\t}, [onRemove, dismiss])\n\n\tconst updateLink = React.useCallback(\n\t\t(updatedLink: Reduced<Link | DynamicValue | undefined>, update: Partial<LinkAttrsUpdate>) => {\n\t\t\tif (isLink(updatedLink)) {\n\t\t\t\tonChange(\n\t\t\t\t\tupdatedLink,\n\t\t\t\t\tgetLinkAttrs(updatedLink, { openInNewTab, smoothScroll, clickTrackingId, relValues, preserveParams }, update),\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tonRemove()\n\t\t\t}\n\t\t},\n\t\t[onChange, onRemove, openInNewTab, smoothScroll, clickTrackingId, relValues, preserveParams],\n\t)\n\n\tconst visibility = useLinkOptionVisibility(link, {\n\t\tlinkClickTrackingId: clickTrackingId,\n\t\tlinkOpenInNewTab: openInNewTab,\n\t\tlinkSmoothScroll: smoothScroll,\n\t\tlinkRelValues: relValues,\n\t\tlinkPreserveParams: preserveParams,\n\t\tanyExternalLinks: false,\n\t\tanyScrollTargets: false,\n\t})\n\n\tReact.useEffect(() => {\n\t\tconst onKeyDown = (event: KeyboardEvent) => {\n\t\t\tswitch (event.key) {\n\t\t\t\tcase \"Escape\":\n\t\t\t\t\tif (!isInteractiveElement(document.activeElement)) {\n\t\t\t\t\t\tdismiss()\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener(\"keydown\", onKeyDown, true)\n\t\treturn () => document.removeEventListener(\"keydown\", onKeyDown, true)\n\t}, [dismiss])\n\n\treturn (\n\t\t<DarkOnDarkThemeOverride>\n\t\t\t<Popover\n\t\t\t\tanchor={anchor}\n\t\t\t\talignSelf=\"center\"\n\t\t\t\tattachTo={[\"bottom\", \"top\"]}\n\t\t\t\toffset={{ x: 0, y: panelPadding + dimensions.values.inputSpacing }}\n\t\t\t\tonClose={dismiss}\n\t\t\t>\n\t\t\t\t<Stack gap={0}>\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tclassName={cx(styles.navigationBar, styles.navigationBarDivider)}\n\t\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\t\tjustifyContent=\"space-between\"\n\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\tgap={0}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className={styles.title}>Link</span>\n\t\t\t\t\t\t{hasLinkSelected && (\n\t\t\t\t\t\t\t<Button variant=\"link\" onClick={clearHandler} enabled={!isReadOnly} className={styles.clearButton}>\n\t\t\t\t\t\t\t\tClear\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tpaddingTop={dimensions.css.inputSpacing}\n\t\t\t\t\t\tpaddingRight={dimensions.css.popoverPadding}\n\t\t\t\t\t\tpaddingBottom={dimensions.css.inputSpacing}\n\t\t\t\t\t\tpaddingLeft={dimensions.css.inputSpacing}\n\t\t\t\t\t\tclassName={styles.container}\n\t\t\t\t\t\tgap={0}\n\t\t\t\t\t>\n\t\t\t\t\t\t<PageLinkingRows\n\t\t\t\t\t\t\tlink={link}\n\t\t\t\t\t\t\tonChange={newLink => updateLink(newLink, {})}\n\t\t\t\t\t\t\tsupportsPageLinks={scopeType !== ScopeType.DesignPage && scopeType !== ScopeType.CanvasPage}\n\t\t\t\t\t\t\tsupportsVariables={false}\n\t\t\t\t\t\t\tautoFocusLinkInput\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{visibility.linkOpenInNewTab && (\n\t\t\t\t\t\t\t<OpenInNewTabRow\n\t\t\t\t\t\t\t\tvalue={openInNewTab}\n\t\t\t\t\t\t\t\tsupportsVariables={false}\n\t\t\t\t\t\t\t\tonChange={newOpenInNewTab => updateLink(link, { openInNewTab: newOpenInNewTab })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{visibility.linkSmoothScroll && (\n\t\t\t\t\t\t\t<SmoothScrollRow\n\t\t\t\t\t\t\t\tvalue={smoothScroll}\n\t\t\t\t\t\t\t\tsupportsVariables={false}\n\t\t\t\t\t\t\t\tonChange={newSmoothScroll => updateLink(link, { smoothScroll: newSmoothScroll })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{/* TODO - Let's move the value checking into the calculation of the visibility */}\n\t\t\t\t\t\t{visibility.linkClickTrackingId && isFoundAndNotUndefined(clickTrackingId) && (\n\t\t\t\t\t\t\t<TrackingIdRow\n\t\t\t\t\t\t\t\taiPrompt={clickTrackingIdAIPrompt}\n\t\t\t\t\t\t\t\ttrackingId={clickTrackingId}\n\t\t\t\t\t\t\t\tsupportsVariables={false}\n\t\t\t\t\t\t\t\tonChange={newClickTrackingId => updateLink(link, { clickTrackingId: newClickTrackingId })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{visibility.linkRelValues && (\n\t\t\t\t\t\t\t<LinkRelValuesRow\n\t\t\t\t\t\t\t\treadOnly={isReadOnly}\n\t\t\t\t\t\t\t\tvalue={relValues}\n\t\t\t\t\t\t\t\tonChange={newRelValues => updateLink(link, { relValues: newRelValues })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{visibility.linkPreserveParams && (\n\t\t\t\t\t\t\t<PreserveParamsRow\n\t\t\t\t\t\t\t\tvalue={preserveParams}\n\t\t\t\t\t\t\t\tsupportsVariables={false}\n\t\t\t\t\t\t\t\tonChange={newPreserveParams => updateLink(link, { preserveParams: newPreserveParams })}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<AddLinkOptionRow\n\t\t\t\t\t\t\tupdateLink={updateLink}\n\t\t\t\t\t\t\tlink={link}\n\t\t\t\t\t\t\tclickTrackingId={clickTrackingId}\n\t\t\t\t\t\t\topenInNewTab={openInNewTab}\n\t\t\t\t\t\t\tsmoothScroll={smoothScroll}\n\t\t\t\t\t\t\trelValues={relValues}\n\t\t\t\t\t\t\tpreserveParams={preserveParams}\n\t\t\t\t\t\t\tvisibility={visibility}\n\t\t\t\t\t\t\treadOnly={isReadOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t</Popover>\n\t\t</DarkOnDarkThemeOverride>\n\t)\n}\n\ninterface AddLinkOptionRowProps extends Pick<\n\tProps,\n\t\"link\" | \"clickTrackingId\" | \"openInNewTab\" | \"smoothScroll\" | \"relValues\" | \"preserveParams\"\n> {\n\tupdateLink: (link: Reduced<Link | DynamicValue | undefined>, update: Partial<LinkAttrsUpdate>) => void\n\tvisibility: LinkOptionsVisibility\n\treadOnly: boolean\n}\nfunction AddLinkOptionRow({\n\tupdateLink,\n\tlink,\n\tclickTrackingId,\n\topenInNewTab,\n\tsmoothScroll,\n\trelValues,\n\tpreserveParams,\n\tvisibility,\n\treadOnly,\n}: AddLinkOptionRowProps) {\n\tconst engine = useBaseEngine()\n\n\tconst onClick = React.useCallback(\n\t\t(event: React.MouseEvent<HTMLElement>) => {\n\t\t\tconst menu = getLinkOptionsAdditionalMenuItems(\n\t\t\t\tlink,\n\t\t\t\t{\n\t\t\t\t\tlinkClickTrackingId: clickTrackingId,\n\t\t\t\t\tlinkOpenInNewTab: openInNewTab,\n\t\t\t\t\tlinkSmoothScroll: smoothScroll,\n\t\t\t\t\tlinkRelValues: relValues,\n\t\t\t\t\tlinkPreserveParams: preserveParams,\n\t\t\t\t},\n\t\t\t\tvisibility,\n\t\t\t\t(updateKey, updateValue) => {\n\t\t\t\t\tupdateLink(link, getLinkAttrsForMenuUpdate(updateKey, updateValue))\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tengine.stores.contextMenuStore.show(menu, { location: { x: event.clientX, y: event.clientY } })\n\t\t},\n\t\t[updateLink, link, clickTrackingId, openInNewTab, smoothScroll, relValues, preserveParams, visibility],\n\t)\n\n\tif (readOnly) return null\n\n\tif (\n\t\tisDefined(clickTrackingId) &&\n\t\tisDefined(openInNewTab) &&\n\t\tisDefined(smoothScroll) &&\n\t\tisDefined(preserveParams) &&\n\t\tisArray(relValues) &&\n\t\trelValues.length >= supportedLinkRelValues.length\n\t) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<PanelRow title=\" \">\n\t\t\t<PopoutButtonWithPreviewSuggestion type=\"linkOptions\" className={doubleColumnClass} onClick={onClick} />\n\t\t</PanelRow>\n\t)\n}\n\nfunction getLinkAttrsForMenuUpdate<T extends keyof WithLinkUpdate>(\n\tupdateKey: T,\n\tupdateValue: WithLinkUpdate[T],\n): Partial<LinkAttrsUpdate> {\n\tconst result: Partial<LinkAttrsUpdate> = {}\n\n\tif (updateKey === \"linkClickTrackingId\" && isString(updateValue)) {\n\t\tresult.clickTrackingId = updateValue\n\t}\n\n\tif (updateKey === \"linkOpenInNewTab\" && isBoolean(updateValue)) {\n\t\tresult.openInNewTab = updateValue\n\t}\n\n\tif (updateKey === \"linkSmoothScroll\" && isBoolean(updateValue)) {\n\t\tresult.smoothScroll = updateValue\n\t}\n\n\tif (updateKey === \"linkRelValues\" && isSupportedLinkRelValueArray(updateValue)) {\n\t\tresult.relValues = updateValue\n\t}\n\n\tif (updateKey === \"linkPreserveParams\" && isBoolean(updateValue)) {\n\t\tresult.preserveParams = updateValue\n\t}\n\n\treturn result\n}\n", "import { SegmentedControl, SegmentedControlItem } from \"@framerjs/fresco\"\nimport { assert, shouldBeNever } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { getVariableValue } from \"document/models/CanvasTree/nodes/utils/getVariableValue.ts\"\nimport { isComputedValue } from \"document/models/CanvasTree/traits/ComputedValue.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { VariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { WithLink } from \"document/models/CanvasTree/traits/WithLink.ts\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport React from \"react\"\nimport { isBoolean, isString, isUndefined } from \"utils/typeChecks.ts\"\nimport { VariableReferenceButton } from \"../../shared/VariableReferenceButton.tsx\"\nimport { PanelRow } from \"../rows/PanelRow.tsx\"\nimport { createVariableInScope } from \"../utils/createVariableInScope.ts\"\nimport { doubleColumn } from \"../utils/doubleColumn.ts\"\n\ninterface LinkOptionBooleanRowProps {\n\tvalue: Reduced<boolean | VariableReference | undefined>\n\tdefaultValue?: boolean\n\tdefaultVariableValue?: boolean\n\tvariableName?: string\n\tonChange: (value: boolean | VariableReference | undefined) => void\n\ttitle: string\n\ttrueOptionTitle?: string\n\tfalseOptionTitle?: string\n\tcanRemove?: boolean\n\ttraitTypeKey: keyof WithLink\n}\nexport const LinkOptionBooleanRow = React.memo(function LinkOptionBooleanRow({\n\tvalue,\n\tdefaultValue = false,\n\tdefaultVariableValue = false,\n\tvariableName,\n\tonChange,\n\ttitle,\n\ttrueOptionTitle,\n\tfalseOptionTitle,\n\tcanRemove,\n\ttraitTypeKey,\n}: LinkOptionBooleanRowProps) {\n\tconst engine = useBaseEngine()\n\n\tconst supportsVariables = isString(variableName)\n\tconst onCreateVariable = engine.scheduler.wrapHandler((scopeId: NodeID) => {\n\t\tassert(isString(variableName), \"variableName is required\")\n\t\tconst variableRef = createVariableInScope({\n\t\t\tengine,\n\t\t\tscopeId,\n\t\t\ttype: ControlType.Boolean,\n\t\t\tname: variableName,\n\t\t\tinitialValue: isBoolean(value) ? value : defaultValue,\n\t\t})\n\t\tif (variableRef) onChange(variableRef)\n\t})\n\n\tconst onRemoveDynamicValue = engine.scheduler.wrapHandler(() => {\n\t\tif (!isDynamicValue(value)) return\n\t\tif (isVariableReference(value)) {\n\t\t\tconst variableValue = getVariableValue(engine, value)\n\t\t\tonChange(isBoolean(variableValue) ? variableValue : defaultVariableValue)\n\t\t} else if (isComputedValue(value)) {\n\t\t\tonChange(defaultVariableValue)\n\t\t} else {\n\t\t\tshouldBeNever(value)\n\t\t}\n\t})\n\n\tconst onSelectVariableReference = engine.scheduler.wrapHandler((variableRef: VariableReference) => {\n\t\tonChange(variableRef)\n\t})\n\n\tconst traitTypeKeys = React.useMemo<[string]>(() => {\n\t\treturn [traitTypeKey]\n\t}, [traitTypeKey])\n\n\treturn (\n\t\t<PanelRow\n\t\t\ttitle={title}\n\t\t\tvariableReferenceType={ControlType.Boolean}\n\t\t\tvariableType={ControlType.Boolean}\n\t\t\tonCreateVariable={onCreateVariable}\n\t\t\tonRemoveDynamicValue={onRemoveDynamicValue}\n\t\t\tonDelete={canRemove ? () => onChange(undefined) : undefined}\n\t\t\tonSelectVariable={onSelectVariableReference}\n\t\t\tdynamicValue={isDynamicValue(value) ? value : null}\n\t\t\tsupportsVariables={supportsVariables}\n\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t>\n\t\t\t{isVariableReference(value) ? (\n\t\t\t\t<VariableReferenceButton expectedType={ControlType.Boolean} reference={value} onRemove={onRemoveDynamicValue} />\n\t\t\t) : (\n\t\t\t\t<SegmentedControl style={doubleColumn}>\n\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\tidentifier={true}\n\t\t\t\t\t\ttitle={trueOptionTitle ?? Dictionary.Yes}\n\t\t\t\t\t\tselected={value === true}\n\t\t\t\t\t\tonSelect={onChange}\n\t\t\t\t\t/>\n\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\tidentifier={false}\n\t\t\t\t\t\ttitle={falseOptionTitle ?? Dictionary.No}\n\t\t\t\t\t\tselected={value === false}\n\t\t\t\t\t\tonSelect={onChange}\n\t\t\t\t\t/>\n\t\t\t\t</SegmentedControl>\n\t\t\t)}\n\t\t</PanelRow>\n\t)\n})\n\ninterface WrappedLinkOptionBooleanRowProps extends Pick<LinkOptionBooleanRowProps, \"value\" | \"onChange\"> {\n\tsupportsVariables: boolean\n}\n\nexport const OpenInNewTabRow = React.memo(function OpenInNewTabRow({\n\tsupportsVariables,\n\t...props\n}: WrappedLinkOptionBooleanRowProps) {\n\treturn (\n\t\t<LinkOptionBooleanRow\n\t\t\t{...props}\n\t\t\tvariableName={supportsVariables ? \"newTab\" : undefined}\n\t\t\tdefaultVariableValue={true}\n\t\t\ttitle=\"New Tab\"\n\t\t\ttraitTypeKey=\"linkOpenInNewTab\"\n\t\t/>\n\t)\n})\n\nexport const SmoothScrollRow = React.memo(function SmoothScrollRow({\n\tsupportsVariables,\n\t...props\n}: WrappedLinkOptionBooleanRowProps) {\n\treturn (\n\t\t<LinkOptionBooleanRow\n\t\t\t{...props}\n\t\t\tvariableName={supportsVariables ? \"Smooth Scroll\" : undefined}\n\t\t\tdefaultVariableValue={true}\n\t\t\ttitle=\"Scroll\"\n\t\t\ttrueOptionTitle={Dictionary.Smooth}\n\t\t\tfalseOptionTitle=\"Instant\"\n\t\t\ttraitTypeKey=\"linkSmoothScroll\"\n\t\t/>\n\t)\n})\n\nexport const PreserveParamsRow = React.memo(function PreserveParamsRow({\n\tsupportsVariables,\n\t...props\n}: WrappedLinkOptionBooleanRowProps) {\n\tif (isUndefined(props.value)) return null\n\n\treturn (\n\t\t<LinkOptionBooleanRow\n\t\t\t{...props}\n\t\t\tvariableName={supportsVariables ? \"Preserve Parameters\" : undefined}\n\t\t\ttitle={Dictionary.Parameters}\n\t\t\ttrueOptionTitle=\"Keep\"\n\t\t\tfalseOptionTitle=\"Ignore\"\n\t\t\tcanRemove\n\t\t\ttraitTypeKey=\"linkPreserveParams\"\n\t\t/>\n\t)\n})\n", "import { isMixed, shouldBeNever } from \"@framerjs/shared\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport type { ComputedValue } from \"document/models/CanvasTree/traits/ComputedValue.ts\"\nimport { createComputedValue, isComputedValue } from \"document/models/CanvasTree/traits/ComputedValue.ts\"\nimport type { DynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { createFetchDataValue } from \"document/models/CanvasTree/traits/FetchDataValue.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { WithLink } from \"document/models/CanvasTree/traits/WithLink.ts\"\nimport type { Link } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport { isLink, isLinkToURL } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { useEffect, useId, useMemo, useRef } from \"react\"\nimport { DynamicValueButtonFromContext } from \"../../shared/DynamicValueButtonFromContext.tsx\"\nimport { LinkInput } from \"../../shared/LinkInput.tsx\"\nimport { popoutWindow } from \"../../shared/PopoutWindow.tsx\"\nimport type { SupportsFetchDataValuesProps } from \"../codeComponentRows/WithSupportsFetchDataValuesProps.ts\"\nimport { PanelRow } from \"../rows/PanelRow.tsx\"\nimport { useVariableProviderInfo } from \"../useVariableProviderInfo.ts\"\nimport { createVariableInScope } from \"../utils/createVariableInScope.ts\"\nimport { doubleColumnClass } from \"../utils/doubleColumn.styles.ts\"\nimport { PageLinkScrollTargetRows } from \"./PageLinkScrollTargetRows.tsx\"\nimport { PageLinkSlugRow } from \"./PageLinkSlugRow.tsx\"\nimport { usePageLinkPath } from \"./usePageLinkPath.ts\"\n\nexport const linkInputId = \"framerUI-link-input\"\n\nconst traitTypeKeys: (keyof WithLink)[] = [\"link\"]\n\nconst title = \"Link To\"\n\nconst supportedVariableTypes = [ControlType.Link, ControlType.File] as const\nconst allowedFileTypes = [\"*\"] as const\n\nexport type Props = {\n\tlink: Reduced<Link | DynamicValue | undefined>\n\tsupportsPageLinks: boolean\n\t/* Required only when used in the properties panel */\n\tsupportsVariables?: boolean\n\tsupportsComputedValues?: boolean\n\tsupportsSlugVariables?: boolean\n\tcomputedValuePopoutId?: string\n\tconstantChange?: boolean\n\tonChange: (value: Link | DynamicValue | undefined) => void\n\tonDelete?: () => void\n\tautoFocusLinkInput?: boolean\n\topenLinkCompletionsOnFocus?: boolean\n} & SupportsFetchDataValuesProps\n\nexport function PageLinkingRows({\n\tlink,\n\tonChange,\n\tonDelete,\n\tsupportsPageLinks,\n\tconstantChange,\n\tsupportsSlugVariables,\n\tautoFocusLinkInput = false,\n\topenLinkCompletionsOnFocus = true,\n\tsupportsVariables = false,\n\tsupportsComputedValues = false,\n\tsupportsFetchDataValues = false,\n\tnodeIds: externalNodeIds,\n\tcomputedValuePopoutId: externalComputedValuePopoutId,\n}: Props) {\n\tconst variableInfo = useVariableProviderInfo(supportsVariables)\n\tconst latestValuesRef = useRef<Link | null>(null)\n\n\tconst engine = useBaseEngine()\n\tconst tree = useEngineState(() => engine.tree, [], EngineChange.Tree)\n\n\tuseEffect(() => {\n\t\tif (isLink(link)) latestValuesRef.current = link\n\t}, [link])\n\n\t// Node ids are only required for the fetch feature. That is made type safe via\n\t// `SupportsFetchDataValuesProps`. This fallback is only needed to satisfy types.\n\tconst nodeIds = useMemo(() => externalNodeIds ?? [], [externalNodeIds])\n\n\tconst setPath = usePageLinkPath({ link, onChange })\n\n\tconst fallbackComputedValuePopoutId = useId()\n\tconst computedValuePopoutId = externalComputedValuePopoutId ?? fallbackComputedValuePopoutId\n\n\tconst createLinkVariable = engine.scheduler.wrapHandler((scopeId: NodeID) => {\n\t\tconst variableRef = createVariableInScope({\n\t\t\tengine,\n\t\t\tscopeId,\n\t\t\ttype: ControlType.Link,\n\t\t\tname: \"link\",\n\t\t\tinitialValue: isLinkToURL(link) ? link.url : \"\",\n\t\t\tshowEditor: false,\n\t\t})\n\t\tif (variableRef) onChange(variableRef)\n\t})\n\n\tconst removeDynamicLinkValue = engine.scheduler.wrapHandler(() => {\n\t\tif (!isDynamicValue(link)) return\n\t\tif (isVariableReference(link)) {\n\t\t\tonChange(latestValuesRef.current ?? undefined)\n\t\t} else if (isComputedValue(link)) {\n\t\t\tonChange(undefined)\n\t\t} else {\n\t\t\tshouldBeNever(link)\n\t\t}\n\t})\n\n\tconst updateDynamicLinkValue = engine.scheduler.wrapHandler((dynamicValue: DynamicValue) => {\n\t\tonChange(dynamicValue)\n\t})\n\n\tconst selectFetchDataValueForLink = () => {\n\t\tconst currentValue = isLink(link) ? link : undefined\n\t\tconst fetchDataValue = createFetchDataValue({ type: ControlType.Link, value: currentValue })\n\t\tconst computedValue = createComputedValue(ControlType.Link, fetchDataValue, [])\n\n\t\tselectComputedLinkValue(computedValue)\n\n\t\treturn computedValue\n\t}\n\n\tconst selectComputedLinkValue = (value: ComputedValue) => {\n\t\tupdateDynamicLinkValue(value)\n\t\tpopoutWindow.navigation.presentPopout(computedValuePopoutId)\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<PanelRow\n\t\t\t\ttitle={title}\n\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\tvariableReferenceType={supportedVariableTypes}\n\t\t\t\tvariableType={supportedVariableTypes}\n\t\t\t\tallowedFileTypes={allowedFileTypes}\n\t\t\t\tvariableCreationType={ControlType.Link}\n\t\t\t\tonCreateVariable={createLinkVariable}\n\t\t\t\tonRemoveDynamicValue={removeDynamicLinkValue}\n\t\t\t\tonDelete={onDelete}\n\t\t\t\tdeleteTitle={isMixed(link) ? \"Remove Links\" : \"Remove Link\"}\n\t\t\t\tonSelectVariable={updateDynamicLinkValue}\n\t\t\t\tdynamicValue={isDynamicValue(link) ? link : null}\n\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\t\tcomputedValuePopoutId={computedValuePopoutId}\n\t\t\t\tonSelectComputedValue={selectComputedLinkValue}\n\t\t\t\tsupportsFetchDataValues={supportsFetchDataValues}\n\t\t\t\tonSelectFetchDataValue={selectFetchDataValueForLink}\n\t\t\t>\n\t\t\t\t{isDynamicValue(link) ? (\n\t\t\t\t\t<DynamicValueButtonFromContext\n\t\t\t\t\t\ttitle={title}\n\t\t\t\t\t\tvalue={link}\n\t\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\t\toutputControl={undefined}\n\t\t\t\t\t\texpectedType={ControlType.Link}\n\t\t\t\t\t\tallowedFileTypes={allowedFileTypes}\n\t\t\t\t\t\tonChangeDynamicValue={onChange}\n\t\t\t\t\t\tpopoutId={computedValuePopoutId}\n\t\t\t\t\t\tonRemove={removeDynamicLinkValue}\n\t\t\t\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\t\t\t\tsupportsFetchDataValues={supportsFetchDataValues}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<LinkInput\n\t\t\t\t\t\tid={linkInputId}\n\t\t\t\t\t\ttree={tree}\n\t\t\t\t\t\thideSlugValues\n\t\t\t\t\t\tautoFocus={autoFocusLinkInput}\n\t\t\t\t\t\topenCompletionsOnFocus={openLinkCompletionsOnFocus}\n\t\t\t\t\t\tlink={link}\n\t\t\t\t\t\tvariableInfo={variableInfo}\n\t\t\t\t\t\tclassName={doubleColumnClass}\n\t\t\t\t\t\tconstantChange={constantChange}\n\t\t\t\t\t\tsupportsPageLinks={supportsPageLinks}\n\t\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\t\tonChange={setPath}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</PanelRow>\n\t\t\t<PageLinkSlugRow supportsVariables={supportsSlugVariables} link={link} onChange={setPath} />\n\t\t\t<PageLinkScrollTargetRows\n\t\t\t\tlink={link}\n\t\t\t\tonChange={onChange}\n\t\t\t\tvariableInfo={variableInfo}\n\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t/>\n\t\t</>\n\t)\n}\n", "import { AnnotationKey } from \"@framerjs/framer-runtime/crossorigin\"\nimport { assertNever } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { useWebPageScrollTargetOptions } from \"document/base-engine/BaseEngineStore.utils.ts\"\nimport type { CanvasNode, NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { isDataRepeater } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport type { DynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { VariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { createVariableReference, isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { Link, LinkVariables } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport { createLink, getLinkHashVariable, isLinkToWebPage } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport type { ResolvedCollectionItemSelector } from \"document/models/CanvasTree/traits/utils/ResolvedCollectionItemSelector.ts\"\nimport { isResolvedCollectionItemSelector } from \"document/models/CanvasTree/traits/utils/ResolvedCollectionItemSelector.ts\"\nimport type { VariableProviderInfo } from \"document/utils/VariableProviderInfo.ts\"\nimport { memo } from \"react\"\nimport { isString, isUndefined } from \"utils/typeChecks.ts\"\nimport { isSlugVariableFromDataSource } from \"utils/variableMetadata.ts\"\nimport {\n\tScrollSectionCollectionItemRow,\n\tgetSectionDataRepeaterIdentifierForTarget,\n} from \"../rows/EffectRows/shared/EffectScrollTargetRow.tsx\"\nimport { PanelRow } from \"../rows/PanelRow.tsx\"\nimport { LinkScrollTargetPopoutButton } from \"./LinkScrollTargetPopoutButton.tsx\"\n\ninterface Props {\n\tlink: Reduced<Link | DynamicValue | undefined>\n\tvariableInfo: VariableProviderInfo | null\n\tsupportsVariables: boolean\n\tonChange: (value: Link) => void\n}\n\nexport const PageLinkScrollTargetRows = memo(function PageLinkScrollTargetRows({\n\tlink,\n\tvariableInfo,\n\tsupportsVariables,\n\tonChange,\n}: Props) {\n\tconst engine = useBaseEngine()\n\n\tconst webPageId = isLinkToWebPage(link) ? link.webPageId : undefined\n\tconst scrollTargetOptions = useWebPageScrollTargetOptions(webPageId)\n\n\tif (!scrollTargetOptions || scrollTargetOptions.size === 0) return null\n\n\tconst selectedScrollTarget = isLinkToWebPage(link) ? link.hash : undefined\n\tconst selectedScrollTargetVariable = isLinkToWebPage(link) ? getLinkHashVariable(link.hashVariables) : undefined\n\n\tconst setLinkHashId = (id: NodeID | undefined) => {\n\t\tconst currentValue = link\n\t\tif (!isLinkToWebPage(currentValue) || !isString(currentValue.webPageId)) return\n\n\t\tonChange(\n\t\t\tcreateLink({\n\t\t\t\twebPageId: currentValue.webPageId,\n\t\t\t\thash: id,\n\t\t\t\tpathVariables: currentValue.pathVariables,\n\t\t\t\thashVariables: updateLinkVariablesForNewHashId(\n\t\t\t\t\tengine,\n\t\t\t\t\tcurrentValue.hashVariables,\n\t\t\t\t\tid,\n\t\t\t\t\tsupportsVariables ? variableInfo : null,\n\t\t\t\t),\n\t\t\t}),\n\t\t)\n\t}\n\n\tconst setLinkHashVariable = (variable: VariableReference | ResolvedCollectionItemSelector | undefined) => {\n\t\tconst currentValue = link\n\t\tif (!isLinkToWebPage(currentValue)) return\n\n\t\tif (isUndefined(variable)) {\n\t\t\tonChange({ ...currentValue, hashVariables: undefined })\n\t\t} else if (isVariableReference(variable)) {\n\t\t\tonChange({ ...currentValue, hashVariables: { [variable.id]: variable } })\n\t\t} else if (isResolvedCollectionItemSelector(variable)) {\n\t\t\tonChange({ ...currentValue, hashVariables: { [variable.key]: variable } })\n\t\t} else {\n\t\t\tassertNever(variable)\n\t\t}\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<PanelRow title={Dictionary.Section}>\n\t\t\t\t<LinkScrollTargetPopoutButton\n\t\t\t\t\tselectedScrollTarget={selectedScrollTarget}\n\t\t\t\t\tscrollTargetOptions={scrollTargetOptions}\n\t\t\t\t\tonSelectScrollTarget={setLinkHashId}\n\t\t\t\t/>\n\t\t\t</PanelRow>\n\t\t\t<ScrollSectionCollectionItemRow\n\t\t\t\tcommonTarget={selectedScrollTarget}\n\t\t\t\tcollectionItem={selectedScrollTargetVariable}\n\t\t\t\tonSelectCollectionItem={setLinkHashVariable}\n\t\t\t\tshowDisabledCollectionItemRow={false}\n\t\t\t/>\n\t\t</>\n\t)\n})\n\nfunction isExistingHashVariableValid(\n\tengine: BaseEngine,\n\tnode: CanvasNode,\n\thashVariable: VariableReference | ResolvedCollectionItemSelector,\n) {\n\tconst repeaterAncestorIds = node.cache.ancestorRepeaterIds\n\tif (!repeaterAncestorIds || repeaterAncestorIds.length === 0) return false\n\n\t// @FIXME - Consider allowing a Collection Detail Page with a slug to be a\n\t// valid provider. This would require changes to\n\t// <ScrollSectionCollectionItemRow> to allow selecting a Detail Page\n\t// provider's variable reference, and checking both the top repeater\n\t// ancestor and the webpage.\n\tconst repeater = engine.tree.getNode(repeaterAncestorIds[0])\n\tif (!isDataRepeater(repeater)) return false\n\n\tconst data = engine.componentLoader.dataForIdentifier(repeater.dataIdentifier)\n\n\t// In the future, we may allow using other keys as link variables. At\n\t// that point we will need to iterate through all properties checking\n\t// for matches on the key. For now we can shortcut this by only checking\n\t// the slug key.\n\tconst slugKey = data?.annotations?.[AnnotationKey.FramerSlug]\n\tif (!data || !data.annotations || !slugKey) return false\n\n\t// A valid variable reference will reference the correct provider and id.\n\tconst isValidVariableReference =\n\t\tisVariableReference(hashVariable) && hashVariable.id === slugKey && hashVariable.providerId === repeater.id\n\n\t// A valid resolved collection item will have the same identifier.\n\tconst isValidResolvedCollectionItem =\n\t\tisResolvedCollectionItemSelector(hashVariable) &&\n\t\thashVariable.identifier === repeater.dataIdentifier &&\n\t\thashVariable.key === slugKey\n\n\t// If there is a variable value that matches the new hash node id, we\n\t// can preserve the existing variables.\n\treturn isValidVariableReference || isValidResolvedCollectionItem\n}\n\n/**\n * When selecting a new hash id, check if the existing variables can be\n * preserved, for instance when selecting a different element in the same\n * repeater.\n */\nfunction updateLinkVariablesForNewHashId(\n\tengine: BaseEngine,\n\texistingVariables: LinkVariables | undefined,\n\thashNodeId: NodeID | undefined,\n\tvariableInfo: VariableProviderInfo | null,\n) {\n\tif (isUndefined(hashNodeId)) return undefined\n\n\tconst node = engine.tree.get(hashNodeId)\n\tif (!node) return undefined\n\n\tconst hashVariables: LinkVariables = {}\n\tfor (const key in existingVariables) {\n\t\tconst value = existingVariables[key]\n\t\tif (!value) continue\n\t\tif (!isExistingHashVariableValid(engine, node, value)) continue\n\t\thashVariables[key] = value\n\t}\n\n\tif (!variableInfo) return hashVariables\n\n\tconst dataIdentifier = getSectionDataRepeaterIdentifierForTarget(engine, hashNodeId)\n\tif (!dataIdentifier) return hashVariables\n\n\tconst dataDefinition = engine.componentLoader.dataForIdentifier(dataIdentifier)\n\tif (!dataDefinition) return hashVariables\n\n\tconst slugKey = dataDefinition?.annotations?.[AnnotationKey.FramerSlug]\n\tif (!slugKey) return hashVariables\n\n\tfor (const [providerId, variableMap] of variableInfo.combined) {\n\t\tfor (const [variableId, variable] of variableMap) {\n\t\t\tif (isSlugVariableFromDataSource(variable, dataIdentifier)) {\n\t\t\t\thashVariables[slugKey] = createVariableReference(variableId, providerId)\n\t\t\t\treturn hashVariables\n\t\t\t}\n\t\t}\n\t}\n\n\treturn hashVariables\n}\n", "import { PopupButton, PopupButtonItem } from \"@framerjs/fresco\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport type { MaybeNodeID, NodeID } from \"document/models/CanvasTree/index.ts\"\nimport type { ScrollTargetOptions } from \"document/models/CanvasTree/traits/WithScrollTargetOptions.ts\"\nimport { slugify } from \"library/utils/slugify.ts\"\nimport { memo } from \"react\"\nimport { isUndefined } from \"utils/typeChecks.ts\"\nimport { doubleColumnClass } from \"../utils/doubleColumn.styles.ts\"\n\ninterface Props {\n\tselectedScrollTarget: MaybeNodeID\n\tscrollTargetOptions: ScrollTargetOptions\n\tonSelectScrollTarget: (element: NodeID | undefined) => void\n}\n\nexport const LinkScrollTargetPopoutButton = memo(function LinkScrollTargetPopoutButton({\n\tselectedScrollTarget,\n\tscrollTargetOptions,\n\tonSelectScrollTarget,\n}: Props) {\n\treturn (\n\t\t<PopupButton enabled={scrollTargetOptions.size > 0} wrapperClassName={doubleColumnClass}>\n\t\t\t<PopupButtonItem\n\t\t\t\ttitle={Dictionary.None}\n\t\t\t\tidentifier={undefined}\n\t\t\t\tselected={isUndefined(selectedScrollTarget)}\n\t\t\t\tonSelect={onSelectScrollTarget}\n\t\t\t/>\n\t\t\t{Array.from(scrollTargetOptions.entries()).map(([id, elementId]) => (\n\t\t\t\t<PopupButtonItem\n\t\t\t\t\tkey={id}\n\t\t\t\t\tidentifier={id}\n\t\t\t\t\ttitle={`#${slugify(elementId)}`}\n\t\t\t\t\tselected={selectedScrollTarget === id}\n\t\t\t\t\tonSelect={onSelectScrollTarget}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</PopupButton>\n\t)\n})\n", "import { AnnotationKey } from \"@framerjs/framer-runtime/crossorigin\"\nimport { assert, shouldBeNever } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { useDataForIdentifier } from \"document/components/utils/useDataForIdentifier.ts\"\nimport { isWebPageNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport type { DynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { VariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { Link, LinkToWebPage } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport { createLink, isLinkToWebPage } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport type { ResolvedCollectionItemSelector } from \"document/models/CanvasTree/traits/utils/ResolvedCollectionItemSelector.ts\"\nimport { isResolvedCollectionItemSelector } from \"document/models/CanvasTree/traits/utils/ResolvedCollectionItemSelector.ts\"\nimport { useDeprecatedEngineState } from \"document/useDeprecatedEngineState.ts\"\nimport { memo } from \"react\"\nimport { isReferenceToTailVariableId } from \"utils/collectionReferenceUtils.ts\"\nimport { isUndefined } from \"utils/typeChecks.ts\"\nimport { CollectionItemSelectorRow } from \"./CollectionItemSelectorRow.tsx\"\n\ninterface PageLinkSlugRowProps {\n\tlink: Reduced<Link | DynamicValue | undefined>\n\tonChange: (link: Link) => void\n\tsupportsVariables: boolean | undefined\n}\n\nexport const PageLinkSlugRow = memo(function PageLinkSlugRow({\n\tlink,\n\tonChange,\n\tsupportsVariables = false,\n}: PageLinkSlugRowProps) {\n\tconst engine = useBaseEngine()\n\tconst webPageId = isLinkToWebPage(link) ? link.webPageId : undefined\n\n\tconst dataIdentifier = useDeprecatedEngineState(\n\t\tEngineChange.Tree,\n\t\t() => engine.tree.getNodeWithTrait(webPageId, isWebPageNode)?.dataIdentifier,\n\t\t[webPageId],\n\t)\n\n\tconst dataDefinition = useDataForIdentifier(dataIdentifier)\n\tconst slugKey = dataDefinition?.annotations?.[AnnotationKey.FramerSlug]\n\n\tfunction updateSlug(update: VariableReference | ResolvedCollectionItemSelector | undefined) {\n\t\tif (!isLinkToWebPage(link) || !slugKey) return\n\n\t\tif (isVariableReference(update)) {\n\t\t\tassert(isReferenceToTailVariableId(update.id, slugKey), \"Invalid variable reference for slug\")\n\t\t\tconst newLink: LinkToWebPage = { ...link, pathVariables: { [slugKey]: update } }\n\t\t\tonChange(newLink)\n\t\t\treturn\n\t\t}\n\n\t\tif (isResolvedCollectionItemSelector(update) || isUndefined(update)) {\n\t\t\tassert(webPageId, \"Web page id must exist\")\n\t\t\tconst linkWithSlug = createLink({\n\t\t\t\twebPageId,\n\t\t\t\tpathVariables: update ? { [slugKey]: update } : undefined,\n\t\t\t})\n\n\t\t\tonChange(linkWithSlug)\n\t\t\treturn\n\t\t}\n\n\t\tshouldBeNever(update)\n\t}\n\n\tif (!slugKey || !dataIdentifier) return null\n\tif (!isLinkToWebPage(link)) return null\n\n\tconst pathVariable = link.pathVariables?.[slugKey]\n\n\treturn (\n\t\t<CollectionItemSelectorRow\n\t\t\ttitle={Dictionary.Slug}\n\t\t\tvalue={pathVariable}\n\t\t\tonChange={updateSlug}\n\t\t\tdataIdentifier={dataIdentifier}\n\t\t\tsupportsVariables={supportsVariables}\n\t\t/>\n\t)\n})\n", "import type { DynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { Link } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport { createLink, isLinkEqual, isLinkToURL, isLinkToWebPage } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { useCallback } from \"react\"\nimport { isUndefined } from \"utils/typeChecks.ts\"\n\ninterface Props {\n\tlink: Reduced<Link | DynamicValue | undefined>\n\tonChange: (value: Link | DynamicValue | undefined) => void\n}\n\nexport function getUpdatedPageLinkPath(\n\tcurrentLink: Reduced<Link | DynamicValue | undefined>,\n\tnextValue: Link | DynamicValue | undefined,\n) {\n\tif (isUndefined(nextValue) || isDynamicValue(nextValue)) {\n\t\treturn nextValue\n\t}\n\n\tif (isLinkToURL(nextValue)) {\n\t\treturn nextValue.url ? nextValue : undefined\n\t}\n\n\tconst isSamePage = isLinkToWebPage(currentLink) && isLinkEqual(currentLink, nextValue, { ignoreHash: true })\n\n\treturn createLink({\n\t\twebPageId: nextValue.webPageId,\n\t\thash: isSamePage ? currentLink.hash : undefined,\n\t\tpathVariables: nextValue.pathVariables,\n\t\thashVariables: isSamePage ? currentLink.hashVariables : undefined,\n\t})\n}\n\nexport function usePageLinkPath({ link, onChange }: Props) {\n\treturn useCallback(\n\t\t(value: Link | DynamicValue | undefined) => {\n\t\t\tonChange(getUpdatedPageLinkPath(link, value))\n\t\t},\n\t\t[link, onChange],\n\t)\n}\n", "import { shouldBeNever } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { getVariableValue } from \"document/models/CanvasTree/nodes/utils/getVariableValue.ts\"\nimport { isComputedValue } from \"document/models/CanvasTree/traits/ComputedValue.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { type VariableReference, isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { WithLink } from \"document/models/CanvasTree/traits/WithLink.ts\"\nimport type { WithFormContainer } from \"document/models/CanvasTree/traits/forms/WithFormContainer.ts\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport React from \"react\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { VariableReferenceButton } from \"../../shared/VariableReferenceButton.tsx\"\nimport { TrackingIdInput } from \"../inputs/TrackingIdInput.tsx\"\nimport { PanelRow } from \"../rows/PanelRow.tsx\"\nimport { createVariableInScope } from \"../utils/createVariableInScope.ts\"\n\ninterface TrackingIdRowProps {\n\taiPrompt: Reduced<string>\n\ttrackingId: Reduced<string | VariableReference | undefined>\n\tsupportsVariables?: boolean\n\tcanRemove?: boolean\n\tonChange: (value: string | VariableReference | undefined) => void\n}\n\ntype TrackingProperties = Pick<WithLink, \"linkClickTrackingId\"> & Pick<WithFormContainer, \"formSubmitTrackingId\">\nconst traitTypeKeys: (keyof TrackingProperties)[] = [\"linkClickTrackingId\", \"formSubmitTrackingId\"]\n\nexport const TrackingIdRow = React.memo(function TrackingIdRow({\n\taiPrompt,\n\ttrackingId,\n\tsupportsVariables = false,\n\tcanRemove = true,\n\tonChange,\n}: TrackingIdRowProps) {\n\tconst engine = useBaseEngine()\n\n\tconst onCreateVariable = useEngineCallback(\n\t\t(scopeId: NodeID) => {\n\t\t\tconst variableRef = createVariableInScope({\n\t\t\t\tengine,\n\t\t\t\tscopeId,\n\t\t\t\ttype: ControlType.TrackingId,\n\t\t\t\tname: \"tracking\",\n\t\t\t\tinitialValue: undefined,\n\t\t\t})\n\t\t\tif (variableRef) onChange(variableRef)\n\t\t},\n\t\t[onChange],\n\t)\n\n\tconst onRemoveDynamicValue = useEngineCallback(() => {\n\t\tif (!isDynamicValue(trackingId)) return\n\t\tif (isVariableReference(trackingId)) {\n\t\t\tconst variableValue = getVariableValue(engine, trackingId)\n\t\t\tonChange(isString(variableValue) ? variableValue : undefined)\n\t\t} else if (isComputedValue(trackingId)) {\n\t\t\tonChange(undefined)\n\t\t} else {\n\t\t\tshouldBeNever(trackingId)\n\t\t}\n\t}, [trackingId, onChange])\n\n\tconst onRemoveTrackingId = useEngineCallback(() => {\n\t\tonChange(undefined)\n\t}, [onChange])\n\n\tconst onSelectVariableReference = useEngineCallback(\n\t\t(variableRef: VariableReference) => onChange(variableRef),\n\t\t[onChange],\n\t)\n\n\treturn (\n\t\t<PanelRow\n\t\t\ttitle={Dictionary.Tracking}\n\t\t\tvariableReferenceType={ControlType.TrackingId}\n\t\t\tvariableType={ControlType.TrackingId}\n\t\t\tonCreateVariable={onCreateVariable}\n\t\t\tonRemoveDynamicValue={onRemoveDynamicValue}\n\t\t\tonDelete={canRemove ? onRemoveTrackingId : undefined}\n\t\t\tonSelectVariable={onSelectVariableReference}\n\t\t\tdynamicValue={isDynamicValue(trackingId) ? trackingId : null}\n\t\t\tsupportsVariables={supportsVariables}\n\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t>\n\t\t\t{isVariableReference(trackingId) ? (\n\t\t\t\t<VariableReferenceButton\n\t\t\t\t\texpectedType={ControlType.TrackingId}\n\t\t\t\t\treference={trackingId}\n\t\t\t\t\tonRemove={onRemoveDynamicValue}\n\t\t\t\t\thasError={!supportsVariables}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<TrackingIdInput value={trackingId} onChange={onChange} aiPrompt={aiPrompt} />\n\t\t\t)}\n\t\t</PanelRow>\n\t)\n})\n", "import \"PopoverForRichText.styles_cj1wou.wyw.css\"; export const container = \"container_c1hdvulg\";\nexport const navigationBar = \"navigationBar_nqz647q\";\nexport const navigationBarDivider = \"navigationBarDivider_nxj4hh\";\nexport const title = \"title_t1hfi20k\";\nexport const clearButton = \"clearButton_czsbh7p\";", "import \"RichTextEditorWithToolbar.styles_9qudhd.wyw.css\"; import { breakpoints } from \"@framerjs/fresco/tokens\";\nexport const mobileToolbarMediaQuery = `(max-width: ${breakpoints.mobile}px)`;\nexport const container = \"container_c6uczmi\";\nexport const scrollableHeader = \"scrollableHeader_s6fflhj\";\nexport const textStyleHeaderStickyWrapper = \"textStyleHeaderStickyWrapper_t8bdre0\";\nexport const textStyleHeaderStickyWrapperLegacy = \"textStyleHeaderStickyWrapperLegacy_t1i7zlf8\";\nexport const textStyleHeader = \"textStyleHeader_t1wmxpp0\";\nexport const textStyleHeaderMinimal = \"textStyleHeaderMinimal_t10rkvjk\";\nexport const popupButtonWrapperIconWrapper = \"popupButtonWrapperIconWrapper_pw9hu2f\";\nexport const popupButtonWrapperIconDisabled = \"popupButtonWrapperIconDisabled_pao18v9\";\nexport const toolbarButtonGroup = \"toolbarButtonGroup_trxxjmp\";\nexport const toolbarButtonGroupCompactTagSelector = \"toolbarButtonGroupCompactTagSelector_t9ab7mp\";\nexport const toolbarButtonGroupCompact = \"toolbarButtonGroupCompact_thc6ckc\";\nexport const toolbarButtonGroupMinimalTagSelector = \"toolbarButtonGroupMinimalTagSelector_t3klaet\";\nexport const toolbarButtonDivider = \"toolbarButtonDivider_trwq0ea\";\nexport const linkToolbarButtonGroupCompact = \"linkToolbarButtonGroupCompact_lt1u60b\";\nexport const popupButtonWrapperStretch = \"popupButtonWrapperStretch_pg363jc\";\nexport const popupButton = \"popupButton_prpupio\";\nexport const popupButtonCompactTagSelector = \"popupButtonCompactTagSelector_p1p0bqn2\";\nexport const popupButtonCompact = \"popupButtonCompact_p1skhvuz\";\nexport const popupButtonMinimalTagSelector = \"popupButtonMinimalTagSelector_pgg2cvw\";\nexport const popupButtonWithIconInsteadOfText = \"popupButtonWithIconInsteadOfText_p1cr9asn\";\nexport const tableScrollableWrapper = \"tableScrollableWrapper_t1c938y9\";\nexport const tableAppendButtonIcon = \"tableAppendButtonIcon_t3wuiaw\";\nexport const tableAppendButton = \"tableAppendButton_t168klhm\";\nexport const tableAppendRowButton = \"tableAppendRowButton_t1vnz3fa\";\nexport const tableAppendColumnButton = \"tableAppendColumnButton_t17ayjrk\";\nexport const tableCellContextMenuButton = \"tableCellContextMenuButton_t1pc865e\";\nexport const tableBorderAdjustment = \"calc(50% - 0.5px)\";\nexport const textEditorWrapper = \"textEditorWrapper_t17nyv2n\";\nexport const textEditorWrapperMinimalTextStyles = \"textEditorWrapperMinimalTextStyles_tq7xiri\";\nexport const textEditorWrapperCompact = \"textEditorWrapperCompact_t4f6v3n\";\nexport const textEditorWrapperMinimal = \"textEditorWrapperMinimal_t1gnvfwd\";\nexport const toolbarButtonFocusOutline = \"toolbarButtonFocusOutline_ts8ggwp\";\nexport const toolbarButtonBorderless = \"toolbarButtonBorderless_th301rt\";\nexport const textEditorWrapperDisabled = \"textEditorWrapperDisabled_t9gtqrq\";\nexport const textEditorWrapperWithMaxHeight = \"textEditorWrapperWithMaxHeight_t1rxqld5\";\nexport const editorWrapperHidden = \"editorWrapperHidden_e1ppz8pn\";\nexport const fadeIn = \"fadeIn_f1pgk6ec\";\nexport const insertButton = \"insertButton_i1jd3cet\";\nexport const insertButtonMinimal = \"insertButtonMinimal_i1n3d3iu\";\nexport const insertButtonLegacy = \"insertButtonLegacy_io2w4cx\";\nexport const insertButtonDisabled = \"insertButtonDisabled_ifyjttx\";\nexport const insertButtonDisabledLegacy = \"insertButtonDisabledLegacy_i11ico4j\";", "import { CenterChild } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport React from \"react\"\nimport * as styles from \"./RichTextToolbarButton.styles.ts\"\n\ninterface Props extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n\tcompact?: boolean\n\tfocusOutline?: boolean\n\thideActiveBackground?: boolean\n\tisActive: boolean\n\tchildren: React.ReactNode\n\tcenterChild?: boolean\n}\n\nexport const RichTextToolbarButton = React.forwardRef<HTMLButtonElement, Props>(function RichTextToolbarButton(\n\t{\n\t\tchildren,\n\t\tclassName,\n\t\tisActive,\n\t\tcenterChild = true,\n\t\tcompact = false,\n\t\tfocusOutline = false,\n\t\thideActiveBackground = false,\n\t\ttabIndex,\n\t\tdisabled,\n\t\t...rest\n\t},\n\tforwardedRef,\n) {\n\tconst fallbackTabIndex = disabled ? -1 : 0\n\tconst resolvedTabIndex = tabIndex ?? fallbackTabIndex\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tref={forwardedRef}\n\t\t\tdisabled={disabled}\n\t\t\ttabIndex={resolvedTabIndex}\n\t\t\tclassName={cx(\n\t\t\t\tclassName,\n\t\t\t\tstyles.button,\n\t\t\t\tcompact && styles.buttonCompact,\n\t\t\t\tfocusOutline && styles.buttonFocusOutline,\n\t\t\t\tisActive && styles.buttonActive,\n\t\t\t\tisActive && (compact || hideActiveBackground) && styles.buttonActiveWithoutBackground,\n\t\t\t)}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{centerChild ? <CenterChild>{children}</CenterChild> : children}\n\t\t</button>\n\t)\n})\n", "import \"RichTextToolbarButton.styles_o3brct.wyw.css\"; export const button = \"button_b1k4esu7\";\nexport const buttonFocusOutline = \"buttonFocusOutline_bh8j1ab\";\nexport const buttonCompact = \"buttonCompact_b11u853b\";\nexport const buttonActive = \"buttonActive_bbe6l64\";\nexport const buttonActiveWithoutBackground = \"buttonActiveWithoutBackground_b1ypqxyn\";", "import { unhandledError } from \"@framerjs/shared\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { iterateRichTextModuleIdentifiers } from \"prosemirror/schema/module.ts\"\nimport { ensureComponentPresetForIdentifier } from \"utils/componentPresetUtils.ts\"\nimport { getComponentsWithPresets } from \"utils/getComponentsWithPresets.ts\"\nimport { getTagsFromRichText } from \"utils/richTextUtils.ts\"\nimport { ensureStylePresetForTags } from \"utils/stylePresetUtils.ts\"\n\nexport function createMissingPresetsForHTML(engine: BaseEngine, html: string) {\n\tgetComponentsWithPresets(engine)\n\t\t.then(components => {\n\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t// Ensure that a style preset exist for every tag that is used in\n\t\t\t\t// this RichText string.\n\t\t\t\tconst tags = getTagsFromRichText(html)\n\t\t\t\tensureStylePresetForTags(engine, tags)\n\n\t\t\t\t// Ensure that a component preset exist for every component that is\n\t\t\t\t// used in this RichText string.\n\t\t\t\tfor (const componentIdentifier of iterateRichTextModuleIdentifiers(html)) {\n\t\t\t\t\tensureComponentPresetForIdentifier(engine, components, componentIdentifier)\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t\t.catch(unhandledError)\n}\n", "import type { Mark, Node as ProseMirrorNode } from \"prosemirror-model\"\nimport { Plugin } from \"prosemirror-state\"\nimport type { MarkView, NodeView } from \"prosemirror-view\"\nimport type { ListItemNode } from \"prosemirror/schema/list.ts\"\nimport { MarkName, NodeName } from \"prosemirror/schema/names.ts\"\nimport { type TextBlockNode, isTextBlockNode } from \"prosemirror/schema/textBlock.ts\"\nimport { setDirFromTextDirection } from \"prosemirror/schema/utils.ts\"\nimport type { StylePresetClassNameByTag } from \"utils/stylePresetUtils.ts\"\n\nclass StylePresetNodeView implements NodeView {\n\treadonly dom: HTMLElement\n\n\tget contentDOM(): HTMLElement {\n\t\treturn this.dom\n\t}\n\n\tprotected lastClassName: string | undefined\n\n\tconstructor(\n\t\tprotected node: ProseMirrorNode,\n\t\tprotected readonly tag: string,\n\t\tprotected readonly getStylePresetClassNameByTag: () => StylePresetClassNameByTag,\n\t\tprotected readonly stylePresetClassNameByTagChangeListeners: Set<() => void>,\n\t) {\n\t\tthis.dom = document.createElement(tag)\n\t\tthis.updateClassName = this.updateClassName.bind(this)\n\t\tthis.stylePresetClassNameByTagChangeListeners.add(this.updateClassName)\n\t\tthis.updateClassName()\n\t}\n\n\tupdate(node: ProseMirrorNode) {\n\t\tthis.node = node\n\t\tthis.updateClassName()\n\t\treturn true\n\t}\n\n\tprotected updateClassName() {\n\t\tconst stylePresetClassNameByTag = this.getStylePresetClassNameByTag()\n\n\t\tconst className = stylePresetClassNameByTag[this.tag]\n\n\t\tif (this.lastClassName === className) return\n\n\t\tif (this.lastClassName) {\n\t\t\tthis.dom.classList.remove(this.lastClassName)\n\t\t}\n\n\t\tif (className) {\n\t\t\tthis.dom.classList.add(className)\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tthis.stylePresetClassNameByTagChangeListeners.delete(this.updateClassName)\n\t}\n}\n\nclass TextBlockView extends StylePresetNodeView {\n\tconstructor(\n\t\tnode: TextBlockNode,\n\t\tgetStylePresetClassNameByTag: () => StylePresetClassNameByTag,\n\t\tstylePresetClassNameByTagChangeListeners: Set<() => void>,\n\t) {\n\t\tsuper(node, node.attrs.tag, getStylePresetClassNameByTag, stylePresetClassNameByTagChangeListeners)\n\t\tthis.updateDirection(node)\n\t}\n\n\toverride update(node: TextBlockNode) {\n\t\t// If the tag has changed, we need to create a new NodeView.\n\t\tif (node.attrs.tag !== this.tag) return false\n\n\t\tconst result = super.update(node)\n\t\tthis.updateDirection(node)\n\t\treturn result\n\t}\n\n\tprivate updateDirection(node: TextBlockNode) {\n\t\tsetDirFromTextDirection(this.dom, node)\n\t}\n}\n\nclass ListItemView extends StylePresetNodeView {\n\tconstructor(\n\t\tnode: ListItemNode,\n\t\tgetStylePresetClassNameByTag: () => StylePresetClassNameByTag,\n\t\tstylePresetClassNameByTagChangeListeners: Set<() => void>,\n\t) {\n\t\tsuper(node, \"li\", getStylePresetClassNameByTag, stylePresetClassNameByTagChangeListeners)\n\t}\n\n\tprotected override updateClassName() {\n\t\tconst firstChild = this.node.content.firstChild\n\n\t\tlet tag: string | undefined\n\t\tif (isTextBlockNode(firstChild)) {\n\t\t\ttag = firstChild.attrs.tag\n\t\t}\n\n\t\tconst stylePresetClassNameByTag = this.getStylePresetClassNameByTag()\n\t\tconst className = tag ? stylePresetClassNameByTag[tag] : undefined\n\n\t\tif (this.lastClassName === className) return\n\n\t\tif (this.lastClassName) {\n\t\t\tthis.dom.classList.remove(this.lastClassName)\n\t\t}\n\n\t\tif (className) {\n\t\t\tthis.dom.classList.add(className)\n\t\t}\n\n\t\tthis.lastClassName = className\n\t}\n}\n\nclass StylePresetMarkView implements MarkView {\n\treadonly dom: HTMLElement\n\n\tget contentDOM(): HTMLElement {\n\t\treturn this.dom\n\t}\n\n\tprotected lastClassName: string | undefined\n\n\tconstructor(\n\t\tprotected mark: Mark,\n\t\tprotected readonly tag: string,\n\t\tprotected readonly getStylePresetClassNameByTag: () => StylePresetClassNameByTag,\n\t\tprotected readonly stylePresetClassNameByTagChangeListeners: Set<() => void>,\n\t) {\n\t\tthis.dom = document.createElement(tag)\n\t\tthis.stylePresetClassNameByTagChangeListeners.add(this.updateClassName)\n\t\tthis.updateClassName()\n\t}\n\n\tupdate(mark: Mark) {\n\t\tthis.mark = mark\n\t\tthis.updateClassName()\n\t\treturn true\n\t}\n\n\tprotected updateClassName = () => {\n\t\tconst stylePresetClassNameByTag = this.getStylePresetClassNameByTag()\n\n\t\tconst className = stylePresetClassNameByTag[this.tag]\n\n\t\tif (this.lastClassName === className) return\n\n\t\tif (this.lastClassName) {\n\t\t\tthis.dom.classList.remove(this.lastClassName)\n\t\t}\n\n\t\tif (className) {\n\t\t\tthis.dom.classList.add(className)\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tthis.stylePresetClassNameByTagChangeListeners.delete(this.updateClassName)\n\t}\n}\n\nexport function applyStylePresetsPlugin(\n\tgetStylePresetClassNameByTag: () => StylePresetClassNameByTag,\n\tstylePresetClassNameByTagChangeListeners: Set<() => void>,\n) {\n\treturn new Plugin({\n\t\tprops: {\n\t\t\tnodeViews: {\n\t\t\t\t[NodeName.ListItem]: (node: ListItemNode) =>\n\t\t\t\t\tnew ListItemView(node, getStylePresetClassNameByTag, stylePresetClassNameByTagChangeListeners),\n\t\t\t\t[NodeName.Blockquote]: node =>\n\t\t\t\t\tnew StylePresetNodeView(\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\"blockquote\",\n\t\t\t\t\t\tgetStylePresetClassNameByTag,\n\t\t\t\t\t\tstylePresetClassNameByTagChangeListeners,\n\t\t\t\t\t),\n\t\t\t\t[NodeName.TextBlock]: (node: TextBlockNode) =>\n\t\t\t\t\tnew TextBlockView(node, getStylePresetClassNameByTag, stylePresetClassNameByTagChangeListeners),\n\t\t\t},\n\t\t\tmarkViews: {\n\t\t\t\t[MarkName.InlineCode]: mark =>\n\t\t\t\t\tnew StylePresetMarkView(mark, \"code\", getStylePresetClassNameByTag, stylePresetClassNameByTagChangeListeners),\n\t\t\t\t[MarkName.Link]: mark =>\n\t\t\t\t\tnew StylePresetMarkView(mark, \"a\", getStylePresetClassNameByTag, stylePresetClassNameByTagChangeListeners),\n\t\t\t},\n\t\t},\n\t})\n}\n", "import { useDimensionValue } from \"app/agent/hooks/useDimensionValue.ts\"\nimport type { PopoutButtonProps } from \"document/components/chrome/shared/PopoutButton.tsx\"\nimport { PopoutButton } from \"document/components/chrome/shared/PopoutButton.tsx\"\nimport type { PopoutNavigation } from \"document/components/chrome/shared/PopoutNavigation.tsx\"\nimport { isEditingText } from \"document/utils/isEditingText.ts\"\nimport type { EditorView } from \"prosemirror-view\"\nimport type React from \"react\"\nimport { useRef } from \"react\"\n\nconst supportedKeyCodes = [\"Backspace\", \"Enter\", \"ArrowUp\", \"ArrowRight\", \"ArrowDown\", \"ArrowLeft\"]\n\ninterface Props extends Pick<\n\tPopoutButtonProps,\n\t\"displayDivider\" | \"navigationTitle\" | \"popout\" | \"children\" | \"popoverAttachmentEdge\" | \"fallbackToModalAppearance\"\n> {\n\teditorView: EditorView\n\tkeyMap?: Record<string, (event: React.KeyboardEvent) => void>\n}\n\nexport function NodeViewPopoutButton({ editorView, keyMap, ...props }: Props) {\n\tconst popoverNavigationRef: React.MutableRefObject<PopoutNavigation | null> = useRef(null)\n\n\tconst panelPadding = useDimensionValue(\"panelPadding\")\n\n\tfunction handlePopoverKeydown(event: React.KeyboardEvent) {\n\t\tconst popoverBackdropElement = event.currentTarget.firstChild\n\n\t\t// If we don't dispatch the Escape event, Safari will replace the embed with an escape character.\n\t\tlet shouldDispatchClonedEvent = event.key === \"Escape\"\n\n\t\ttry {\n\t\t\tif (isEditingText()) return\n\n\t\t\tif (keyMap?.[event.key]) {\n\t\t\t\tkeyMap[event.key]?.(event)\n\t\t\t}\n\n\t\t\t// Don't handle keydown events inside inputs.\n\t\t\tif (event.target !== popoverBackdropElement) return true\n\n\t\t\tif (!supportedKeyCodes.includes(event.key)) return true\n\n\t\t\tpopoverNavigationRef.current?.close()\n\n\t\t\tshouldDispatchClonedEvent = true\n\t\t\tevent.stopPropagation()\n\t\t} finally {\n\t\t\tif (shouldDispatchClonedEvent) {\n\t\t\t\tconst clonedEvent = new KeyboardEvent(event.type, event.nativeEvent)\n\t\t\t\teditorView.dom.dispatchEvent(clonedEvent)\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handlePopoverCopy(event: ClipboardEvent) {\n\t\t// Don't handle copy and cut events inside inputs.\n\t\tif (event.target !== document.body) return\n\n\t\tpopoverNavigationRef.current?.close()\n\n\t\tconst clonedEvent = new ClipboardEvent(event.type, event)\n\t\tif (!editorView.dom.dispatchEvent(clonedEvent)) {\n\t\t\tevent.preventDefault()\n\t\t}\n\n\t\tevent.stopPropagation()\n\t}\n\n\tconst popoverAttachmentEdge = props.popoverAttachmentEdge ?? \"left\"\n\n\treturn (\n\t\t<PopoutButton\n\t\t\t{...props}\n\t\t\tdisplayInPopover\n\t\t\twithoutStyles\n\t\t\tpopoverOffset={{ x: panelPadding * 4, y: 0 }}\n\t\t\tpopoverNavigationRef={popoverNavigationRef}\n\t\t\tpopoverAttachmentEdge={popoverAttachmentEdge}\n\t\t\tfallbackToModalAppearance={props.fallbackToModalAppearance}\n\t\t\t// The onDismiss callback is called inside an event that changes\n\t\t\t// focus to a different element. We want to change the focus back to\n\t\t\t// the editor instead.\n\t\t\tonDismiss={() => setImmediate(() => editorView.focus())}\n\t\t\tonPopoverKeydown={handlePopoverKeydown}\n\t\t\tonPopoverCopy={handlePopoverCopy}\n\t\t/>\n\t)\n}\n", "import { isAssetReference } from \"@framerjs/assets\"\nimport { Spinner, ThemeOverride, type ThemeOverrideMode } from \"@framerjs/fresco\"\nimport { assert } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { type BaseEngine, EngineContext } from \"document/base-engine/BaseEngine.ts\"\nimport {\n\tImagePluginPickerButtonProvider,\n\ttype ImagePluginPickerButtonComponent,\n} from \"document/components/chrome/shared/ImagePluginPickerButtonContext.tsx\"\nimport type { Node as ProseMirrorNode } from \"prosemirror-model\"\nimport { Plugin } from \"prosemirror-state\"\nimport type { DecorationAttrs, EditorView, NodeView } from \"prosemirror-view\"\nimport { Decoration, DecorationSet } from \"prosemirror-view\"\nimport { NodeViewPopoutButton } from \"prosemirror/NodeViewPopoutButton.tsx\"\nimport { failedUploadPlaceholder, transactionNeedsAssetReferencesUpdate } from \"prosemirror/addMedia.ts\"\nimport { type ImageNode, isImageNode } from \"prosemirror/schema/image.ts\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport { NodeName } from \"prosemirror/schema/names.ts\"\nimport ReactDOMClient from \"react-dom/client\"\nimport { getAssetResolver } from \"renderer/getAssetResolver.ts\"\nimport type { StylePresetClassNameByTag } from \"utils/stylePresetUtils.ts\"\nimport { ImageEditPopout } from \"./ImageEditPopout.tsx\"\nimport * as styles from \"./mediaPlugin.styles.ts\"\n\ninterface MediaPluginOptions {\n\tengine: BaseEngine\n\tschema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithMedia\n\twithMediaPopout: boolean\n\timagePluginPickerButton?: ImagePluginPickerButtonComponent\n\tgetThemeOverrideMode?: () => ThemeOverrideMode | undefined\n\tthemeOverrideModeChangeListeners?: Set<VoidFunction>\n\tgetStylePresetClassNameByTag?: () => StylePresetClassNameByTag\n\tstylePresetClassNameByTagChangeListeners?: Set<() => void>\n}\n\nexport function mediaPlugin({\n\tengine,\n\tschema,\n\twithMediaPopout,\n\timagePluginPickerButton,\n\tgetThemeOverrideMode,\n\tthemeOverrideModeChangeListeners,\n\tgetStylePresetClassNameByTag,\n\tstylePresetClassNameByTagChangeListeners,\n}: MediaPluginOptions) {\n\treturn new Plugin<DecorationSet>({\n\t\tstate: {\n\t\t\tinit() {\n\t\t\t\treturn DecorationSet.empty\n\t\t\t},\n\t\t\tapply(tr, _value, _oldState, newState) {\n\t\t\t\t// Only do the work of scanning the entire document when we know there's been asset changes.\n\t\t\t\tif (!transactionNeedsAssetReferencesUpdate(tr)) return DecorationSet.empty\n\t\t\t\tconst decorations: Decoration[] = []\n\t\t\t\tnewState.doc.descendants((node, position) => {\n\t\t\t\t\tif (!isImageNode(node)) return\n\t\t\t\t\tif (!isAssetReference(node.attrs.src)) return\n\t\t\t\t\tconst src = getAssetResolver()(node.attrs.src, {})\n\t\t\t\t\tlet attrs: DecorationAttrs\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\t// This marker will trigger the update function below.\n\t\t\t\t\t\tattrs = { \"data-needs-asset-refresh\": \"true\" }\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Wrap the image in a div that is a spinner until the image is loaded.\n\t\t\t\t\t\tattrs = { nodeName: \"div\", class: styles.assetSpinnerContainer }\n\t\t\t\t\t}\n\t\t\t\t\tdecorations.push(Decoration.node(position, position + node.nodeSize, attrs))\n\t\t\t\t})\n\t\t\t\treturn decorations.length ? DecorationSet.create(tr.doc, decorations) : DecorationSet.empty\n\t\t\t},\n\t\t},\n\t\tprops: {\n\t\t\tdecorations(state) {\n\t\t\t\treturn this.getState(state)\n\t\t\t},\n\t\t\tnodeViews: {\n\t\t\t\t[NodeName.Image](node: ProseMirrorNode, editorView: EditorView, getPosition: () => number) {\n\t\t\t\t\tassert(isImageNode(node), \"Expected only image nodes\")\n\t\t\t\t\treturn new ImageNodeView(\n\t\t\t\t\t\tengine,\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tschema,\n\t\t\t\t\t\teditorView,\n\t\t\t\t\t\tgetPosition,\n\t\t\t\t\t\twithMediaPopout,\n\t\t\t\t\t\timagePluginPickerButton,\n\t\t\t\t\t\tgetThemeOverrideMode,\n\t\t\t\t\t\tthemeOverrideModeChangeListeners,\n\t\t\t\t\t\tgetStylePresetClassNameByTag,\n\t\t\t\t\t\tstylePresetClassNameByTagChangeListeners,\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nclass ImageNodeView implements NodeView {\n\tdom = document.createElement(\"div\")\n\treactRoot = ReactDOMClient.createRoot(this.dom)\n\n\tconstructor(\n\t\tprivate readonly engine: BaseEngine,\n\t\tprivate node: ImageNode,\n\t\tprivate readonly schema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithMedia,\n\t\tprivate readonly editorView: EditorView,\n\t\tprivate readonly getPosition: () => number,\n\t\tprivate readonly withMediaPopout: boolean,\n\t\tprivate readonly imagePluginPickerButton: ImagePluginPickerButtonComponent | undefined,\n\t\tprivate readonly getThemeOverrideMode?: () => ThemeOverrideMode | undefined,\n\t\tprivate readonly themeOverrideModeChangeListeners?: Set<VoidFunction>,\n\t\tprivate readonly getStylePresetClassNameByTag?: () => StylePresetClassNameByTag,\n\t\tprivate readonly stylePresetClassNameByTagChangeListeners?: Set<() => void>,\n\t) {\n\t\tthis.dom.style.width = \"fit-content\"\n\t\tthis.stylePresetClassNameByTagChangeListeners?.add(this.render)\n\t\tthis.themeOverrideModeChangeListeners?.add(this.render)\n\t\tif (!this.dom.querySelector(\".framer-image\") && this.node.attrs.type !== \"video\") {\n\t\t\tthis.createImagePlaceholder()\n\t\t}\n\t\tthis.render()\n\t}\n\n\tupdate(node: ProseMirrorNode) {\n\t\tif (!isImageNode(node)) return false\n\t\tthis.node = node\n\t\tthis.render()\n\t\treturn true\n\t}\n\n\t/**\n\t * React root render function is not synchronous, so we need to create a placeholder image that is used to fill the gap while the image component is rendering.\n\t * React will automatically remove the placeholder image when the image component is rendered for the first time.\n\t */\n\tcreateImagePlaceholder() {\n\t\tconst img = document.createElement(\"img\")\n\t\timg.setAttribute(\"width\", (this.node.attrs.pixelWidth ? this.node.attrs.pixelWidth / 2 : 0).toString())\n\t\timg.setAttribute(\"height\", (this.node.attrs.pixelHeight ? this.node.attrs.pixelHeight / 2 : 0).toString())\n\t\timg.className = \"framer-image\"\n\t\timg.setAttribute(\"data-is-rendering\", \"true\")\n\t\timg.style.aspectRatio =\n\t\t\tthis.node.attrs.pixelWidth && this.node.attrs.pixelHeight\n\t\t\t\t? `${this.node.attrs.pixelWidth / this.node.attrs.pixelHeight}`\n\t\t\t\t: \"auto\"\n\t\tthis.dom.appendChild(img)\n\t}\n\n\trender = () => {\n\t\tconst node = this.node\n\t\tconst isAsset = isAssetReference(node.attrs.src)\n\t\tconst failedUpload = node.attrs.src.includes(failedUploadPlaceholder)\n\t\tconst shouldBlur = !isAsset && !failedUpload\n\n\t\tlet src: string | undefined = node.attrs.src\n\n\t\tif (isAssetReference(node.attrs.src)) {\n\t\t\tconst resolve = getAssetResolver()\n\t\t\tsrc = resolve(node.attrs.src, {})\n\t\t}\n\n\t\tconst stylePresetClassNameByTag = this.getStylePresetClassNameByTag?.()\n\t\tconst className = cx(\"framer-image\", shouldBlur && styles.blurMedia, stylePresetClassNameByTag?.img)\n\t\tconst themeOverrideMode = this.getThemeOverrideMode?.()\n\n\t\tif (this.node.attrs.type === \"video\") {\n\t\t\treturn this.reactRoot.render(\n\t\t\t\t<ThemeOverride mode={themeOverrideMode}>\n\t\t\t\t\t<div className={styles.blurCrop}>\n\t\t\t\t\t\t{/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n\t\t\t\t\t\t<video autoPlay loop muted playsInline src={src} className={className} />\n\t\t\t\t\t</div>\n\t\t\t\t</ThemeOverride>,\n\t\t\t)\n\t\t}\n\n\t\treturn this.reactRoot.render(\n\t\t\t<ThemeOverride mode={themeOverrideMode}>\n\t\t\t\t<EngineContext.Provider value={this.engine}>\n\t\t\t\t\t<ImagePluginPickerButtonProvider component={this.imagePluginPickerButton}>\n\t\t\t\t\t\t{this.withMediaPopout ? (\n\t\t\t\t\t\t\t<ImageWithEditPopout\n\t\t\t\t\t\t\t\tnode={this.node}\n\t\t\t\t\t\t\t\tschema={this.schema}\n\t\t\t\t\t\t\t\teditorView={this.editorView}\n\t\t\t\t\t\t\t\tgetPosition={this.getPosition}\n\t\t\t\t\t\t\t\tremoveSelf={this.removeSelf.bind(this)}\n\t\t\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t\t\t\tsrc={src ?? \"\"}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Image src={src ?? \"\"} className={className} node={this.node} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ImagePluginPickerButtonProvider>\n\t\t\t\t</EngineContext.Provider>\n\t\t\t</ThemeOverride>,\n\t\t)\n\t}\n\n\tremoveSelf() {\n\t\tconst pos = this.getPosition()\n\t\trequestAnimationFrame(() => {\n\t\t\tconst tr = this.editorView.state.tr.delete(pos, pos + this.node.nodeSize)\n\t\t\tthis.editorView.dispatch(tr)\n\t\t})\n\t}\n\n\tdestroy() {\n\t\tthis.reactRoot.unmount()\n\t\tthis.stylePresetClassNameByTagChangeListeners?.delete(this.render)\n\t\tthis.themeOverrideModeChangeListeners?.delete(this.render)\n\t}\n}\n\nfunction ImageWithEditPopout({\n\tnode,\n\tschema,\n\teditorView,\n\tgetPosition,\n\tremoveSelf,\n\tclassName,\n\tsrc,\n}: {\n\tnode: ImageNode\n\tschema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithMedia\n\teditorView: EditorView\n\tgetPosition: () => number\n\tremoveSelf: () => void\n\tsrc: string\n\tclassName: string\n}) {\n\treturn (\n\t\t<NodeViewPopoutButton\n\t\t\teditorView={editorView}\n\t\t\tnavigationTitle={Dictionary.Image}\n\t\t\tkeyMap={{\n\t\t\t\tBackspace: removeSelf,\n\t\t\t\tDelete: removeSelf,\n\t\t\t}}\n\t\t\tpopout={<ImageEditPopout node={node} schema={schema} editorView={editorView} getPosition={getPosition} />}\n\t\t>\n\t\t\t<Image src={src} className={className} node={node} />\n\t\t</NodeViewPopoutButton>\n\t)\n}\n\nfunction Image({ src, className, node }: { src: string; className: string; node: ImageNode }) {\n\tif (!src) {\n\t\treturn (\n\t\t\t<div className={styles.assetSpinnerContainer}>\n\t\t\t\t<Spinner size=\"medium\" inline className={styles.assetSpinnerIcon} />\n\t\t\t</div>\n\t\t)\n\t}\n\n\treturn (\n\t\t<div className={styles.blurCrop}>\n\t\t\t<img\n\t\t\t\tsrc={src}\n\t\t\t\tclassName={className}\n\t\t\t\talt={node.attrs.alt}\n\t\t\t\twidth={node.attrs.pixelWidth ? node.attrs.pixelWidth / 2 : undefined}\n\t\t\t\theight={node.attrs.pixelHeight ? node.attrs.pixelHeight / 2 : undefined}\n\t\t\t\tdecoding=\"async\"\n\t\t\t\tstyle={{\n\t\t\t\t\taspectRatio:\n\t\t\t\t\t\tnode.attrs.pixelWidth && node.attrs.pixelHeight\n\t\t\t\t\t\t\t? node.attrs.pixelWidth / node.attrs.pixelHeight\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n", "import \"mediaPlugin.styles_tzt6bt.wyw.css\"; export const blurCrop = \"blurCrop_b2i4942\";\nexport const blurMedia = \"blurMedia_b1vfm2p\";\nexport const assetSpinnerContainer = \"assetSpinnerContainer_axkd8sq\";\nexport const assetSpinnerIcon = \"assetSpinnerIcon_a1ai590m\";", "import { assert } from \"@framerjs/shared\"\nimport type { Node } from \"prosemirror-model\"\nimport { type EditorState, TextSelection } from \"prosemirror-state\"\nimport { TableMap, TableView, addColumnAfter, addRowAfter } from \"prosemirror-tables\"\nimport type { EditorView } from \"prosemirror-view\"\nimport type { StylePresetClassNameByTag } from \"utils/stylePresetUtils.ts\"\nimport * as styles from \"./RichTextEditorWithToolbar.styles.ts\"\n\nconst defaultTableCellMinWidthPx = \"16ch\"\n\nconst plusIconContainer = `\n    <svg class=\"${styles.tableAppendButtonIcon}\" xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" fill=\"none\">\n        <path fill=\"currentColor\" d=\"M7.5 5a1 1 0 0 1 2 0v7a1 1 0 0 1-2 0Z\"/>\n        <path fill=\"#FFF\" d=\"M5 9.5a1 1 0 0 1 0-2h7a1 1 0 0 1 0 2Z\"/>\n    </svg>\n`\n\n/**\n * A custom table NodeView that extends ProseMirror's TableView by adding custom UI elements\n */\nexport class CustomTableNodeView extends TableView {\n\tprivate readonly getPosition: () => number | undefined\n\tprivate readonly editorView: EditorView\n\tprivate readonly getStylePresetClassNameByTag?: () => StylePresetClassNameByTag\n\tprivate readonly stylePresetClassNameByTagChangeListeners?: Set<() => void>\n\tprivate lastClassName: string | undefined\n\n\tconstructor(args: {\n\t\teditorView: EditorView\n\t\tgetPosition: () => number | undefined\n\t\ttableNode: Node\n\t\tgetStylePresetClassNameByTag?: () => StylePresetClassNameByTag\n\t\tstylePresetClassNameByTagChangeListeners?: Set<() => void>\n\t}) {\n\t\tsuper(args.tableNode, 100)\n\t\tthis.editorView = args.editorView\n\t\tthis.getPosition = args.getPosition\n\t\tthis.getStylePresetClassNameByTag = args.getStylePresetClassNameByTag\n\t\tthis.stylePresetClassNameByTagChangeListeners = args.stylePresetClassNameByTagChangeListeners\n\t\tthis.insertTableScrollableWrapper()\n\n\t\tif (args.editorView.editable) {\n\t\t\tthis.insertAppendRowButton()\n\t\t\tthis.insertAppendColumnButton()\n\t\t}\n\n\t\t// Table plugin does assume that default-cell-min-width is always set as PX. The canvas doesn't set it in PX but in CH.\n\t\t//  We need parity between the default cell min width in the editor and the canvas so we must set it in CH to ensure backwards compatibility with any existing tables that relied on font family or size for their designs.\n\t\tthis.table.style.setProperty(\"--default-cell-min-width\", `${defaultTableCellMinWidthPx}`)\n\t\tthis.stylePresetClassNameByTagChangeListeners?.add(this.updateClassName)\n\t\tthis.updateClassName()\n\t}\n\n\tprivate updateClassName = (): void => {\n\t\tconst stylePresetClassNameByTag = this.getStylePresetClassNameByTag?.()\n\t\tconst className = stylePresetClassNameByTag?.table\n\n\t\tif (this.lastClassName === className) return\n\n\t\tif (this.lastClassName) {\n\t\t\tthis.dom.classList.remove(this.lastClassName)\n\t\t}\n\n\t\tif (className) {\n\t\t\tthis.dom.classList.add(className)\n\t\t}\n\n\t\tthis.lastClassName = className\n\t}\n\n\t// we need to insert a wrapper around the table to make it scrollable\n\tprivate insertTableScrollableWrapper() {\n\t\tconst extraWrapper = document.createElement(\"div\")\n\t\textraWrapper.className = styles.tableScrollableWrapper\n\t\tthis.dom.insertBefore(extraWrapper, this.table)\n\t\textraWrapper.appendChild(this.table)\n\t}\n\n\tprivate insertAppendRowButton() {\n\t\tconst appendRowButton = createTableAppendButton()\n\t\tappendRowButton.classList.add(styles.tableAppendRowButton)\n\t\tappendRowButton.title = appendRowButton.ariaLabel = \"Append row\"\n\t\tappendRowButton.addEventListener(\"click\", () => {\n\t\t\taddRowAfter(this.selectLastCell(), this.editorView.dispatch)\n\t\t})\n\n\t\tthis.dom.appendChild(appendRowButton)\n\t}\n\n\tprivate insertAppendColumnButton() {\n\t\tconst appendColumnButton = createTableAppendButton()\n\t\tappendColumnButton.classList.add(styles.tableAppendColumnButton)\n\t\tappendColumnButton.title = appendColumnButton.ariaLabel = \"Append column\"\n\t\tappendColumnButton.addEventListener(\"click\", () => {\n\t\t\taddColumnAfter(this.selectLastCell(), this.editorView.dispatch)\n\t\t})\n\n\t\tthis.dom.appendChild(appendColumnButton)\n\t}\n\n\tprivate selectLastCell(): EditorState {\n\t\tconst tablePosition = this.getPosition()\n\t\tassert(tablePosition !== undefined, \"tablePosition should be defined\")\n\n\t\tconst lastCellIndex = TableMap.get(this.node).map.at(-1)\n\t\tassert(lastCellIndex !== undefined, \"table should not be empty before appending a new row/column\")\n\n\t\tconst lastCellPosition = tablePosition + lastCellIndex + 1\n\n\t\t// appending rows/columns is possible if selection is inside the table, that's why we select the last cell\n\t\tconst temporaryTableSelection = TextSelection.create(this.editorView.state.doc, lastCellPosition)\n\n\t\treturn this.editorView.state.apply(this.editorView.state.tr.setSelection(temporaryTableSelection))\n\t}\n\n\tdestroy() {\n\t\tthis.stylePresetClassNameByTagChangeListeners?.delete(this.updateClassName)\n\t}\n}\n\nfunction createTableAppendButton() {\n\tconst button = document.createElement(\"button\")\n\tbutton.classList.add(styles.tableAppendButton)\n\tbutton.contentEditable = \"false\"\n\tbutton.innerHTML = plusIconContainer\n\tbutton.type = \"button\"\n\treturn button\n}\n", "import { isSafari } from \"@framerjs/shared\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { Node as ProseMirrorNode } from \"prosemirror-model\"\nimport { type EditorState, Plugin, type Selection, TextSelection } from \"prosemirror-state\"\nimport { CellSelection } from \"prosemirror-tables\"\nimport { Decoration, DecorationSet, type EditorView } from \"prosemirror-view\"\nimport { isTableCellNode, isTableHeaderNode } from \"prosemirror/schema/table.ts\"\nimport type { StylePresetClassNameByTag } from \"utils/stylePresetUtils.ts\"\nimport { CustomTableNodeView } from \"./CustomTableNodeView.ts\"\nimport * as styles from \"./RichTextEditorWithToolbar.styles.ts\"\nimport { tableContextMenuItems } from \"./tableUtils.ts\"\n\nexport function tablePlugin(\n\tengine: BaseEngine,\n\tgetStylePresetClassNameByTag?: () => StylePresetClassNameByTag,\n\tstylePresetClassNameByTagChangeListeners?: Set<() => void>,\n) {\n\treturn new Plugin({\n\t\tprops: {\n\t\t\tdecorations(state) {\n\t\t\t\treturn this.getState(state)\n\t\t\t},\n\n\t\t\thandleDOMEvents: {\n\t\t\t\tcontextmenu(editorView, event) {\n\t\t\t\t\topenContextMenu(engine, editorView, event)\n\t\t\t\t},\n\n\t\t\t\tkeydown(editorView, event) {\n\t\t\t\t\tif (shouldRemoveSelectionAndFocusLastSelectedCell(event, editorView.state.selection)) {\n\t\t\t\t\t\tpreventDefaultAndStopPropagation(event)\n\t\t\t\t\t\treturn removeSelectionAndFocusLastSelectedCell(editorView.state.selection, editorView)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false\n\t\t\t\t},\n\n\t\t\t\tmousedown(editorView, event) {\n\t\t\t\t\tif (event.button !== 2) return false // only handle right clicks\n\n\t\t\t\t\tif (!(event.target instanceof HTMLElement)) return false\n\n\t\t\t\t\tconst cell = event.target.closest(\"th, td\")\n\t\t\t\t\tif (!(cell instanceof HTMLTableCellElement)) return false\n\n\t\t\t\t\tconst selection = editorView.state.selection\n\t\t\t\t\tif (!(selection instanceof CellSelection)) return false\n\n\t\t\t\t\tconst clickedCellPosition = editorView.posAtDOM(cell, 0)\n\n\t\t\t\t\tconst isClickOutsideCellsSelection = selection.ranges.every(\n\t\t\t\t\t\trange => range.$from.pos > clickedCellPosition || clickedCellPosition > range.$to.pos,\n\t\t\t\t\t)\n\n\t\t\t\t\tif (isClickOutsideCellsSelection) return false\n\n\t\t\t\t\tevent.preventDefault() // keep cells selection\n\t\t\t\t\treturn true\n\t\t\t\t},\n\t\t\t},\n\n\t\t\tnodeViews: {\n\t\t\t\ttable: (tableNode, editorView, getPosition) => {\n\t\t\t\t\treturn new CustomTableNodeView({\n\t\t\t\t\t\ttableNode,\n\t\t\t\t\t\teditorView,\n\t\t\t\t\t\tgetPosition,\n\t\t\t\t\t\tgetStylePresetClassNameByTag,\n\t\t\t\t\t\tstylePresetClassNameByTagChangeListeners,\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\tstate: {\n\t\t\tinit(_, state) {\n\t\t\t\treturn DecorationSet.create(state.doc, createCellMenuButtonDecorations(engine, state.doc, state))\n\t\t\t},\n\t\t\tapply({ doc }, _prevDecorations, _prevState, state) {\n\t\t\t\treturn DecorationSet.create(doc, createCellMenuButtonDecorations(engine, doc, state))\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunction createCellMenuButtonDecorations(\n\tengine: BaseEngine,\n\tdoc: ProseMirrorNode,\n\tnextState: EditorState,\n): Decoration[] {\n\tconst decorations: Decoration[] = []\n\n\tdoc.descendants((node, position) => {\n\t\tif (\n\t\t\t(isTableCellNode(node) || isTableHeaderNode(node)) &&\n\t\t\tshouldCellContainContextMenuButton(nextState, position, node.nodeSize + position)\n\t\t) {\n\t\t\tdecorations.push(\n\t\t\t\tDecoration.widget(\n\t\t\t\t\tposition + node.nodeSize - 1,\n\t\t\t\t\tview => {\n\t\t\t\t\t\t// don't show the context menu button for read-only mode\n\t\t\t\t\t\tif (!view.editable) {\n\t\t\t\t\t\t\tconst emptySpan = document.createElement(\"span\")\n\t\t\t\t\t\t\temptySpan.style.visibility = \"hidden\"\n\t\t\t\t\t\t\treturn emptySpan\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn createCellContextMenuButton(engine, view)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: position.toString(),\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t)\n\t\t}\n\t})\n\n\treturn decorations\n}\n\nfunction shouldCellContainContextMenuButton(state: EditorState, cellPos: number, cellEnd: number): boolean {\n\tconst { selection } = state\n\n\t// check if the selection is completely contained within this cell\n\tif (selection instanceof TextSelection) return selection.from >= cellPos && selection.to <= cellEnd\n\n\t// place the button in the last cell where the selection ends\n\tif (selection instanceof CellSelection) return selection.$head.pos >= cellPos && selection.$head.pos < cellEnd\n\n\treturn false\n}\n\nconst cellMenuButtonIcon = `\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" fill=\"none\">\n        <path d=\"M11 4.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3Zm0 5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3Zm0 5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3Z\" fill=\"currentColor\" />\n    </svg>\n`\n\nfunction createCellContextMenuButton(engine: BaseEngine, view: EditorView): Node {\n\tconst button = document.createElement(\"button\")\n\tbutton.className = styles.tableCellContextMenuButton\n\tbutton.innerHTML = cellMenuButtonIcon\n\tbutton.title = button.ariaLabel = \"Open context menu\"\n\tbutton.addEventListener(\"click\", event => openContextMenu(engine, view, event))\n\n\t// prevent the default Prosemirror behavior which would change the selection to TextSelection\n\tbutton.addEventListener(\"mousedown\", event => {\n\t\tif (view.state.selection instanceof CellSelection) {\n\t\t\tpreventDefaultAndStopPropagation(event)\n\t\t}\n\t})\n\n\treturn button\n}\n\nfunction openContextMenu(engine: BaseEngine, editorView: EditorView, event: MouseEvent): boolean | undefined {\n\tif (!(event.target instanceof Element)) return true\n\n\tconst cell = event.target.closest(\"th, td\")\n\tif (!(cell instanceof HTMLTableCellElement)) return true\n\n\tif (shouldRestoreSelection(editorView, cell)) restoreSelection(editorView)\n\n\tconst multipleCellsSelected =\n\t\teditorView.state.selection instanceof CellSelection && editorView.state.selection.ranges.length > 1\n\n\tif (!multipleCellsSelected && isMouseEventOnText(event, cell)) return true\n\n\tevent.preventDefault()\n\tconst closeContextMenu = new AbortController()\n\n\tif (shouldSelectCellAndFocusOnContextMenuClose(editorView.state.selection)) {\n\t\tconst selection = selectCell(cell, editorView)\n\t\tcloseContextMenu.signal.addEventListener(\"abort\", () => {\n\t\t\tremoveSelectionAndFocusLastSelectedCell(selection, editorView)\n\t\t})\n\t}\n\n\tif (shouldOpenContextMenuWithEscKeyHandler(editorView.state.selection)) {\n\t\topenContextMenuWithEscKeyHandler(engine, editorView, editorView.state.selection, closeContextMenu.signal)\n\t}\n\n\tfunction cleanup() {\n\t\tcloseContextMenu.abort()\n\t}\n\n\tengine.stores.contextMenuStore.show(tableContextMenuItems(editorView), {\n\t\tlocation: { x: event.clientX, y: event.clientY },\n\t\tonDone: cleanup,\n\t\tonCancel: cleanup,\n\t})\n}\n\n// determines if a mouse event occurred on visible text content\nfunction isMouseEventOnText(event: MouseEvent, container: Element): boolean {\n\tconst textNodesWithinContainer: Node[] = []\n\n\tconst walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT, {\n\t\tacceptNode: node => (node.textContent?.trim() ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT),\n\t})\n\n\tlet node: Node | null\n\twhile ((node = walker.nextNode())) {\n\t\ttextNodesWithinContainer.push(node)\n\t}\n\n\t// check if click was on any text node's rectangle\n\tfor (const textNode of textNodesWithinContainer) {\n\t\tconst range = document.createRange()\n\t\trange.selectNodeContents(textNode)\n\t\tconst rects = range.getClientRects()\n\n\t\tfor (const rect of rects) {\n\t\t\tif (\n\t\t\t\tevent.clientX >= rect.left &&\n\t\t\t\tevent.clientX <= rect.right &&\n\t\t\t\tevent.clientY >= rect.top &&\n\t\t\t\tevent.clientY <= rect.bottom\n\t\t\t) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false\n}\n\n/**\n * Safari handles right click on table cells differently than other browsers. When the user right-clicks on a table cell\n * that is not in focus after multiple cells selection, selection is lost. This function checks if the selection should\n * be restored.\n */\nfunction shouldRestoreSelection(editorView: EditorView, cell: HTMLTableCellElement): boolean {\n\tif (!isSafari() || !(editorView.state.selection instanceof CellSelection)) return false\n\tconst clickedCellPosition = editorView.posAtDOM(cell, 0)\n\treturn clickedCellPosition !== editorView.state.selection.$to.pos\n}\n\nfunction restoreSelection(editorView: EditorView) {\n\tconst selectionToBeRestored = editorView.state.selection\n\n\t/**\n\t * setTimeout is needed because Safari resets the selection after the contextmenu event. By deferring the selection\n\t * restoration to the next event loop, we ensure it happens after Safari's default selection behavior.\n\t */\n\tsetTimeout(() => {\n\t\tconst tr = editorView.state.tr.setSelection(selectionToBeRestored)\n\t\teditorView.dispatch(tr)\n\n\t\tdocument.addEventListener(\"mousemove\", preventDefaultAndStopPropagation, true)\n\t\tdocument.addEventListener(\n\t\t\t\"mousedown\",\n\t\t\t() => document.removeEventListener(\"mousemove\", preventDefaultAndStopPropagation, true),\n\t\t\t{ once: true },\n\t\t)\n\t}, 0)\n}\n\nfunction preventDefaultAndStopPropagation(e: Event) {\n\te.preventDefault()\n\te.stopPropagation()\n}\n\n/**\n * Safari handles ESC keypress differently than other browsers. When the user presses ESC key, with an open context\n * menu, the context menu closes and the content of selected table cells is removed and the last selected cell's content\n * is replaced with a weird character. We need to handle this case and prevent the default behavior of ESC keypress.\n */\nfunction shouldOpenContextMenuWithEscKeyHandler(selection: Selection): selection is CellSelection {\n\treturn isSafari() && selection instanceof CellSelection\n}\n\nfunction openContextMenuWithEscKeyHandler(\n\tengine: BaseEngine,\n\teditorView: EditorView,\n\tselection: CellSelection,\n\tsignal: AbortSignal,\n) {\n\tfunction handleEsc(keyboardEvent: KeyboardEvent) {\n\t\tif (keyboardEvent.key === \"Escape\") {\n\t\t\t// prevent default behavior of ESC keypress\n\t\t\tpreventDefaultAndStopPropagation(keyboardEvent)\n\n\t\t\tengine.stores.contextMenuStore.close() // manually close the context menu\n\n\t\t\tconst textSelectionInLastCell = TextSelection.create(editorView.state.doc, selection.$to.pos)\n\n\t\t\t/**\n\t\t\t * We need to set the selection to the last selected cell position, otherwise after the context menu\n\t\t\t * closed, the selected cells' content is replaced with a weird character if the user presses ESC key.\n\t\t\t */\n\t\t\teditorView.dispatch(editorView.state.tr.setSelection(textSelectionInLastCell))\n\t\t}\n\t}\n\n\tdocument.addEventListener(\"keydown\", handleEsc, { capture: true, signal })\n}\n\nfunction shouldSelectCellAndFocusOnContextMenuClose(selection: Selection): boolean {\n\treturn !(selection instanceof CellSelection)\n}\n\nfunction selectCell(cell: HTMLTableCellElement, editorView: EditorView): CellSelection {\n\tconst cellPosition = editorView.posAtDOM(cell, 0)\n\tconst $anchor = editorView.state.doc.resolve(cellPosition)\n\tconst cellSelection = CellSelection.create(editorView.state.doc, $anchor.pos - 1)\n\teditorView.dispatch(editorView.state.tr.setSelection(cellSelection))\n\treturn cellSelection\n}\n\nfunction shouldRemoveSelectionAndFocusLastSelectedCell(\n\tevent: KeyboardEvent,\n\tselection: Selection,\n): selection is CellSelection {\n\treturn event.key === \"Escape\" && selection instanceof CellSelection\n}\n\nfunction removeSelectionAndFocusLastSelectedCell(selection: CellSelection, editorView: EditorView): boolean {\n\tconst lastCellPosition = selection.$head.pos\n\tlet cellNode: ProseMirrorNode | undefined\n\tlet cellPosition = lastCellPosition\n\tlet depth = selection.$head.depth\n\n\t// traverse up the node hierarchy to find the cell node\n\twhile (depth > 0) {\n\t\tconst node = selection.$head.node(depth)\n\t\tif (isTableCellNode(node) || isTableHeaderNode(node)) {\n\t\t\tcellNode = node\n\t\t\tcellPosition = selection.$head.before(depth)\n\t\t\tbreak\n\t\t}\n\t\tdepth--\n\t}\n\n\tif (!cellNode) return true\n\n\tconst innerNodePosition = cellPosition + 1 // move inside the cell node\n\tconst resolvedPosition = editorView.state.doc.resolve(innerNodePosition)\n\n\t// navigate to the deepest content and find its end position\n\tconst contentEndPosition = resolvedPosition.nodeAfter\n\t\t? innerNodePosition + resolvedPosition.nodeAfter.nodeSize - 1 // if there's content, navigate to its end\n\t\t: selection.$head.end(depth) // otherwise use the end position of the cell\n\n\tconst textSelection = TextSelection.create(editorView.state.doc, contentEndPosition)\n\teditorView.dispatch(editorView.state.tr.setSelection(textSelection))\n\teditorView.focus()\n\n\treturn true\n}\n", "import type { ThemeOverrideMode } from \"@framerjs/fresco\"\nimport { colors, dimensions } from \"@framerjs/fresco/tokens\"\nimport { unhandledError } from \"@framerjs/shared\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { ImagePluginPickerButtonComponent } from \"document/components/chrome/shared/ImagePluginPickerButtonContext.tsx\"\nimport { getMetricsInteractionSourceForScopeType } from \"document/components/utils/getMetricsInteractionSourceForScopeType.ts\"\nimport { getProseMirrorDocFromRichTextTreeValue } from \"document/models/richText/richTextPmAdapter.ts\"\nimport type { RichTextTreeValue } from \"document/models/richText/richTextStorage.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport codemark from \"prosemirror-codemark\"\nimport { InputRule, wrappingInputRule } from \"prosemirror-inputrules\"\nimport { liftListItem } from \"prosemirror-schema-list\"\nimport { type Command, type EditorState, NodeSelection } from \"prosemirror-state\"\nimport { goToNextCell, tableEditing } from \"prosemirror-tables\"\nimport { backspaceListItem, replaceWithSchemaLineBreak } from \"prosemirror/commands.ts\"\nimport { createEditorState } from \"prosemirror/editorState.ts\"\nimport { bulletedListInputRule, numberedListInputRule } from \"prosemirror/inputRules.ts\"\nimport type { ProseMirror } from \"prosemirror/loader.ts\"\nimport { applyStylePresetsPlugin } from \"prosemirror/plugins/applyStylePresetsPlugin.ts\"\nimport { mediaPlugin } from \"prosemirror/plugins/mediaPlugin.tsx\"\nimport { clipboardPlugin } from \"prosemirror/plugins/pastePlugin.ts\"\nimport {\n\ttype FramerProseMirrorSchema,\n\tschemaSupportsBlockquotes,\n\tschemaSupportsEmbeds,\n\tschemaSupportsMedia,\n\tschemaSupportsTables,\n} from \"prosemirror/schema/index.ts\"\nimport type { TextBlockTag } from \"prosemirror/schema/textBlock.ts\"\nimport { moduleComponents } from \"utils/moduleComponents.ts\"\nimport type { StylePresetClassNameByTag } from \"utils/stylePresetUtils.ts\"\nimport { isDefined } from \"utils/typeChecks.ts\"\nimport { record } from \"web/lib/tracker.ts\"\nimport { codeBlockPlugin } from \"./CodeBlockView/codeBlockPlugin.ts\"\nimport { addModule, getPreloadedModuleIdentifier } from \"./moduleUtils.ts\"\nimport { inlineFormattingPlugin } from \"./selectionStyling/inlineFormattingPlugin.ts\"\nimport { slashCommandsPlugin } from \"./slashCommands/slashCommandsPlugin.ts\"\nimport { tablePlugin } from \"./tablePlugin.ts\"\nimport { toggleMark } from \"./toolbarUtils.ts\"\n\nconst HEADING_REGEX = /^(?<level>#{1,6})\\s$/u\nconst BLOCKQUOTE_REGEX = /^\\s*>\\s$/u\nconst CODEBLOCK_REGEX = /^```$/u\n\ninterface Options {\n\tengine: BaseEngine\n\tschema: FramerProseMirrorSchema\n\tinitialValue: RichTextTreeValue\n\twithMediaPopout: boolean\n\timagePluginPickerButton?: ImagePluginPickerButtonComponent\n\tgetThemeOverrideMode?(): ThemeOverrideMode | undefined\n\tthemeOverrideModeChangeListeners?: Set<VoidFunction>\n\tsupportsSlashCommands?: boolean\n\tsupportsInlineFormatting?: boolean\n\tsupportedTags: Set<string> | undefined\n\tgetStylePresetClassNameByTag?(): StylePresetClassNameByTag\n\tstylePresetClassNameByTagChangeListeners?: Set<() => void>\n\tproseMirror: ProseMirror\n\tkeyBindings?: Record<string, Command>\n\tsaveChanges?: VoidFunction\n}\n\nexport function createRichTextEditorState({\n\tengine,\n\tschema,\n\tinitialValue,\n\twithMediaPopout,\n\timagePluginPickerButton,\n\tgetThemeOverrideMode,\n\tthemeOverrideModeChangeListeners,\n\tsupportsSlashCommands = false,\n\tsupportsInlineFormatting = false,\n\tsupportedTags,\n\tgetStylePresetClassNameByTag,\n\tstylePresetClassNameByTagChangeListeners,\n\tproseMirror,\n\tkeyBindings = {},\n\tsaveChanges,\n}: Options) {\n\tconst {\n\t\tbaseKeymap,\n\t\tchainCommands,\n\t\tdropCursor,\n\t\tellipsis,\n\t\temDash,\n\t\tgapCursor,\n\t\thistory,\n\t\tinputRules,\n\t\tkeymap,\n\t\tredo,\n\t\tsinkListItem,\n\t\tsplitListItem,\n\t\ttextblockTypeInputRule,\n\t\tundo,\n\t\tundoInputRule,\n\t} = proseMirror\n\n\treturn createEditorState(getProseMirrorDocFromRichTextTreeValue(initialValue, schema), schema, {\n\t\tplugins: [\n\t\t\tsupportsSlashCommands ? slashCommandsPlugin() : undefined,\n\t\t\tsupportsInlineFormatting ? inlineFormattingPlugin() : undefined,\n\n\t\t\thistory(),\n\n\t\t\tkeymap({\n\t\t\t\t\"Mod-z\": chainCommands(undoInputRule, undo),\n\t\t\t\t\"Mod-Shift-z\": redo,\n\t\t\t\t\"Mod-b\": toggleMark(schema.marks.bold),\n\t\t\t\t\"Mod-i\": toggleMark(schema.marks.italic),\n\t\t\t\t// end with return true to prevent tabbing breaking out to previous tab index in case of first step\n\t\t\t\t\"Shift-Tab\": chainCommands(liftListItem(schema.nodes.listItem), goToNextCell(-1), () => true),\n\t\t\t\t// end with return true to prevent tabbing breaking out to next tab index in case of last step\n\t\t\t\tTab: chainCommands(sinkListItem(schema.nodes.listItem), goToNextCell(1), () => true),\n\t\t\t\tBackspace: chainCommands(undoInputRule, backspaceListItem(schema)),\n\t\t\t\tEnter: splitListItem(schema.nodes.listItem),\n\t\t\t\t\"Shift-Enter\": replaceWithSchemaLineBreak(schema),\n\t\t\t\t\"Mod-Shift-c\": toggleMark(schema.marks.inlineCode),\n\t\t\t\t...keyBindings,\n\t\t\t}),\n\n\t\t\tkeymap(baseKeymap),\n\n\t\t\tdropCursor({\n\t\t\t\tcolor: colors.cmsRichTextDropCursor,\n\t\t\t\twidth: dimensions.values.richTextDropCursor,\n\t\t\t}),\n\n\t\t\tgapCursor(),\n\n\t\t\tclipboardPlugin({\n\t\t\t\tengine,\n\t\t\t\tschema,\n\t\t\t\tsupportedTags,\n\t\t\t\tsaveChanges,\n\t\t\t}),\n\n\t\t\tinputRules({\n\t\t\t\trules: [\n\t\t\t\t\t// Turn two dashes -- into em dash\n\t\t\t\t\temDash,\n\n\t\t\t\t\t// Turn three dots ... into ellipsis\n\t\t\t\t\tellipsis,\n\n\t\t\t\t\t// Turn hashtag #, ## into heading\n\t\t\t\t\ttextblockTypeInputRule(HEADING_REGEX, schema.nodes.textBlock, match => {\n\t\t\t\t\t\tconst level = match.groups?.level?.length ?? 1\n\n\t\t\t\t\t\tconst tag = (\"h\" + level) as TextBlockTag\n\t\t\t\t\t\tif (supportedTags?.has(tag) ?? true) return { tag }\n\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}),\n\n\t\t\t\t\t// Turn > into blockquote\n\t\t\t\t\tschemaSupportsBlockquotes(schema) ? wrappingInputRule(BLOCKQUOTE_REGEX, schema.nodes.blockquote) : undefined,\n\t\t\t\t\tnumberedListInputRule(schema),\n\t\t\t\t\tbulletedListInputRule(schema),\n\n\t\t\t\t\tschemaSupportsEmbeds(schema)\n\t\t\t\t\t\t? new InputRule(CODEBLOCK_REGEX, (state: EditorState, _match, start, end) => {\n\t\t\t\t\t\t\t\tconst codeComponentIdentifier = getPreloadedModuleIdentifier(engine.tree, moduleComponents.codeblock)\n\n\t\t\t\t\t\t\t\trecord(\"collection_record_codeblock_add\", {\n\t\t\t\t\t\t\t\t\tsource: getMetricsInteractionSourceForScopeType(engine.stores.scopeStore.scopeType),\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\taddModule(engine, codeComponentIdentifier).catch(unhandledError)\n\n\t\t\t\t\t\t\t\tconst transaction = state.tr\n\t\t\t\t\t\t\t\ttransaction.replaceRangeWith(\n\t\t\t\t\t\t\t\t\tstart,\n\t\t\t\t\t\t\t\t\tend,\n\t\t\t\t\t\t\t\t\tschema.nodes.module.create({\n\t\t\t\t\t\t\t\t\t\tidentifier: codeComponentIdentifier,\n\t\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\t\tcode: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: ControlType.String,\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: \"\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\tconst selection = NodeSelection.create(transaction.doc, start - 1)\n\t\t\t\t\t\t\t\ttransaction.setSelection(selection)\n\n\t\t\t\t\t\t\t\treturn transaction\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: undefined,\n\t\t\t\t].filter(isDefined),\n\t\t\t}),\n\n\t\t\tschemaSupportsMedia(schema)\n\t\t\t\t? mediaPlugin({\n\t\t\t\t\t\tengine,\n\t\t\t\t\t\tschema,\n\t\t\t\t\t\twithMediaPopout,\n\t\t\t\t\t\timagePluginPickerButton,\n\t\t\t\t\t\tgetThemeOverrideMode,\n\t\t\t\t\t\tthemeOverrideModeChangeListeners,\n\t\t\t\t\t\tgetStylePresetClassNameByTag,\n\t\t\t\t\t\tstylePresetClassNameByTagChangeListeners,\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\n\t\t\t...codemark({\n\t\t\t\tmarkType: schema.marks.inlineCode,\n\t\t\t}),\n\n\t\t\tschemaSupportsEmbeds(schema) ? codeBlockPlugin() : undefined,\n\n\t\t\tgetStylePresetClassNameByTag && stylePresetClassNameByTagChangeListeners\n\t\t\t\t? applyStylePresetsPlugin(getStylePresetClassNameByTag, stylePresetClassNameByTagChangeListeners)\n\t\t\t\t: undefined,\n\n\t\t\tschemaSupportsTables(schema) ? tableEditing() : undefined,\n\t\t\tschemaSupportsTables(schema)\n\t\t\t\t? tablePlugin(engine, getStylePresetClassNameByTag, stylePresetClassNameByTagChangeListeners)\n\t\t\t\t: undefined,\n\t\t].filter(isDefined),\n\t})\n}\n", "import { isCommandKeyPressed } from \"@framerjs/shared\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { type EditorState, Selection } from \"prosemirror-state\"\nimport { addMedia } from \"prosemirror/addMedia.ts\"\nimport type { ProseMirror } from \"prosemirror/loader.ts\"\nimport { type FramerProseMirrorSchema, schemaSupportsMedia } from \"prosemirror/schema/index.ts\"\n\ninterface Options {\n\tengine: BaseEngine\n\tschema: FramerProseMirrorSchema\n\tenabled: boolean\n\teditorState: EditorState\n\tsetEditorState(editorState: EditorState): void\n\tonChange?(html: string): void\n\tsaveChanges?(): void\n\tproseMirror: ProseMirror\n\tsaveOnMetaArrowNavigation?: boolean\n\tonLinkShortcut?(event: KeyboardEvent): void\n}\n\nexport function createRichTextEditorView({\n\tengine,\n\tschema,\n\tenabled,\n\teditorState,\n\tsetEditorState,\n\tonChange,\n\tsaveChanges,\n\tproseMirror,\n\tsaveOnMetaArrowNavigation,\n\tonLinkShortcut,\n}: Options) {\n\tconst { EditorView } = proseMirror\n\n\tconst editorView = new EditorView(null, {\n\t\tstate: editorState,\n\n\t\teditable: () => enabled,\n\n\t\thandleKeyDown: (view, event) => {\n\t\t\tconst isAtStart = Selection.atStart(view.state.doc).from === view.state.selection.from\n\t\t\tconst isAtEnd = Selection.atEnd(view.state.doc).from === view.state.selection.from\n\n\t\t\t// Prevent arrow key navigation from happening in the\n\t\t\t// collection item detail view. Only allow navigation to\n\t\t\t// work if the cursor is at either end of the text since\n\t\t\t// this is a valid shortcut in text editing.\n\t\t\tif (isCommandKeyPressed(event) && event.key === \"ArrowUp\") {\n\t\t\t\tif (!isAtStart) {\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t} else if (saveOnMetaArrowNavigation) {\n\t\t\t\t\tsaveChanges?.()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isCommandKeyPressed(event) && event.key === \"ArrowDown\") {\n\t\t\t\tif (!isAtEnd) {\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t} else if (saveOnMetaArrowNavigation) {\n\t\t\t\t\tsaveChanges?.()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isCommandKeyPressed(event) && event.key === \"k\" && !event.repeat) {\n\t\t\t\tonLinkShortcut?.(event)\n\t\t\t}\n\n\t\t\tif (isCommandKeyPressed(event) && event.key === \"s\" && !event.repeat) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tsaveChanges?.()\n\t\t\t}\n\n\t\t\treturn false\n\t\t},\n\n\t\thandleDrop: (view, event: DragEvent) => {\n\t\t\tif (!schemaSupportsMedia(schema)) return false\n\t\t\tif (!event.dataTransfer?.files.length) return false\n\t\t\tevent.preventDefault()\n\t\t\tconst insertPosition = view.posAtCoords({ left: event.clientX, top: event.clientY })?.pos\n\t\t\tvoid addMedia(engine, schema, view, event.dataTransfer.files, {\n\t\t\t\ttype: \"drop\",\n\t\t\t\tinsertPosition,\n\t\t\t}).finally(saveChanges)\n\t\t\treturn true\n\t\t},\n\n\t\tdispatchTransaction: transaction => {\n\t\t\tconst newState = editorView.state.apply(transaction)\n\t\t\teditorView.updateState(newState)\n\n\t\t\tif (transaction.docChanged) {\n\t\t\t\t// TODO: This shouldn't use `doc.textContent` but `serializeRichText` instead.\n\t\t\t\tonChange?.(newState.doc.textContent)\n\t\t\t}\n\n\t\t\tsetEditorState(newState)\n\t\t},\n\t})\n\n\treturn editorView\n}\n", "import type { ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport { parseModuleIdentifier } from \"@framerjs/shared\"\nimport { waitForLoadingComponentsWithTimeout } from \"code-generation/utils/waitForLoadingComponentsWithTimeout.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { useEffect } from \"react\"\nimport { useForceUpdate } from \"utils/useForceUpdate.ts\"\n\nexport function useReactComponentDefinition(identifier: ModuleExportIdentifierString) {\n\tconst engine = useBaseEngine()\n\tconst forceUpdate = useForceUpdate()\n\tconst component = engine.componentLoader.reactComponentForIdentifier(identifier)\n\n\tuseEffect(() => {\n\t\tif (component) return\n\n\t\tasync function loadComponentDefinition() {\n\t\t\tconst parsedId = parseModuleIdentifier(identifier)\n\t\t\tif (parsedId && parsedId.kind === \"externalModuleExport\") {\n\t\t\t\tawait engine.stores.modulesStore.preloadExternalModules([parsedId])\n\t\t\t}\n\n\t\t\tawait waitForLoadingComponentsWithTimeout(engine.componentLoader, [identifier], engine.stores.modulesStore)\n\t\t}\n\n\t\tvoid loadComponentDefinition().finally(forceUpdate)\n\t}, [identifier, forceUpdate, component])\n\n\treturn component\n}\n", "import type { DataDefinition } from \"@framerjs/framer-runtime\"\nimport { AnnotationKey, type ItemToSlug } from \"@framerjs/framer-runtime/crossorigin\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { getRawWebPagePath } from \"document/components/utils/getWebPagePath.ts\"\nimport { useDataForIdentifier } from \"document/components/utils/useDataForIdentifier.ts\"\nimport type { CollectionNode } from \"document/models/CanvasTree/index.ts\"\nimport { isWebPageNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport type { DynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { Link, LinkVariables } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport { isLinkToURL, isLinkToWebPage } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport type { Reduced } from \"document/models/CanvasTree/traits/utils/Reduced.ts\"\nimport { isResolvedCollectionItemSelector } from \"document/models/CanvasTree/traits/utils/ResolvedCollectionItemSelector.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { getNestedVariableId } from \"utils/collectionReferenceUtils.ts\"\nimport { getCollectionForIdentifier } from \"utils/getCollectionForIdentifier.ts\"\nimport { useItemToSlug } from \"utils/useItemToSlug.ts\"\nimport { nextItemVariableId, previousItemVariableId } from \"./CollectionItemVariables.ts\"\n\nfunction getSlugKey(collectionNode: CollectionNode | null, dataDefinition: DataDefinition | null): string | undefined {\n\tif (collectionNode) {\n\t\treturn collectionNode.getSlugVariable()?.id\n\t}\n\treturn dataDefinition?.annotations?.[AnnotationKey.FramerSlug]\n}\n\nfunction getResolvedCollectionItemSlug(\n\tcollectionNode: CollectionNode | null,\n\tdataDefinition: DataDefinition | null,\n\titemToSlug: ItemToSlug | undefined,\n\tpathVariables: LinkVariables,\n): string | undefined {\n\tconst slugKey = getSlugKey(collectionNode, dataDefinition)\n\tif (!slugKey) return\n\n\tconst pathVariable = pathVariables[slugKey]\n\n\tif (isResolvedCollectionItemSelector(pathVariable)) {\n\t\t// We don't allow hiding slugs in the default locale yet.\n\t\tconst slug = itemToSlug?.[pathVariable.collectionItemId]\n\t\tif (!slug) return \"Missing Slug\"\n\n\t\treturn slug\n\t}\n\n\tif (isVariableReference(pathVariable)) {\n\t\tconst previousSlugId = getNestedVariableId(previousItemVariableId, slugKey)\n\t\tif (pathVariable.id === previousSlugId) return Dictionary.Previous\n\n\t\tconst nextSlugId = getNestedVariableId(nextItemVariableId, slugKey)\n\t\tif (pathVariable.id === nextSlugId) return Dictionary.Next\n\n\t\treturn\n\t}\n}\n\nfunction removeUrlScheme(link: string): string {\n\treturn link.replace(/^https?:\\/\\//u, \"\")\n}\n\nexport function useTitleForLink(\n\tengine: BaseEngine,\n\tlink: Reduced<Link | DynamicValue> | undefined,\n\tfallback: string = Dictionary.Link,\n): string {\n\tconst node = isLinkToWebPage(link) ? engine.tree.get(link.webPageId) : null\n\tconst dataIdentifier = isWebPageNode(node) ? node.dataIdentifier : undefined\n\tconst collectionData = useDataForIdentifier(dataIdentifier)\n\tconst itemToSlug = useItemToSlug(dataIdentifier)\n\tconst { collectionNode } = useEngineState(\n\t\t() => ({ collectionNode: getCollectionForIdentifier(engine.tree, dataIdentifier) }),\n\t\t[dataIdentifier],\n\t\t[EngineChange.Tree],\n\t)\n\tif (isLinkToURL(link)) return removeUrlScheme(link.url) || fallback\n\tif (!isLinkToWebPage(link)) return fallback\n\tif (!isWebPageNode(node)) return Dictionary.Missing\n\n\tconst isHomePage = node.id === engine.tree.root.homePageNodeId\n\tif (isHomePage) return Dictionary.Home\n\n\tconst pagePath = getRawWebPagePath(engine.tree, node)\n\tif (!collectionNode && !collectionData) return pagePath || Dictionary.Link\n\n\tif (link?.pathVariables) {\n\t\tconst slug = getResolvedCollectionItemSlug(collectionNode, collectionData, itemToSlug, link.pathVariables)\n\t\tif (slug) return slug\n\t}\n\n\tconst collectionName = collectionNode?.resolveValue(\"name\") || collectionData?.name || Dictionary.Unknown\n\treturn collectionName + \" Pages\"\n}\n", "import { Stack } from \"@framerjs/fresco\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { PageLinkingRows, type Props as PageLinkingRowsProps } from \"../panels/PageLinkingRows.tsx\"\n\nexport function LinkPopout({ ...props }: PageLinkingRowsProps) {\n\treturn (\n\t\t<Stack\n\t\t\tpaddingTop={dimensions.css.inputSpacing}\n\t\t\tpaddingRight={dimensions.css.popoverPadding}\n\t\t\tpaddingBottom={dimensions.css.inputSpacing}\n\t\t\tpaddingLeft={dimensions.css.popoverPadding}\n\t\t\tgap={0}\n\t\t>\n\t\t\t<PageLinkingRows {...props} />\n\t\t</Stack>\n\t)\n}\n", "import type { HiddenStateByNodeId } from \"canvas-sandbox/ControlsVisibility.ts\"\n\nexport function isHiddenRow(\n\tkey: string,\n\tnodeIds: string[],\n\thiddenControlsByNodeId: HiddenStateByNodeId | undefined,\n): boolean {\n\tif (!hiddenControlsByNodeId) return false\n\treturn nodeIds.every(nodeId => hiddenControlsByNodeId[nodeId]?.[key] === true)\n}\n", "import { ConfirmationModal, Translatable as T } from \"@framerjs/fresco\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { ConfirmationConfiguration } from \"document/stores/ModalStore.ts\"\nimport React from \"react\"\nimport { isString } from \"utils/typeChecks.ts\"\n\nexport const ConfirmModal = ({\n\ttitle,\n\tdescription,\n\tconfirmLabel,\n\tcancelLabel = Dictionary.Cancel,\n\tinteractionRequired = false,\n\tkeyboardConfirmMode,\n\tcancelOnEnter,\n\tavoidDismissOnConfirm,\n\tvariant,\n\tdismissVariant,\n\tonConfirm,\n\tonCancel,\n\tonDismiss,\n\tbuttonDirection,\n\thasBackdrop,\n}: ConfirmationConfiguration) => {\n\tconst engine = useBaseEngine()\n\tconst isAgentExperimentOn = useExperimentIsOn(\"agent\")\n\n\tconst [confirmButtonLoading, setConfirmButtonLoading] = React.useState<boolean>(false)\n\n\tconst handleConfirm = onConfirm\n\t\t? engine.scheduler.wrapHandler(async () => {\n\t\t\t\tsetConfirmButtonLoading(true)\n\t\t\t\ttry {\n\t\t\t\t\tawait onConfirm()\n\t\t\t\t\t// When we open two confirmation modals one after the other,\n\t\t\t\t\t// we don't want it to mount the same loading state\n\t\t\t\t\t// because it will show a spinner in the confirm button\n\t\t\t\t\tsetConfirmButtonLoading(false)\n\t\t\t\t\tif (!avoidDismissOnConfirm) {\n\t\t\t\t\t\tengine.stores.modalStore.dismiss()\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\tsetConfirmButtonLoading(false)\n\t\t\t\t}\n\t\t\t})\n\t\t: undefined\n\n\tconst handleCancel = engine.scheduler.wrapHandler(() => {\n\t\tonCancel?.()\n\t\tengine.stores.modalStore.dismiss()\n\t})\n\n\tconst handleDismiss = engine.scheduler.wrapHandler(() => {\n\t\tonDismiss?.()\n\t\tif (!interactionRequired) {\n\t\t\tengine.stores.modalStore.dismiss()\n\t\t}\n\t})\n\n\treturn (\n\t\t<ConfirmationModal\n\t\t\tvariant={variant}\n\t\t\tdismissVariant={dismissVariant}\n\t\t\ttitle={title}\n\t\t\tdescription={isString(description) ? <T>{description}</T> : description}\n\t\t\tconfirmLabel={confirmLabel}\n\t\t\tcancelLabel={cancelLabel}\n\t\t\tkeyboardConfirmMode={keyboardConfirmMode}\n\t\t\tcancelOnEnter={cancelOnEnter}\n\t\t\tonConfirm={handleConfirm}\n\t\t\tonCancel={handleCancel}\n\t\t\tonDismiss={handleDismiss}\n\t\t\tconfirmButtonLoading={confirmButtonLoading}\n\t\t\tbuttonDirection={buttonDirection}\n\t\t\thasBackdrop={hasBackdrop}\n\t\t\tlegacy={!isAgentExperimentOn}\n\t\t/>\n\t)\n}\n", "import { parseAssetReference } from \"@framerjs/assets\"\nimport type { MouseTrackerEvent } from \"@framerjs/fresco\"\nimport { Button, MouseTracker, NumberInputWithTicker, Spacer, Spinner } from \"@framerjs/fresco\"\nimport { cursors, dimensions } from \"@framerjs/fresco/tokens\"\nimport { assert, unhandledError } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { FramePointValue } from \"document/models/FramePoint.ts\"\nimport type { ModalProps } from \"document/stores/ModalStore.ts\"\nimport { ModalType } from \"document/utils/ModalType.ts\"\nimport { clamp } from \"framer-motion\"\nimport { Line } from \"library/render/types/Line.ts\"\nimport { Point } from \"library/render/types/Point.ts\"\nimport { Rect } from \"library/render/types/Rect.ts\"\nimport { roundedNumberString } from \"library/render/utils/roundedNumber.ts\"\nimport React from \"react\"\nimport { cursorImage } from \"utils/cursor.ts\"\nimport { record } from \"web/lib/tracker.ts\"\nimport { uploadService } from \"web/pages/project/lib/UploadService.ts\"\nimport * as styles from \"./ImageEditModal.styles.ts\"\nimport type { ImageState } from \"./ImageEditModal.tsx\"\nimport { ImageEditModal } from \"./ImageEditModal.tsx\"\n\n/**\n * Resize anchor coordinates. `fx` is for left, center, and right. And `fy` is used for top, middle,\n * and bottom. These coordinate values are handy for declaring the resize logic as math instead of\n * conditions.\n */\ninterface ResizeAnchor {\n\tfx: FramePointValue\n\tfy: FramePointValue\n}\n\nconst nwseCursor = cursorImage(\"resize-nwse\")\nconst neswCursor = cursorImage(\"resize-nesw\")\nconst northSouthCursor = cursorImage(\"resize-north-south\")\nconst eastWestCursor = cursorImage(\"resize-east-west\")\n\nconst minSize = 10\n\n/**\n * Projects a mouse point onto a diagonal line from a pivot point, then constrains\n * the resulting dimensions to fit within max bounds while maintaining aspect ratio.\n */\nfunction projectToAspectRatio(\n\tpivot: Point,\n\tmousePoint: Point,\n\taspectRatio: number,\n\tbaseWidth: number,\n\tbaseHeight: number,\n\tmaxWidth: number,\n\tmaxHeight: number,\n): Point | null {\n\tconst goingLeft = mousePoint.x < pivot.x\n\tconst goingUp = mousePoint.y < pivot.y\n\n\tconst targetCorner: Point = {\n\t\tx: goingLeft ? pivot.x - baseWidth : pivot.x + baseWidth,\n\t\ty: goingUp ? pivot.y - baseHeight : pivot.y + baseHeight,\n\t}\n\tconst diagonalLine = Line(pivot, targetCorner)\n\tconst projected = Line.projectPoint(diagonalLine, mousePoint)\n\tif (!projected) return null\n\n\tlet width = Math.abs(projected.x - pivot.x)\n\tlet height = Math.abs(projected.y - pivot.y)\n\n\tif (width > maxWidth) {\n\t\twidth = maxWidth\n\t\theight = width / aspectRatio\n\t}\n\tif (height > maxHeight) {\n\t\theight = maxHeight\n\t\twidth = height * aspectRatio\n\t}\n\n\treturn {\n\t\tx: goingLeft ? pivot.x - width : pivot.x + width,\n\t\ty: goingUp ? pivot.y - height : pivot.y + height,\n\t}\n}\n\nexport function ImageCropModal({ initialImage, onChange }: ModalProps<ModalType.ImageCrop>) {\n\tconst engine = useBaseEngine()\n\n\tconst [isCreatingCrop, setIsCreatingCrop] = React.useState(false)\n\tconst [cropRect, setCropRect] = React.useState<Rect | null>(null)\n\n\tconst isCreatingCropRef = React.useRef(false)\n\tisCreatingCropRef.current = isCreatingCrop\n\n\tconst latestCropRectRef = React.useRef(cropRect)\n\tlatestCropRectRef.current = cropRect\n\n\tconst resizeInfoRef = React.useRef<{ cropRectAtStart: Rect; offset: Point } | null>(null)\n\n\tconst onResizeStart = React.useCallback(\n\t\t(anchor: ResizeAnchor, event: MouseTrackerEvent, { naturalImageSize, imageRef }: ImageState) => {\n\t\t\tif (!naturalImageSize) return\n\n\t\t\tconst latestCropRect = latestCropRectRef.current\n\t\t\tif (!latestCropRect) return\n\n\t\t\tconst imgElement = imageRef.current\n\t\t\tif (!imgElement) return\n\n\t\t\tconst cropRectX = latestCropRect.x + latestCropRect.width * anchor.fx\n\t\t\tconst cropRectY = latestCropRect.y + latestCropRect.height * anchor.fy\n\n\t\t\tconst relX = cropRectX / naturalImageSize.width\n\t\t\tconst relY = cropRectY / naturalImageSize.height\n\n\t\t\tconst bounds = imgElement.getBoundingClientRect()\n\n\t\t\tconst anchorClientX = bounds.left + relX * bounds.width\n\t\t\tconst anchorClientY = bounds.top + relY * bounds.height\n\n\t\t\tconst offset: Point = {\n\t\t\t\tx: event.client.x - anchorClientX,\n\t\t\t\ty: event.client.y - anchorClientY,\n\t\t\t}\n\n\t\t\tresizeInfoRef.current = { cropRectAtStart: latestCropRect, offset }\n\t\t},\n\t\t[],\n\t)\n\n\tconst onResize = React.useCallback(\n\t\t(anchor: ResizeAnchor, event: MouseTrackerEvent, { naturalImageSize, imageRef }: ImageState) => {\n\t\t\tif (!naturalImageSize) return\n\t\t\tconst resizeInfo = resizeInfoRef.current\n\t\t\tif (!resizeInfo) return\n\t\t\tconst { cropRectAtStart, offset } = resizeInfo\n\t\t\tconst aspectRatio = cropRectAtStart.width / cropRectAtStart.height\n\n\t\t\tconst imgElement = imageRef.current\n\t\t\tif (!imgElement) return\n\n\t\t\tconst bounds = imgElement.getBoundingClientRect()\n\n\t\t\tconst client = Point.subtract(event.client, offset)\n\t\t\tconst localX = clamp(bounds.left, bounds.right, client.x) - bounds.left\n\t\t\tconst localY = clamp(bounds.top, bounds.bottom, client.y) - bounds.top\n\n\t\t\tconst fractionX = localX / bounds.width\n\t\t\tconst fractionY = localY / bounds.height\n\n\t\t\tconst originalX = anchor.fx === 0 ? cropRectAtStart.x : Rect.maxX(cropRectAtStart)\n\t\t\tconst originalY = anchor.fy === 0 ? cropRectAtStart.y : Rect.maxY(cropRectAtStart)\n\n\t\t\tlet x = anchor.fx === 0.5 ? originalX : Math.round(fractionX * naturalImageSize.width)\n\t\t\tlet y = anchor.fy === 0.5 ? originalY : Math.round(fractionY * naturalImageSize.height)\n\n\t\t\tlet otherX = anchor.fx === 0 ? Rect.maxX(cropRectAtStart) : cropRectAtStart.x\n\t\t\tlet otherY = anchor.fy === 0 ? Rect.maxY(cropRectAtStart) : cropRectAtStart.y\n\n\t\t\tconst mirror = event.altKey\n\t\t\tconst startCenterX = cropRectAtStart.x + cropRectAtStart.width / 2\n\t\t\tconst startCenterY = cropRectAtStart.y + cropRectAtStart.height / 2\n\n\t\t\t// Alt key mirrors: the opposite corner mirrors around the original center\n\t\t\tif (mirror) {\n\t\t\t\tif (anchor.fx !== 0.5) {\n\t\t\t\t\totherX = 2 * startCenterX - x\n\t\t\t\t}\n\t\t\t\tif (anchor.fy !== 0.5) {\n\t\t\t\t\totherY = 2 * startCenterY - y\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Shift key locks aspect ratio for corner resizes\n\t\t\tif (event.shiftKey && aspectRatio > 0 && anchor.fx !== 0.5 && anchor.fy !== 0.5) {\n\t\t\t\tconst pivot = mirror ? { x: startCenterX, y: startCenterY } : { x: otherX, y: otherY }\n\t\t\t\tconst maxWidth = mirror\n\t\t\t\t\t? Math.min(startCenterX, naturalImageSize.width - startCenterX)\n\t\t\t\t\t: x < otherX\n\t\t\t\t\t\t? otherX\n\t\t\t\t\t\t: naturalImageSize.width - otherX\n\t\t\t\tconst maxHeight = mirror\n\t\t\t\t\t? Math.min(startCenterY, naturalImageSize.height - startCenterY)\n\t\t\t\t\t: y < otherY\n\t\t\t\t\t\t? otherY\n\t\t\t\t\t\t: naturalImageSize.height - otherY\n\n\t\t\t\tconst projected = projectToAspectRatio(\n\t\t\t\t\tpivot,\n\t\t\t\t\t{ x, y },\n\t\t\t\t\taspectRatio,\n\t\t\t\t\tcropRectAtStart.width,\n\t\t\t\t\tcropRectAtStart.height,\n\t\t\t\t\tmaxWidth,\n\t\t\t\t\tmaxHeight,\n\t\t\t\t)\n\t\t\t\tif (projected) {\n\t\t\t\t\tx = projected.x\n\t\t\t\t\ty = projected.y\n\t\t\t\t\tif (mirror) {\n\t\t\t\t\t\totherX = 2 * startCenterX - x\n\t\t\t\t\t\totherY = 2 * startCenterY - y\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst newRect = Rect.boundingRectFromPoints([\n\t\t\t\t{ x, y },\n\t\t\t\t{ x: otherX, y: otherY },\n\t\t\t])\n\n\t\t\t// For edge resizes with shift, recalculate the rect to maintain aspect ratio\n\t\t\tif (event.shiftKey && aspectRatio > 0) {\n\t\t\t\tconst isHorizontalEdge = anchor.fx === 0.5\n\t\t\t\tconst isVerticalEdge = anchor.fy === 0.5\n\n\t\t\t\tif (isHorizontalEdge) {\n\t\t\t\t\tconst newWidth = Math.round(newRect.height * aspectRatio)\n\t\t\t\t\t// Clamp width to fit within image bounds from center\n\t\t\t\t\tconst maxLeftExtent = startCenterX\n\t\t\t\t\tconst maxRightExtent = naturalImageSize.width - startCenterX\n\t\t\t\t\tconst maxWidthFromCenter = Math.min(maxLeftExtent, maxRightExtent) * 2\n\t\t\t\t\tconst clampedWidth = Math.min(newWidth, maxWidthFromCenter)\n\t\t\t\t\tnewRect.x = Math.round(startCenterX - clampedWidth / 2)\n\t\t\t\t\tnewRect.width = clampedWidth\n\t\t\t\t\t// Recalculate height to maintain aspect ratio\n\t\t\t\t\tnewRect.height = Math.round(clampedWidth / aspectRatio)\n\t\t\t\t\t// Adjust y position based on drag direction (supports flipping)\n\t\t\t\t\tconst goingUp = y < otherY\n\t\t\t\t\tif (goingUp) {\n\t\t\t\t\t\tnewRect.y = otherY - newRect.height\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewRect.y = otherY\n\t\t\t\t\t}\n\t\t\t\t} else if (isVerticalEdge) {\n\t\t\t\t\tconst newHeight = Math.round(newRect.width / aspectRatio)\n\t\t\t\t\t// Clamp height to fit within image bounds from center\n\t\t\t\t\tconst maxTopExtent = startCenterY\n\t\t\t\t\tconst maxBottomExtent = naturalImageSize.height - startCenterY\n\t\t\t\t\tconst maxHeightFromCenter = Math.min(maxTopExtent, maxBottomExtent) * 2\n\t\t\t\t\tconst clampedHeight = Math.min(newHeight, maxHeightFromCenter)\n\t\t\t\t\tnewRect.y = Math.round(startCenterY - clampedHeight / 2)\n\t\t\t\t\tnewRect.height = clampedHeight\n\t\t\t\t\t// Recalculate width to maintain aspect ratio\n\t\t\t\t\tnewRect.width = Math.round(clampedHeight * aspectRatio)\n\t\t\t\t\t// Adjust x position based on drag direction (supports flipping)\n\t\t\t\t\tconst goingLeft = x < otherX\n\t\t\t\t\tif (goingLeft) {\n\t\t\t\t\t\tnewRect.x = otherX - newRect.width\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewRect.x = otherX\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst minWidth = Math.min(minSize, naturalImageSize.width)\n\t\t\tconst minHeight = Math.min(minSize, naturalImageSize.height)\n\n\t\t\tif (mirror) {\n\t\t\t\t// For mirror mode, keep centered while applying constraints\n\t\t\t\tconst maxHalfWidth = Math.min(startCenterX, naturalImageSize.width - startCenterX)\n\t\t\t\tconst maxHalfHeight = Math.min(startCenterY, naturalImageSize.height - startCenterY)\n\n\t\t\t\tlet halfWidth = newRect.width / 2\n\t\t\t\tlet halfHeight = newRect.height / 2\n\n\t\t\t\tif (event.shiftKey && aspectRatio > 0) {\n\t\t\t\t\t// Maintain aspect ratio while clamping\n\t\t\t\t\tif (halfWidth > maxHalfWidth) {\n\t\t\t\t\t\thalfWidth = maxHalfWidth\n\t\t\t\t\t\thalfHeight = halfWidth / aspectRatio\n\t\t\t\t\t}\n\t\t\t\t\tif (halfHeight > maxHalfHeight) {\n\t\t\t\t\t\thalfHeight = maxHalfHeight\n\t\t\t\t\t\thalfWidth = halfHeight * aspectRatio\n\t\t\t\t\t}\n\t\t\t\t\t// Apply min size while maintaining aspect ratio\n\t\t\t\t\tif (halfWidth < minWidth / 2) {\n\t\t\t\t\t\thalfWidth = minWidth / 2\n\t\t\t\t\t\thalfHeight = halfWidth / aspectRatio\n\t\t\t\t\t}\n\t\t\t\t\tif (halfHeight < minHeight / 2) {\n\t\t\t\t\t\thalfHeight = minHeight / 2\n\t\t\t\t\t\thalfWidth = halfHeight * aspectRatio\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Clamp independently\n\t\t\t\t\thalfWidth = Math.min(halfWidth, maxHalfWidth)\n\t\t\t\t\thalfHeight = Math.min(halfHeight, maxHalfHeight)\n\t\t\t\t\thalfWidth = Math.max(halfWidth, minWidth / 2)\n\t\t\t\t\thalfHeight = Math.max(halfHeight, minHeight / 2)\n\t\t\t\t}\n\n\t\t\t\tnewRect.width = halfWidth * 2\n\t\t\t\tnewRect.height = halfHeight * 2\n\t\t\t\tnewRect.x = startCenterX - halfWidth\n\t\t\t\tnewRect.y = startCenterY - halfHeight\n\t\t\t} else {\n\t\t\t\tif (minWidth > newRect.width) {\n\t\t\t\t\tif (x < otherX) {\n\t\t\t\t\t\tconst delta = minWidth - newRect.width\n\t\t\t\t\t\tnewRect.x = Math.max(0, newRect.x - delta)\n\t\t\t\t\t}\n\t\t\t\t\tconst maxX = naturalImageSize.width - minWidth\n\t\t\t\t\tnewRect.x = Math.min(newRect.x, maxX)\n\t\t\t\t\tnewRect.width = minWidth\n\t\t\t\t}\n\n\t\t\t\tif (minHeight > newRect.height) {\n\t\t\t\t\tif (y < otherY) {\n\t\t\t\t\t\tconst delta = minHeight - newRect.height\n\t\t\t\t\t\tnewRect.y = Math.max(0, newRect.y - delta)\n\t\t\t\t\t}\n\t\t\t\t\tconst maxY = naturalImageSize.height - minHeight\n\t\t\t\t\tnewRect.y = Math.min(newRect.y, maxY)\n\t\t\t\t\tnewRect.height = minHeight\n\t\t\t\t}\n\n\t\t\t\t// Clamp to image bounds\n\t\t\t\tnewRect.x = clamp(0, naturalImageSize.width - newRect.width, newRect.x)\n\t\t\t\tnewRect.y = clamp(0, naturalImageSize.height - newRect.height, newRect.y)\n\t\t\t}\n\n\t\t\t// Round to full pixels\n\t\t\tnewRect.x = Math.round(newRect.x)\n\t\t\tnewRect.y = Math.round(newRect.y)\n\t\t\tnewRect.width = Math.round(newRect.width)\n\t\t\tnewRect.height = Math.round(newRect.height)\n\n\t\t\tsetCropRect(newRect)\n\t\t},\n\t\t[],\n\t)\n\n\tconst moveInfoRef = React.useRef<{ cropRectAtStart: Rect } | null>(null)\n\n\tconst onMoveStart = React.useCallback(() => {\n\t\tconst latestCropRect = latestCropRectRef.current\n\t\tmoveInfoRef.current = latestCropRect ? { cropRectAtStart: latestCropRect } : null\n\t}, [])\n\n\tconst onMove = React.useCallback((event: MouseTrackerEvent, { naturalImageSize, imageRef }: ImageState) => {\n\t\tif (!naturalImageSize) return\n\t\tconst moveInfo = moveInfoRef.current\n\t\tif (!moveInfo) return\n\t\tconst { cropRectAtStart } = moveInfo\n\n\t\tconst imgElement = imageRef.current\n\t\tif (!imgElement) return\n\n\t\tconst ratio = naturalImageSize.width / (imgElement.offsetWidth || 1)\n\n\t\tconst offset = Point.pixelAligned(Point.multiply(event.offset, ratio))\n\n\t\tconst newRect = { ...cropRectAtStart }\n\n\t\tconst maxX = naturalImageSize.width - cropRectAtStart.width\n\t\tconst maxY = naturalImageSize.height - cropRectAtStart.height\n\n\t\tnewRect.x = clamp(0, maxX, newRect.x + offset.x)\n\t\tnewRect.y = clamp(0, maxY, newRect.y + offset.y)\n\t\tsetCropRect(newRect)\n\t}, [])\n\n\tconst performCrop = React.useCallback(\n\t\t({ imageRef }: ImageState) => {\n\t\t\tif (isCreatingCropRef.current) return\n\n\t\t\tconst latestCropRect = latestCropRectRef.current\n\t\t\tif (!latestCropRect) return\n\n\t\t\tconst imgElement = imageRef.current\n\t\t\tif (!imgElement) return\n\n\t\t\tisCreatingCropRef.current = true\n\t\t\tsetIsCreatingCrop(true)\n\n\t\t\t// We run before next frame so we can show the loading animation while the canvas generates\n\t\t\t// the cropped image.\n\t\t\tengine.scheduler.runBeforeNextFrame(() => {\n\t\t\t\trecord(\"image_crop_start\", {})\n\t\t\t\tconst cropCanvas = document.createElement(\"canvas\")\n\t\t\t\tcropCanvas.width = latestCropRect.width\n\t\t\t\tcropCanvas.height = latestCropRect.height\n\t\t\t\tconst context = cropCanvas.getContext(\"2d\")\n\t\t\t\tassert(context)\n\t\t\t\tcontext.drawImage(\n\t\t\t\t\timgElement,\n\t\t\t\t\tlatestCropRect.x,\n\t\t\t\t\tlatestCropRect.y,\n\t\t\t\t\tlatestCropRect.width,\n\t\t\t\t\tlatestCropRect.height,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tlatestCropRect.width,\n\t\t\t\t\tlatestCropRect.height,\n\t\t\t\t)\n\t\t\t\tconst imageData = cropCanvas.toDataURL(\"image/png\")\n\n\t\t\t\tconst parsedAsset = parseAssetReference(initialImage)\n\t\t\t\tconst fileName = parsedAsset?.originalFilename ?? \"unknown\"\n\n\t\t\t\tvoid fetch(imageData)\n\t\t\t\t\t.then(result => result.blob())\n\t\t\t\t\t.then(async blob => {\n\t\t\t\t\t\tconst file = new File([blob], fileName, { type: \"image/png\" })\n\t\t\t\t\t\t// Cropping images should not hit license file upload limits, so we pass in `undefined` to `uploadImage`.\n\t\t\t\t\t\tconst upload = uploadService.uploadImage(file, { silent: true })\n\t\t\t\t\t\tonChange(\n\t\t\t\t\t\t\tnew Promise(resolve => {\n\t\t\t\t\t\t\t\tupload\n\t\t\t\t\t\t\t\t\t.then(imageUpload => {\n\t\t\t\t\t\t\t\t\t\tif (!imageUpload) return\n\t\t\t\t\t\t\t\t\t\tresolve([imageUpload])\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.catch(unhandledError)\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)\n\t\t\t\t\t\tawait upload\n\t\t\t\t\t\tawait engine.stores.assetStore.assetService?.refresh().catch(unhandledError)\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tengine.stores.modalStore.dismiss()\n\t\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\t[initialImage, onChange],\n\t)\n\n\tconst widthHandler = (value: number, { naturalImageSize }: ImageState) => {\n\t\tif (!naturalImageSize || !cropRect) return\n\t\tconst imageWidth = naturalImageSize.width\n\t\tconst minWidth = Math.min(minSize, imageWidth)\n\t\tconst newWidth = clamp(minWidth, imageWidth, Math.round(value))\n\t\tconst newRect = { ...cropRect }\n\t\tnewRect.width = newWidth\n\t\tnewRect.x = Math.min(newRect.x, imageWidth - newWidth)\n\t\tsetCropRect(newRect)\n\t}\n\n\tconst heightHandler = (value: number, { naturalImageSize }: ImageState) => {\n\t\tif (!naturalImageSize || !cropRect) return\n\t\tconst imageHeight = naturalImageSize.height\n\t\tconst minHeight = Math.min(minSize, imageHeight)\n\t\tconst newHeight = clamp(minHeight, imageHeight, Math.round(value))\n\t\tconst newRect = { ...cropRect }\n\t\tnewRect.height = newHeight\n\t\tnewRect.y = Math.min(newRect.y, imageHeight - newHeight)\n\t\tsetCropRect(newRect)\n\t}\n\n\treturn (\n\t\t<ImageEditModal\n\t\t\timageBorderEnabled\n\t\t\ttitle=\"Crop Image\"\n\t\t\timage={initialImage}\n\t\t\ttype={ModalType.ImageCrop}\n\t\t\tenabled={imageState => Boolean(imageState.naturalImageSize && cropRect) && !isCreatingCrop}\n\t\t\tonLoadImage={size => setCropRect({ ...size, x: 0, y: 0 })}\n\t\t\tinputFields={imageState => (\n\t\t\t\t<>\n\t\t\t\t\t<NumberInputWithTicker\n\t\t\t\t\t\tlabel=\"W\"\n\t\t\t\t\t\tenabled={canResize(imageState, cropRect, isCreatingCrop)}\n\t\t\t\t\t\tvalue={cropRect?.width}\n\t\t\t\t\t\tonChange={value => widthHandler(value, imageState)}\n\t\t\t\t\t\tmax={imageState.naturalImageSize?.width}\n\t\t\t\t\t\twrapperClassName={styles.input}\n\t\t\t\t\t\tmin={Math.min(minSize, imageState.naturalImageSize?.width ?? minSize)}\n\t\t\t\t\t/>\n\t\t\t\t\t<Spacer size={dimensions.css.inputSpacing} />\n\t\t\t\t\t<NumberInputWithTicker\n\t\t\t\t\t\tlabel=\"H\"\n\t\t\t\t\t\tenabled={canResize(imageState, cropRect, isCreatingCrop)}\n\t\t\t\t\t\tvalue={cropRect?.height}\n\t\t\t\t\t\tonChange={value => heightHandler(value, imageState)}\n\t\t\t\t\t\tmax={imageState.naturalImageSize?.height}\n\t\t\t\t\t\twrapperClassName={styles.input}\n\t\t\t\t\t\tmin={Math.min(minSize, imageState.naturalImageSize?.height ?? minSize)}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t\tbuttons={imageState => (\n\t\t\t\t<Button\n\t\t\t\t\tbold\n\t\t\t\t\ttitle=\"Crop\"\n\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\tenabled={canCrop(imageState, cropRect)}\n\t\t\t\t\tonClick={() => performCrop(imageState)}\n\t\t\t\t\tclassName={styles.button}\n\t\t\t\t>\n\t\t\t\t\t{isCreatingCrop ? <Spinner /> : \"Crop\"}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t>\n\t\t\t{imageState => (\n\t\t\t\t<CropBox\n\t\t\t\t\tmoveEnabled={canCrop(imageState, cropRect) && !isCreatingCrop}\n\t\t\t\t\tcropRect={cropRect}\n\t\t\t\t\timageState={imageState}\n\t\t\t\t\tresizeEnabled={imageState.enabled}\n\t\t\t\t\tonResizeStart={onResizeStart}\n\t\t\t\t\tonResize={onResize}\n\t\t\t\t\tonMoveStart={onMoveStart}\n\t\t\t\t\tonMove={onMove}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</ImageEditModal>\n\t)\n}\n\nfunction canResize({ naturalImageSize }: ImageState, cropRect: Rect | null, isCreatingCrop: boolean): boolean {\n\treturn Boolean(naturalImageSize && cropRect) && !isCreatingCrop\n}\n\nfunction canCrop({ naturalImageSize }: ImageState, cropRect: Rect | null): boolean {\n\treturn Boolean(\n\t\tnaturalImageSize &&\n\t\tcropRect &&\n\t\tcropRect.width !== 0 &&\n\t\tcropRect.height !== 0 &&\n\t\t(naturalImageSize.width !== cropRect.width || naturalImageSize.height !== cropRect.height),\n\t)\n}\n\nconst topLeftAnchor: ResizeAnchor = { fx: 0, fy: 0 }\nconst topAnchor: ResizeAnchor = { fx: 0.5, fy: 0 }\nconst topRightAnchor: ResizeAnchor = { fx: 1, fy: 0 }\nconst rightAnchor: ResizeAnchor = { fx: 1, fy: 0.5 }\nconst bottomRightAnchor: ResizeAnchor = { fx: 1, fy: 1 }\nconst bottomAnchor: ResizeAnchor = { fx: 0.5, fy: 1 }\nconst bottomLeftAnchor: ResizeAnchor = { fx: 0, fy: 1 }\nconst leftAnchor: ResizeAnchor = { fx: 0, fy: 0.5 }\n\nfunction useResize(\n\tanchor: ResizeAnchor,\n\timageState: ImageState,\n\tonResizeStart: (anchor: ResizeAnchor, event: MouseTrackerEvent, imageState: ImageState) => void,\n) {\n\treturn React.useCallback(\n\t\t(event: MouseTrackerEvent) => onResizeStart(anchor, event, imageState),\n\t\t[onResizeStart, anchor, imageState],\n\t)\n}\n\ninterface CropBoxProps {\n\tmoveEnabled: boolean\n\tresizeEnabled: boolean\n\tcropRect: Rect | null\n\timageState: ImageState\n\tonMoveStart(event: MouseTrackerEvent, imageState: ImageState): void\n\tonMove(event: MouseTrackerEvent, imageState: ImageState): void\n\tonResizeStart(anchor: ResizeAnchor, event: MouseTrackerEvent, imageState: ImageState): void\n\tonResize(anchor: ResizeAnchor, event: MouseTrackerEvent, imageState: ImageState): void\n}\n\nfunction CropBox({\n\tmoveEnabled,\n\tresizeEnabled,\n\timageState,\n\tcropRect,\n\tonResizeStart,\n\tonResize,\n\tonMoveStart,\n\tonMove,\n}: CropBoxProps) {\n\tconst { naturalImageSize, imageElementSize, isLoading } = imageState\n\n\tconst projectedCropRect = React.useMemo(() => {\n\t\tif (!naturalImageSize || !imageElementSize || !cropRect) return null\n\t\tconst ratio = imageElementSize.width / (naturalImageSize.width || 1)\n\t\treturn Rect.multiply(cropRect, ratio)\n\t}, [cropRect, imageElementSize, naturalImageSize])\n\n\tconst resizeClass = resizeEnabled ? undefined : styles.noPointerEvents\n\n\tconst topLeftDragStart = useResize(topLeftAnchor, imageState, onResizeStart)\n\tconst topRightDragStart = useResize(topRightAnchor, imageState, onResizeStart)\n\tconst bottomRightDragStart = useResize(bottomRightAnchor, imageState, onResizeStart)\n\tconst bottomLeftDragStart = useResize(bottomLeftAnchor, imageState, onResizeStart)\n\n\tconst topLeftDrag = useResize(topLeftAnchor, imageState, onResize)\n\tconst topRightDrag = useResize(topRightAnchor, imageState, onResize)\n\tconst bottomRightDrag = useResize(bottomRightAnchor, imageState, onResize)\n\tconst bottomLeftDrag = useResize(bottomLeftAnchor, imageState, onResize)\n\n\tconst topDragStart = useResize(topAnchor, imageState, onResizeStart)\n\tconst rightDragStart = useResize(rightAnchor, imageState, onResizeStart)\n\tconst bottomDragStart = useResize(bottomAnchor, imageState, onResizeStart)\n\tconst leftDragStart = useResize(leftAnchor, imageState, onResizeStart)\n\n\tconst topDrag = useResize(topAnchor, imageState, onResize)\n\tconst rightDrag = useResize(rightAnchor, imageState, onResize)\n\tconst bottomDrag = useResize(bottomAnchor, imageState, onResize)\n\tconst leftDrag = useResize(leftAnchor, imageState, onResize)\n\n\tconst polygonClipPath = React.useMemo(() => {\n\t\tif (!cropRect || !naturalImageSize) return\n\t\tconst points: Point[] = [\n\t\t\t{ x: 0, y: 0 },\n\t\t\t{ x: cropRect.x, y: 0 },\n\t\t\t{ x: cropRect.x, y: Rect.maxY(cropRect) },\n\t\t\t{ x: Rect.maxX(cropRect), y: Rect.maxY(cropRect) },\n\t\t\t{ x: Rect.maxX(cropRect), y: cropRect.y },\n\t\t\t{ x: cropRect.x, y: cropRect.y },\n\t\t\t{ x: cropRect.x, y: 0 },\n\t\t\t{ x: naturalImageSize.width, y: 0 },\n\t\t\t{ x: naturalImageSize.width, y: naturalImageSize.height },\n\t\t\t{ x: 0, y: naturalImageSize.height },\n\t\t\t{ x: 0, y: 0 },\n\t\t]\n\t\tconst fractionPoints = points.map(point => {\n\t\t\treturn {\n\t\t\t\tx: roundedNumberString((point.x / naturalImageSize.width) * 100, 2),\n\t\t\t\ty: roundedNumberString((point.y / naturalImageSize.height) * 100, 2),\n\t\t\t}\n\t\t})\n\t\treturn `polygon(${fractionPoints.map(point => `${point.x}% ${point.y}%`).join(\", \")})`\n\t}, [naturalImageSize, cropRect])\n\n\tif (!naturalImageSize || !imageElementSize || isLoading) return null\n\n\treturn (\n\t\t<>\n\t\t\t{polygonClipPath && (\n\t\t\t\t<div className={cx(styles.absoluteFillParent, styles.dimmedImage)} style={{ clipPath: polygonClipPath }} />\n\t\t\t)}\n\t\t\t{projectedCropRect && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cx(styles.absolute, styles.box)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tleft: projectedCropRect.x,\n\t\t\t\t\t\ttop: projectedCropRect.y,\n\t\t\t\t\t\twidth: projectedCropRect.width,\n\t\t\t\t\t\theight: projectedCropRect.height,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{moveEnabled && (\n\t\t\t\t\t\t<MouseTracker\n\t\t\t\t\t\t\tonDrag={event => onMove(event, imageState)}\n\t\t\t\t\t\t\tonDragStart={event => onMoveStart(event, imageState)}\n\t\t\t\t\t\t\tcursor={cursors.dragging}\n\t\t\t\t\t\t\tclassName={cx(styles.absolute, styles.center)}\n\t\t\t\t\t\t\tstyle={{ cursor: cursors.draggable }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<MouseTracker\n\t\t\t\t\t\tonDragStart={topDragStart}\n\t\t\t\t\t\tonDrag={topDrag}\n\t\t\t\t\t\tcursor={northSouthCursor}\n\t\t\t\t\t\tclassName={cx(styles.absolute, styles.sideTop, resizeClass)}\n\t\t\t\t\t\tstyle={{ cursor: northSouthCursor }}\n\t\t\t\t\t/>\n\t\t\t\t\t<MouseTracker\n\t\t\t\t\t\tonDragStart={rightDragStart}\n\t\t\t\t\t\tonDrag={rightDrag}\n\t\t\t\t\t\tcursor={eastWestCursor}\n\t\t\t\t\t\tclassName={cx(styles.absolute, styles.sideRight, resizeClass)}\n\t\t\t\t\t\tstyle={{ cursor: eastWestCursor }}\n\t\t\t\t\t/>\n\t\t\t\t\t<MouseTracker\n\t\t\t\t\t\tonDragStart={bottomDragStart}\n\t\t\t\t\t\tonDrag={bottomDrag}\n\t\t\t\t\t\tcursor={northSouthCursor}\n\t\t\t\t\t\tclassName={cx(styles.absolute, styles.sideBottom, resizeClass)}\n\t\t\t\t\t\tstyle={{ cursor: northSouthCursor }}\n\t\t\t\t\t/>\n\t\t\t\t\t<MouseTracker\n\t\t\t\t\t\tonDragStart={leftDragStart}\n\t\t\t\t\t\tonDrag={leftDrag}\n\t\t\t\t\t\tcursor={eastWestCursor}\n\t\t\t\t\t\tclassName={cx(styles.absolute, styles.sideLeft, resizeClass)}\n\t\t\t\t\t\tstyle={{ cursor: eastWestCursor }}\n\t\t\t\t\t/>\n\t\t\t\t\t<MouseTracker\n\t\t\t\t\t\tonDragStart={topLeftDragStart}\n\t\t\t\t\t\tonDrag={topLeftDrag}\n\t\t\t\t\t\tcursor={nwseCursor}\n\t\t\t\t\t\tclassName={cx(styles.corner, styles.cornerTopLeft, resizeClass)}\n\t\t\t\t\t\tstyle={{ cursor: nwseCursor }}\n\t\t\t\t\t/>\n\t\t\t\t\t<MouseTracker\n\t\t\t\t\t\tonDragStart={topRightDragStart}\n\t\t\t\t\t\tonDrag={topRightDrag}\n\t\t\t\t\t\tcursor={neswCursor}\n\t\t\t\t\t\tclassName={cx(styles.corner, styles.cornerTopRight, resizeClass)}\n\t\t\t\t\t\tstyle={{ cursor: neswCursor }}\n\t\t\t\t\t/>\n\t\t\t\t\t<MouseTracker\n\t\t\t\t\t\tonDragStart={bottomRightDragStart}\n\t\t\t\t\t\tonDrag={bottomRightDrag}\n\t\t\t\t\t\tcursor={nwseCursor}\n\t\t\t\t\t\tclassName={cx(styles.corner, styles.cornerBottomRight, resizeClass)}\n\t\t\t\t\t\tstyle={{ cursor: nwseCursor }}\n\t\t\t\t\t/>\n\t\t\t\t\t<MouseTracker\n\t\t\t\t\t\tonDragStart={bottomLeftDragStart}\n\t\t\t\t\t\tonDrag={bottomLeftDrag}\n\t\t\t\t\t\tcursor={neswCursor}\n\t\t\t\t\t\tclassName={cx(styles.corner, styles.cornerBottomLeft, resizeClass)}\n\t\t\t\t\t\tstyle={{ cursor: neswCursor }}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t)\n}\n", "import \"ImageEditModal.styles_w92wxv.wyw.css\"; export const absolute = \"absolute_avx5y6o\";\nexport const dimmedImage = \"dimmedImage_dxokr4e\";\nexport const modal = \"modal_mxl2xde\";\nexport const header = \"header_h1h7nf4x\";\nexport const title = \"title_t1yarwzw\";\nexport const closeIcon = \"closeIcon_c1dx5mcm\";\nexport const imagePaddingContainer = \"imagePaddingContainer_ihez7jp\";\nexport const blurredBackgroundImageWrapper = \"blurredBackgroundImageWrapper_b1ulr2hk\";\nexport const blurredBackgroundImage = \"blurredBackgroundImage_bjj0ucj\";\nexport const noPointerEvents = \"noPointerEvents_n1ro70x7\";\nexport const absoluteFillParent = \"absoluteFillParent_ackhc08\";\nexport const button = \"button_b6v8klh\";\nexport const input = \"input_id4tlfa\";\nexport const image = \"image_i1g2tqxh\";\nexport const imageBorderSize = 10;\nexport const imageWithBorder = \"imageWithBorder_i12g5gy8\";\nexport const cropContentContainer = \"cropContentContainer_cpar2f6\";\nexport const fadeIn = \"fadeIn_fim46by\";\nexport const fadeInSafari = \"fadeInSafari_fzc213w\";\nexport const box = \"box_b6zi9ap\";\nexport const corner = \"corner_c17eb6o9\";\nexport const cornerTopLeft = \"cornerTopLeft_ctyr80v\";\nexport const cornerTopRight = \"cornerTopRight_cuhnryn\";\nexport const cornerBottomRight = \"cornerBottomRight_c138kh66\";\nexport const cornerBottomLeft = \"cornerBottomLeft_cguxfsw\";\nexport const center = \"center_c1dq5dn4\";\nexport const sideTop = \"sideTop_s9ey2dl\";\nexport const sideRight = \"sideRight_srdijy0\";\nexport const sideBottom = \"sideBottom_sx8t5y0\";\nexport const sideLeft = \"sideLeft_sp9wl8h\";", "import { parseAssetReference } from \"@framerjs/assets\"\nimport { CenterChild, CustomModal, IconClose, Spacer, Stack } from \"@framerjs/fresco\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { assert, getLogger } from \"@framerjs/shared\"\nimport { isSafari } from \"@framerjs/shared/src/environment.ts\"\nimport { cx } from \"@linaria/core\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { ModalType } from \"document/utils/ModalType.ts\"\nimport type { Size } from \"library/render/types/Size.ts\"\nimport { useStableCallback } from \"library/utils/useStableCallback.ts\"\nimport React from \"react\"\nimport { getAssetResolver } from \"renderer/getAssetResolver.ts\"\nimport { isFunction } from \"utils/typeChecks.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport { useModalThemeOnActiveView } from \"../utils/useModalTheme.ts\"\nimport * as styles from \"./ImageEditModal.styles.ts\"\n\nconst log = getLogger(\"ImageEditModal\")\n\nexport interface ImageState {\n\timageRef: React.RefObject<HTMLImageElement | null>\n\tisLoading: boolean\n\tnaturalImageSize: Size | null\n\timageElementSize: Size | null\n}\n\ninterface Props {\n\ttitle: string\n\timage: string\n\ttype: ModalType\n\tenabled: (state: ImageState) => boolean\n\tchildren: (state: ImageState & { enabled: boolean }) => React.ReactNode\n\tinputFields?: ((state: ImageState) => React.ReactNode) | React.ReactNode\n\tbuttons: ((state: ImageState) => React.ReactNode) | React.ReactNode\n\tonLoadImage?: (size: Size) => void\n\timageBorderEnabled?: boolean\n}\n\nexport function ImageEditModal({\n\ttype,\n\ttitle,\n\timage,\n\tenabled,\n\tchildren,\n\tinputFields,\n\tbuttons,\n\tonLoadImage,\n\timageBorderEnabled = false,\n}: Props) {\n\tconst engine = useBaseEngine()\n\n\tconst imageRef = React.useRef<HTMLImageElement | null>(null)\n\n\tconst [isLoading, setIsLoading] = React.useState(true)\n\n\tconst imageSrc = React.useMemo(() => {\n\t\treturn getAssetResolver()(image, {})\n\t}, [image])\n\n\tconst thumbnailSrc = React.useMemo(() => {\n\t\treturn getAssetResolver()(image, { preferredSize: \"small\" })\n\t}, [image])\n\n\tconst [src, setSrc] = React.useState(imageSrc)\n\n\tconst loadHandler = React.useCallback(\n\t\t(event: React.SyntheticEvent<HTMLImageElement>) => {\n\t\t\tconst isActualImage = event.currentTarget.src === imageSrc\n\t\t\tif (isActualImage) {\n\t\t\t\tsetIsLoading(false)\n\t\t\t} else {\n\t\t\t\t// Setting the actual src we want to load\n\t\t\t\tsetSrc(imageSrc)\n\t\t\t}\n\t\t},\n\t\t[imageSrc],\n\t)\n\n\tconst [naturalImageSize, setNaturalImageSize] = React.useState<Size | null>(null)\n\tconst [imageElementSize, setImageElementSize] = React.useState<Size | null>(null)\n\n\tconst modalThemeProps = useModalThemeOnActiveView(\"darker\")\n\n\tReact.useLayoutEffect(() => {\n\t\tlet identifier = image\n\t\tconst assetReference = parseAssetReference(identifier)\n\t\tif (assetReference) {\n\t\t\tidentifier = assetReference.identifier\n\t\t}\n\t\tconst asset = engine.stores.assetStore.assetMap.assetForKey(identifier)\n\t\tif (!asset || !asset.properties || !asset.properties.image) return\n\t\tconst width = asset.properties.image.width\n\t\tconst height = asset.properties.image.height\n\t\tsetNaturalImageSize({ width, height })\n\t\t// We set a temporary SVG image so the modal renders at the correct initial size, we can't\n\t\t// set the actual width and height because that breaks the responsive behavior of the image.\n\t\tsetSrc(\n\t\t\t`data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='${width}px' height='${height}px'%3E%3C/svg%3E`,\n\t\t)\n\t}, [image])\n\n\tconst stableOnLoadImage = useStableCallback(onLoadImage ?? (() => {}))\n\n\tReact.useEffect(() => {\n\t\tif (!imageSrc) {\n\t\t\tengine.stores.modalStore.dismiss()\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"error\",\n\t\t\t\tprimaryText: `${title} modal dismissed.`,\n\t\t\t\tsecondaryText: \"Image not found.\",\n\t\t\t})\n\t\t\tlog.error(\"Failed to load image, because image src is undefined\", image)\n\t\t\treturn\n\t\t}\n\n\t\tconst img = new Image()\n\t\timg.onload = () => {\n\t\t\tconst size: Size = { width: img.naturalWidth, height: img.naturalHeight }\n\t\t\tsetNaturalImageSize(size)\n\t\t\tstableOnLoadImage(size)\n\t\t}\n\t\timg.src = imageSrc\n\t\treturn () => {\n\t\t\timg.onload = null\n\t\t}\n\t}, [imageSrc, image, title])\n\n\tReact.useEffect(() => {\n\t\tconst imageElement = imageRef.current\n\t\tassert(imageElement)\n\n\t\tconst updateElementSize = () => {\n\t\t\tsetImageElementSize({ width: imageElement.offsetWidth, height: imageElement.offsetHeight })\n\t\t}\n\n\t\timageElement.addEventListener(\"load\", updateElementSize)\n\t\twindow.addEventListener(\"resize\", updateElementSize)\n\t\treturn () => {\n\t\t\timageElement.removeEventListener(\"load\", updateElementSize)\n\t\t\twindow.removeEventListener(\"resize\", updateElementSize)\n\t\t}\n\t}, [])\n\n\tconst imageState = React.useMemo(\n\t\t(): ImageState => ({\n\t\t\timageRef,\n\t\t\tisLoading,\n\t\t\tnaturalImageSize,\n\t\t\timageElementSize,\n\t\t}),\n\t\t[imageElementSize, isLoading, naturalImageSize],\n\t)\n\tconst isEnabled = enabled(imageState)\n\n\tconst imageStateWithEnabled = React.useMemo(\n\t\t(): ImageState & { enabled: boolean } => ({\n\t\t\t...imageState,\n\t\t\tenabled: isEnabled,\n\t\t}),\n\t\t[imageState, isEnabled],\n\t)\n\n\treturn (\n\t\t<CustomModal\n\t\t\tvisible\n\t\t\thasBackdrop\n\t\t\tclassName={styles.modal}\n\t\t\tonDismiss={engine.stores.modalStore.dismiss}\n\t\t\t{...modalThemeProps}\n\t\t>\n\t\t\t<Stack className={styles.header} direction=\"row\" alignItems=\"center\">\n\t\t\t\t<div className={styles.title}>{title}</div>\n\t\t\t\t<Spacer flex />\n\t\t\t\t<CenterChild title=\"Close\" onClick={engine.stores.modalStore.dismiss} className={styles.closeIcon}>\n\t\t\t\t\t<IconClose />\n\t\t\t\t</CenterChild>\n\t\t\t</Stack>\n\t\t\t<Stack gap={dimensions.css.modalGap} direction=\"column\">\n\t\t\t\t<Stack\n\t\t\t\t\tgap={0}\n\t\t\t\t\tpadding={imageBorderEnabled ? styles.imageBorderSize : 0}\n\t\t\t\t\tclassName={styles.imagePaddingContainer}\n\t\t\t\t>\n\t\t\t\t\t<div className={styles.blurredBackgroundImageWrapper}>\n\t\t\t\t\t\t<img src={thumbnailSrc} alt=\"\" className={styles.blurredBackgroundImage} decoding=\"async\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tgap={0}\n\t\t\t\t\t\tjustifyContent=\"center\"\n\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\tstyles.cropContentContainer,\n\t\t\t\t\t\t\t!isLoading && styles.fadeIn,\n\t\t\t\t\t\t\t!isLoading && isSafari() && styles.fadeInSafari,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tref={imageRef}\n\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\t// Required for being able to crop the image.\n\t\t\t\t\t\t\tcrossOrigin=\"anonymous\"\n\t\t\t\t\t\t\tonLoad={loadHandler}\n\t\t\t\t\t\t\tclassName={cx(styles.image, imageBorderEnabled && styles.imageWithBorder)}\n\t\t\t\t\t\t\tdecoding=\"async\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\tgap={0}\n\t\t\t\t\t\t\tjustifyContent=\"center\"\n\t\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\t\tclassName={cx(styles.absoluteFillParent, !isEnabled && styles.noPointerEvents)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{imageElementSize && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\t\t\t\t\t\twidth: imageElementSize.width,\n\t\t\t\t\t\t\t\t\t\theight: imageElementSize.height,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{children(imageStateWithEnabled)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t\t<Stack direction=\"row\" justifyContent=\"center\" alignItems=\"center\" gap={0}>\n\t\t\t\t\t{isFunction(inputFields) ? inputFields(imageState) : inputFields}\n\t\t\t\t\t<Spacer flex minSize={dimensions.css.inputSpacing} />\n\t\t\t\t\t{isFunction(buttons) ? buttons(imageState) : buttons}\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</CustomModal>\n\t)\n}\n", "import type { MouseTrackerEvent } from \"@framerjs/fresco\"\nimport { Button, MouseTracker, NumberInputWithTicker, Spacer } from \"@framerjs/fresco\"\nimport { cursors, dimensions } from \"@framerjs/fresco/tokens\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { ModalProps } from \"document/stores/ModalStore.ts\"\nimport { ModalType } from \"document/utils/ModalType.ts\"\nimport { clamp } from \"framer-motion\"\nimport type { Point } from \"library/render/types/Point.ts\"\nimport { getRelativeNumberValue } from \"library/render/types/RelativeNumber.ts\"\nimport { roundedNumber } from \"library/render/utils/roundedNumber.ts\"\nimport React from \"react\"\nimport * as imageCropModalStyles from \"./ImageEditModal.styles.ts\"\nimport { ImageEditModal } from \"./ImageEditModal.tsx\"\nimport * as styles from \"./ImageFocalPointModal.styles.ts\"\n\nexport function ImageFocalPointModal({\n\timage,\n\tpositionX: initialPositionX,\n\tpositionY: initialPositionY,\n\tonChange,\n}: ModalProps<ModalType.ImageFocalPoint>) {\n\tconst engine = useBaseEngine()\n\n\tconst interactiveArea = React.useRef<HTMLDivElement>(null)\n\n\tconst [positionX, setPositionX] = React.useState(() =>\n\t\tMath.round(initialPositionX ? getRelativeNumberValue(initialPositionX) : 50),\n\t)\n\tconst [positionY, setPositionY] = React.useState(() =>\n\t\tMath.round(initialPositionY ? getRelativeNumberValue(initialPositionY) : 50),\n\t)\n\n\tconst dragStartPositionRef = React.useRef<Point | null>(null)\n\n\tconst movePositionToDragStart = (event: MouseTrackerEvent) => {\n\t\tconst interactiveAreaElement = interactiveArea.current\n\t\tif (!interactiveAreaElement) return\n\n\t\tconst interactiveBounds = interactiveAreaElement.getBoundingClientRect()\n\n\t\tconst x = event.client.x - interactiveBounds.left\n\t\tconst y = event.client.y - interactiveBounds.top\n\n\t\tconst startPositionX = roundedNumber((x / Math.max(interactiveBounds.width, 1)) * 100, 1)\n\t\tconst startPositionY = roundedNumber((y / Math.max(interactiveBounds.height, 1)) * 100, 1)\n\n\t\tdragStartPositionRef.current = { x: startPositionX, y: startPositionY }\n\t\tsetPositionX(startPositionX)\n\t\tsetPositionY(startPositionY)\n\t}\n\n\tconst updatePositionForDrag = (event: MouseTrackerEvent) => {\n\t\tconst interactiveAreaElement = interactiveArea.current\n\t\tif (!interactiveAreaElement) return\n\n\t\tconst interactiveBounds = interactiveAreaElement.getBoundingClientRect()\n\n\t\tconst dragStartPosition = dragStartPositionRef.current\n\t\tif (!dragStartPosition) return\n\n\t\tconst deltaX = (event.offset.x / Math.max(1, interactiveBounds.width)) * 100\n\t\tconst deltaY = (event.offset.y / Math.max(1, interactiveBounds.height)) * 100\n\t\tsetPositionX(clamp(0, 100, roundedNumber(dragStartPosition.x + deltaX, 1)))\n\t\tsetPositionY(clamp(0, 100, roundedNumber(dragStartPosition.y + deltaY, 1)))\n\t}\n\n\treturn (\n\t\t<ImageEditModal\n\t\t\ttitle=\"Image Focal Point\"\n\t\t\timage={image}\n\t\t\ttype={ModalType.ImageFocalPoint}\n\t\t\tenabled={state => Boolean(state.imageElementSize)}\n\t\t\tinputFields={\n\t\t\t\t<>\n\t\t\t\t\t<NumberInputWithTicker\n\t\t\t\t\t\tlabel=\"X\"\n\t\t\t\t\t\tvalue={Math.round(positionX)}\n\t\t\t\t\t\tonChange={setPositionX}\n\t\t\t\t\t\twrapperClassName={imageCropModalStyles.input}\n\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\tmax={100}\n\t\t\t\t\t\tunit=\"%\"\n\t\t\t\t\t/>\n\t\t\t\t\t<Spacer size={dimensions.css.inputSpacing} />\n\t\t\t\t\t<NumberInputWithTicker\n\t\t\t\t\t\tlabel=\"Y\"\n\t\t\t\t\t\tvalue={Math.round(positionY)}\n\t\t\t\t\t\tonChange={setPositionY}\n\t\t\t\t\t\twrapperClassName={imageCropModalStyles.input}\n\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\tmax={100}\n\t\t\t\t\t\tunit=\"%\"\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t}\n\t\t\tbuttons={\n\t\t\t\t<Button\n\t\t\t\t\tbold\n\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tonChange(`${positionX}%`, `${positionY}%`)\n\t\t\t\t\t\tengine.stores.modalStore.dismiss()\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{initialPositionX || initialPositionY ? \"Update\" : \"Apply\"}\n\t\t\t\t</Button>\n\t\t\t}\n\t\t>\n\t\t\t{() => (\n\t\t\t\t<div ref={interactiveArea} className={styles.interactiveArea}>\n\t\t\t\t\t<MouseTracker\n\t\t\t\t\t\tclassName={styles.imageDragArea}\n\t\t\t\t\t\tcursor={cursors.dragging}\n\t\t\t\t\t\tonDragStart={movePositionToDragStart}\n\t\t\t\t\t\tonDrag={updatePositionForDrag}\n\t\t\t\t\t/>\n\t\t\t\t\t<MouseTracker\n\t\t\t\t\t\tclassName={styles.focalPoint}\n\t\t\t\t\t\tstyle={{ left: `${positionX}%`, top: `${positionY}%` }}\n\t\t\t\t\t\tonDragStart={() => {\n\t\t\t\t\t\t\tdragStartPositionRef.current = { x: positionX, y: positionY }\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonDrag={updatePositionForDrag}\n\t\t\t\t\t\tcursor={cursors.dragging}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</ImageEditModal>\n\t)\n}\n", "import \"ImageFocalPointModal.styles_hu2oxu.wyw.css\"; export const interactiveArea = \"interactiveArea_i1q3mw0f\";\nexport const imageDragArea = \"imageDragArea_i1j0xljb\";\nexport const focalPoint = \"focalPoint_f1k0zrw9\";", "import { focusElement, getFocusableDescendants, focusableSelector } from \"@framerjs/fresco\"\nimport { isCommandKeyPressed } from \"@framerjs/shared\"\nimport type React from \"react\"\nimport { useCallback } from \"react\"\n\nconst allArrowKeys = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"] as const\ntype ArrowKey = (typeof allArrowKeys)[number]\ntype DirectionalFocusAxis = \"both\" | \"vertical\" | \"horizontal\"\ntype DirectionalFocusDistancePreference = \"closest\" | \"furthest\"\n\nfunction isArrowKey(key: string): key is ArrowKey {\n\tfor (const arrowKey of allArrowKeys) {\n\t\tif (arrowKey === key) return true\n\t}\n\treturn false\n}\n\ninterface UseDirectionalFocusNavigationOptions {\n\tcontainerRef: React.RefObject<HTMLElement | null>\n\taxis?: DirectionalFocusAxis\n}\n\nexport function useDirectionalFocusNavigation({ containerRef, axis = \"both\" }: UseDirectionalFocusNavigationOptions) {\n\tconst focusNextInContainer = useCallback(\n\t\t(currentElement: HTMLElement | null) => {\n\t\t\treturn focusFocusableInContainer(containerRef.current, currentElement, \"next\")\n\t\t},\n\t\t[containerRef],\n\t)\n\n\tconst focusPreviousInContainer = useCallback(\n\t\t(currentElement: HTMLElement | null) => {\n\t\t\treturn focusFocusableInContainer(containerRef.current, currentElement, \"previous\")\n\t\t},\n\t\t[containerRef],\n\t)\n\n\tconst handleNavigationKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLElement>) => {\n\t\t\tif (!isArrowKey(event.key)) return\n\t\t\tif (!axisAllowsKey(axis, event.key)) return\n\n\t\t\tconst currentTarget = event.target\n\t\t\tif (!(currentTarget instanceof HTMLElement)) return\n\n\t\t\tconst currentElement = currentTarget.closest(focusableSelector)\n\t\t\tif (!(currentElement instanceof HTMLElement)) return\n\n\t\t\tconst nextFocusable = getNextFocusableInDirection(\n\t\t\t\tcontainerRef.current,\n\t\t\t\tcurrentElement,\n\t\t\t\tevent.key,\n\t\t\t\tisCommandKeyPressed(event) ? \"furthest\" : \"closest\",\n\t\t\t)\n\t\t\tif (\n\t\t\t\tnextFocusable &&\n\t\t\t\tfocusElement(nextFocusable, {\n\t\t\t\t\tpreventScroll: true,\n\t\t\t\t\tonFocus: scrollElementIntoView,\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t}\n\t\t},\n\t\t[axis, containerRef],\n\t)\n\n\treturn {\n\t\tfocusNextInContainer,\n\t\tfocusPreviousInContainer,\n\t\thandleNavigationKeyDown,\n\t}\n}\n\nfunction axisAllowsKey(axis: DirectionalFocusAxis, key: ArrowKey): boolean {\n\tswitch (axis) {\n\t\tcase \"both\":\n\t\t\treturn allArrowKeys.includes(key)\n\t\tcase \"vertical\":\n\t\t\treturn key === \"ArrowUp\" || key === \"ArrowDown\"\n\t\tcase \"horizontal\":\n\t\t\treturn key === \"ArrowLeft\" || key === \"ArrowRight\"\n\t}\n}\n\nfunction focusFocusableInContainer(\n\tcontainer: HTMLElement | null,\n\tcurrentElement: HTMLElement | null,\n\tdirection: \"next\" | \"previous\",\n): boolean {\n\tconst focusableDescendants = getFocusableDescendants(container)\n\tif (!currentElement) return false\n\n\tconst currentIndex = focusableDescendants.indexOf(currentElement)\n\tif (currentIndex === -1) return false\n\n\tconst targetIndex = direction === \"next\" ? currentIndex + 1 : currentIndex - 1\n\treturn focusElement(focusableDescendants[targetIndex])\n}\n\nfunction getNextFocusableInDirection(\n\tcontainer: HTMLElement | null,\n\tcurrentElement: HTMLElement,\n\tdirection: ArrowKey,\n\tdistancePreference: DirectionalFocusDistancePreference,\n): HTMLElement | undefined {\n\tconst focusableDescendants = getFocusableDescendants(container)\n\tconst currentIndex = focusableDescendants.indexOf(currentElement)\n\tif (currentIndex === -1) return undefined\n\n\tconst currentRect = getNavigationRect(currentElement, container)\n\tconst currentCenterX = currentRect.left + currentRect.width / 2\n\tconst currentCenterY = currentRect.top + currentRect.height / 2\n\n\tlet bestElement: HTMLElement | undefined\n\tlet bestPrimaryDistance = distancePreference === \"closest\" ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY\n\tlet bestSecondaryDistance = distancePreference === \"closest\" ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY\n\n\tfocusableDescendants.forEach((element, index) => {\n\t\tif (index === currentIndex) return\n\n\t\tconst rect = getNavigationRect(element, container)\n\t\tconst centerX = rect.left + rect.width / 2\n\t\tconst centerY = rect.top + rect.height / 2\n\t\tconst deltaX = centerX - currentCenterX\n\t\tconst deltaY = centerY - currentCenterY\n\n\t\tlet primaryDistance = 0\n\t\tlet secondaryDistance = 0\n\n\t\tswitch (direction) {\n\t\t\tcase \"ArrowLeft\":\n\t\t\t\tif (deltaX >= 0) return\n\t\t\t\tprimaryDistance = Math.abs(deltaX)\n\t\t\t\tsecondaryDistance = Math.abs(deltaY)\n\t\t\t\tbreak\n\t\t\tcase \"ArrowRight\":\n\t\t\t\tif (deltaX <= 0) return\n\t\t\t\tprimaryDistance = Math.abs(deltaX)\n\t\t\t\tsecondaryDistance = Math.abs(deltaY)\n\t\t\t\tbreak\n\t\t\tcase \"ArrowUp\":\n\t\t\t\tif (deltaY >= 0) return\n\t\t\t\tprimaryDistance = Math.abs(deltaY)\n\t\t\t\tsecondaryDistance = Math.abs(deltaX)\n\t\t\t\tbreak\n\t\t\tcase \"ArrowDown\":\n\t\t\t\tif (deltaY <= 0) return\n\t\t\t\tprimaryDistance = Math.abs(deltaY)\n\t\t\t\tsecondaryDistance = Math.abs(deltaX)\n\t\t\t\tbreak\n\t\t}\n\n\t\tif (\n\t\t\tisBetterDistanceMatch(\n\t\t\t\tdistancePreference,\n\t\t\t\tprimaryDistance,\n\t\t\t\tsecondaryDistance,\n\t\t\t\tbestPrimaryDistance,\n\t\t\t\tbestSecondaryDistance,\n\t\t\t)\n\t\t) {\n\t\t\tbestElement = element\n\t\t\tbestPrimaryDistance = primaryDistance\n\t\t\tbestSecondaryDistance = secondaryDistance\n\t\t}\n\t})\n\n\treturn bestElement\n}\n\nfunction isBetterDistanceMatch(\n\tdistancePreference: DirectionalFocusDistancePreference,\n\tprimaryDistance: number,\n\tsecondaryDistance: number,\n\tbestPrimaryDistance: number,\n\tbestSecondaryDistance: number,\n): boolean {\n\tif (distancePreference === \"closest\") {\n\t\treturn (\n\t\t\tprimaryDistance < bestPrimaryDistance ||\n\t\t\t(primaryDistance === bestPrimaryDistance && secondaryDistance < bestSecondaryDistance)\n\t\t)\n\t}\n\n\treturn (\n\t\tprimaryDistance > bestPrimaryDistance ||\n\t\t(primaryDistance === bestPrimaryDistance && secondaryDistance < bestSecondaryDistance)\n\t)\n}\n\nfunction getNavigationRect(element: HTMLElement, rootContainer: HTMLElement | null): DOMRect {\n\tlet rect = element.getBoundingClientRect()\n\n\tfor (const scrollParent of getScrollableAncestors(element, rootContainer)) {\n\t\trect = clampRectToBounds(rect, scrollParent.getBoundingClientRect())\n\t}\n\n\treturn rect\n}\n\nfunction clampRectToBounds(rect: DOMRect, bounds: DOMRect): DOMRect {\n\tconst left = clamp(rect.left, bounds.left, bounds.right)\n\tconst right = clamp(rect.right, bounds.left, bounds.right)\n\tconst top = clamp(rect.top, bounds.top, bounds.bottom)\n\tconst bottom = clamp(rect.bottom, bounds.top, bounds.bottom)\n\n\tconst width = Math.max(right - left, 0)\n\tconst height = Math.max(bottom - top, 0)\n\n\treturn new DOMRect(left, top, width, height)\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n\treturn Math.min(Math.max(value, min), max)\n}\n\nfunction scrollElementIntoView(element: HTMLElement) {\n\tconst gap = getFocusNavigationScrollGap(element)\n\tconst scrollParents = getScrollableAncestors(element)\n\n\tscrollParents.forEach(scrollParent => {\n\t\tconst elementRect = element.getBoundingClientRect()\n\t\tconst scrollParentRect = scrollParent.getBoundingClientRect()\n\n\t\tconst topInset = scrollParentRect.top + gap\n\t\tconst bottomInset = scrollParentRect.bottom - gap\n\t\tconst leftInset = scrollParentRect.left + gap\n\t\tconst rightInset = scrollParentRect.right - gap\n\n\t\tif (elementRect.top < topInset) {\n\t\t\tscrollParent.scrollTop -= topInset - elementRect.top\n\t\t} else if (elementRect.bottom > bottomInset) {\n\t\t\tscrollParent.scrollTop += elementRect.bottom - bottomInset\n\t\t}\n\n\t\tif (elementRect.left < leftInset) {\n\t\t\tscrollParent.scrollLeft -= leftInset - elementRect.left\n\t\t} else if (elementRect.right > rightInset) {\n\t\t\tscrollParent.scrollLeft += elementRect.right - rightInset\n\t\t}\n\t})\n}\n\nfunction getFocusNavigationScrollGap(element: HTMLElement): number {\n\tconst rawValue = getComputedStyle(element).getPropertyValue(\"--popout-focus-scroll-gap\").trim()\n\tconst parsedValue = Number.parseFloat(rawValue)\n\treturn Number.isFinite(parsedValue) ? parsedValue : 0\n}\n\nfunction getScrollableAncestors(element: HTMLElement, stopAt: HTMLElement | null = null): HTMLElement[] {\n\tconst scrollParents: HTMLElement[] = []\n\tlet currentElement = element.parentElement\n\n\twhile (currentElement) {\n\t\tconst style = getComputedStyle(currentElement)\n\t\tconst overflowYScrollable =\n\t\t\tisScrollableOverflow(style.overflowY) && currentElement.scrollHeight > currentElement.clientHeight\n\t\tconst overflowXScrollable =\n\t\t\tisScrollableOverflow(style.overflowX) && currentElement.scrollWidth > currentElement.clientWidth\n\n\t\tif (overflowYScrollable || overflowXScrollable) {\n\t\t\tscrollParents.push(currentElement)\n\t\t}\n\n\t\tif (currentElement === stopAt) break\n\n\t\tcurrentElement = currentElement.parentElement\n\t}\n\n\treturn scrollParents\n}\n\nfunction isScrollableOverflow(overflow: string): boolean {\n\treturn overflow === \"auto\" || overflow === \"scroll\" || overflow === \"overlay\"\n}\n", "import type { VerifiedArrayControlDescription } from \"@framerjs/framer-runtime\"\nimport {\n\tButton,\n\tCenterChild,\n\tFileDropZone,\n\tIconPlus,\n\tNavigationStackItemContext,\n\tcanFocusElement,\n\tfocusElement,\n\tfocusableSelector,\n\tuseReadOnly,\n} from \"@framerjs/fresco\"\nimport { Sortable } from \"@framerjs/fresco/layout-transitions\"\nimport { PositionTransition } from \"@framerjs/fresco/src/layout-transitions/components/PositionTransition\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { List, assert, delay, unhandledError } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { randomID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\nimport type {\n\tArrayControlProp,\n\tArrayValue,\n\tImageControlProp,\n\tObjectControlProp,\n} from \"document/models/controlProps/ControlProp.ts\"\nimport type {\n\tReducedArrayItemControlProp,\n\tReducedResponsiveImageControlProp,\n} from \"document/models/controlProps/getReducedControlProps.ts\"\nimport { createAssetReferenceForUploadImageResult } from \"document/utils/createAssetReferenceFromImageUpload.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { useCallback, useContext, useMemo, useRef, useState } from \"react\"\nimport { getId } from \"utils/getId.ts\"\nimport { isDefined, isNumber, isObject, isReadonlyArray, isString } from \"utils/typeChecks.ts\"\nimport { DarkModeContext } from \"web/components/DarkModeProvider.tsx\"\nimport { batchUploadImages } from \"web/lib/batchUploaderUtils.tsx\"\nimport { useDarkMode } from \"web/lib/useDarkMode.ts\"\nimport { popoutButtonDataAttribute } from \"../shared/PopoutButton.tsx\"\nimport { PopoutContext } from \"../shared/PopoutContext.ts\"\nimport type { PopoutNavigation } from \"../shared/PopoutNavigation.tsx\"\nimport { useDirectionalFocusNavigation } from \"../shared/useDirectionalFocusNavigation.ts\"\nimport * as styles from \"./GalleryInput.styles.ts\"\nimport { LargeImageInput } from \"./LargeImageInput.tsx\"\nimport { LargeImagePreview } from \"./LargeImagePreview.tsx\"\nimport { LargeImageTitle } from \"./LargeImageTitle.tsx\"\nimport type { ContentManagementFieldVariant } from \"./fieldVariant.ts\"\nimport {\n\tcreateGalleryItem,\n\tgetImageControlKeyAndDescription,\n\tisPlaceholderControlProp,\n} from \"./utils/arrayGalleryUtils.ts\"\n\ninterface Props {\n\tcontrol: VerifiedArrayControlDescription\n\tvalue: readonly ReducedArrayItemControlProp[]\n\tonChange: (getUpdate: (current: ArrayControlProp) => ArrayControlProp) => void\n\tcompact?: boolean\n\tvariant: ContentManagementFieldVariant\n\twrapperClassName?: string\n\tautoRemoveEmptyPlaceholder?: boolean\n\tshowInlineAddButton?: boolean\n}\n\nconst galleryItemSelector = `[${popoutButtonDataAttribute}]`\n\nexport function GalleryInput({\n\tcontrol,\n\tvalue,\n\tonChange,\n\tcompact = false,\n\tvariant,\n\twrapperClassName,\n\tautoRemoveEmptyPlaceholder = true,\n\tshowInlineAddButton = true,\n}: Props) {\n\tconst isLegacy = variant === \"legacy\"\n\n\tconst engine = useBaseEngine()\n\tconst isReadOnly = useReadOnly()\n\tconst darkMode = useDarkMode()\n\tconst isRenderingWithinPopout = isString(useContext(NavigationStackItemContext))\n\tconst popoutNavigation = useContext(PopoutContext)\n\n\tconst addButtonRef = useRef<HTMLButtonElement>(null)\n\tconst galleryRootRef = useRef<HTMLDivElement>(null)\n\tconst [imageKey, imageControl] = useMemo(() => getImageControlKeyAndDescription(control), [control])\n\n\tconst updateImages = useCallback(\n\t\t(\n\t\t\tgetUpdate: (current: ImageControlProp) => ImageControlProp,\n\t\t\tindex: number | undefined,\n\t\t\textraImages: ImageControlProp[] | undefined,\n\t\t) => {\n\t\t\tassert(isNumber(index))\n\n\t\t\tonChange(currentControlProp => {\n\t\t\t\tif (!isReadonlyArray(currentControlProp.value)) return currentControlProp\n\n\t\t\t\t// Update existing array item with new image.\n\t\t\t\tconst itemsWithUpdatedImage = List.update(currentControlProp.value, index, current => {\n\t\t\t\t\tif (current.type !== ControlType.Object) return current\n\t\t\t\t\tif (!isObject(current.value)) return current\n\n\t\t\t\t\tconst currentImageControlProp = current.value[imageKey]\n\t\t\t\t\tif (currentImageControlProp?.type !== ControlType.Image) return current\n\n\t\t\t\t\tconst updatedImageControlProp = getUpdate(currentImageControlProp)\n\n\t\t\t\t\treturn { ...current, value: { ...current.value, [imageKey]: updatedImageControlProp } }\n\t\t\t\t})\n\n\t\t\t\tif (!extraImages) return { type: ControlType.Array, value: itemsWithUpdatedImage }\n\n\t\t\t\t// The extra images are inserted after the current image.\n\t\t\t\tconst extraImageItems = extraImages.map((imageControlProp): ArrayValue => {\n\t\t\t\t\treturn createGalleryItem({ itemId: randomID(), imageKey, imageControlProp })\n\t\t\t\t})\n\n\t\t\t\tconst itemsWithExtraImages = List.insert(itemsWithUpdatedImage, index + 1, ...extraImageItems)\n\n\t\t\t\treturn { type: ControlType.Array, value: itemsWithExtraImages }\n\t\t\t})\n\t\t},\n\t\t[imageKey, onChange],\n\t)\n\n\tconst moveItem = useCallback(\n\t\t(from: number, to: number) => {\n\t\t\tonChange(currentControlProp => {\n\t\t\t\tif (!isReadonlyArray(currentControlProp.value)) return currentControlProp\n\n\t\t\t\tconst items = List.move(currentControlProp.value, from, to)\n\t\t\t\treturn { type: ControlType.Array, value: items }\n\t\t\t})\n\t\t},\n\t\t[onChange],\n\t)\n\n\tconst clearImage = useCallback(\n\t\t(index: number | undefined) => {\n\t\t\tassert(isNumber(index))\n\t\t\tconst deletionFocusTarget = getDeletionFocusTarget({\n\t\t\t\tcontainer: galleryRootRef.current,\n\t\t\t\tcurrentElement: document.activeElement instanceof HTMLElement ? document.activeElement : null,\n\t\t\t\taddButtonElement: addButtonRef.current,\n\t\t\t})\n\t\t\tfocusElement(deletionFocusTarget)\n\n\t\t\tonChange(currentControlProp => {\n\t\t\t\tif (!isReadonlyArray(currentControlProp.value)) return currentControlProp\n\n\t\t\t\tconst items = List.remove(currentControlProp.value, index)\n\t\t\t\treturn { type: ControlType.Array, value: items }\n\t\t\t})\n\t\t},\n\t\t[onChange],\n\t)\n\n\tconst [newlyAddedItemId, setNewlyAddedItemId] = useState<NodeID | null>(null)\n\n\t// Unfortunately popovers live inline. So getting a reference requires either a React ref or a\n\t// React ref callback. In the future it would be nice if there was a single popover state\n\t// singleton similar to the floating popout window. But that will require a larger refactor.\n\t//\n\t// You only want to open a popover for new items once. So I thought using the callback that\n\t// would be kind of easy because that can immediately unset it being a new item. I think the\n\t// best refactor would be having a popover singleton. That way we are also guaranteed that only\n\t// a single popover can be open at a time. Currently in theory you can have multiple of them\n\t// open at once.\n\tconst openPopover = useCallback(\n\t\t(popoutNavigation: PopoutNavigation | null) => {\n\t\t\tsetNewlyAddedItemId(newItemId => {\n\t\t\t\tif (!newItemId) return null\n\t\t\t\tif (!popoutNavigation) return null\n\n\t\t\t\t// I added the delay because it felt a bit weird that the Add button was still\n\t\t\t\t// animating its position while the popover was already open. The delay makes\n\t\t\t\t// that feel a bit nicer.\n\t\t\t\tvoid delay(100).then(() => {\n\t\t\t\t\tpopoutNavigation.presentPopout(newItemId)\n\n\t\t\t\t\tif (!autoRemoveEmptyPlaceholder) return\n\n\t\t\t\t\tconst removePlaceholderImageOnPopoverClose = () => {\n\t\t\t\t\t\tif (!popoutNavigation.isClosed()) return\n\n\t\t\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\t\t\tonChange(currentControlProp => {\n\t\t\t\t\t\t\t\tif (!isReadonlyArray(currentControlProp.value)) return currentControlProp\n\n\t\t\t\t\t\t\t\tconst newItemIdIndex = currentControlProp.value.findIndex(item => item.id === newItemId)\n\t\t\t\t\t\t\t\tconst item = currentControlProp.value[newItemIdIndex]\n\t\t\t\t\t\t\t\tif (isDefined(item) && isPlaceholderControlProp(item)) {\n\t\t\t\t\t\t\t\t\tconst newValue = List.remove(currentControlProp.value, newItemIdIndex)\n\t\t\t\t\t\t\t\t\treturn { type: ControlType.Array, value: newValue }\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn currentControlProp\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tpopoutNavigation.removeListener(removePlaceholderImageOnPopoverClose)\n\t\t\t\t\t}\n\n\t\t\t\t\tpopoutNavigation.addListener(removePlaceholderImageOnPopoverClose)\n\t\t\t\t})\n\n\t\t\t\treturn null\n\t\t\t})\n\t\t},\n\t\t[autoRemoveEmptyPlaceholder, onChange],\n\t)\n\n\tconst addItem = useCallback(() => {\n\t\tconst newItemId = randomID()\n\n\t\tonChange(currentControlProp => {\n\t\t\treturn newArrayControlPropWithAppendedItems(value, currentControlProp, [\n\t\t\t\tcreateGalleryItem({\n\t\t\t\t\titemId: newItemId,\n\t\t\t\t\timageKey,\n\t\t\t\t\timageControlProp: { type: ControlType.Image, value: undefined },\n\t\t\t\t}),\n\t\t\t])\n\t\t})\n\n\t\tif (isRenderingWithinPopout && popoutNavigation) {\n\t\t\tpopoutNavigation.presentPopoutOnRegistration(newItemId)\n\t\t} else {\n\t\t\tsetNewlyAddedItemId(newItemId)\n\t\t}\n\t}, [imageKey, isRenderingWithinPopout, onChange, popoutNavigation, value])\n\n\tconst [dragOver, setDragOver] = useState(false)\n\tconst handleDragEnter = useCallback(() => setDragOver(true), [])\n\tconst handleDragLeave = useCallback(() => setDragOver(false), [])\n\n\tconst maxExtraImages = isNumber(control.maxCount) ? Math.max(control.maxCount - value.length, 0) : undefined\n\tconst canAddImages = !isNumber(maxExtraImages) || maxExtraImages > 0\n\n\tconst handleFileDrop = useCallback(\n\t\t(event: DragEvent) => {\n\t\t\tif (isReadOnly) return\n\t\t\tif (!event.dataTransfer) return\n\n\t\t\tbatchUploadImages(engine, event.dataTransfer.files, maxExtraImages)\n\t\t\t\t.then(images => {\n\t\t\t\t\tconst assetReferences = images.map(image => createAssetReferenceForUploadImageResult(image))\n\n\t\t\t\t\tconst imageControlProps = assetReferences.map(\n\t\t\t\t\t\t(assetReference): ImageControlProp => ({\n\t\t\t\t\t\t\ttype: ControlType.Image,\n\t\t\t\t\t\t\tvalue: assetReference,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\n\t\t\t\t\tconst newItems = imageControlProps.map(imageControlProp =>\n\t\t\t\t\t\tcreateGalleryItem({ itemId: randomID(), imageKey, imageControlProp }),\n\t\t\t\t\t)\n\n\t\t\t\t\tonChange(currentControlProp => {\n\t\t\t\t\t\treturn newArrayControlPropWithAppendedItems(value, currentControlProp, newItems)\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(unhandledError)\n\t\t},\n\t\t[imageKey, value, isReadOnly, onChange, maxExtraImages],\n\t)\n\tconst { handleNavigationKeyDown } = useDirectionalFocusNavigation({ containerRef: galleryRootRef })\n\n\treturn (\n\t\t<FileDropZone\n\t\t\tref={galleryRootRef}\n\t\t\tonDragEnter={handleDragEnter}\n\t\t\tonDragLeave={handleDragLeave}\n\t\t\tonDrop={handleFileDrop}\n\t\t\tonKeyDown={handleNavigationKeyDown}\n\t\t\tclassName={cx(\n\t\t\t\tstyles.container,\n\t\t\t\tisLegacy && styles.containerLegacy,\n\t\t\t\tdragOver && styles.containerDragOver,\n\t\t\t\twrapperClassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Sortable\n\t\t\t\titems={value}\n\t\t\t\tkeyForItem={getId}\n\t\t\t\tmoveItem={moveItem}\n\t\t\t\tenabled={value.length > 1}\n\t\t\t\tclassName={cx(styles.sortable, isLegacy && styles.sortableLegacy, compact && styles.sortableCompact)}\n\t\t\t\tfooter={\n\t\t\t\t\t<>\n\t\t\t\t\t\t{showInlineAddButton && (\n\t\t\t\t\t\t\t<PositionTransition elementRef={addButtonRef} dependencies={[value.length]}>\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tref={addButtonRef}\n\t\t\t\t\t\t\t\t\tvariant=\"clean\"\n\t\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\t\tenabled={!isReadOnly && canAddImages}\n\t\t\t\t\t\t\t\t\ttitle={Dictionary.AddEllipsis}\n\t\t\t\t\t\t\t\t\tclassName={cx(styles.addButton, isLegacy && styles.addButtonLegacy)}\n\t\t\t\t\t\t\t\t\tonClick={addItem}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CenterChild>\n\t\t\t\t\t\t\t\t\t\t<IconPlus />\n\t\t\t\t\t\t\t\t\t</CenterChild>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</PositionTransition>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{showInlineAddButton && value.length === 0 && !isReadOnly && !compact && isLegacy && (\n\t\t\t\t\t\t\t<LargeImageTitle text=\"Drop Images\u2026\" />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{({ item, index, isDragPreview }) => {\n\t\t\t\t\tconst isNewlyAddedItem = item.id === newlyAddedItemId\n\t\t\t\t\tconst imageControlProp = getReducedImageControlPropFromArrayItem(imageKey, item)\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<LargeImageInput\n\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\t\tmaxExtraImages={maxExtraImages}\n\t\t\t\t\t\t\tpopoutId={item.id}\n\t\t\t\t\t\t\tcontrolProp={imageControlProp}\n\t\t\t\t\t\t\tcontrol={imageControl}\n\t\t\t\t\t\t\tonChange={updateImages}\n\t\t\t\t\t\t\tonClear={clearImage}\n\t\t\t\t\t\t\tlargePopoutButtonVariant={isLegacy}\n\t\t\t\t\t\t\tpopoverOffsetX={dimensions.values.cmsInputInnerSpacing}\n\t\t\t\t\t\t\tpopoutButtonClassName={cx(styles.popoutButton, isLegacy && styles.popoutButtonLegacy)}\n\t\t\t\t\t\t\tpopoverNavigationRef={isNewlyAddedItem && !isDragPreview ? openPopover : undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{info => (\n\t\t\t\t\t\t\t\t// The drag preview is generated outside the dark mode context\n\t\t\t\t\t\t\t\t// provider so we need to provide it again around the drag\n\t\t\t\t\t\t\t\t// preview. Would be nice to fix.\n\t\t\t\t\t\t\t\t<DarkModeContext.Provider value={darkMode}>\n\t\t\t\t\t\t\t\t\t<LargeImagePreview\n\t\t\t\t\t\t\t\t\t\tvalue={info.value}\n\t\t\t\t\t\t\t\t\t\tpositionX={info.positionX}\n\t\t\t\t\t\t\t\t\t\tpositionY={info.positionY}\n\t\t\t\t\t\t\t\t\t\tonClear={info.clearImage}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</DarkModeContext.Provider>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</LargeImageInput>\n\t\t\t\t\t)\n\t\t\t\t}}\n\t\t\t</Sortable>\n\t\t</FileDropZone>\n\t)\n}\n\nfunction getDeletionFocusTarget({\n\tcontainer,\n\tcurrentElement,\n\taddButtonElement,\n}: {\n\tcontainer: HTMLElement | null\n\tcurrentElement: HTMLElement | null\n\taddButtonElement: HTMLElement | null\n}): HTMLElement | null {\n\tconst currentGalleryItem = currentElement?.closest(galleryItemSelector)\n\tif (!(currentGalleryItem instanceof HTMLElement)) {\n\t\treturn addButtonElement ?? findFirstFocusableOutsideContainer(container)\n\t}\n\n\tconst galleryItems = getGalleryItemElements(container)\n\tconst currentIndex = galleryItems.indexOf(currentGalleryItem)\n\tif (currentIndex === -1) {\n\t\treturn addButtonElement ?? findFirstFocusableOutsideContainer(container)\n\t}\n\n\treturn (\n\t\tgalleryItems[currentIndex + 1] ??\n\t\tgalleryItems[currentIndex - 1] ??\n\t\taddButtonElement ??\n\t\tfindFirstFocusableOutsideContainer(container)\n\t)\n}\n\nfunction getGalleryItemElements(container: HTMLElement | null): HTMLElement[] {\n\tif (!container) return []\n\treturn Array.from(container.querySelectorAll<HTMLElement>(galleryItemSelector)).filter(canFocusElement)\n}\n\nfunction findFirstFocusableOutsideContainer(container: HTMLElement | null): HTMLElement | null {\n\tif (!container) return null\n\n\tlet ancestor = container.parentElement\n\twhile (ancestor) {\n\t\tconst nextFocusable = Array.from(ancestor.querySelectorAll<HTMLElement>(focusableSelector)).find(element => {\n\t\t\treturn !container.contains(element) && isFollowingElement(container, element) && canFocusElement(element)\n\t\t})\n\n\t\tif (nextFocusable) return nextFocusable\n\t\tancestor = ancestor.parentElement\n\t}\n\n\treturn null\n}\n\nfunction isFollowingElement(currentElement: HTMLElement, candidateElement: HTMLElement): boolean {\n\tconst position = currentElement.compareDocumentPosition(candidateElement)\n\treturn (position & Node.DOCUMENT_POSITION_FOLLOWING) !== 0\n}\n\nfunction newArrayControlPropWithAppendedItems(\n\treducedArray: readonly ReducedArrayItemControlProp[],\n\tcurrentControlProp: ArrayControlProp,\n\tnewItems: readonly (ObjectControlProp & ArrayValue)[],\n): ArrayControlProp {\n\t// When multiple nodes are selected with different array lengths, we don't render any items, and\n\t// adding a new item should make these arrays equal length, otherwise the newly added image\n\t// can't be edited.\n\tif (reducedArray.length === 0) return { type: ControlType.Array, value: newItems }\n\n\tconst currentList = isReadonlyArray(currentControlProp.value) ? currentControlProp.value : []\n\tconst items = List.push(currentList, ...newItems)\n\treturn { type: ControlType.Array, value: items }\n}\n\nfunction getReducedImageControlPropFromArrayItem(\n\timageKey: string,\n\treducedArrayItem: ReducedArrayItemControlProp,\n): ReducedResponsiveImageControlProp {\n\tassert(reducedArrayItem.type === ControlType.Object)\n\tassert(isObject(reducedArrayItem.value))\n\n\tconst imageControlProp = reducedArrayItem.value[imageKey]\n\tassert(imageControlProp)\n\tassert(imageControlProp.type === ControlType.ResponsiveImage)\n\n\treturn imageControlProp\n}\n", "import \"GalleryInput.styles_al0jv.wyw.css\"; export const container = \"container_c1utluu\";\nexport const containerLegacy = \"containerLegacy_c1qkvp6d\";\nexport const containerDragOver = \"containerDragOver_c10zu6cj\";\nexport const sortable = \"sortable_srjmhhy\";\nexport const sortableLegacy = \"sortableLegacy_sctald2\";\nexport const sortableCompact = \"sortableCompact_s2jrio7\";\nexport const popoutButton = \"popoutButton_pbcmajh\";\nexport const popoutButtonLegacy = \"popoutButtonLegacy_pa9xjrk\";\nexport const addButton = \"addButton_aqcvzmp\";\nexport const addButtonLegacy = \"addButtonLegacy_a1unwysx\";", "import { HandleClickOnClick, PreferMouseDown, usePrefersMouseDown } from \"@framerjs/app-shared/src/PreferMouseDown.tsx\"\nimport type { AssetReferenceParseResult } from \"@framerjs/assets\"\nimport { parseAssetReference } from \"@framerjs/assets\"\nimport { NavigationStackItemContext } from \"@framerjs/fresco\"\nimport type { AttachmentEdgePreferences } from \"@framerjs/fresco/src/components/Popover\"\nimport { useDimensionValue } from \"app/agent/hooks/useDimensionValue.ts\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport type { OptionalToUndefined } from \"document/models/CanvasTree/traits/utils/OptionalToUndefined.ts\"\nimport type { ImageControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport type { WithControlFocalPoint } from \"document/models/controlProps/WithControlFocalPoint.ts\"\nimport type { ReducedResponsiveImageControlProp } from \"document/models/controlProps/getReducedControlProps.ts\"\nimport type { Point } from \"library/render/types/Point.ts\"\nimport type { ResponsiveImageControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport type { RelativeNumber } from \"library/render/types/RelativeNumber.ts\"\nimport { memo, useContext, useMemo } from \"react\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { PopoutButton } from \"../shared/PopoutButton.tsx\"\nimport type { PopoutId } from \"../shared/PopoutNavigation.tsx\"\nimport type { NavigationRef } from \"../shared/PopoutPopover.tsx\"\nimport { ResponsiveCollectionImagePopout } from \"./CollectionImagePopout.tsx\"\n\nexport interface LargeImageInputChildrenInfo extends OptionalToUndefined<WithControlFocalPoint> {\n\tvalue: string | undefined\n\taltText: string | undefined\n\tassetReference: AssetReferenceParseResult | undefined\n\tclearImage: VoidFunction | undefined\n}\n\ninterface Props<Index = number | undefined> {\n\tpopoutId: PopoutId\n\tindex?: Index\n\tlargePopoutButtonVariant: boolean\n\tcontrol: ResponsiveImageControlDescription\n\tcontrolProp: ReducedResponsiveImageControlProp\n\tonChange: (\n\t\tgetUpdate: (value: ImageControlProp | undefined) => ImageControlProp,\n\t\tindex: number | undefined,\n\t\textraImages?: ImageControlProp[] | undefined,\n\t) => void\n\tonClear: ((index: Index) => void) | undefined\n\tchildren: (info: LargeImageInputChildrenInfo) => React.ReactNode\n\tpopoutButtonClassName: string\n\tpopoverOffsetX?: number\n\tpopoverNavigationRef?: NavigationRef\n\tmultiple?: boolean\n\tmaxExtraImages?: number\n}\n\n// Defined outside the component to reduce renders\nconst popoverAttachmentEdge: AttachmentEdgePreferences = [\"left\", \"right\", \"auto-vertical\"]\n\nexport const LargeImageInput = memo(function LargeImageInput({\n\tpopoutId,\n\tindex,\n\tlargePopoutButtonVariant,\n\tcontrol,\n\tcontrolProp,\n\tonChange,\n\tonClear,\n\tchildren,\n\tpopoverOffsetX = 0,\n\tpopoutButtonClassName,\n\tpopoverNavigationRef,\n\tmultiple = false,\n\tmaxExtraImages,\n}: Props) {\n\tconst preferMouseDown = usePrefersMouseDown()\n\n\tconst agentExperimentIsOn = useExperimentIsOn(\"agent\")\n\tconst panelPadding = useDimensionValue(\"panelPadding\")\n\n\tconst isRenderingWithinPopout = isString(useContext(NavigationStackItemContext))\n\n\tconst popoverOffset = useMemo((): Point | undefined => {\n\t\tconst offsetX = agentExperimentIsOn ? panelPadding * 2 + popoverOffsetX + panelPadding : popoverOffsetX\n\t\treturn { x: offsetX, y: 0 }\n\t}, [popoverOffsetX, agentExperimentIsOn, panelPadding])\n\n\tconst assetReference = isString(controlProp.value) ? controlProp.value : undefined\n\n\tconst altText = isString(controlProp.alt) ? controlProp.alt : undefined\n\tconst positionX: RelativeNumber | undefined = isString(controlProp.positionX) ? controlProp.positionX : undefined\n\tconst positionY: RelativeNumber | undefined = isString(controlProp.positionY) ? controlProp.positionY : undefined\n\n\tconst parsedAssetReference = useMemo(() => {\n\t\tif (!assetReference) return undefined\n\t\treturn parseAssetReference(assetReference)\n\t}, [assetReference])\n\n\tfunction changeImage(\n\t\tgetUpdate: (value: ImageControlProp | undefined) => ImageControlProp,\n\t\textraImages?: ImageControlProp[] | undefined,\n\t) {\n\t\tonChange(getUpdate, index, extraImages)\n\t}\n\n\tconst clearImage = useMemo((): VoidFunction | undefined => {\n\t\tif (!onClear) return\n\t\treturn () => onClear?.(index)\n\t}, [onClear, index])\n\n\tconst onKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n\t\tif ((event.key === \"Delete\" || event.key === \"Backspace\") && clearImage) {\n\t\t\tclearImage()\n\t\t\tevent.preventDefault()\n\t\t}\n\t}\n\n\treturn (\n\t\t<HandleClickOnClick>\n\t\t\t<PopoutButton\n\t\t\t\tlarge={largePopoutButtonVariant}\n\t\t\t\tid={popoutId}\n\t\t\t\tpopoverAttachmentEdge={popoverAttachmentEdge}\n\t\t\t\tdisplayInPopover={!isRenderingWithinPopout}\n\t\t\t\tfallbackToModalAppearance\n\t\t\t\tclassName={popoutButtonClassName}\n\t\t\t\tnavigationTitle={control.title ?? \"\"}\n\t\t\t\tpopoverOffset={popoverOffset}\n\t\t\t\tpopoverNavigationRef={popoverNavigationRef}\n\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t\taria-description={clearImage ? \"Press Delete or Backspace to remove the current image.\" : undefined}\n\t\t\t\taria-keyshortcuts={clearImage ? \"Delete Backspace\" : undefined}\n\t\t\t\tpopout={\n\t\t\t\t\t<PreferMouseDown enabled={preferMouseDown}>\n\t\t\t\t\t\t<ResponsiveCollectionImagePopout\n\t\t\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\t\t\tonChange={changeImage}\n\t\t\t\t\t\t\tonRemove={clearImage}\n\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\tmaxExtraImages={maxExtraImages}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PreferMouseDown>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{children({\n\t\t\t\t\taltText,\n\t\t\t\t\tpositionX,\n\t\t\t\t\tpositionY,\n\t\t\t\t\tclearImage,\n\t\t\t\t\tvalue: assetReference,\n\t\t\t\t\tassetReference: parsedAssetReference,\n\t\t\t\t})}\n\t\t\t</PopoutButton>\n\t\t</HandleClickOnClick>\n\t)\n})\n", "import \"LargeImagePreview.styles_1fy2622.wyw.css\"; export const imageWrapper = \"imageWrapper_i1gq7q6o\";\nexport const image = \"image_i1p4fgxh\";\nexport const checkerboard = \"checkerboard_c1ry9j8n\";\nexport const imageBorder = \"imageBorder_i4ap8ph\";\nexport const clearButton = \"clearButton_c17wswg7\";", "import { useClickHandlers } from \"@framerjs/app-shared/src/PreferMouseDown.tsx\"\nimport { useReadOnly } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useResolvedImageThumbnailUrl } from \"document/components/utils/useResolvedImageThumbnail.ts\"\nimport { useDarkMode } from \"web/lib/useDarkMode.ts\"\nimport * as styles from \"./LargeImagePreview.styles.ts\"\nimport fallbackImageDark from \"./assets/fallbackImageDark.png\"\nimport fallbackImageLight from \"./assets/fallbackImageLight.png\"\n\ninterface ImagePreviewProps {\n\tvalue: string | undefined\n\tpositionX: string | undefined\n\tpositionY: string | undefined\n\tonClear: (() => void) | undefined\n\tclassName?: string\n}\n\nexport function LargeImagePreview({\n\tvalue,\n\tpositionX = \"center\",\n\tpositionY = \"center\",\n\tonClear,\n\tclassName,\n}: ImagePreviewProps) {\n\tconst { isDarkMode } = useDarkMode()\n\tconst isReadOnly = useReadOnly()\n\n\tconst objectPosition = `${positionX} ${positionY}`\n\n\tconst fallbackImage = isDarkMode ? fallbackImageDark : fallbackImageLight\n\tconst imageUrl = useResolvedImageThumbnailUrl(value, fallbackImage)\n\n\tconst imageStyle: React.CSSProperties = imageUrl.includes(\".svg\")\n\t\t? { objectFit: \"contain\" }\n\t\t: { objectFit: \"cover\", objectPosition }\n\n\treturn (\n\t\t<div className={cx(styles.imageWrapper, className)}>\n\t\t\t<div className={styles.checkerboard} />\n\t\t\t<img className={styles.image} src={imageUrl} alt=\"\" style={imageStyle} decoding=\"async\" />\n\t\t\t<div className={styles.imageBorder} />\n\n\t\t\t{onClear && !isReadOnly && (\n\t\t\t\t<InlineClearButton\n\t\t\t\t\tonClick={event => {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\tonClear()\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\nfunction InlineClearButton({ onClick }: { onClick: React.MouseEventHandler<HTMLElement> }) {\n\tconst clickHandlers = useClickHandlers(onClick)\n\n\treturn (\n\t\t<div title={Dictionary.Clear} role=\"button\" className={styles.clearButton} {...clickHandlers}>\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"6\" height=\"6\">\n\t\t\t\t<g transform=\"translate(1 1)\">\n\t\t\t\t\t<path d=\"M 0 0 L 4 4\" fill=\"transparent\" strokeWidth=\"1.5\" stroke=\"currentColor\" strokeLinecap=\"round\" />\n\t\t\t\t\t<path d=\"M 4 0 L 0 4\" fill=\"transparent\" strokeWidth=\"1.5\" stroke=\"currentColor\" strokeLinecap=\"round\" />\n\t\t\t\t</g>\n\t\t\t</svg>\n\t\t</div>\n\t)\n}\n", "import \"LargeImageTitle.styles_w9x1gi.wyw.css\"; export const title = \"title_tlzixh9\";\nexport const placeholderColor = \"placeholderColor_p7kkjiv\";", "import { truncateWithEllipsis } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport * as styles from \"./LargeImageTitle.styles.ts\"\n\ninterface Props {\n\ttext: string\n\tisPlaceholder?: boolean\n}\n\nexport function LargeImageTitle({ text, isPlaceholder = true }: Props) {\n\treturn <div className={cx(styles.title, truncateWithEllipsis, isPlaceholder && styles.placeholderColor)}>{text}</div>\n}\n", "import \"Loading.styles_1rrg13o.wyw.css\"; export const loading = \"loading_lbz3y5l\";", "import { Spinner } from \"@framerjs/fresco\"\nimport * as styles from \"./Loading.styles.ts\"\n\nexport function Loading() {\n\treturn (\n\t\t<div className={styles.loading}>\n\t\t\t<Spinner />\n\t\t</div>\n\t)\n}\n", "import { colors, dimensions } from \"@framerjs/fresco/tokens\"\nimport type { CollectorContext } from \"code-generation/utils/collector.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { type BaseEngine, useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { CanvasNode, CanvasTree, LoadedScopeNode, RichTextNode } from \"document/models/CanvasTree/index.ts\"\nimport { isRichTextNode, isWebPageNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { hasGridLayout } from \"document/models/CanvasTree/traits/WithLayout.ts\"\nimport { collectParagraphSpacing } from \"document/models/CanvasTree/traits/collectStyles/collectParagraphSpacing.ts\"\nimport { collectRichTextVariables } from \"document/models/CanvasTree/traits/collectStyles/collectRichTextVariables.ts\"\nimport { collectSizeConstraints } from \"document/models/CanvasTree/traits/collectStyles/collectSizeConstraints.ts\"\nimport { collectLinkStyleVariables } from \"document/models/CanvasTree/traits/collectStyles/collectTextStyleVariables.ts\"\nimport { collectTextWrap } from \"document/models/CanvasTree/traits/collectStyles/collectTextWrap.ts\"\nimport { createCSSDimension } from \"document/models/CanvasTree/traits/utils/CSSDimension.ts\"\nimport {\n\tROOT_FONT_SIZE_CSS_PROPERTY,\n\tgetRootFontSize,\n} from \"document/models/CanvasTree/traits/utils/rootFontSizeHelpers.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { isVekterEngine, useAndAssertVekterEngine } from \"document/useVekterEngine.ts\"\nimport type { RenderId } from \"document/utils/RenderId.ts\"\nimport { isOnPageEngine } from \"editorbar/engine/useOnPageEngine.ts\"\nimport type { TextVerticalAlignment } from \"library/render/presentation/Text.tsx\"\nimport { DimensionType } from \"library/render/types/Constraints.ts\"\nimport type { Point } from \"library/render/types/Point.ts\"\nimport type { Rect } from \"library/render/types/Rect.ts\"\nimport { defaultRichTextContainerStyle } from \"library/render/utils/injectRichTextRules.ts\"\nimport type React from \"react\"\nimport { isNumber, isString } from \"utils/typeChecks.ts\"\nimport type { TextEditEventSource } from \"../tools/TextEditTool.ts\"\n\nexport function useCanvasZoom() {\n\tconst engine = useAndAssertVekterEngine()\n\treturn useEngineState(() => engine.stores.canvasStore.interactiveZoom, [], EngineChange.CanvasZoom)\n}\n\nexport function useNodeRect(node: CanvasNode, renderId: RenderId) {\n\tconst engine = useBaseEngine()\n\treturn useEngineState(\n\t\t() => engine.tree.getRect(node, undefined, undefined, undefined, renderId),\n\t\t[node, renderId],\n\t\tEngineChange.TreeDOMLayoutSync,\n\t)\n}\n\nexport function useNodeMatrix(node: CanvasNode, renderId: RenderId) {\n\tconst engine = useBaseEngine()\n\treturn useEngineState(\n\t\t() => engine.tree.transformMatrixToNode(node, undefined, undefined, renderId).toString(),\n\t\t[node, renderId],\n\t\tEngineChange.TreeDOMLayoutSync,\n\t)\n}\n\n// Select the word under the cursor when double clicking the canvas.\nexport function autoSelectText(engine: BaseEngine, editor: HTMLElement, eventSource: TextEditEventSource) {\n\tconst selection = window.getSelection()\n\n\tconst point = engine.stores.mouseStore.windowMousePosition\n\tconst range = getCaretRangeAtScreenPoint(point) ?? getCaretRangeFromNode(editor)\n\n\tif (!selection || !range) return\n\n\tconst isTextSelected = editor.contains(range.startContainer) && editor.contains(range.endContainer)\n\tconst shouldSelectWord = eventSource === \"mouse\" && isTextSelected\n\n\t// On-page editing doesn't require a double click to enter, so word selection happens\n\t// organically, and expanding to the word here would also apply to single clicks.\n\t// Canvas editing requires a double click to enter the RTE editing experience.\n\tif (isVekterEngine(engine)) {\n\t\tif (shouldSelectWord) {\n\t\t\ttry {\n\t\t\t\trange.expand?.(\"word\")\n\t\t\t} catch {\n\t\t\t\t// Ignore\n\t\t\t}\n\t\t} else {\n\t\t\trange.selectNodeContents(editor)\n\t\t}\n\t}\n\n\tselection.removeAllRanges()\n\tselection.addRange(range)\n}\n\nfunction getCaretRangeAtScreenPoint(point: Point) {\n\t// eslint-disable-next-line framer-studio/tscompat -- We check for support via the line above.\n\tif (document.caretRangeFromPoint) {\n\t\t// eslint-disable-next-line framer-studio/tscompat -- We check for support via the line above.\n\t\treturn document.caretRangeFromPoint(point.x, point.y)\n\t}\n\n\t// eslint-disable-next-line framer-studio/tscompat -- We check for support via the line above.\n\tif (document.caretPositionFromPoint) {\n\t\t// eslint-disable-next-line framer-studio/tscompat -- We check for support via the line above.\n\t\tconst position = document.caretPositionFromPoint(point.x, point.y)\n\n\t\tif (position) {\n\t\t\tconst range = document.createRange()\n\t\t\trange.setStart(position.offsetNode, position.offset)\n\t\t\trange.setEnd(position.offsetNode, position.offset)\n\t\t\treturn range\n\t\t}\n\t}\n\n\treturn null\n}\n\nfunction getCaretRangeFromNode(node: Node) {\n\tconst range = document.createRange()\n\trange.selectNodeContents(node)\n\treturn range\n}\n\nfunction convertVerticalAlignment(verticalAlignment: TextVerticalAlignment) {\n\tswitch (verticalAlignment) {\n\t\tcase \"top\":\n\t\t\treturn \"flex-start\"\n\t\tcase \"center\":\n\t\t\treturn \"center\"\n\t\tcase \"bottom\":\n\t\t\treturn \"flex-end\"\n\t}\n}\n\nexport function getDragOutsideStyle(zoom: number): React.CSSProperties {\n\tconst screen = window.screen\n\n\t// Add some extra padding around the editor to fix the selection when dragging the cursor\n\t// outside of the boundaries of the editor.\n\treturn {\n\t\tposition: \"absolute\",\n\t\tinset: `${-screen.height / zoom}px ${-screen.width / zoom}px`,\n\t\tpadding: `${screen.height / zoom}px ${screen.width / zoom}px`,\n\t}\n}\n\nfunction getBackgroundAndOutlineColor(\n\tengine: BaseEngine,\n\tvariant: ContainerVariant,\n\thasValidationWarning: boolean | undefined,\n): {\n\toutlineColor: string\n\tbackgroundColor: string | undefined\n} {\n\tif (hasValidationWarning) {\n\t\treturn {\n\t\t\toutlineColor: colors.onPageValidationWarningBadgeBackground,\n\t\t\tbackgroundColor: undefined,\n\t\t}\n\t}\n\n\tif (variant === \"selectionBox\" && isOnPageEngine(engine)) {\n\t\treturn {\n\t\t\toutlineColor: colors.onPageHighlightBorder,\n\t\t\tbackgroundColor: colors.highlightsBackground,\n\t\t}\n\t}\n\n\treturn {\n\t\toutlineColor: colors.textEditorOutline,\n\t\tbackgroundColor: undefined,\n\t}\n}\n\ntype ContainerVariant = \"editableText\" | \"selectionBox\"\n\ninterface ContainerStyleProps {\n\tscopeNode: LoadedScopeNode\n\tnode: CanvasNode\n\trect: Rect\n\tzoom: number\n\tvariant?: ContainerVariant\n\thasValidationWarning: boolean | undefined\n}\n\nexport function useContainerStyle({\n\tscopeNode,\n\tnode,\n\trect,\n\tzoom,\n\tvariant = \"editableText\",\n\thasValidationWarning,\n}: ContainerStyleProps) {\n\tconst engine = useBaseEngine()\n\n\t// When the editor is open, we need to get the current root font size so the text size doesn't\n\t// change for `rem` units. We need to keep tracking of Tree & ActiveBundle changes in case\n\t// a change occurs to the Home Page primary variant or the LT's primary variant while the\n\t// editor is open.\n\tconst rootFontSize = useEngineState(\n\t\t() => getRootFontSize(scopeNode, engine.tree, engine.stores.modulesStore, node.id),\n\t\t[node.id],\n\t\t[EngineChange.Tree, EngineChange.ActiveBundle],\n\t)\n\n\tif (!isRichTextNode(node)) {\n\t\treturn {}\n\t}\n\n\tconst isAutoSized = node.usesDOMRectCached()\n\n\tconst isAutoWidth = (isAutoSized && node.widthType === DimensionType.Auto) || node.textFitViewBoxSize\n\tconst isAutoHeight = isAutoSized && node.heightType === DimensionType.Auto\n\n\tconst parentNode = engine.tree.get(node.parentid)\n\tconst isGridItem = !!parentNode && hasGridLayout(parentNode)\n\tconst gridItemFillWidth = isGridItem && node.gridItemFillCellWidth\n\tconst gridItemFillHeight = isGridItem && node.gridItemFillCellHeight\n\tconst { backgroundColor, outlineColor } = getBackgroundAndOutlineColor(engine, variant, hasValidationWarning)\n\n\tconst style: React.CSSProperties = {\n\t\tposition: \"absolute\",\n\t\twidth: isAutoWidth && !gridItemFillWidth ? \"max-content\" : rect.width,\n\t\theight: isAutoHeight && !gridItemFillHeight ? \"max-content\" : rect.height,\n\t\toutline: \"1px solid \" + outlineColor,\n\t\tbackgroundColor,\n\t\topacity: node.resolveValue(\"opacity\"),\n\t\twhiteSpace: \"pre-wrap\",\n\t\tborderRadius: isVekterEngine(engine) ? 0 : dimensions.css.onPageSelectionOutlineRadius,\n\t\t[ROOT_FONT_SIZE_CSS_PROPERTY]: isNumber(rootFontSize) ? createCSSDimension(rootFontSize, \"px\") : undefined,\n\t\t// same as RichTextContainer to avoid layout shift when contents have padding or alignment\n\t\tdisplay: defaultRichTextContainerStyle.display,\n\t\tflexDirection: defaultRichTextContainerStyle.flexDirection,\n\t\t\"--vertical-alignment\": convertVerticalAlignment(node.textVerticalAlignment),\n\t\tjustifyContent: `var(--vertical-alignment, ${defaultRichTextContainerStyle.justifyContent})`,\n\t}\n\n\tif (node.textFitViewBoxSize) {\n\t\tstyle.transform = isNumber(node.textFitScale) ? `scale(${node.textFitScale})` : undefined\n\t\tstyle.whiteSpace = \"pre\"\n\t}\n\n\tconst context: CollectorContext = { componentLoader: engine.componentLoader }\n\tcollectSizeConstraints(node, style, context)\n\toptionallyConstraintMaxWidth(engine.tree, node, style, zoom)\n\tcollectRichTextVariables(node, style, context)\n\tcollectLinkStyleVariables(node, style, context)\n\tcollectParagraphSpacing(node, style, context)\n\tcollectTextWrap(node, style, context)\n\n\treturn style\n}\n\n/**\n * This function has to be specifically called right after\n * collectSizeConstraints to re-compute the max-width for the Canvas Editor\n */\nexport function optionallyConstraintMaxWidth(\n\ttree: CanvasTree,\n\tnode: RichTextNode,\n\tstyle: React.CSSProperties,\n\tscale: number,\n) {\n\t// If the node is text fit, we don't want max-width. It throws off the box.\n\tif (node.textFitViewBoxSize) {\n\t\tstyle.maxWidth = undefined\n\t\treturn\n\t}\n\n\tif (!isString(style.maxWidth)) return\n\n\tif (!style.maxWidth.includes(\"%\")) return\n\n\tconst parentNode = tree.get(node.parentid)\n\tif (isWebPageNode(parentNode)) {\n\t\tstyle.maxWidth = \"unset\"\n\t\treturn\n\t}\n\n\tconst value = style.maxWidth.match(/\\d/gu)?.join(\"\") ?? \"100\"\n\tconst percentage = (1 / scale) * parseInt(value) + \"%\"\n\tstyle.maxWidth = `calc(${percentage} + 2px)`\n}\n", "import { Popover } from \"@framerjs/fresco\"\nimport type { AttachmentEdgePreferences } from \"@framerjs/fresco/components/Popover\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport type { CanvasNode, LoadedScopeNode } from \"document/models/CanvasTree/index.ts\"\nimport type { RenderId } from \"document/utils/RenderId.ts\"\nimport { useMemo, useState } from \"react\"\nimport { useContainerStyle, useNodeRect } from \"../../canvas/editorUtils.tsx\"\nimport * as styles from \"./OnPageEditingComboboxPopover.styles.ts\"\n\nconst popoverAttachmentEdges: AttachmentEdgePreferences = [\"bottom\", \"top\"]\n\nconst offset = { x: 0, y: dimensions.values.inputSpacing }\n\ninterface Props {\n\tnode: CanvasNode\n\trenderId: RenderId\n\thidden?: boolean\n\tchildren: React.ReactNode\n\tscopeNode: LoadedScopeNode\n\tonClose: () => void\n}\n\nexport function OnPageEditingComboboxPopover({ children, node, renderId, hidden, onClose, scopeNode }: Props) {\n\tconst rect = useNodeRect(node, renderId)\n\tconst [nodeOutline, setNodeOutline] = useState<HTMLDivElement | null>(null)\n\n\tconst containerStyle = useContainerStyle({\n\t\tscopeNode,\n\t\tnode,\n\t\trect,\n\t\tzoom: 1,\n\t\tvariant: \"selectionBox\",\n\t\thasValidationWarning: false,\n\t})\n\n\tconst nodeOutlineStyle: React.CSSProperties = useMemo(\n\t\t() => ({\n\t\t\twidth: rect.width,\n\t\t\theight: rect.height,\n\t\t\tcursor: \"pointer\",\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\topacity: 0,\n\t\t\tpointerEvents: \"auto\",\n\t\t}),\n\t\t[rect],\n\t)\n\n\treturn (\n\t\t<>\n\t\t\t<div ref={setNodeOutline} style={containerStyle}>\n\t\t\t\t<div style={nodeOutlineStyle} />\n\t\t\t</div>\n\t\t\t<Popover\n\t\t\t\tstyle={{ opacity: hidden ? 0 : 1 }}\n\t\t\t\tanchor={nodeOutline}\n\t\t\t\talignSelf=\"center\"\n\t\t\t\tbackdropEnabled={true}\n\t\t\t\tattachTo={popoverAttachmentEdges}\n\t\t\t\toffset={offset}\n\t\t\t\tshowArrow={false}\n\t\t\t\tonClose={onClose}\n\t\t\t\tclassName={styles.popover}\n\t\t\t\tthemeBehavior=\"none\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Popover>\n\t\t</>\n\t)\n}\n", "import \"OnPageEditingComboboxPopover.styles_15hxab3.wyw.css\"; import { popoverInset } from \"@framerjs/fresco\";\nimport { cx } from \"@linaria/core\";\nexport const popover = cx(popoverInset, \"popover_p1qh2fnu\");", "import \"CollectionReferenceVariableEditor.styles_crn7w9.wyw.css\"; export const inputWrapper = \"inputWrapper_i1fmzghq\";", "import type { ModuleExportIdentifierString } from \"@framerjs/shared/src/moduleIdentifiers.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { LoadedScopeNode, RichTextNode } from \"document/models/CanvasTree/index.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { CanvasNodeWithImageFill } from \"document/models/CanvasTree/traits/WithFill.ts\"\nimport type { CollectionReferenceControlPropValue } from \"document/models/controlProps/ControlProp.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport type { RenderId } from \"document/utils/RenderId.ts\"\nimport type { OnPageCollectionReferenceVariableEditTool } from \"editorbar/engine/tools/OnPageCollectionReferenceVariableEditTool.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { assert } from \"library/utils/assert.ts\"\nimport { CollectionReferenceInput } from \"../chrome/contentManagement/CollectionReferenceInput.tsx\"\nimport { OnPageEditingComboboxPopover } from \"../chrome/contentManagement/OnPageEditingComboboxPopover.tsx\"\nimport type { CollectionReferenceVariableEditTool } from \"../tools/CollectionReferenceVariableEditTool.ts\"\nimport * as inlineEditingStyles from \"../utils/inlineEditing.styles.ts\"\nimport * as styles from \"./CollectionReferenceVariableEditor.styles.ts\"\n\ninterface CollectionReferenceVariableEditorProps {\n\ttool: CollectionReferenceVariableEditTool | OnPageCollectionReferenceVariableEditTool\n\tnode: RichTextNode | CanvasNodeWithImageFill\n\trenderId: RenderId\n\thidden?: boolean\n\tscopeNode: LoadedScopeNode\n}\n\nexport function CollectionReferenceVariableEditor({\n\ttool,\n\tnode,\n\trenderId,\n\thidden,\n\tscopeNode,\n}: CollectionReferenceVariableEditorProps) {\n\tconst variableInfo = tool.getVariableInfo()\n\n\tconst engine = useBaseEngine()\n\n\tconst controlProp = tool.getControlProp()\n\tassert(controlProp, \"Control prop must exist\")\n\n\tconst handleCollectionReferenceChange = useEngineCallback(\n\t\t(value: CollectionReferenceControlPropValue) => {\n\t\t\tassert(!isDynamicValue(value), \"Value must not be a dynamic value\")\n\t\t\ttool.changeValue(value)\n\t\t\tengine.exitTool()\n\t\t},\n\t\t[tool],\n\t)\n\n\tconst handleClose = useEngineCallback(() => {\n\t\tengine.exitTool()\n\t}, [])\n\n\tif (!variableInfo) {\n\t\treturn null\n\t}\n\n\tassert(\n\t\tvariableInfo.controlDescription.type === ControlType.CollectionReference,\n\t\t\"Control description must be a collection reference\",\n\t)\n\n\tassert(!isVariableReference(controlProp.value), \"value must not be a variable reference\")\n\n\treturn (\n\t\t<OnPageEditingComboboxPopover\n\t\t\tnode={node}\n\t\t\trenderId={renderId}\n\t\t\thidden={hidden}\n\t\t\tonClose={handleClose}\n\t\t\tscopeNode={scopeNode}\n\t\t>\n\t\t\t<CollectionReferenceInput\n\t\t\t\twrapperClassName={styles.inputWrapper}\n\t\t\t\tmenuClassName={inlineEditingStyles.inlineEditingComboBoxMenu}\n\t\t\t\tdataIdentifier={variableInfo.controlDescription.dataIdentifier as ModuleExportIdentifierString}\n\t\t\t\tvalue={controlProp.value}\n\t\t\t\tonChange={handleCollectionReferenceChange}\n\t\t\t/>\n\t\t</OnPageEditingComboboxPopover>\n\t)\n}\n", "import { NavigationStack } from \"@framerjs/fresco\"\nimport type React from \"react\"\nimport { useCallback, useEffect, useId } from \"react\"\nimport { usePopoutNavigation, usePopoutNavigationItem } from \"web/pages/project/components/usePopoutNavigation.tsx\"\nimport * as styles from \"./InlinePopoutNavigation.styles.ts\"\nimport { PopoutContext } from \"./PopoutContext.ts\"\n\ninterface InlinePopoutNavigationProps {\n\ttitle: React.ReactNode\n\tchildren: React.ReactElement\n\tdisplayDivider?: boolean\n\tonClose?: VoidFunction\n}\n\nexport function InlinePopoutNavigation({ title, children, displayDivider, onClose }: InlinePopoutNavigationProps) {\n\tconst id = useId()\n\n\tconst navigation = usePopoutNavigation()\n\n\tconst rootStackItem = usePopoutNavigationItem({\n\t\tid,\n\t\tdisplayDivider,\n\t\ttitle,\n\t\tnavigation,\n\t\tpopout: <PopoutContext.Provider value={navigation}>{children}</PopoutContext.Provider>,\n\t})\n\n\tuseEffect(() => {\n\t\tif (navigation.currentStackIndex === -1) {\n\t\t\trootStackItem.present()\n\t\t}\n\t}, [navigation.currentStackIndex, rootStackItem])\n\n\tconst handleKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (event.key !== \"Escape\") return\n\t\t\tif (event.defaultPrevented) return\n\n\t\t\tif (navigation.currentStackIndex > 0) {\n\t\t\t\tnavigation.goBack(true)\n\t\t\t\tevent.stopPropagation()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (onClose) {\n\t\t\t\tonClose()\n\t\t\t\tevent.stopPropagation()\n\t\t\t}\n\t\t},\n\t\t[navigation, onClose],\n\t)\n\n\treturn (\n\t\t<PopoutContext.Provider value={navigation}>\n\t\t\t<div className={styles.navigationStackWrapper} onKeyDown={handleKeyDown}>\n\t\t\t\t<NavigationStack\n\t\t\t\t\tstack={navigation.stack}\n\t\t\t\t\tcurrentIndex={navigation.currentStackIndex}\n\t\t\t\t\tonBack={navigation.goBack}\n\t\t\t\t\tonClose={onClose}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</PopoutContext.Provider>\n\t)\n}\n", "import { PopoutNavigation } from \"document/components/chrome/shared/PopoutNavigation.tsx\"\nimport React from \"react\"\nimport { isShallowObjectStrictEqual } from \"utils/isShallowEqual.ts\"\n\n// Inspired by PopoutPopover from PopoutPopover.tsx.\nexport function usePopoutNavigation() {\n\tconst [, setCount] = React.useState(0)\n\tconst [navigation] = React.useState(\n\t\t() =>\n\t\t\tnew PopoutNavigation({\n\t\t\t\ttriggerRender: () => setCount(c => c + 1),\n\t\t\t}),\n\t)\n\n\treturn navigation\n}\n\n// Inspired by usePopoutContent from PopoutButton.tsx.\nexport function usePopoutNavigationItem({\n\tnavigation,\n\tid,\n\ttitle,\n\tpopout,\n\tparent,\n\tdisplayDivider,\n\tautoFocusInside,\n}: {\n\tnavigation: PopoutNavigation\n\tid: string\n\ttitle: React.ReactNode\n\tpopout: React.ReactElement\n\tdisplayDivider?: boolean\n\ttoolbarAction?: React.ReactElement\n\tautoFocusInside?: boolean\n\tparent?: string\n}): { present: () => void } {\n\tconst memoizedPopout = useMemoReactElement(popout)\n\n\tnavigation.updatePopout(id, memoizedPopout, title, autoFocusInside)\n\n\tconst latestPopup = React.useRef(memoizedPopout)\n\tlatestPopup.current = memoizedPopout\n\n\tconst present = React.useCallback(() => {\n\t\tnavigation.present(id, latestPopup.current, {\n\t\t\tparent: parent ?? null,\n\t\t\ttitle,\n\t\t\tdisplayDivider,\n\t\t\tautoFocusInside,\n\t\t})\n\t}, [autoFocusInside, displayDivider, id, navigation, parent, title])\n\n\treturn { present }\n}\n\nfunction useMemoReactElement<T extends React.ReactElement | undefined>(element: T): T {\n\tconst latest = React.useRef(element)\n\n\tif (!element) return undefined as T\n\n\tif (!latest.current) {\n\t\tlatest.current = element\n\t\treturn element\n\t}\n\n\tif (\n\t\tlatest.current.type !== element.type ||\n\t\t!isShallowObjectStrictEqual(latest.current.props, element.props) ||\n\t\tlatest.current.key !== element.key\n\t) {\n\t\tlatest.current = element\n\t}\n\n\treturn latest.current\n}\n", "import \"InlinePopoutNavigation.styles_16cbh4v.wyw.css\"; export const navigationStackWrapper = \"navigationStackWrapper_nx5i0gj\";", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport type Mutable<T> = {\n  -readonly[P in keyof T]: T[P]\n};\n\nexport function mod(amount: number, numerator: number): number {\n  return amount - numerator * Math.floor(amount / numerator);\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nimport {AnyCalendarDate, Calendar, CalendarIdentifier} from '../types';\nimport {CalendarDate} from '../CalendarDate';\nimport {mod, Mutable} from '../utils';\n\nconst EPOCH = 1721426; // 001/01/03 Julian C.E.\nexport function gregorianToJulianDay(era: string, year: number, month: number, day: number): number {\n  year = getExtendedYear(era, year);\n\n  let y1 = year - 1;\n  let monthOffset = -2;\n  if (month <= 2) {\n    monthOffset = 0;\n  } else if (isLeapYear(year)) {\n    monthOffset = -1;\n  }\n\n  return (\n    EPOCH -\n    1 +\n    365 * y1 +\n    Math.floor(y1 / 4) -\n    Math.floor(y1 / 100) +\n    Math.floor(y1 / 400) +\n    Math.floor((367 * month - 362) / 12 + monthOffset + day)\n  );\n}\n\nexport function isLeapYear(year: number): boolean {\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function getExtendedYear(era: string, year: number): number {\n  return era === 'BC' ? 1 - year : year;\n}\n\nexport function fromExtendedYear(year: number): [string, number] {\n  let era = 'AD';\n  if (year <= 0) {\n    era = 'BC';\n    year = 1 - year;\n  }\n\n  return [era, year];\n}\n\nconst daysInMonth = {\n  standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n  leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n};\n\n/**\n * The Gregorian calendar is the most commonly used calendar system in the world. It supports two eras: BC, and AD.\n * Years always contain 12 months, and 365 or 366 days depending on whether it is a leap year.\n */\nexport class GregorianCalendar implements Calendar {\n  identifier: CalendarIdentifier = 'gregory';\n\n  fromJulianDay(jd: number): CalendarDate {\n    let jd0 = jd;\n    let depoch = jd0 - EPOCH;\n    let quadricent = Math.floor(depoch / 146097);\n    let dqc = mod(depoch, 146097);\n    let cent = Math.floor(dqc / 36524);\n    let dcent = mod(dqc, 36524);\n    let quad = Math.floor(dcent / 1461);\n    let dquad = mod(dcent, 1461);\n    let yindex = Math.floor(dquad / 365);\n\n    let extendedYear = quadricent * 400 + cent * 100 + quad * 4 + yindex + (cent !== 4 && yindex !== 4 ? 1 : 0);\n    let [era, year] = fromExtendedYear(extendedYear);\n    let yearDay = jd0 - gregorianToJulianDay(era, year, 1, 1);\n    let leapAdj = 2;\n    if (jd0 < gregorianToJulianDay(era, year, 3, 1)) {\n      leapAdj = 0;\n    } else if (isLeapYear(year)) {\n      leapAdj = 1;\n    }\n    let month = Math.floor(((yearDay + leapAdj) * 12 + 373) / 367);\n    let day = jd0 - gregorianToJulianDay(era, year, month, 1) + 1;\n\n    return new CalendarDate(era, year, month, day);\n  }\n\n  toJulianDay(date: AnyCalendarDate): number {\n    return gregorianToJulianDay(date.era, date.year, date.month, date.day);\n  }\n\n  getDaysInMonth(date: AnyCalendarDate): number {\n    return daysInMonth[isLeapYear(date.year) ? 'leapyear' : 'standard'][date.month - 1];\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  getMonthsInYear(date: AnyCalendarDate): number {\n    return 12;\n  }\n\n  getDaysInYear(date: AnyCalendarDate): number {\n    return isLeapYear(date.year) ? 366 : 365;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  getYearsInEra(date: AnyCalendarDate): number {\n    return 9999;\n  }\n\n  getEras(): string[] {\n    return ['BC', 'AD'];\n  }\n\n  isInverseEra(date: AnyCalendarDate): boolean {\n    return date.era === 'BC';\n  }\n\n  balanceDate(date: Mutable<AnyCalendarDate>): void {\n    if (date.year <= 0) {\n      date.era = date.era === 'BC' ? 'AD' : 'BC';\n      date.year = 1 - date.year;\n    }\n  }\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Data from https://github.com/unicode-cldr/cldr-core/blob/master/supplemental/weekData.json\n// Locales starting on Sunday have been removed for compression.\nexport const weekStartData = {\n  '001': 1,\n  AD: 1,\n  AE: 6,\n  AF: 6,\n  AI: 1,\n  AL: 1,\n  AM: 1,\n  AN: 1,\n  AR: 1,\n  AT: 1,\n  AU: 1,\n  AX: 1,\n  AZ: 1,\n  BA: 1,\n  BE: 1,\n  BG: 1,\n  BH: 6,\n  BM: 1,\n  BN: 1,\n  BY: 1,\n  CH: 1,\n  CL: 1,\n  CM: 1,\n  CN: 1,\n  CR: 1,\n  CY: 1,\n  CZ: 1,\n  DE: 1,\n  DJ: 6,\n  DK: 1,\n  DZ: 6,\n  EC: 1,\n  EE: 1,\n  EG: 6,\n  ES: 1,\n  FI: 1,\n  FJ: 1,\n  FO: 1,\n  FR: 1,\n  GB: 1,\n  GE: 1,\n  GF: 1,\n  GP: 1,\n  GR: 1,\n  HR: 1,\n  HU: 1,\n  IE: 1,\n  IQ: 6,\n  IR: 6,\n  IS: 1,\n  IT: 1,\n  JO: 6,\n  KG: 1,\n  KW: 6,\n  KZ: 1,\n  LB: 1,\n  LI: 1,\n  LK: 1,\n  LT: 1,\n  LU: 1,\n  LV: 1,\n  LY: 6,\n  MC: 1,\n  MD: 1,\n  ME: 1,\n  MK: 1,\n  MN: 1,\n  MQ: 1,\n  MV: 5,\n  MY: 1,\n  NL: 1,\n  NO: 1,\n  NZ: 1,\n  OM: 6,\n  PL: 1,\n  QA: 6,\n  RE: 1,\n  RO: 1,\n  RS: 1,\n  RU: 1,\n  SD: 6,\n  SE: 1,\n  SI: 1,\n  SK: 1,\n  SM: 1,\n  SY: 6,\n  TJ: 1,\n  TM: 1,\n  TR: 1,\n  UA: 1,\n  UY: 1,\n  UZ: 1,\n  VA: 1,\n  VN: 1,\n  XK: 1\n};\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AnyCalendarDate, AnyTime, Calendar} from './types';\nimport {CalendarDate, CalendarDateTime, ZonedDateTime} from './CalendarDate';\nimport {fromAbsolute, toAbsolute, toCalendar, toCalendarDate} from './conversion';\nimport {weekStartData} from './weekStartData';\n\ntype DateValue = CalendarDate | CalendarDateTime | ZonedDateTime;\n\n/** Returns whether the given dates occur on the same day, regardless of the time or calendar system. */\nexport function isSameDay(a: DateValue, b: DateValue): boolean {\n  b = toCalendar(b, a.calendar);\n  return a.era === b.era && a.year === b.year && a.month === b.month && a.day === b.day;\n}\n\n/** Returns whether the given dates occur in the same month, using the calendar system of the first date. */\nexport function isSameMonth(a: DateValue, b: DateValue): boolean {\n  b = toCalendar(b, a.calendar);\n  // In the Japanese calendar, months can span multiple eras/years, so only compare the first of the month.\n  a = startOfMonth(a);\n  b = startOfMonth(b);\n  return a.era === b.era && a.year === b.year && a.month === b.month;\n}\n\n/** Returns whether the given dates occur in the same year, using the calendar system of the first date. */\nexport function isSameYear(a: DateValue, b: DateValue): boolean {\n  b = toCalendar(b, a.calendar);\n  a = startOfYear(a);\n  b = startOfYear(b);\n  return a.era === b.era && a.year === b.year;\n}\n\n/** Returns whether the given dates occur on the same day, and are of the same calendar system. */\nexport function isEqualDay(a: DateValue, b: DateValue): boolean {\n  return isEqualCalendar(a.calendar, b.calendar) && isSameDay(a, b);\n}\n\n/** Returns whether the given dates occur in the same month, and are of the same calendar system. */\nexport function isEqualMonth(a: DateValue, b: DateValue): boolean {\n  return isEqualCalendar(a.calendar, b.calendar) && isSameMonth(a, b);\n}\n\n/** Returns whether the given dates occur in the same year, and are of the same calendar system. */\nexport function isEqualYear(a: DateValue, b: DateValue): boolean {\n  return isEqualCalendar(a.calendar, b.calendar) && isSameYear(a, b);\n}\n\n/** Returns whether two calendars are the same. */\nexport function isEqualCalendar(a: Calendar, b: Calendar): boolean {\n  return a.isEqual?.(b) ?? b.isEqual?.(a) ?? a.identifier === b.identifier;\n}\n\n/** Returns whether the date is today in the given time zone. */\nexport function isToday(date: DateValue, timeZone: string): boolean {\n  return isSameDay(date, today(timeZone));\n}\n\nconst DAY_MAP = {\n  sun: 0,\n  mon: 1,\n  tue: 2,\n  wed: 3,\n  thu: 4,\n  fri: 5,\n  sat: 6\n};\n\ntype DayOfWeek = 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat';\n\n/**\n * Returns the day of week for the given date and locale. Days are numbered from zero to six,\n * where zero is the first day of the week in the given locale. For example, in the United States,\n * the first day of the week is Sunday, but in France it is Monday.\n */\nexport function getDayOfWeek(date: DateValue, locale: string, firstDayOfWeek?: DayOfWeek): number {\n  let julian = date.calendar.toJulianDay(date);\n\n  // If julian is negative, then julian % 7 will be negative, so we adjust\n  // accordingly.  Julian day 0 is Monday.\n  let weekStart = firstDayOfWeek ? DAY_MAP[firstDayOfWeek] : getWeekStart(locale);\n  let dayOfWeek = Math.ceil(julian + 1 - weekStart) % 7;\n  if (dayOfWeek < 0) {\n    dayOfWeek += 7;\n  }\n\n  return dayOfWeek;\n}\n\n/** Returns the current time in the given time zone. */\nexport function now(timeZone: string): ZonedDateTime {\n  return fromAbsolute(Date.now(), timeZone);\n}\n\n/** Returns today's date in the given time zone. */\nexport function today(timeZone: string): CalendarDate {\n  return toCalendarDate(now(timeZone));\n}\n\nexport function compareDate(a: AnyCalendarDate, b: AnyCalendarDate): number {\n  return a.calendar.toJulianDay(a) - b.calendar.toJulianDay(b);\n}\n\nexport function compareTime(a: AnyTime, b: AnyTime): number {\n  return timeToMs(a) - timeToMs(b);\n}\n\nfunction timeToMs(a: AnyTime): number {\n  return a.hour * 60 * 60 * 1000 + a.minute * 60 * 1000 + a.second * 1000 + a.millisecond;\n}\n\n/**\n * Returns the number of hours in the given date and time zone.\n * Usually this is 24, but it could be 23 or 25 if the date is on a daylight saving transition.\n */\nexport function getHoursInDay(a: CalendarDate, timeZone: string): number {\n  let ms = toAbsolute(a, timeZone);\n  let tomorrow = a.add({days: 1});\n  let tomorrowMs = toAbsolute(tomorrow, timeZone);\n  return (tomorrowMs - ms) / 3600000;\n}\n\nlet localTimeZone: string | null = null;\n\n/** Returns the time zone identifier for the current user. */\nexport function getLocalTimeZone(): string {\n  // TODO: invalidate this somehow?\n  if (localTimeZone == null) {\n    localTimeZone = new Intl.DateTimeFormat().resolvedOptions().timeZone;\n  }\n\n  return localTimeZone!;\n}\n\n/** Returns the first date of the month for the given date. */\nexport function startOfMonth(date: ZonedDateTime): ZonedDateTime;\nexport function startOfMonth(date: CalendarDateTime): CalendarDateTime;\nexport function startOfMonth(date: CalendarDate): CalendarDate;\nexport function startOfMonth(date: DateValue): DateValue;\nexport function startOfMonth(date: DateValue): DateValue {\n  // Use `subtract` instead of `set` so we don't get constrained in an era.\n  return date.subtract({days: date.day - 1});\n}\n\n/** Returns the last date of the month for the given date. */\nexport function endOfMonth(date: ZonedDateTime): ZonedDateTime;\nexport function endOfMonth(date: CalendarDateTime): CalendarDateTime;\nexport function endOfMonth(date: CalendarDate): CalendarDate;\nexport function endOfMonth(date: DateValue): DateValue;\nexport function endOfMonth(date: DateValue): DateValue {\n  return date.add({days: date.calendar.getDaysInMonth(date) - date.day});\n}\n\n/** Returns the first day of the year for the given date. */\nexport function startOfYear(date: ZonedDateTime): ZonedDateTime;\nexport function startOfYear(date: CalendarDateTime): CalendarDateTime;\nexport function startOfYear(date: CalendarDate): CalendarDate;\nexport function startOfYear(date: DateValue): DateValue;\nexport function startOfYear(date: DateValue): DateValue {\n  return startOfMonth(date.subtract({months: date.month - 1}));\n}\n\n/** Returns the last day of the year for the given date. */\nexport function endOfYear(date: ZonedDateTime): ZonedDateTime;\nexport function endOfYear(date: CalendarDateTime): CalendarDateTime;\nexport function endOfYear(date: CalendarDate): CalendarDate;\nexport function endOfYear(date: DateValue): DateValue;\nexport function endOfYear(date: DateValue): DateValue {\n  return endOfMonth(date.add({months: date.calendar.getMonthsInYear(date) - date.month}));\n}\n\nexport function getMinimumMonthInYear(date: AnyCalendarDate): number {\n  if (date.calendar.getMinimumMonthInYear) {\n    return date.calendar.getMinimumMonthInYear(date);\n  }\n\n  return 1;\n}\n\nexport function getMinimumDayInMonth(date: AnyCalendarDate): number {\n  if (date.calendar.getMinimumDayInMonth) {\n    return date.calendar.getMinimumDayInMonth(date);\n  }\n\n  return 1;\n}\n\n/** Returns the first date of the week for the given date and locale. */\nexport function startOfWeek(date: ZonedDateTime, locale: string, firstDayOfWeek?: DayOfWeek): ZonedDateTime;\nexport function startOfWeek(date: CalendarDateTime, locale: string, firstDayOfWeek?: DayOfWeek): CalendarDateTime;\nexport function startOfWeek(date: CalendarDate, locale: string, firstDayOfWeek?: DayOfWeek): CalendarDate;\nexport function startOfWeek(date: DateValue, locale: string, firstDayOfWeek?: DayOfWeek): DateValue;\nexport function startOfWeek(date: DateValue, locale: string, firstDayOfWeek?: DayOfWeek): DateValue {\n  let dayOfWeek = getDayOfWeek(date, locale, firstDayOfWeek);\n  return date.subtract({days: dayOfWeek});\n}\n\n/** Returns the last date of the week for the given date and locale. */\nexport function endOfWeek(date: ZonedDateTime, locale: string, firstDayOfWeek?: DayOfWeek): ZonedDateTime;\nexport function endOfWeek(date: CalendarDateTime, locale: string, firstDayOfWeek?: DayOfWeek): CalendarDateTime;\nexport function endOfWeek(date: CalendarDate, locale: string, firstDayOfWeek?: DayOfWeek): CalendarDate;\nexport function endOfWeek(date: DateValue, locale: string, firstDayOfWeek?: DayOfWeek): DateValue;\nexport function endOfWeek(date: DateValue, locale: string, firstDayOfWeek?: DayOfWeek): DateValue {\n  return startOfWeek(date, locale, firstDayOfWeek).add({days: 6});\n}\n\nconst cachedRegions = new Map<string, string>();\n\nfunction getRegion(locale: string): string | undefined {\n  // If the Intl.Locale API is available, use it to get the region for the locale.\n  // @ts-ignore\n  if (Intl.Locale) {\n    // Constructing an Intl.Locale is expensive, so cache the result.\n    let region = cachedRegions.get(locale);\n    if (!region) {\n      // @ts-ignore\n      region = new Intl.Locale(locale).maximize().region;\n      if (region) {\n        cachedRegions.set(locale, region);\n      }\n    }\n    return region;\n  }\n\n  // If not, just try splitting the string.\n  // If the second part of the locale string is 'u',\n  // then this is a unicode extension, so ignore it.\n  // Otherwise, it should be the region.\n  let part = locale.split('-')[1];\n  return part === 'u' ? undefined : part;\n}\n\nfunction getWeekStart(locale: string): number {\n  // TODO: use Intl.Locale for this once browsers support the weekInfo property\n  // https://github.com/tc39/proposal-intl-locale-info\n  let region = getRegion(locale);\n  return region ? weekStartData[region] || 0 : 0;\n}\n\n/** Returns the number of weeks in the given month and locale. */\nexport function getWeeksInMonth(date: DateValue, locale: string, firstDayOfWeek?: DayOfWeek): number {\n  let days = date.calendar.getDaysInMonth(date);\n  return Math.ceil((getDayOfWeek(startOfMonth(date), locale, firstDayOfWeek) + days) / 7);\n}\n\n/** Returns the lesser of the two provider dates. */\nexport function minDate<A extends DateValue, B extends DateValue>(a?: A | null, b?: B | null): A | B | null | undefined {\n  if (a && b) {\n    return a.compare(b) <= 0 ? a : b;\n  }\n\n  return a || b;\n}\n\n/** Returns the greater of the two provider dates. */\nexport function maxDate<A extends DateValue, B extends DateValue>(a?: A | null, b?: B | null): A | B | null | undefined {\n  if (a && b) {\n    return a.compare(b) >= 0 ? a : b;\n  }\n\n  return a || b;\n}\n\nconst WEEKEND_DATA = {\n  AF: [4, 5],\n  AE: [5, 6],\n  BH: [5, 6],\n  DZ: [5, 6],\n  EG: [5, 6],\n  IL: [5, 6],\n  IQ: [5, 6],\n  IR: [5, 5],\n  JO: [5, 6],\n  KW: [5, 6],\n  LY: [5, 6],\n  OM: [5, 6],\n  QA: [5, 6],\n  SA: [5, 6],\n  SD: [5, 6],\n  SY: [5, 6],\n  YE: [5, 6]\n};\n\n/** Returns whether the given date is on a weekend in the given locale. */\nexport function isWeekend(date: DateValue, locale: string): boolean {\n  let julian = date.calendar.toJulianDay(date);\n\n  // If julian is negative, then julian % 7 will be negative, so we adjust\n  // accordingly.  Julian day 0 is Monday.\n  let dayOfWeek = Math.ceil(julian + 1) % 7;\n  if (dayOfWeek < 0) {\n    dayOfWeek += 7;\n  }\n\n  let region = getRegion(locale);\n  // Use Intl.Locale for this once weekInfo is supported.\n  // https://github.com/tc39/proposal-intl-locale-info\n  let [start, end] = WEEKEND_DATA[region!] || [6, 0];\n  return dayOfWeek === start || dayOfWeek === end;\n}\n\n/** Returns whether the given date is on a weekday in the given locale. */\nexport function isWeekday(date: DateValue, locale: string): boolean {\n  return !isWeekend(date, locale);\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from the TC39 Temporal proposal.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nimport {AnyCalendarDate, AnyDateTime, AnyTime, Calendar, DateFields, Disambiguation, TimeFields} from './types';\nimport {CalendarDate, CalendarDateTime, Time, ZonedDateTime} from './CalendarDate';\nimport {constrain} from './manipulation';\nimport {getExtendedYear, GregorianCalendar} from './calendars/GregorianCalendar';\nimport {getLocalTimeZone, isEqualCalendar} from './queries';\nimport {Mutable} from './utils';\n\nexport function epochFromDate(date: AnyDateTime): number {\n  date = toCalendar(date, new GregorianCalendar());\n  let year = getExtendedYear(date.era, date.year);\n  return epochFromParts(year, date.month, date.day, date.hour, date.minute, date.second, date.millisecond);\n}\n\nfunction epochFromParts(year: number, month: number, day: number, hour: number, minute: number, second: number, millisecond: number): number {\n  // Note: Date.UTC() interprets one and two-digit years as being in the\n  // 20th century, so don't use it\n  let date = new Date();\n  date.setUTCHours(hour, minute, second, millisecond);\n  date.setUTCFullYear(year, month - 1, day);\n  return date.getTime();\n}\n\nexport function getTimeZoneOffset(ms: number, timeZone: string): number {\n  // Fast path for UTC.\n  if (timeZone === 'UTC') {\n    return 0;\n  }\n\n  // Fast path: for local timezone after 1970, use native Date.\n  if (ms > 0 && timeZone === getLocalTimeZone()) {\n    return new Date(ms).getTimezoneOffset() * -60 * 1000;\n  }\n\n  let {year, month, day, hour, minute, second} = getTimeZoneParts(ms, timeZone);\n  let utc = epochFromParts(year, month, day, hour, minute, second, 0);\n  return utc - Math.floor(ms / 1000) * 1000;\n}\n\nconst formattersByTimeZone = new Map<string, Intl.DateTimeFormat>();\n\nfunction getTimeZoneParts(ms: number, timeZone: string) {\n  let formatter = formattersByTimeZone.get(timeZone);\n  if (!formatter) {\n    formatter = new Intl.DateTimeFormat('en-US', {\n      timeZone,\n      hour12: false,\n      era: 'short',\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n\n    formattersByTimeZone.set(timeZone, formatter);\n  }\n\n  let parts = formatter.formatToParts(new Date(ms));\n  let namedParts: {[name: string]: string} = {};\n  for (let part of parts) {\n    if (part.type !== 'literal') {\n      namedParts[part.type] = part.value;\n    }\n  }\n\n\n  return {\n    // Firefox returns B instead of BC... https://bugzilla.mozilla.org/show_bug.cgi?id=1752253\n    year: namedParts.era === 'BC' || namedParts.era === 'B' ? -namedParts.year + 1 : +namedParts.year,\n    month: +namedParts.month,\n    day: +namedParts.day,\n    hour: namedParts.hour === '24' ? 0 : +namedParts.hour, // bugs.chromium.org/p/chromium/issues/detail?id=1045791\n    minute: +namedParts.minute,\n    second: +namedParts.second\n  };\n}\n\nconst DAYMILLIS = 86400000;\n\nexport function possibleAbsolutes(date: CalendarDateTime, timeZone: string): number[] {\n  let ms = epochFromDate(date);\n  let earlier = ms - getTimeZoneOffset(ms - DAYMILLIS, timeZone);\n  let later = ms - getTimeZoneOffset(ms + DAYMILLIS, timeZone);\n  return getValidWallTimes(date, timeZone, earlier, later);\n}\n\nfunction getValidWallTimes(date: CalendarDateTime, timeZone: string, earlier: number, later: number): number[] {\n  let found = earlier === later ? [earlier] : [earlier, later];\n  return found.filter(absolute => isValidWallTime(date, timeZone, absolute));\n}\n\nfunction isValidWallTime(date: CalendarDateTime, timeZone: string, absolute: number) {\n  let parts = getTimeZoneParts(absolute, timeZone);\n  return date.year === parts.year\n    && date.month === parts.month\n    && date.day === parts.day\n    && date.hour === parts.hour\n    && date.minute === parts.minute\n    && date.second === parts.second;\n}\n\nexport function toAbsolute(date: CalendarDate | CalendarDateTime, timeZone: string, disambiguation: Disambiguation = 'compatible'): number {\n  let dateTime = toCalendarDateTime(date);\n\n  // Fast path: if the time zone is UTC, use native Date.\n  if (timeZone === 'UTC') {\n    return epochFromDate(dateTime);\n  }\n\n  // Fast path: if the time zone is the local timezone and disambiguation is compatible, use native Date.\n  if (timeZone === getLocalTimeZone() && disambiguation === 'compatible') {\n    dateTime = toCalendar(dateTime, new GregorianCalendar());\n\n    // Don't use Date constructor here because two-digit years are interpreted in the 20th century.\n    let date = new Date();\n    let year = getExtendedYear(dateTime.era, dateTime.year);\n    date.setFullYear(year, dateTime.month - 1, dateTime.day);\n    date.setHours(dateTime.hour, dateTime.minute, dateTime.second, dateTime.millisecond);\n    return date.getTime();\n  }\n\n  let ms = epochFromDate(dateTime);\n  let offsetBefore = getTimeZoneOffset(ms - DAYMILLIS, timeZone);\n  let offsetAfter = getTimeZoneOffset(ms + DAYMILLIS, timeZone);\n  let valid = getValidWallTimes(dateTime, timeZone, ms - offsetBefore, ms - offsetAfter);\n\n  if (valid.length === 1) {\n    return valid[0];\n  }\n\n  if (valid.length > 1) {\n    switch (disambiguation) {\n      // 'compatible' means 'earlier' for \"fall back\" transitions\n      case 'compatible':\n      case 'earlier':\n        return valid[0];\n      case 'later':\n        return valid[valid.length - 1];\n      case 'reject':\n        throw new RangeError('Multiple possible absolute times found');\n    }\n  }\n\n  switch (disambiguation) {\n    case 'earlier':\n      return Math.min(ms - offsetBefore, ms - offsetAfter);\n    // 'compatible' means 'later' for \"spring forward\" transitions\n    case 'compatible':\n    case 'later':\n      return Math.max(ms - offsetBefore, ms - offsetAfter);\n    case 'reject':\n      throw new RangeError('No such absolute time found');\n  }\n}\n\nexport function toDate(dateTime: CalendarDate | CalendarDateTime, timeZone: string, disambiguation: Disambiguation = 'compatible'): Date {\n  return new Date(toAbsolute(dateTime, timeZone, disambiguation));\n}\n\n/**\n * Takes a Unix epoch (milliseconds since 1970) and converts it to the provided time zone.\n */\nexport function fromAbsolute(ms: number, timeZone: string): ZonedDateTime {\n  let offset = getTimeZoneOffset(ms, timeZone);\n  let date = new Date(ms + offset);\n  let year = date.getUTCFullYear();\n  let month = date.getUTCMonth() + 1;\n  let day = date.getUTCDate();\n  let hour = date.getUTCHours();\n  let minute = date.getUTCMinutes();\n  let second = date.getUTCSeconds();\n  let millisecond = date.getUTCMilliseconds();\n\n  return new ZonedDateTime(year < 1 ? 'BC' : 'AD', year < 1 ? -year + 1 : year, month, day, timeZone, offset, hour, minute, second, millisecond);\n}\n\n/**\n * Takes a `Date` object and converts it to the provided time zone.\n */\nexport function fromDate(date: Date, timeZone: string): ZonedDateTime {\n  return fromAbsolute(date.getTime(), timeZone);\n}\n\nexport function fromDateToLocal(date: Date): ZonedDateTime {\n  return fromDate(date, getLocalTimeZone());\n}\n\n/** Converts a value with date components such as a `CalendarDateTime` or `ZonedDateTime` into a `CalendarDate`. */\nexport function toCalendarDate(dateTime: AnyCalendarDate): CalendarDate {\n  return new CalendarDate(dateTime.calendar, dateTime.era, dateTime.year, dateTime.month, dateTime.day);\n}\n\nexport function toDateFields(date: AnyCalendarDate): DateFields {\n  return {\n    era: date.era,\n    year: date.year,\n    month: date.month,\n    day: date.day\n  };\n}\n\nexport function toTimeFields(date: AnyTime): TimeFields {\n  return {\n    hour: date.hour,\n    minute: date.minute,\n    second: date.second,\n    millisecond: date.millisecond\n  };\n}\n\n/**\n * Converts a date value to a `CalendarDateTime`. An optional `Time` value can be passed to set the time\n * of the resulting value, otherwise it will default to midnight.\n */\nexport function toCalendarDateTime(date: CalendarDate | CalendarDateTime | ZonedDateTime, time?: AnyTime): CalendarDateTime {\n  let hour = 0, minute = 0, second = 0, millisecond = 0;\n  if ('timeZone' in date) {\n    ({hour, minute, second, millisecond} = date);\n  } else if ('hour' in date && !time) {\n    return date;\n  }\n\n  if (time) {\n    ({hour, minute, second, millisecond} = time);\n  }\n\n  return new CalendarDateTime(\n    date.calendar,\n    date.era,\n    date.year,\n    date.month,\n    date.day,\n    hour,\n    minute,\n    second,\n    millisecond\n  );\n}\n\n/** Extracts the time components from a value containing a date and time. */\nexport function toTime(dateTime: CalendarDateTime | ZonedDateTime): Time {\n  return new Time(dateTime.hour, dateTime.minute, dateTime.second, dateTime.millisecond);\n}\n\n/** Converts a date from one calendar system to another. */\nexport function toCalendar<T extends AnyCalendarDate>(date: T, calendar: Calendar): T {\n  if (isEqualCalendar(date.calendar, calendar)) {\n    return date;\n  }\n\n  let calendarDate = calendar.fromJulianDay(date.calendar.toJulianDay(date));\n  let copy: Mutable<T> = date.copy();\n  copy.calendar = calendar;\n  copy.era = calendarDate.era;\n  copy.year = calendarDate.year;\n  copy.month = calendarDate.month;\n  copy.day = calendarDate.day;\n  constrain(copy);\n  return copy;\n}\n\n/**\n * Converts a date value to a `ZonedDateTime` in the provided time zone. The `disambiguation` option can be set\n * to control how values that fall on daylight saving time changes are interpreted.\n */\nexport function toZoned(date: CalendarDate | CalendarDateTime | ZonedDateTime, timeZone: string, disambiguation?: Disambiguation): ZonedDateTime {\n  if (date instanceof ZonedDateTime) {\n    if (date.timeZone === timeZone) {\n      return date;\n    }\n\n    return toTimeZone(date, timeZone);\n  }\n\n  let ms = toAbsolute(date, timeZone, disambiguation);\n  return fromAbsolute(ms, timeZone);\n}\n\nexport function zonedToDate(date: ZonedDateTime): Date {\n  let ms = epochFromDate(date) - date.offset;\n  return new Date(ms);\n}\n\n/** Converts a `ZonedDateTime` from one time zone to another. */\nexport function toTimeZone(date: ZonedDateTime, timeZone: string): ZonedDateTime {\n  let ms = epochFromDate(date) - date.offset;\n  return toCalendar(fromAbsolute(ms, timeZone), date.calendar);\n}\n\n/** Converts the given `ZonedDateTime` into the user's local time zone. */\nexport function toLocalTimeZone(date: ZonedDateTime): ZonedDateTime {\n  return toTimeZone(date, getLocalTimeZone());\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AnyCalendarDate, AnyDateTime, AnyTime, CycleOptions, CycleTimeOptions, DateDuration, DateField, DateFields, DateTimeDuration, Disambiguation, TimeDuration, TimeField, TimeFields} from './types';\nimport {CalendarDate, CalendarDateTime, Time, ZonedDateTime} from './CalendarDate';\nimport {epochFromDate, fromAbsolute, toAbsolute, toCalendar, toCalendarDateTime} from './conversion';\nimport {GregorianCalendar} from './calendars/GregorianCalendar';\nimport {Mutable} from './utils';\n\nconst ONE_HOUR = 3600000;\n\nexport function add(date: CalendarDateTime, duration: DateTimeDuration): CalendarDateTime;\nexport function add(date: CalendarDate, duration: DateDuration): CalendarDate;\nexport function add(date: CalendarDate | CalendarDateTime, duration: DateTimeDuration): CalendarDate | CalendarDateTime;\nexport function add(date: CalendarDate | CalendarDateTime, duration: DateTimeDuration): Mutable<AnyCalendarDate | AnyDateTime> {\n  let mutableDate: Mutable<AnyCalendarDate | AnyDateTime> = date.copy();\n  let days = 'hour' in mutableDate ? addTimeFields(mutableDate, duration) : 0;\n\n  addYears(mutableDate, duration.years || 0);\n  if (mutableDate.calendar.balanceYearMonth) {\n    mutableDate.calendar.balanceYearMonth(mutableDate, date);\n  }\n\n  mutableDate.month += duration.months || 0;\n\n  balanceYearMonth(mutableDate);\n  constrainMonthDay(mutableDate);\n\n  mutableDate.day += (duration.weeks || 0) * 7;\n  mutableDate.day += duration.days || 0;\n  mutableDate.day += days;\n\n  balanceDay(mutableDate);\n\n  if (mutableDate.calendar.balanceDate) {\n    mutableDate.calendar.balanceDate(mutableDate);\n  }\n\n  // Constrain in case adding ended up with a date outside the valid range for the calendar system.\n  // The behavior here is slightly different than when constraining in the `set` function in that\n  // we adjust smaller fields to their minimum/maximum values rather than constraining each field\n  // individually. This matches the general behavior of `add` vs `set` regarding how fields are balanced.\n  if (mutableDate.year < 1) {\n    mutableDate.year = 1;\n    mutableDate.month = 1;\n    mutableDate.day = 1;\n  }\n\n  let maxYear = mutableDate.calendar.getYearsInEra(mutableDate);\n  if (mutableDate.year > maxYear) {\n    let isInverseEra = mutableDate.calendar.isInverseEra?.(mutableDate);\n    mutableDate.year = maxYear;\n    mutableDate.month = isInverseEra ? 1 : mutableDate.calendar.getMonthsInYear(mutableDate);\n    mutableDate.day = isInverseEra ? 1 : mutableDate.calendar.getDaysInMonth(mutableDate);\n  }\n\n  if (mutableDate.month < 1) {\n    mutableDate.month = 1;\n    mutableDate.day = 1;\n  }\n\n  let maxMonth = mutableDate.calendar.getMonthsInYear(mutableDate);\n  if (mutableDate.month > maxMonth) {\n    mutableDate.month = maxMonth;\n    mutableDate.day = mutableDate.calendar.getDaysInMonth(mutableDate);\n  }\n\n  mutableDate.day = Math.max(1, Math.min(mutableDate.calendar.getDaysInMonth(mutableDate), mutableDate.day));\n  return mutableDate;\n}\n\nfunction addYears(date: Mutable<AnyCalendarDate>, years: number) {\n  if (date.calendar.isInverseEra?.(date)) {\n    years = -years;\n  }\n\n  date.year += years;\n}\n\nfunction balanceYearMonth(date: Mutable<AnyCalendarDate>) {\n  while (date.month < 1) {\n    addYears(date, -1);\n    date.month += date.calendar.getMonthsInYear(date);\n  }\n\n  let monthsInYear = 0;\n  while (date.month > (monthsInYear = date.calendar.getMonthsInYear(date))) {\n    date.month -= monthsInYear;\n    addYears(date, 1);\n  }\n}\n\nfunction balanceDay(date: Mutable<AnyCalendarDate>) {\n  while (date.day < 1) {\n    date.month--;\n    balanceYearMonth(date);\n    date.day += date.calendar.getDaysInMonth(date);\n  }\n\n  while (date.day > date.calendar.getDaysInMonth(date)) {\n    date.day -= date.calendar.getDaysInMonth(date);\n    date.month++;\n    balanceYearMonth(date);\n  }\n}\n\nfunction constrainMonthDay(date: Mutable<AnyCalendarDate>) {\n  date.month = Math.max(1, Math.min(date.calendar.getMonthsInYear(date), date.month));\n  date.day = Math.max(1, Math.min(date.calendar.getDaysInMonth(date), date.day));\n}\n\nexport function constrain(date: Mutable<AnyCalendarDate>): void {\n  if (date.calendar.constrainDate) {\n    date.calendar.constrainDate(date);\n  }\n\n  date.year = Math.max(1, Math.min(date.calendar.getYearsInEra(date), date.year));\n  constrainMonthDay(date);\n}\n\nexport function invertDuration(duration: DateTimeDuration): DateTimeDuration {\n  let inverseDuration = {};\n  for (let key in duration) {\n    if (typeof duration[key] === 'number') {\n      inverseDuration[key] = -duration[key];\n    }\n  }\n\n  return inverseDuration;\n}\n\nexport function subtract(date: CalendarDateTime, duration: DateTimeDuration): CalendarDateTime;\nexport function subtract(date: CalendarDate, duration: DateDuration): CalendarDate;\nexport function subtract(date: CalendarDate | CalendarDateTime, duration: DateTimeDuration): CalendarDate | CalendarDateTime {\n  return add(date, invertDuration(duration));\n}\n\nexport function set(date: CalendarDateTime, fields: DateFields): CalendarDateTime;\nexport function set(date: CalendarDate, fields: DateFields): CalendarDate;\nexport function set(date: CalendarDate | CalendarDateTime, fields: DateFields): Mutable<AnyCalendarDate> {\n  let mutableDate: Mutable<AnyCalendarDate> = date.copy();\n\n  if (fields.era != null) {\n    mutableDate.era = fields.era;\n  }\n\n  if (fields.year != null) {\n    mutableDate.year = fields.year;\n  }\n\n  if (fields.month != null) {\n    mutableDate.month = fields.month;\n  }\n\n  if (fields.day != null) {\n    mutableDate.day = fields.day;\n  }\n\n  constrain(mutableDate);\n  return mutableDate;\n}\n\nexport function setTime(value: CalendarDateTime, fields: TimeFields): CalendarDateTime;\nexport function setTime(value: Time, fields: TimeFields): Time;\nexport function setTime(value: Time | CalendarDateTime, fields: TimeFields): Mutable<Time | CalendarDateTime> {\n  let mutableValue: Mutable<Time | CalendarDateTime> = value.copy();\n\n  if (fields.hour != null) {\n    mutableValue.hour = fields.hour;\n  }\n\n  if (fields.minute != null) {\n    mutableValue.minute = fields.minute;\n  }\n\n  if (fields.second != null) {\n    mutableValue.second = fields.second;\n  }\n\n  if (fields.millisecond != null) {\n    mutableValue.millisecond = fields.millisecond;\n  }\n\n  constrainTime(mutableValue);\n  return mutableValue;\n}\n\nfunction balanceTime(time: Mutable<AnyTime>): number {\n  time.second += Math.floor(time.millisecond / 1000);\n  time.millisecond = nonNegativeMod(time.millisecond, 1000);\n\n  time.minute += Math.floor(time.second / 60);\n  time.second = nonNegativeMod(time.second, 60);\n\n  time.hour += Math.floor(time.minute / 60);\n  time.minute = nonNegativeMod(time.minute, 60);\n\n  let days = Math.floor(time.hour / 24);\n  time.hour = nonNegativeMod(time.hour, 24);\n\n  return days;\n}\n\nexport function constrainTime(time: Mutable<AnyTime>): void {\n  time.millisecond = Math.max(0, Math.min(time.millisecond, 1000));\n  time.second = Math.max(0, Math.min(time.second, 59));\n  time.minute = Math.max(0, Math.min(time.minute, 59));\n  time.hour = Math.max(0, Math.min(time.hour, 23));\n}\n\nfunction nonNegativeMod(a: number, b: number) {\n  let result = a % b;\n  if (result < 0) {\n    result += b;\n  }\n  return result;\n}\n\nfunction addTimeFields(time: Mutable<AnyTime>, duration: TimeDuration): number {\n  time.hour += duration.hours || 0;\n  time.minute += duration.minutes || 0;\n  time.second += duration.seconds || 0;\n  time.millisecond += duration.milliseconds || 0;\n  return balanceTime(time);\n}\n\nexport function addTime(time: Time, duration: TimeDuration): Time {\n  let res = time.copy();\n  addTimeFields(res, duration);\n  return res;\n}\n\nexport function subtractTime(time: Time, duration: TimeDuration): Time {\n  return addTime(time, invertDuration(duration));\n}\n\nexport function cycleDate(value: CalendarDateTime, field: DateField, amount: number, options?: CycleOptions): CalendarDateTime;\nexport function cycleDate(value: CalendarDate, field: DateField, amount: number, options?: CycleOptions): CalendarDate;\nexport function cycleDate(value: CalendarDate | CalendarDateTime, field: DateField, amount: number, options?: CycleOptions): Mutable<CalendarDate | CalendarDateTime> {\n  let mutable: Mutable<CalendarDate | CalendarDateTime> = value.copy();\n\n  switch (field) {\n    case 'era': {\n      let eras = value.calendar.getEras();\n      let eraIndex = eras.indexOf(value.era);\n      if (eraIndex < 0) {\n        throw new Error('Invalid era: ' + value.era);\n      }\n      eraIndex = cycleValue(eraIndex, amount, 0, eras.length - 1, options?.round);\n      mutable.era = eras[eraIndex];\n\n      // Constrain the year and other fields within the era, so the era doesn't change when we balance below.\n      constrain(mutable);\n      break;\n    }\n    case 'year': {\n      if (mutable.calendar.isInverseEra?.(mutable)) {\n        amount = -amount;\n      }\n\n      // The year field should not cycle within the era as that can cause weird behavior affecting other fields.\n      // We need to also allow values < 1 so that decrementing goes to the previous era. If we get -Infinity back\n      // we know we wrapped around after reaching 9999 (the maximum), so set the year back to 1.\n      mutable.year = cycleValue(value.year, amount, -Infinity, 9999, options?.round);\n      if (mutable.year === -Infinity) {\n        mutable.year = 1;\n      }\n\n      if (mutable.calendar.balanceYearMonth) {\n        mutable.calendar.balanceYearMonth(mutable, value);\n      }\n      break;\n    }\n    case 'month':\n      mutable.month = cycleValue(value.month, amount, 1, value.calendar.getMonthsInYear(value), options?.round);\n      break;\n    case 'day':\n      mutable.day = cycleValue(value.day, amount, 1, value.calendar.getDaysInMonth(value), options?.round);\n      break;\n    default:\n      throw new Error('Unsupported field ' + field);\n  }\n\n  if (value.calendar.balanceDate) {\n    value.calendar.balanceDate(mutable);\n  }\n\n  constrain(mutable);\n  return mutable;\n}\n\nexport function cycleTime(value: CalendarDateTime, field: TimeField, amount: number, options?: CycleTimeOptions): CalendarDateTime;\nexport function cycleTime(value: Time, field: TimeField, amount: number, options?: CycleTimeOptions): Time;\nexport function cycleTime(value: Time | CalendarDateTime, field: TimeField, amount: number, options?: CycleTimeOptions): Mutable<Time | CalendarDateTime> {\n  let mutable: Mutable<Time | CalendarDateTime> = value.copy();\n\n  switch (field) {\n    case 'hour': {\n      let hours = value.hour;\n      let min = 0;\n      let max = 23;\n      if (options?.hourCycle === 12) {\n        let isPM = hours >= 12;\n        min = isPM ? 12 : 0;\n        max = isPM ? 23 : 11;\n      }\n      mutable.hour = cycleValue(hours, amount, min, max, options?.round);\n      break;\n    }\n    case 'minute':\n      mutable.minute = cycleValue(value.minute, amount, 0, 59, options?.round);\n      break;\n    case 'second':\n      mutable.second = cycleValue(value.second, amount, 0, 59, options?.round);\n      break;\n    case 'millisecond':\n      mutable.millisecond = cycleValue(value.millisecond, amount, 0, 999, options?.round);\n      break;\n    default:\n      throw new Error('Unsupported field ' + field);\n  }\n\n  return mutable;\n}\n\nfunction cycleValue(value: number, amount: number, min: number, max: number, round = false) {\n  if (round) {\n    value += Math.sign(amount);\n\n    if (value < min) {\n      value = max;\n    }\n\n    let div = Math.abs(amount);\n    if (amount > 0) {\n      value = Math.ceil(value / div) * div;\n    } else {\n      value = Math.floor(value / div) * div;\n    }\n\n    if (value > max) {\n      value = min;\n    }\n  } else {\n    value += amount;\n    if (value < min) {\n      value = max - (min - value - 1);\n    } else if (value > max) {\n      value = min + (value - max - 1);\n    }\n  }\n\n  return value;\n}\n\nexport function addZoned(dateTime: ZonedDateTime, duration: DateTimeDuration): ZonedDateTime {\n  let ms: number;\n  if ((duration.years != null && duration.years !== 0) || (duration.months != null && duration.months !== 0) || (duration.weeks != null && duration.weeks !== 0) || (duration.days != null && duration.days !== 0)) {\n    let res = add(toCalendarDateTime(dateTime), {\n      years: duration.years,\n      months: duration.months,\n      weeks: duration.weeks,\n      days: duration.days\n    });\n\n    // Changing the date may change the timezone offset, so we need to recompute\n    // using the 'compatible' disambiguation.\n    ms = toAbsolute(res, dateTime.timeZone);\n  } else {\n    // Otherwise, preserve the offset of the original date.\n    ms = epochFromDate(dateTime) - dateTime.offset;\n  }\n\n  // Perform time manipulation in milliseconds rather than on the original time fields to account for DST.\n  // For example, adding one hour during a DST transition may result in the hour field staying the same or\n  // skipping an hour. This results in the offset field changing value instead of the specified field.\n  ms += duration.milliseconds || 0;\n  ms += (duration.seconds || 0) * 1000;\n  ms += (duration.minutes || 0) * 60 * 1000;\n  ms += (duration.hours || 0) * 60 * 60 * 1000;\n\n  let res = fromAbsolute(ms, dateTime.timeZone);\n  return toCalendar(res, dateTime.calendar);\n}\n\nexport function subtractZoned(dateTime: ZonedDateTime, duration: DateTimeDuration): ZonedDateTime {\n  return addZoned(dateTime, invertDuration(duration));\n}\n\nexport function cycleZoned(dateTime: ZonedDateTime, field: DateField | TimeField, amount: number, options?: CycleTimeOptions): ZonedDateTime {\n  // For date fields, we want the time to remain consistent and the UTC offset to potentially change to account for DST changes.\n  // For time fields, we want the time to change by the amount given. This may result in the hour field staying the same, but the UTC\n  // offset changing in the case of a backward DST transition, or skipping an hour in the case of a forward DST transition.\n  switch (field) {\n    case 'hour': {\n      let min = 0;\n      let max = 23;\n      if (options?.hourCycle === 12) {\n        let isPM = dateTime.hour >= 12;\n        min = isPM ? 12 : 0;\n        max = isPM ? 23 : 11;\n      }\n\n      // The minimum and maximum hour may be affected by daylight saving time.\n      // For example, it might jump forward at midnight, and skip 1am.\n      // Or it might end at midnight and repeat the 11pm hour. To handle this, we get\n      // the possible absolute times for the min and max, and find the maximum range\n      // that is within the current day.\n      let plainDateTime = toCalendarDateTime(dateTime);\n      let minDate = toCalendar(setTime(plainDateTime, {hour: min}), new GregorianCalendar());\n      let minAbsolute = [toAbsolute(minDate, dateTime.timeZone, 'earlier'), toAbsolute(minDate, dateTime.timeZone, 'later')]\n        .filter(ms => fromAbsolute(ms, dateTime.timeZone).day === minDate.day)[0];\n\n      let maxDate = toCalendar(setTime(plainDateTime, {hour: max}), new GregorianCalendar());\n      let maxAbsolute = [toAbsolute(maxDate, dateTime.timeZone, 'earlier'), toAbsolute(maxDate, dateTime.timeZone, 'later')]\n        .filter(ms => fromAbsolute(ms, dateTime.timeZone).day === maxDate.day).pop()!;\n\n      // Since hours may repeat, we need to operate on the absolute time in milliseconds.\n      // This is done in hours from the Unix epoch so that cycleValue works correctly,\n      // and then converted back to milliseconds.\n      let ms = epochFromDate(dateTime) - dateTime.offset;\n      let hours = Math.floor(ms / ONE_HOUR);\n      let remainder = ms % ONE_HOUR;\n      ms = cycleValue(\n        hours,\n        amount,\n        Math.floor(minAbsolute / ONE_HOUR),\n        Math.floor(maxAbsolute / ONE_HOUR),\n        options?.round\n      ) * ONE_HOUR + remainder;\n\n      // Now compute the new timezone offset, and convert the absolute time back to local time.\n      return toCalendar(fromAbsolute(ms, dateTime.timeZone), dateTime.calendar);\n    }\n    case 'minute':\n    case 'second':\n    case 'millisecond':\n      // @ts-ignore\n      return cycleTime(dateTime, field, amount, options);\n    case 'era':\n    case 'year':\n    case 'month':\n    case 'day': {\n      let res = cycleDate(toCalendarDateTime(dateTime), field, amount, options);\n      let ms = toAbsolute(res, dateTime.timeZone);\n      return toCalendar(fromAbsolute(ms, dateTime.timeZone), dateTime.calendar);\n    }\n    default:\n      throw new Error('Unsupported field ' + field);\n  }\n}\n\nexport function setZoned(dateTime: ZonedDateTime, fields: DateFields & TimeFields, disambiguation?: Disambiguation): ZonedDateTime {\n  // Set the date/time fields, and recompute the UTC offset to account for DST changes.\n  // We also need to validate by converting back to a local time in case hours are skipped during forward DST transitions.\n  let plainDateTime = toCalendarDateTime(dateTime);\n  let res = setTime(set(plainDateTime, fields), fields);\n\n  // If the resulting plain date time values are equal, return the original time.\n  // We don't want to change the offset when setting the time to the same value.\n  if (res.compare(plainDateTime) === 0) {\n    return dateTime;\n  }\n\n  let ms = toAbsolute(res, dateTime.timeZone, disambiguation);\n  return toCalendar(fromAbsolute(ms, dateTime.timeZone), dateTime.calendar);\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AnyDateTime, DateTimeDuration, Disambiguation} from './types';\nimport {CalendarDate, CalendarDateTime, Time, ZonedDateTime} from './CalendarDate';\nimport {epochFromDate, fromAbsolute, possibleAbsolutes, toAbsolute, toCalendar, toCalendarDateTime, toTimeZone} from './conversion';\nimport {getLocalTimeZone} from './queries';\nimport {GregorianCalendar} from './calendars/GregorianCalendar';\nimport {Mutable} from './utils';\n\nconst TIME_RE = /^(\\d{2})(?::(\\d{2}))?(?::(\\d{2}))?(\\.\\d+)?$/;\nconst DATE_RE = /^([+-]\\d{6}|\\d{4})-(\\d{2})-(\\d{2})$/;\nconst DATE_TIME_RE = /^([+-]\\d{6}|\\d{4})-(\\d{2})-(\\d{2})(?:T(\\d{2}))?(?::(\\d{2}))?(?::(\\d{2}))?(\\.\\d+)?$/;\nconst ZONED_DATE_TIME_RE = /^([+-]\\d{6}|\\d{4})-(\\d{2})-(\\d{2})(?:T(\\d{2}))?(?::(\\d{2}))?(?::(\\d{2}))?(\\.\\d+)?(?:([+-]\\d{2})(?::?(\\d{2}))?)?\\[(.*?)\\]$/;\nconst ABSOLUTE_RE = /^([+-]\\d{6}|\\d{4})-(\\d{2})-(\\d{2})(?:T(\\d{2}))?(?::(\\d{2}))?(?::(\\d{2}))?(\\.\\d+)?(?:(?:([+-]\\d{2})(?::?(\\d{2}))?)|Z)$/;\nconst DATE_TIME_DURATION_RE =\n    /^((?<negative>-)|\\+)?P((?<years>\\d*)Y)?((?<months>\\d*)M)?((?<weeks>\\d*)W)?((?<days>\\d*)D)?((?<time>T)((?<hours>\\d*[.,]?\\d{1,9})H)?((?<minutes>\\d*[.,]?\\d{1,9})M)?((?<seconds>\\d*[.,]?\\d{1,9})S)?)?$/;\nconst requiredDurationTimeGroups = ['hours', 'minutes', 'seconds'];\nconst requiredDurationGroups = ['years', 'months', 'weeks', 'days', ...requiredDurationTimeGroups];\n\n/** Parses an ISO 8601 time string. */\nexport function parseTime(value: string): Time {\n  let m = value.match(TIME_RE);\n  if (!m) {\n    throw new Error('Invalid ISO 8601 time string: ' + value);\n  }\n\n  return new Time(\n    parseNumber(m[1], 0, 23),\n    m[2] ? parseNumber(m[2], 0, 59) : 0,\n    m[3] ? parseNumber(m[3], 0, 59) : 0,\n    m[4] ? parseNumber(m[4], 0, Infinity) * 1000 : 0\n  );\n}\n\n/** Parses an ISO 8601 date string, with no time components. */\nexport function parseDate(value: string): CalendarDate {\n  let m = value.match(DATE_RE);\n  if (!m) {\n    throw new Error('Invalid ISO 8601 date string: ' + value);\n  }\n\n  let date: Mutable<CalendarDate> = new CalendarDate(\n    parseNumber(m[1], 0, 9999),\n    parseNumber(m[2], 1, 12),\n    1\n  );\n\n  date.day = parseNumber(m[3], 1, date.calendar.getDaysInMonth(date));\n  return date as CalendarDate;\n}\n\n/** Parses an ISO 8601 date and time string, with no time zone. */\nexport function parseDateTime(value: string): CalendarDateTime {\n  let m = value.match(DATE_TIME_RE);\n  if (!m) {\n    throw new Error('Invalid ISO 8601 date time string: ' + value);\n  }\n\n  let year = parseNumber(m[1], -9999, 9999);\n  let era = year < 1 ? 'BC' : 'AD';\n\n  let date: Mutable<CalendarDateTime> = new CalendarDateTime(\n    era,\n    year < 1 ? -year + 1 : year,\n    parseNumber(m[2], 1, 12),\n    1,\n    m[4] ? parseNumber(m[4], 0, 23) : 0,\n    m[5] ? parseNumber(m[5], 0, 59) : 0,\n    m[6] ? parseNumber(m[6], 0, 59) : 0,\n    m[7] ? parseNumber(m[7], 0, Infinity) * 1000 : 0\n  );\n\n  date.day = parseNumber(m[3], 0, date.calendar.getDaysInMonth(date));\n  return date as CalendarDateTime;\n}\n\n/**\n * Parses an ISO 8601 date and time string with a time zone extension and optional UTC offset\n * (e.g. \"2021-11-07T00:45[America/Los_Angeles]\" or \"2021-11-07T00:45-07:00[America/Los_Angeles]\").\n * Ambiguous times due to daylight saving time transitions are resolved according to the `disambiguation`\n * parameter.\n */\nexport function parseZonedDateTime(value: string, disambiguation?: Disambiguation): ZonedDateTime {\n  let m = value.match(ZONED_DATE_TIME_RE);\n  if (!m) {\n    throw new Error('Invalid ISO 8601 date time string: ' + value);\n  }\n\n  let year = parseNumber(m[1], -9999, 9999);\n  let era = year < 1 ? 'BC' : 'AD';\n\n  let date: Mutable<ZonedDateTime> = new ZonedDateTime(\n    era,\n    year < 1 ? -year + 1 : year,\n    parseNumber(m[2], 1, 12),\n    1,\n    m[10],\n    0,\n    m[4] ? parseNumber(m[4], 0, 23) : 0,\n    m[5] ? parseNumber(m[5], 0, 59) : 0,\n    m[6] ? parseNumber(m[6], 0, 59) : 0,\n    m[7] ? parseNumber(m[7], 0, Infinity) * 1000 : 0\n  );\n\n  date.day = parseNumber(m[3], 0, date.calendar.getDaysInMonth(date));\n\n  let plainDateTime = toCalendarDateTime(date as ZonedDateTime);\n\n  let ms: number;\n  if (m[8]) {\n    date.offset = parseNumber(m[8], -23, 23) * 60 * 60 * 1000 + parseNumber(m[9] ?? '0', 0, 59) * 60 * 1000;\n    ms = epochFromDate(date as ZonedDateTime) - date.offset;\n\n    // Validate offset against parsed date.\n    let absolutes = possibleAbsolutes(plainDateTime, date.timeZone);\n    if (!absolutes.includes(ms)) {\n      throw new Error(`Offset ${offsetToString(date.offset)} is invalid for ${dateTimeToString(date)} in ${date.timeZone}`);\n    }\n  } else {\n    // Convert to absolute and back to fix invalid times due to DST.\n    ms = toAbsolute(toCalendarDateTime(plainDateTime), date.timeZone, disambiguation);\n  }\n\n  return fromAbsolute(ms, date.timeZone);\n}\n\n/**\n * Parses an ISO 8601 date and time string with a UTC offset (e.g. \"2021-11-07T07:45:00Z\"\n * or \"2021-11-07T07:45:00-07:00\"). The result is converted to the provided time zone.\n */\nexport function parseAbsolute(value: string, timeZone: string): ZonedDateTime {\n  let m = value.match(ABSOLUTE_RE);\n  if (!m) {\n    throw new Error('Invalid ISO 8601 date time string: ' + value);\n  }\n\n  let year = parseNumber(m[1], -9999, 9999);\n  let era = year < 1 ? 'BC' : 'AD';\n\n  let date: Mutable<ZonedDateTime> = new ZonedDateTime(\n    era,\n    year < 1 ? -year + 1 : year,\n    parseNumber(m[2], 1, 12),\n    1,\n    timeZone,\n    0,\n    m[4] ? parseNumber(m[4], 0, 23) : 0,\n    m[5] ? parseNumber(m[5], 0, 59) : 0,\n    m[6] ? parseNumber(m[6], 0, 59) : 0,\n    m[7] ? parseNumber(m[7], 0, Infinity) * 1000 : 0\n  );\n\n  date.day = parseNumber(m[3], 0, date.calendar.getDaysInMonth(date));\n\n  if (m[8]) {\n    date.offset = parseNumber(m[8], -23, 23) * 60 * 60 * 1000 + parseNumber(m[9] ?? '0', 0, 59) * 60 * 1000;\n  }\n\n  return toTimeZone(date as ZonedDateTime, timeZone);\n}\n\n/**\n * Parses an ISO 8601 date and time string with a UTC offset (e.g. \"2021-11-07T07:45:00Z\"\n * or \"2021-11-07T07:45:00-07:00\"). The result is converted to the user's local time zone.\n */\nexport function parseAbsoluteToLocal(value: string): ZonedDateTime {\n  return parseAbsolute(value, getLocalTimeZone());\n}\n\nfunction parseNumber(value: string, min: number, max: number) {\n  let val = Number(value);\n  if (val < min || val > max) {\n    throw new RangeError(`Value out of range: ${min} <= ${val} <= ${max}`);\n  }\n\n  return val;\n}\n\nexport function timeToString(time: Time): string {\n  return `${String(time.hour).padStart(2, '0')}:${String(time.minute).padStart(2, '0')}:${String(time.second).padStart(2, '0')}${time.millisecond ? String(time.millisecond / 1000).slice(1) : ''}`;\n}\n\nexport function dateToString(date: CalendarDate): string {\n  let gregorianDate = toCalendar(date, new GregorianCalendar());\n  let year: string;\n  if (gregorianDate.era === 'BC') {\n    year = gregorianDate.year === 1\n      ? '0000'\n      : '-' + String(Math.abs(1 - gregorianDate.year)).padStart(6, '00');\n  } else {\n    year = String(gregorianDate.year).padStart(4, '0');\n  }\n  return `${year}-${String(gregorianDate.month).padStart(2, '0')}-${String(gregorianDate.day).padStart(2, '0')}`;\n}\n\nexport function dateTimeToString(date: AnyDateTime): string {\n  // @ts-ignore\n  return `${dateToString(date)}T${timeToString(date)}`;\n}\n\nfunction offsetToString(offset: number) {\n  let sign = Math.sign(offset) < 0 ? '-' : '+';\n  offset = Math.abs(offset);\n  let offsetHours = Math.floor(offset / (60 * 60 * 1000));\n  let offsetMinutes = (offset % (60 * 60 * 1000)) / (60 * 1000);\n  return `${sign}${String(offsetHours).padStart(2, '0')}:${String(offsetMinutes).padStart(2, '0')}`;\n}\n\nexport function zonedDateTimeToString(date: ZonedDateTime): string {\n  return `${dateTimeToString(date)}${offsetToString(date.offset)}[${date.timeZone}]`;\n}\n\n/**\n * Parses an ISO 8601 duration string (e.g. \"P3Y6M6W4DT12H30M5S\").\n * @param value An ISO 8601 duration string.\n * @returns A DateTimeDuration object.\n */\nexport function parseDuration(value: string): Required<DateTimeDuration> {\n  const match = value.match(DATE_TIME_DURATION_RE);\n\n  if (!match) {\n    throw new Error(`Invalid ISO 8601 Duration string: ${value}`);\n  }\n\n  const parseDurationGroup = (\n    group: string | undefined,\n    isNegative: boolean\n  ): number => {\n    if (!group) {\n      return 0;\n    }\n    try {\n      const sign = isNegative ? -1 : 1;\n      return sign * Number(group.replace(',', '.'));\n    } catch {\n      throw new Error(`Invalid ISO 8601 Duration string: ${value}`);\n    }\n  };\n\n  const isNegative = !!match.groups?.negative;\n\n  const hasRequiredGroups = requiredDurationGroups.some(group => match.groups?.[group]);\n\n  if (!hasRequiredGroups) {\n    throw new Error(`Invalid ISO 8601 Duration string: ${value}`);\n  }\n\n  const durationStringIncludesTime = match.groups?.time;\n\n  if (durationStringIncludesTime) {\n    const hasRequiredDurationTimeGroups = requiredDurationTimeGroups.some(group => match.groups?.[group]);\n    if (!hasRequiredDurationTimeGroups) {\n      throw new Error(`Invalid ISO 8601 Duration string: ${value}`);\n    }\n  }\n\n  const duration: Mutable<DateTimeDuration> = {\n    years: parseDurationGroup(match.groups?.years, isNegative),\n    months: parseDurationGroup(match.groups?.months, isNegative),\n    weeks: parseDurationGroup(match.groups?.weeks, isNegative),\n    days: parseDurationGroup(match.groups?.days, isNegative),\n    hours: parseDurationGroup(match.groups?.hours, isNegative),\n    minutes: parseDurationGroup(match.groups?.minutes, isNegative),\n    seconds: parseDurationGroup(match.groups?.seconds, isNegative)\n  };\n\n  if (duration.hours !== undefined && ((duration.hours % 1) !== 0) && (duration.minutes || duration.seconds)) {\n    throw new Error(`Invalid ISO 8601 Duration string: ${value} - only the smallest unit can be fractional`);\n  }\n\n  if (duration.minutes !== undefined && ((duration.minutes % 1) !== 0) && duration.seconds) {\n    throw new Error(`Invalid ISO 8601 Duration string: ${value} - only the smallest unit can be fractional`);\n  }\n\n  return duration as Required<DateTimeDuration>;\n}\n", "function _check_private_redeclaration(obj, privateCollection) {\n    if (privateCollection.has(obj)) {\n        throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n    }\n}\nexport { _check_private_redeclaration as _ };\n", "import { _ as _check_private_redeclaration } from \"./_check_private_redeclaration.js\";\n\nfunction _class_private_field_init(obj, privateMap, value) {\n    _check_private_redeclaration(obj, privateMap);\n    privateMap.set(obj, value);\n}\nexport { _class_private_field_init as _ };\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {add, addTime, addZoned, constrain, constrainTime, cycleDate, cycleTime, cycleZoned, set, setTime, setZoned, subtract, subtractTime, subtractZoned} from './manipulation';\nimport {AnyCalendarDate, AnyTime, Calendar, CycleOptions, CycleTimeOptions, DateDuration, DateField, DateFields, DateTimeDuration, Disambiguation, TimeDuration, TimeField, TimeFields} from './types';\nimport {compareDate, compareTime} from './queries';\nimport {dateTimeToString, dateToString, timeToString, zonedDateTimeToString} from './string';\nimport {GregorianCalendar} from './calendars/GregorianCalendar';\nimport {toCalendarDateTime, toDate, toZoned, zonedToDate} from './conversion';\n\nfunction shiftArgs(args: any[]) {\n  let calendar: Calendar = typeof args[0] === 'object'\n    ? args.shift()\n    : new GregorianCalendar();\n\n  let era: string;\n  if (typeof args[0] === 'string') {\n    era = args.shift();\n  } else {\n    let eras = calendar.getEras();\n    era = eras[eras.length - 1];\n  }\n\n  let year = args.shift();\n  let month = args.shift();\n  let day = args.shift();\n\n  return [calendar, era, year, month, day];\n}\n\n/** A CalendarDate represents a date without any time components in a specific calendar system. */\nexport class CalendarDate {\n  // This prevents TypeScript from allowing other types with the same fields to match.\n  // i.e. a ZonedDateTime should not be be passable to a parameter that expects CalendarDate.\n  // If that behavior is desired, use the AnyCalendarDate interface instead.\n  // @ts-ignore\n  #type;\n  /** The calendar system associated with this date, e.g. Gregorian. */\n  public readonly calendar: Calendar;\n  /** The calendar era for this date, e.g. \"BC\" or \"AD\". */\n  public readonly era: string;\n  /** The year of this date within the era. */\n  public readonly year: number;\n  /**\n   * The month number within the year. Note that some calendar systems such as Hebrew\n   * may have a variable number of months per year. Therefore, month numbers may not\n   * always correspond to the same month names in different years.\n   */\n  public readonly month: number;\n  /** The day number within the month. */\n  public readonly day: number;\n\n  constructor(year: number, month: number, day: number);\n  constructor(era: string, year: number, month: number, day: number);\n  constructor(calendar: Calendar, year: number, month: number, day: number);\n  constructor(calendar: Calendar, era: string, year: number, month: number, day: number);\n  constructor(...args: any[]) {\n    let [calendar, era, year, month, day] = shiftArgs(args);\n    this.calendar = calendar;\n    this.era = era;\n    this.year = year;\n    this.month = month;\n    this.day = day;\n\n    constrain(this);\n  }\n\n  /** Returns a copy of this date. */\n  copy(): CalendarDate {\n    if (this.era) {\n      return new CalendarDate(this.calendar, this.era, this.year, this.month, this.day);\n    } else {\n      return new CalendarDate(this.calendar, this.year, this.month, this.day);\n    }\n  }\n\n  /** Returns a new `CalendarDate` with the given duration added to it. */\n  add(duration: DateDuration): CalendarDate {\n    return add(this, duration);\n  }\n\n  /** Returns a new `CalendarDate` with the given duration subtracted from it. */\n  subtract(duration: DateDuration): CalendarDate {\n    return subtract(this, duration);\n  }\n\n  /** Returns a new `CalendarDate` with the given fields set to the provided values. Other fields will be constrained accordingly. */\n  set(fields: DateFields): CalendarDate {\n    return set(this, fields);\n  }\n\n  /**\n   * Returns a new `CalendarDate` with the given field adjusted by a specified amount.\n   * When the resulting value reaches the limits of the field, it wraps around.\n   */\n  cycle(field: DateField, amount: number, options?: CycleOptions): CalendarDate {\n    return cycleDate(this, field, amount, options);\n  }\n\n  /** Converts the date to a native JavaScript Date object, with the time set to midnight in the given time zone. */\n  toDate(timeZone: string): Date {\n    return toDate(this, timeZone);\n  }\n\n  /** Converts the date to an ISO 8601 formatted string. */\n  toString(): string {\n    return dateToString(this);\n  }\n\n  /** Compares this date with another. A negative result indicates that this date is before the given one, and a positive date indicates that it is after. */\n  compare(b: AnyCalendarDate): number {\n    return compareDate(this, b);\n  }\n}\n\n/** A Time represents a clock time without any date components. */\nexport class Time {\n  // This prevents TypeScript from allowing other types with the same fields to match.\n  // @ts-ignore\n  #type;\n  /** The hour, numbered from 0 to 23. */\n  public readonly hour: number;\n  /** The minute in the hour. */\n  public readonly minute: number;\n  /** The second in the minute. */\n  public readonly second: number;\n  /** The millisecond in the second. */\n  public readonly millisecond: number;\n\n  constructor(\n    hour: number = 0,\n    minute: number = 0,\n    second: number = 0,\n    millisecond: number = 0\n  ) {\n    this.hour = hour;\n    this.minute = minute;\n    this.second = second;\n    this.millisecond = millisecond;\n    constrainTime(this);\n  }\n\n  /** Returns a copy of this time. */\n  copy(): Time {\n    return new Time(this.hour, this.minute, this.second, this.millisecond);\n  }\n\n  /** Returns a new `Time` with the given duration added to it. */\n  add(duration: TimeDuration): Time {\n    return addTime(this, duration);\n  }\n\n  /** Returns a new `Time` with the given duration subtracted from it. */\n  subtract(duration: TimeDuration): Time {\n    return subtractTime(this, duration);\n  }\n\n  /** Returns a new `Time` with the given fields set to the provided values. Other fields will be constrained accordingly. */\n  set(fields: TimeFields): Time {\n    return setTime(this, fields);\n  }\n\n  /**\n   * Returns a new `Time` with the given field adjusted by a specified amount.\n   * When the resulting value reaches the limits of the field, it wraps around.\n   */\n  cycle(field: TimeField, amount: number, options?: CycleTimeOptions): Time {\n    return cycleTime(this, field, amount, options);\n  }\n\n  /** Converts the time to an ISO 8601 formatted string. */\n  toString(): string {\n    return timeToString(this);\n  }\n\n  /** Compares this time with another. A negative result indicates that this time is before the given one, and a positive time indicates that it is after. */\n  compare(b: AnyTime): number {\n    return compareTime(this, b);\n  }\n}\n\n/** A CalendarDateTime represents a date and time without a time zone, in a specific calendar system. */\nexport class CalendarDateTime {\n  // This prevents TypeScript from allowing other types with the same fields to match.\n  // @ts-ignore\n  #type;\n  /** The calendar system associated with this date, e.g. Gregorian. */\n  public readonly calendar: Calendar;\n  /** The calendar era for this date, e.g. \"BC\" or \"AD\". */\n  public readonly era: string;\n  /** The year of this date within the era. */\n  public readonly year: number;\n  /**\n   * The month number within the year. Note that some calendar systems such as Hebrew\n   * may have a variable number of months per year. Therefore, month numbers may not\n   * always correspond to the same month names in different years.\n   */\n  public readonly month: number;\n  /** The day number within the month. */\n  public readonly day: number;\n  /** The hour in the day, numbered from 0 to 23. */\n  public readonly hour: number;\n  /** The minute in the hour. */\n  public readonly minute: number;\n  /** The second in the minute. */\n  public readonly second: number;\n  /** The millisecond in the second. */\n  public readonly millisecond: number;\n\n  constructor(year: number, month: number, day: number, hour?: number, minute?: number, second?: number, millisecond?: number);\n  constructor(era: string, year: number, month: number, day: number, hour?: number, minute?: number, second?: number, millisecond?: number);\n  constructor(calendar: Calendar, year: number, month: number, day: number, hour?: number, minute?: number, second?: number, millisecond?: number);\n  constructor(calendar: Calendar, era: string, year: number, month: number, day: number, hour?: number, minute?: number, second?: number, millisecond?: number);\n  constructor(...args: any[]) {\n    let [calendar, era, year, month, day] = shiftArgs(args);\n    this.calendar = calendar;\n    this.era = era;\n    this.year = year;\n    this.month = month;\n    this.day = day;\n    this.hour = args.shift() || 0;\n    this.minute = args.shift() || 0;\n    this.second = args.shift() || 0;\n    this.millisecond = args.shift() || 0;\n\n    constrain(this);\n  }\n\n  /** Returns a copy of this date. */\n  copy(): CalendarDateTime {\n    if (this.era) {\n      return new CalendarDateTime(this.calendar, this.era, this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n    } else {\n      return new CalendarDateTime(this.calendar, this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n    }\n  }\n\n  /** Returns a new `CalendarDateTime` with the given duration added to it. */\n  add(duration: DateTimeDuration): CalendarDateTime {\n    return add(this, duration);\n  }\n\n  /** Returns a new `CalendarDateTime` with the given duration subtracted from it. */\n  subtract(duration: DateTimeDuration): CalendarDateTime {\n    return subtract(this, duration);\n  }\n\n  /** Returns a new `CalendarDateTime` with the given fields set to the provided values. Other fields will be constrained accordingly. */\n  set(fields: DateFields & TimeFields): CalendarDateTime {\n    return set(setTime(this, fields), fields);\n  }\n\n  /**\n   * Returns a new `CalendarDateTime` with the given field adjusted by a specified amount.\n   * When the resulting value reaches the limits of the field, it wraps around.\n   */\n  cycle(field: DateField | TimeField, amount: number, options?: CycleTimeOptions): CalendarDateTime {\n    switch (field) {\n      case 'era':\n      case 'year':\n      case 'month':\n      case 'day':\n        return cycleDate(this, field, amount, options);\n      default:\n        return cycleTime(this, field, amount, options);\n    }\n  }\n\n  /** Converts the date to a native JavaScript Date object in the given time zone. */\n  toDate(timeZone: string, disambiguation?: Disambiguation): Date {\n    return toDate(this, timeZone, disambiguation);\n  }\n\n  /** Converts the date to an ISO 8601 formatted string. */\n  toString(): string {\n    return dateTimeToString(this);\n  }\n\n  /** Compares this date with another. A negative result indicates that this date is before the given one, and a positive date indicates that it is after. */\n  compare(b: CalendarDate | CalendarDateTime | ZonedDateTime): number {\n    let res = compareDate(this, b);\n    if (res === 0) {\n      return compareTime(this, toCalendarDateTime(b));\n    }\n\n    return res;\n  }\n}\n\n/** A ZonedDateTime represents a date and time in a specific time zone and calendar system. */\nexport class ZonedDateTime {\n  // This prevents TypeScript from allowing other types with the same fields to match.\n  // @ts-ignore\n  #type;\n  /** The calendar system associated with this date, e.g. Gregorian. */\n  public readonly calendar: Calendar;\n  /** The calendar era for this date, e.g. \"BC\" or \"AD\". */\n  public readonly era: string;\n  /** The year of this date within the era. */\n  public readonly year: number;\n  /**\n   * The month number within the year. Note that some calendar systems such as Hebrew\n   * may have a variable number of months per year. Therefore, month numbers may not\n   * always correspond to the same month names in different years.\n   */\n  public readonly month: number;\n  /** The day number within the month. */\n  public readonly day: number;\n  /** The hour in the day, numbered from 0 to 23. */\n  public readonly hour: number;\n  /** The minute in the hour. */\n  public readonly minute: number;\n  /** The second in the minute. */\n  public readonly second: number;\n  /** The millisecond in the second. */\n  public readonly millisecond: number;\n  /** The IANA time zone identifier that this date and time is represented in. */\n  public readonly timeZone: string;\n  /** The UTC offset for this time, in milliseconds. */\n  public readonly offset: number;\n\n  constructor(year: number, month: number, day: number, timeZone: string, offset: number, hour?: number, minute?: number, second?: number, millisecond?: number);\n  constructor(era: string, year: number, month: number, day: number, timeZone: string, offset: number, hour?: number, minute?: number, second?: number, millisecond?: number);\n  constructor(calendar: Calendar, year: number, month: number, day: number, timeZone: string, offset: number, hour?: number, minute?: number, second?: number, millisecond?: number);\n  constructor(calendar: Calendar, era: string, year: number, month: number, day: number, timeZone: string, offset: number, hour?: number, minute?: number, second?: number, millisecond?: number);\n  constructor(...args: any[]) {\n    let [calendar, era, year, month, day] = shiftArgs(args);\n    let timeZone = args.shift();\n    let offset = args.shift();\n    this.calendar = calendar;\n    this.era = era;\n    this.year = year;\n    this.month = month;\n    this.day = day;\n    this.timeZone = timeZone;\n    this.offset = offset;\n    this.hour = args.shift() || 0;\n    this.minute = args.shift() || 0;\n    this.second = args.shift() || 0;\n    this.millisecond = args.shift() || 0;\n\n    constrain(this);\n  }\n\n  /** Returns a copy of this date. */\n  copy(): ZonedDateTime {\n    if (this.era) {\n      return new ZonedDateTime(this.calendar, this.era, this.year, this.month, this.day, this.timeZone, this.offset, this.hour, this.minute, this.second, this.millisecond);\n    } else {\n      return new ZonedDateTime(this.calendar, this.year, this.month, this.day, this.timeZone, this.offset, this.hour, this.minute, this.second, this.millisecond);\n    }\n  }\n\n  /** Returns a new `ZonedDateTime` with the given duration added to it. */\n  add(duration: DateTimeDuration): ZonedDateTime {\n    return addZoned(this, duration);\n  }\n\n  /** Returns a new `ZonedDateTime` with the given duration subtracted from it. */\n  subtract(duration: DateTimeDuration): ZonedDateTime {\n    return subtractZoned(this, duration);\n  }\n\n  /** Returns a new `ZonedDateTime` with the given fields set to the provided values. Other fields will be constrained accordingly. */\n  set(fields: DateFields & TimeFields, disambiguation?: Disambiguation): ZonedDateTime {\n    return setZoned(this, fields, disambiguation);\n  }\n\n  /**\n   * Returns a new `ZonedDateTime` with the given field adjusted by a specified amount.\n   * When the resulting value reaches the limits of the field, it wraps around.\n   */\n  cycle(field: DateField | TimeField, amount: number, options?: CycleTimeOptions): ZonedDateTime {\n    return cycleZoned(this, field, amount, options);\n  }\n\n  /** Converts the date to a native JavaScript Date object. */\n  toDate(): Date {\n    return zonedToDate(this);\n  }\n\n   /** Converts the date to an ISO 8601 formatted string, including the UTC offset and time zone identifier. */\n  toString(): string {\n    return zonedDateTimeToString(this);\n  }\n\n   /** Converts the date to an ISO 8601 formatted string in UTC. */\n  toAbsoluteString(): string {\n    return this.toDate().toISOString();\n  }\n\n  /** Compares this date with another. A negative result indicates that this date is before the given one, and a positive date indicates that it is after. */\n  compare(b: CalendarDate | CalendarDateTime | ZonedDateTime): number {\n    // TODO: Is this a bad idea??\n    return this.toDate().getTime() - toZoned(b, this.timeZone).toDate().getTime();\n  }\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from the TC39 Temporal proposal.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nimport {AnyCalendarDate, CalendarIdentifier} from '../types';\nimport {CalendarDate} from '../CalendarDate';\nimport {GregorianCalendar} from './GregorianCalendar';\nimport {Mutable} from '../utils';\n\nconst ERA_START_DATES = [[1868, 9, 8], [1912, 7, 30], [1926, 12, 25], [1989, 1, 8], [2019, 5, 1]];\nconst ERA_END_DATES = [[1912, 7, 29], [1926, 12, 24], [1989, 1, 7], [2019, 4, 30]];\nconst ERA_ADDENDS = [1867, 1911, 1925, 1988, 2018];\nconst ERA_NAMES = ['meiji', 'taisho', 'showa', 'heisei', 'reiwa'];\n\nfunction findEraFromGregorianDate(date: AnyCalendarDate) {\n  const idx = ERA_START_DATES.findIndex(([year, month, day]) => {\n    if (date.year < year) {\n      return true;\n    }\n\n    if (date.year === year && date.month < month) {\n      return true;\n    }\n\n    if (date.year === year && date.month === month && date.day < day) {\n      return true;\n    }\n\n    return false;\n  });\n\n  if (idx === -1) {\n    return ERA_START_DATES.length - 1;\n  }\n\n  if (idx === 0) {\n    return 0;\n  }\n\n  return idx - 1;\n}\n\nfunction toGregorian(date: AnyCalendarDate) {\n  let eraAddend = ERA_ADDENDS[ERA_NAMES.indexOf(date.era)];\n  if (!eraAddend) {\n    throw new Error('Unknown era: ' + date.era);\n  }\n\n  return new CalendarDate(\n    date.year + eraAddend,\n    date.month,\n    date.day\n  );\n}\n\n/**\n * The Japanese calendar is based on the Gregorian calendar, but with eras for the reign of each Japanese emperor.\n * Whenever a new emperor ascends to the throne, a new era begins and the year starts again from 1.\n * Note that eras before 1868 (Gregorian) are not currently supported by this implementation.\n */\nexport class JapaneseCalendar extends GregorianCalendar {\n  identifier: CalendarIdentifier = 'japanese';\n\n  fromJulianDay(jd: number): CalendarDate {\n    let date = super.fromJulianDay(jd);\n    let era = findEraFromGregorianDate(date);\n\n    return new CalendarDate(\n      this,\n      ERA_NAMES[era],\n      date.year - ERA_ADDENDS[era],\n      date.month,\n      date.day\n    );\n  }\n\n  toJulianDay(date: AnyCalendarDate): number {\n    return super.toJulianDay(toGregorian(date));\n  }\n\n  balanceDate(date: Mutable<AnyCalendarDate>): void {\n    let gregorianDate = toGregorian(date);\n    let era = findEraFromGregorianDate(gregorianDate);\n\n    if (ERA_NAMES[era] !== date.era) {\n      date.era = ERA_NAMES[era];\n      date.year = gregorianDate.year - ERA_ADDENDS[era];\n    }\n\n    // Constrain in case we went before the first supported era.\n    this.constrainDate(date);\n  }\n\n  constrainDate(date: Mutable<AnyCalendarDate>): void {\n    let idx = ERA_NAMES.indexOf(date.era);\n    let end = ERA_END_DATES[idx];\n    if (end != null) {\n      let [endYear, endMonth, endDay] = end;\n\n      // Constrain the year to the maximum possible value in the era.\n      // Then constrain the month and day fields within that.\n      let maxYear = endYear - ERA_ADDENDS[idx];\n      date.year = Math.max(1, Math.min(maxYear, date.year));\n      if (date.year === maxYear) {\n        date.month = Math.min(endMonth, date.month);\n\n        if (date.month === endMonth) {\n          date.day = Math.min(endDay, date.day);\n        }\n      }\n    }\n\n    if (date.year === 1 && idx >= 0) {\n      let [, startMonth, startDay] = ERA_START_DATES[idx];\n      date.month = Math.max(startMonth, date.month);\n\n      if (date.month === startMonth) {\n        date.day = Math.max(startDay, date.day);\n      }\n    }\n  }\n\n  getEras(): string[] {\n    return ERA_NAMES;\n  }\n\n  getYearsInEra(date: AnyCalendarDate): number {\n    // Get the number of years in the era, taking into account the date's month and day fields.\n    let era = ERA_NAMES.indexOf(date.era);\n    let cur = ERA_START_DATES[era];\n    let next = ERA_START_DATES[era + 1];\n    if (next == null) {\n      // 9999 gregorian is the maximum year allowed.\n      return 9999 - cur[0] + 1;\n    }\n\n    let years = next[0] - cur[0];\n\n    if (date.month < next[1] || (date.month === next[1] && date.day < next[2])) {\n      years++;\n    }\n\n    return years;\n  }\n\n  getDaysInMonth(date: AnyCalendarDate): number {\n    return super.getDaysInMonth(toGregorian(date));\n  }\n\n  getMinimumMonthInYear(date: AnyCalendarDate): number {\n    let start = getMinimums(date);\n    return start ? start[1] : 1;\n  }\n\n  getMinimumDayInMonth(date: AnyCalendarDate): number {\n    let start = getMinimums(date);\n    return start && date.month === start[1] ? start[2] : 1;\n  }\n}\n\nfunction getMinimums(date: AnyCalendarDate) {\n  if (date.year === 1) {\n    let idx = ERA_NAMES.indexOf(date.era);\n    return ERA_START_DATES[idx];\n  }\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nimport {AnyCalendarDate, CalendarIdentifier} from '../types';\nimport {CalendarDate} from '../CalendarDate';\nimport {fromExtendedYear, getExtendedYear, GregorianCalendar} from './GregorianCalendar';\n\nconst BUDDHIST_ERA_START = -543;\n\n/**\n * The Buddhist calendar is the same as the Gregorian calendar, but counts years\n * starting from the birth of Buddha in 543 BC (Gregorian). It supports only one\n * era, identified as 'BE'.\n */\nexport class BuddhistCalendar extends GregorianCalendar {\n  identifier: CalendarIdentifier = 'buddhist';\n\n  fromJulianDay(jd: number): CalendarDate {\n    let gregorianDate = super.fromJulianDay(jd);\n    let year = getExtendedYear(gregorianDate.era, gregorianDate.year);\n    return new CalendarDate(\n      this,\n      year - BUDDHIST_ERA_START,\n      gregorianDate.month,\n      gregorianDate.day\n    );\n  }\n\n  toJulianDay(date: AnyCalendarDate): number {\n    return super.toJulianDay(toGregorian(date));\n  }\n\n  getEras(): string[] {\n    return ['BE'];\n  }\n\n  getDaysInMonth(date: AnyCalendarDate): number {\n    return super.getDaysInMonth(toGregorian(date));\n  }\n\n  balanceDate(): void {}\n}\n\nfunction toGregorian(date: AnyCalendarDate) {\n  let [era, year] = fromExtendedYear(date.year + BUDDHIST_ERA_START);\n  return new CalendarDate(\n    era,\n    year,\n    date.month,\n    date.day\n  );\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nimport {AnyCalendarDate, CalendarIdentifier} from '../types';\nimport {CalendarDate} from '../CalendarDate';\nimport {fromExtendedYear, getExtendedYear, GregorianCalendar} from './GregorianCalendar';\nimport {Mutable} from '../utils';\n\nconst TAIWAN_ERA_START = 1911;\n\nfunction gregorianYear(date: AnyCalendarDate) {\n  return date.era === 'minguo'\n    ? date.year + TAIWAN_ERA_START\n    : 1 - date.year + TAIWAN_ERA_START;\n}\n\nfunction gregorianToTaiwan(year: number): [string, number] {\n  let y = year - TAIWAN_ERA_START;\n  if (y > 0) {\n    return ['minguo', y];\n  } else {\n    return ['before_minguo', 1 - y];\n  }\n}\n\n/**\n * The Taiwanese calendar is the same as the Gregorian calendar, but years\n * are numbered starting from 1912 (Gregorian). Two eras are supported:\n * 'before_minguo' and 'minguo'.\n */\nexport class TaiwanCalendar extends GregorianCalendar {\n  identifier: CalendarIdentifier = 'roc'; // Republic of China\n\n  fromJulianDay(jd: number): CalendarDate {\n    let date = super.fromJulianDay(jd);\n    let extendedYear = getExtendedYear(date.era, date.year);\n    let [era, year] = gregorianToTaiwan(extendedYear);\n    return new CalendarDate(this, era, year, date.month, date.day);\n  }\n\n  toJulianDay(date: AnyCalendarDate): number {\n    return super.toJulianDay(toGregorian(date));\n  }\n\n  getEras(): string[] {\n    return ['before_minguo', 'minguo'];\n  }\n\n  balanceDate(date: Mutable<AnyCalendarDate>): void {\n    let [era, year] = gregorianToTaiwan(gregorianYear(date));\n    date.era = era;\n    date.year = year;\n  }\n\n  isInverseEra(date: AnyCalendarDate): boolean {\n    return date.era === 'before_minguo';\n  }\n\n  getDaysInMonth(date: AnyCalendarDate): number {\n    return super.getDaysInMonth(toGregorian(date));\n  }\n\n  getYearsInEra(date: AnyCalendarDate): number {\n    return date.era === 'before_minguo' ? 9999 : 9999 - TAIWAN_ERA_START;\n  }\n}\n\nfunction toGregorian(date: AnyCalendarDate) {\n  let [era, year] = fromExtendedYear(gregorianYear(date));\n  return new CalendarDate(\n    era,\n    year,\n    date.month,\n    date.day\n  );\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nimport {AnyCalendarDate, Calendar, CalendarIdentifier} from '../types';\nimport {CalendarDate} from '../CalendarDate';\nimport {mod} from '../utils';\n\nconst PERSIAN_EPOCH = 1948320;\n\n// Number of days from the start of the year to the start of each month.\nconst MONTH_START = [\n  0, // Farvardin\n  31, // Ordibehesht\n  62, // Khordad\n  93, // Tir\n  124, // Mordad\n  155, // Shahrivar\n  186, // Mehr\n  216, // Aban\n  246, // Azar\n  276, // Dey\n  306, // Bahman\n  336  // Esfand\n];\n\n/**\n * The Persian calendar is the main calendar used in Iran and Afghanistan. It has 12 months\n * in each year, the first 6 of which have 31 days, and the next 5 have 30 days. The 12th month\n * has either 29 or 30 days depending on whether it is a leap year. The Persian year starts\n * around the March equinox.\n */\nexport class PersianCalendar implements Calendar {\n  identifier: CalendarIdentifier = 'persian';\n\n  fromJulianDay(jd: number): CalendarDate {\n    let daysSinceEpoch = jd - PERSIAN_EPOCH;\n    let year = 1 + Math.floor((33 * daysSinceEpoch + 3) / 12053);\n    let farvardin1 = 365 * (year - 1) + Math.floor((8 * year + 21) / 33);\n    let dayOfYear = daysSinceEpoch - farvardin1;\n    let month = dayOfYear < 216\n      ? Math.floor(dayOfYear / 31)\n      : Math.floor((dayOfYear - 6) / 30);\n    let day = dayOfYear - MONTH_START[month] + 1;\n    return new CalendarDate(this, year, month + 1, day);\n  }\n\n  toJulianDay(date: AnyCalendarDate): number {\n    let jd = PERSIAN_EPOCH - 1 + 365 * (date.year - 1) + Math.floor((8 * date.year + 21) / 33);\n    jd += MONTH_START[date.month - 1];\n    jd += date.day;\n    return jd;\n  }\n\n  getMonthsInYear(): number {\n    return 12;\n  }\n\n  getDaysInMonth(date: AnyCalendarDate): number {\n    if (date.month <= 6) {\n      return 31;\n    }\n\n    if (date.month <= 11) {\n      return 30;\n    }\n\n    let isLeapYear = mod(25 * date.year + 11, 33) < 8;\n    return isLeapYear ? 30 : 29;\n  }\n\n  getEras(): string[] {\n    return ['AP'];\n  }\n\n  getYearsInEra(): number {\n    // 9378-10-10 persian is 9999-12-31 gregorian.\n    // Round down to 9377 to set the maximum full year.\n    return 9377;\n  }\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nimport {AnyCalendarDate, CalendarIdentifier} from '../types';\nimport {CalendarDate} from '../CalendarDate';\nimport {fromExtendedYear, GregorianCalendar, gregorianToJulianDay, isLeapYear} from './GregorianCalendar';\n\n// Starts in 78 AD,\nconst INDIAN_ERA_START = 78;\n\n// The Indian year starts 80 days later than the Gregorian year.\nconst INDIAN_YEAR_START = 80;\n\n/**\n * The Indian National Calendar is similar to the Gregorian calendar, but with\n * years numbered since the Saka era in 78 AD (Gregorian). There are 12 months\n * in each year, with either 30 or 31 days. Only one era identifier is supported: 'saka'.\n */\nexport class IndianCalendar extends GregorianCalendar {\n  identifier: CalendarIdentifier = 'indian';\n\n  fromJulianDay(jd: number): CalendarDate {\n    // Gregorian date for Julian day\n    let date = super.fromJulianDay(jd);\n\n    // Year in Saka era\n    let indianYear = date.year - INDIAN_ERA_START;\n\n    // Day number in Gregorian year (starting from 0)\n    let yDay = jd - gregorianToJulianDay(date.era, date.year, 1, 1);\n\n    let leapMonth: number;\n    if (yDay < INDIAN_YEAR_START) {\n      //  Day is at the end of the preceding Saka year\n      indianYear--;\n\n      // Days in leapMonth this year, previous Gregorian year\n      leapMonth = isLeapYear(date.year - 1) ? 31 : 30;\n      yDay += leapMonth + (31 * 5) + (30 * 3) + 10;\n    } else {\n      // Days in leapMonth this year\n      leapMonth = isLeapYear(date.year) ? 31 : 30;\n      yDay -= INDIAN_YEAR_START;\n    }\n\n    let indianMonth: number;\n    let indianDay: number;\n    if (yDay < leapMonth) {\n      indianMonth = 1;\n      indianDay = yDay + 1;\n    } else {\n      let mDay = yDay - leapMonth;\n      if (mDay < (31 * 5)) {\n        indianMonth = Math.floor(mDay / 31) + 2;\n        indianDay = (mDay % 31) + 1;\n      } else {\n        mDay -= 31 * 5;\n        indianMonth = Math.floor(mDay / 30) + 7;\n        indianDay = (mDay % 30) + 1;\n      }\n    }\n\n    return new CalendarDate(this, indianYear, indianMonth, indianDay);\n  }\n\n  toJulianDay(date: AnyCalendarDate): number {\n    let extendedYear = date.year + INDIAN_ERA_START;\n    let [era, year] = fromExtendedYear(extendedYear);\n\n    let leapMonth: number;\n    let jd: number;\n    if (isLeapYear(year)) {\n      leapMonth = 31;\n      jd = gregorianToJulianDay(era, year, 3, 21);\n    } else {\n      leapMonth = 30;\n      jd = gregorianToJulianDay(era, year, 3, 22);\n    }\n\n    if (date.month === 1) {\n      return jd + date.day - 1;\n    }\n\n    jd += leapMonth + Math.min(date.month - 2, 5) * 31;\n\n    if (date.month >= 8) {\n      jd += (date.month - 7) * 30;\n    }\n\n    jd += date.day - 1;\n    return jd;\n  }\n\n  getDaysInMonth(date: AnyCalendarDate): number {\n    if (date.month === 1 && isLeapYear(date.year + INDIAN_ERA_START)) {\n      return 31;\n    }\n\n    if (date.month >= 2 && date.month <= 6) {\n      return 31;\n    }\n\n    return 30;\n  }\n\n  getYearsInEra(): number {\n    // 9999-12-31 gregorian is 9920-10-10 indian.\n    // Round down to 9919 for the last full year.\n    return 9919;\n  }\n\n  getEras(): string[] {\n    return ['saka'];\n  }\n\n  balanceDate(): void {}\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nimport {AnyCalendarDate, Calendar, CalendarIdentifier} from '../types';\nimport {CalendarDate} from '../CalendarDate';\n\nconst CIVIL_EPOC = 1948440; // CE 622 July 16 Friday (Julian calendar) / CE 622 July 19 (Gregorian calendar)\nconst ASTRONOMICAL_EPOC = 1948439; // CE 622 July 15 Thursday (Julian calendar)\nconst UMALQURA_YEAR_START = 1300;\nconst UMALQURA_YEAR_END = 1600;\nconst UMALQURA_START_DAYS = 460322;\n\nfunction islamicToJulianDay(epoch: number, year: number, month: number, day: number): number {\n  return day +\n    Math.ceil(29.5 * (month - 1)) +\n    (year - 1) * 354 +\n    Math.floor((3 + 11 * year) / 30) +\n    epoch - 1;\n}\n\nfunction julianDayToIslamic(calendar: Calendar, epoch: number, jd: number) {\n  let year = Math.floor((30 * (jd - epoch) + 10646) / 10631);\n  let month = Math.min(12, Math.ceil((jd - (29 + islamicToJulianDay(epoch, year, 1, 1))) / 29.5) + 1);\n  let day = jd - islamicToJulianDay(epoch, year, month, 1) + 1;\n\n  return new CalendarDate(calendar, year, month, day);\n}\n\nfunction isLeapYear(year: number): boolean {\n  return (14 + 11 * year) % 30 < 11;\n}\n\n/**\n * The Islamic calendar, also known as the \"Hijri\" calendar, is used throughout much of the Arab world.\n * The civil variant uses simple arithmetic rules rather than astronomical calculations to approximate\n * the traditional calendar, which is based on sighting of the crescent moon. It uses Friday, July 16 622 CE (Julian) as the epoch.\n * Each year has 12 months, with either 354 or 355 days depending on whether it is a leap year.\n * Learn more about the available Islamic calendars [here](https://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types).\n */\nexport class IslamicCivilCalendar implements Calendar {\n  identifier: CalendarIdentifier = 'islamic-civil';\n\n  fromJulianDay(jd: number): CalendarDate {\n    return julianDayToIslamic(this, CIVIL_EPOC, jd);\n  }\n\n  toJulianDay(date: AnyCalendarDate): number {\n    return islamicToJulianDay(CIVIL_EPOC, date.year, date.month, date.day);\n  }\n\n  getDaysInMonth(date: AnyCalendarDate): number {\n    let length = 29 + date.month % 2;\n    if (date.month === 12 && isLeapYear(date.year)) {\n      length++;\n    }\n\n    return length;\n  }\n\n  getMonthsInYear(): number {\n    return 12;\n  }\n\n  getDaysInYear(date: AnyCalendarDate): number {\n    return isLeapYear(date.year) ? 355 : 354;\n  }\n\n  getYearsInEra(): number {\n    // 9999 gregorian\n    return 9665;\n  }\n\n  getEras(): string[] {\n    return ['AH'];\n  }\n}\n\n/**\n * The Islamic calendar, also known as the \"Hijri\" calendar, is used throughout much of the Arab world.\n * The tabular variant uses simple arithmetic rules rather than astronomical calculations to approximate\n * the traditional calendar, which is based on sighting of the crescent moon. It uses Thursday, July 15 622 CE (Julian) as the epoch.\n * Each year has 12 months, with either 354 or 355 days depending on whether it is a leap year.\n * Learn more about the available Islamic calendars [here](https://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types).\n */\nexport class IslamicTabularCalendar extends IslamicCivilCalendar {\n  identifier: CalendarIdentifier = 'islamic-tbla';\n\n  fromJulianDay(jd: number): CalendarDate {\n    return julianDayToIslamic(this, ASTRONOMICAL_EPOC, jd);\n  }\n\n  toJulianDay(date: AnyCalendarDate): number {\n    return islamicToJulianDay(ASTRONOMICAL_EPOC, date.year, date.month, date.day);\n  }\n}\n\n// Generated by scripts/generate-umalqura.js\nconst UMALQURA_DATA = 'qgpUDckO1AbqBmwDrQpVBakGkgepC9QF2gpcBS0NlQZKB1QLagutBa4ETwoXBYsGpQbVCtYCWwmdBE0KJg2VDawFtgm6AlsKKwWVCsoG6Qr0AnYJtgJWCcoKpAvSC9kF3AJtCU0FpQpSC6ULtAW2CVcFlwJLBaMGUgdlC2oFqworBZUMSg2lDcoF1gpXCasESwmlClILagt1BXYCtwhbBFUFqQW0BdoJ3QRuAjYJqgpUDbIN1QXaAlsJqwRVCkkLZAtxC7QFtQpVCiUNkg7JDtQG6QprCasEkwpJDaQNsg25CroEWworBZUKKgtVC1wFvQQ9Ah0JlQpKC1oLbQW2AjsJmwRVBqkGVAdqC2wFrQpVBSkLkgupC9QF2gpaBasKlQVJB2QHqgu1BbYCVgpNDiULUgtqC60FrgIvCZcESwalBqwG1gpdBZ0ETQoWDZUNqgW1BdoCWwmtBJUFygbkBuoK9QS2AlYJqgpUC9IL2QXqAm0JrQSVCkoLpQuyBbUJ1gSXCkcFkwZJB1ULagVrCisFiwpGDaMNygXWCtsEawJLCaUKUgtpC3UFdgG3CFsCKwVlBbQF2gntBG0BtgimClINqQ3UBdoKWwmrBFMGKQdiB6kLsgW1ClUFJQuSDckO0gbpCmsFqwRVCikNVA2qDbUJugQ7CpsETQqqCtUK2gJdCV4ELgqaDFUNsga5BroEXQotBZUKUguoC7QLuQXaAloJSgukDdEO6AZqC20FNQWVBkoNqA3UDdoGWwWdAisGFQtKC5ULqgWuCi4JjwwnBZUGqgbWCl0FnQI=';\nlet UMALQURA_MONTHLENGTH: Uint16Array;\nlet UMALQURA_YEAR_START_TABLE: Uint32Array;\n\nfunction umalquraYearStart(year: number): number {\n  return UMALQURA_START_DAYS + UMALQURA_YEAR_START_TABLE[year - UMALQURA_YEAR_START];\n}\n\nfunction umalquraMonthLength(year: number, month: number): number {\n  let idx = (year - UMALQURA_YEAR_START);\n  let mask = (0x01 << (11 - (month - 1)));\n  if ((UMALQURA_MONTHLENGTH[idx] & mask) === 0) {\n    return 29;\n  } else {\n    return 30;\n  }\n}\n\nfunction umalquraMonthStart(year: number, month: number): number {\n  let day = umalquraYearStart(year);\n  for (let i = 1; i < month; i++) {\n    day += umalquraMonthLength(year, i);\n  }\n  return day;\n}\n\nfunction umalquraYearLength(year: number): number {\n  return UMALQURA_YEAR_START_TABLE[year + 1 - UMALQURA_YEAR_START] - UMALQURA_YEAR_START_TABLE[year - UMALQURA_YEAR_START];\n}\n\n/**\n * The Islamic calendar, also known as the \"Hijri\" calendar, is used throughout much of the Arab world.\n * The Umalqura variant is primarily used in Saudi Arabia. It is a lunar calendar, based on astronomical\n * calculations that predict the sighting of a crescent moon. Month and year lengths vary between years\n * depending on these calculations.\n * Learn more about the available Islamic calendars [here](https://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types).\n */\nexport class IslamicUmalquraCalendar extends IslamicCivilCalendar {\n  identifier: CalendarIdentifier = 'islamic-umalqura';\n\n  constructor() {\n    super();\n    if (!UMALQURA_MONTHLENGTH) {\n      UMALQURA_MONTHLENGTH = new Uint16Array(Uint8Array.from(atob(UMALQURA_DATA), c => c.charCodeAt(0)).buffer);\n    }\n\n    if (!UMALQURA_YEAR_START_TABLE) {\n      UMALQURA_YEAR_START_TABLE = new Uint32Array(UMALQURA_YEAR_END - UMALQURA_YEAR_START + 1);\n\n      let yearStart = 0;\n      for (let year = UMALQURA_YEAR_START; year <= UMALQURA_YEAR_END; year++) {\n        UMALQURA_YEAR_START_TABLE[year - UMALQURA_YEAR_START] = yearStart;\n        for (let i = 1; i <= 12; i++) {\n          yearStart += umalquraMonthLength(year, i);\n        }\n      }\n    }\n  }\n\n  fromJulianDay(jd: number): CalendarDate {\n    let days = jd - CIVIL_EPOC;\n    let startDays = umalquraYearStart(UMALQURA_YEAR_START);\n    let endDays = umalquraYearStart(UMALQURA_YEAR_END);\n    if (days < startDays || days > endDays) {\n      return super.fromJulianDay(jd);\n    } else {\n      let y = UMALQURA_YEAR_START - 1;\n      let m = 1;\n      let d = 1;\n      while (d > 0) {\n        y++;\n        d = days - umalquraYearStart(y) + 1;\n        let yearLength = umalquraYearLength(y);\n        if (d === yearLength) {\n          m = 12;\n          break;\n        } else if (d < yearLength) {\n          let monthLength = umalquraMonthLength(y, m);\n          m = 1;\n          while (d > monthLength) {\n            d -= monthLength;\n            m++;\n            monthLength = umalquraMonthLength(y, m);\n          }\n          break;\n        }\n      }\n\n      return new CalendarDate(this, y, m, (days - umalquraMonthStart(y, m) + 1));\n    }\n  }\n\n  toJulianDay(date: AnyCalendarDate): number {\n    if (date.year < UMALQURA_YEAR_START || date.year > UMALQURA_YEAR_END) {\n      return super.toJulianDay(date);\n    }\n\n    return CIVIL_EPOC + umalquraMonthStart(date.year, date.month) + (date.day - 1);\n  }\n\n  getDaysInMonth(date: AnyCalendarDate): number {\n    if (date.year < UMALQURA_YEAR_START || date.year > UMALQURA_YEAR_END) {\n      return super.getDaysInMonth(date);\n    }\n\n    return umalquraMonthLength(date.year, date.month);\n  }\n\n  getDaysInYear(date: AnyCalendarDate): number {\n    if (date.year < UMALQURA_YEAR_START || date.year > UMALQURA_YEAR_END) {\n      return super.getDaysInYear(date);\n    }\n\n    return umalquraYearLength(date.year);\n  }\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nimport {AnyCalendarDate, Calendar, CalendarIdentifier} from '../types';\nimport {CalendarDate} from '../CalendarDate';\nimport {mod, Mutable} from '../utils';\n\nconst HEBREW_EPOCH = 347997;\n\n// Hebrew date calculations are performed in terms of days, hours, and\n// \"parts\" (or halakim), which are 1/1080 of an hour, or 3 1/3 seconds.\nconst HOUR_PARTS = 1080;\nconst DAY_PARTS  = 24 * HOUR_PARTS;\n\n// An approximate value for the length of a lunar month.\n// It is used to calculate the approximate year and month of a given\n// absolute date.\nconst MONTH_DAYS = 29;\nconst MONTH_FRACT = 12 * HOUR_PARTS + 793;\nconst MONTH_PARTS = MONTH_DAYS * DAY_PARTS + MONTH_FRACT;\n\nfunction isLeapYear(year: number) {\n  return mod(year * 7 + 1, 19) < 7;\n}\n\n// Test for delay of start of new year and to avoid\n// Sunday, Wednesday, and Friday as start of the new year.\nfunction hebrewDelay1(year: number) {\n  let months = Math.floor((235 * year - 234) / 19);\n  let parts = 12084 + 13753 * months;\n  let day = months * 29 + Math.floor(parts / 25920);\n\n  if (mod(3 * (day + 1), 7) < 3) {\n    day += 1;\n  }\n\n  return day;\n}\n\n// Check for delay in start of new year due to length of adjacent years\nfunction hebrewDelay2(year: number) {\n  let last = hebrewDelay1(year - 1);\n  let present = hebrewDelay1(year);\n  let next = hebrewDelay1(year + 1);\n\n  if (next - present === 356) {\n    return 2;\n  }\n\n  if (present - last === 382) {\n    return 1;\n  }\n\n  return 0;\n}\n\nfunction startOfYear(year: number) {\n  return hebrewDelay1(year) + hebrewDelay2(year);\n}\n\nfunction getDaysInYear(year: number) {\n  return startOfYear(year + 1) - startOfYear(year);\n}\n\nfunction getYearType(year: number) {\n  let yearLength = getDaysInYear(year);\n\n  if (yearLength > 380) {\n    yearLength -= 30; // Subtract length of leap month.\n  }\n\n  switch (yearLength) {\n    case 353:\n      return 0; // deficient\n    case 354:\n      return 1; // normal\n    case 355:\n      return 2; // complete\n  }\n}\n\nfunction getDaysInMonth(year: number, month: number): number {\n  // Normalize month numbers from 1 - 13, even on non-leap years\n  if (month >= 6 && !isLeapYear(year)) {\n    month++;\n  }\n\n  // First of all, dispose of fixed-length 29 day months\n  if (month === 4 || month === 7 || month === 9 || month === 11 || month === 13) {\n    return 29;\n  }\n\n  let yearType = getYearType(year);\n\n  // If it's Heshvan, days depend on length of year\n  if (month === 2) {\n    return yearType === 2 ? 30 : 29;\n  }\n\n  // Similarly, Kislev varies with the length of year\n  if (month === 3) {\n    return yearType === 0 ? 29 : 30;\n  }\n\n  // Adar I only exists in leap years\n  if (month === 6) {\n    return isLeapYear(year) ? 30 : 0;\n  }\n\n  return 30;\n}\n\n/**\n * The Hebrew calendar is used in Israel and around the world by the Jewish faith.\n * Years include either 12 or 13 months depending on whether it is a leap year.\n * In leap years, an extra month is inserted at month 6.\n */\nexport class HebrewCalendar implements Calendar {\n  identifier: CalendarIdentifier = 'hebrew';\n\n  fromJulianDay(jd: number): CalendarDate {\n    let d = jd - HEBREW_EPOCH;\n    let m = (d * DAY_PARTS) / MONTH_PARTS;           // Months (approx)\n    let year = Math.floor((19 * m + 234) / 235) + 1; // Years (approx)\n    let ys = startOfYear(year);                      // 1st day of year\n    let dayOfYear = Math.floor(d - ys);\n\n    // Because of the postponement rules, it's possible to guess wrong.  Fix it.\n    while (dayOfYear < 1) {\n      year--;\n      ys = startOfYear(year);\n      dayOfYear = Math.floor(d - ys);\n    }\n\n    // Now figure out which month we're in, and the date within that month\n    let month = 1;\n    let monthStart = 0;\n    while (monthStart < dayOfYear) {\n      monthStart += getDaysInMonth(year, month);\n      month++;\n    }\n\n    month--;\n    monthStart -= getDaysInMonth(year, month);\n\n    let day = dayOfYear - monthStart;\n    return new CalendarDate(this, year, month, day);\n  }\n\n  toJulianDay(date: AnyCalendarDate): number {\n    let jd = startOfYear(date.year);\n    for (let month = 1; month < date.month; month++) {\n      jd += getDaysInMonth(date.year, month);\n    }\n\n    return jd + date.day + HEBREW_EPOCH;\n  }\n\n  getDaysInMonth(date: AnyCalendarDate): number {\n    return getDaysInMonth(date.year, date.month);\n  }\n\n  getMonthsInYear(date: AnyCalendarDate): number {\n    return isLeapYear(date.year) ? 13 : 12;\n  }\n\n  getDaysInYear(date: AnyCalendarDate): number {\n    return getDaysInYear(date.year);\n  }\n\n  getYearsInEra(): number {\n    // 6239 gregorian\n    return 9999;\n  }\n\n  getEras(): string[] {\n    return ['AM'];\n  }\n\n  balanceYearMonth(date: Mutable<AnyCalendarDate>, previousDate: AnyCalendarDate): void {\n    // Keep date in the same month when switching between leap years and non leap years\n    if (previousDate.year !== date.year) {\n      if (isLeapYear(previousDate.year) && !isLeapYear(date.year) && previousDate.month > 6) {\n        date.month--;\n      } else if (!isLeapYear(previousDate.year) && isLeapYear(date.year) && previousDate.month > 6) {\n        date.month++;\n      }\n    }\n  }\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nimport {AnyCalendarDate, Calendar, CalendarIdentifier} from '../types';\nimport {CalendarDate} from '../CalendarDate';\nimport {Mutable} from '../utils';\n\nconst ETHIOPIC_EPOCH = 1723856;\nconst COPTIC_EPOCH = 1824665;\n\n// The delta between Amete Alem 1 and Amete Mihret 1\n// AA 5501 = AM 1\nconst AMETE_MIHRET_DELTA = 5500;\n\nfunction ceToJulianDay(epoch: number, year: number, month: number, day: number): number {\n  return (\n    epoch                   // difference from Julian epoch to 1,1,1\n    + 365 * year            // number of days from years\n    + Math.floor(year / 4)  // extra day of leap year\n    + 30 * (month - 1)      // number of days from months (1 based)\n    + day - 1               // number of days for present month (1 based)\n  );\n}\n\nfunction julianDayToCE(epoch: number, jd: number) {\n  let year = Math.floor((4 * (jd - epoch)) / 1461);\n  let month = 1 + Math.floor((jd - ceToJulianDay(epoch, year, 1, 1)) / 30);\n  let day = jd + 1 - ceToJulianDay(epoch, year, month, 1);\n  return [year, month, day];\n}\n\nfunction getLeapDay(year: number) {\n  return Math.floor((year % 4) / 3);\n}\n\nfunction getDaysInMonth(year: number, month: number) {\n  // The Ethiopian and Coptic calendars have 13 months, 12 of 30 days each and\n  // an intercalary month at the end of the year of 5 or 6 days, depending whether\n  // the year is a leap year or not. The Leap Year follows the same rules as the\n  // Julian Calendar so that the extra month always has six days in the year before\n  // a Julian Leap Year.\n  if (month % 13 !== 0) {\n    // not intercalary month\n    return 30;\n  } else {\n    // intercalary month 5 days + possible leap day\n    return getLeapDay(year) + 5;\n  }\n}\n\n/**\n * The Ethiopic calendar system is the official calendar used in Ethiopia.\n * It includes 12 months of 30 days each, plus 5 or 6 intercalary days depending\n * on whether it is a leap year. Two eras are supported: 'AA' and 'AM'.\n */\nexport class EthiopicCalendar implements Calendar {\n  identifier: CalendarIdentifier = 'ethiopic';\n\n  fromJulianDay(jd: number): CalendarDate {\n    let [year, month, day] = julianDayToCE(ETHIOPIC_EPOCH, jd);\n    let era = 'AM';\n    if (year <= 0) {\n      era = 'AA';\n      year += AMETE_MIHRET_DELTA;\n    }\n\n    return new CalendarDate(this, era, year, month, day);\n  }\n\n  toJulianDay(date: AnyCalendarDate): number {\n    let year = date.year;\n    if (date.era === 'AA') {\n      year -= AMETE_MIHRET_DELTA;\n    }\n\n    return ceToJulianDay(ETHIOPIC_EPOCH, year, date.month, date.day);\n  }\n\n  getDaysInMonth(date: AnyCalendarDate): number {\n    return getDaysInMonth(date.year, date.month);\n  }\n\n  getMonthsInYear(): number {\n    return 13;\n  }\n\n  getDaysInYear(date: AnyCalendarDate): number {\n    return 365 + getLeapDay(date.year);\n  }\n\n  getYearsInEra(date: AnyCalendarDate): number {\n    // 9999-12-31 gregorian is 9992-20-02 ethiopic.\n    // Round down to 9991 for the last full year.\n    // AA 9999-01-01 ethiopic is 4506-09-30 gregorian.\n    return date.era === 'AA' ? 9999 : 9991;\n  }\n\n  getEras(): string[] {\n    return ['AA', 'AM'];\n  }\n}\n\n/**\n * The Ethiopic (Amete Alem) calendar is the same as the modern Ethiopic calendar,\n * except years were measured from a different epoch. Only one era is supported: 'AA'.\n */\nexport class EthiopicAmeteAlemCalendar extends EthiopicCalendar {\n  identifier: CalendarIdentifier = 'ethioaa'; // also known as 'ethiopic-amete-alem' in ICU\n\n  fromJulianDay(jd: number): CalendarDate {\n    let [year, month, day] = julianDayToCE(ETHIOPIC_EPOCH, jd);\n    year += AMETE_MIHRET_DELTA;\n    return new CalendarDate(this, 'AA', year, month, day);\n  }\n\n  getEras(): string[] {\n    return ['AA'];\n  }\n\n  getYearsInEra(): number {\n    // 9999-13-04 ethioaa is the maximum date, which is equivalent to 4506-09-29 gregorian.\n    return 9999;\n  }\n}\n\n/**\n * The Coptic calendar is similar to the Ethiopic calendar.\n * It includes 12 months of 30 days each, plus 5 or 6 intercalary days depending\n * on whether it is a leap year. Two eras are supported: 'BCE' and 'CE'.\n */\nexport class CopticCalendar extends EthiopicCalendar {\n  identifier: CalendarIdentifier = 'coptic';\n\n  fromJulianDay(jd: number): CalendarDate {\n    let [year, month, day] = julianDayToCE(COPTIC_EPOCH, jd);\n    let era = 'CE';\n    if (year <= 0) {\n      era = 'BCE';\n      year = 1 - year;\n    }\n\n    return new CalendarDate(this, era, year, month, day);\n  }\n\n  toJulianDay(date: AnyCalendarDate): number {\n    let year = date.year;\n    if (date.era === 'BCE') {\n      year = 1 - year;\n    }\n\n    return ceToJulianDay(COPTIC_EPOCH, year, date.month, date.day);\n  }\n\n  getDaysInMonth(date: AnyCalendarDate): number {\n    let year = date.year;\n    if (date.era === 'BCE') {\n      year = 1 - year;\n    }\n\n    return getDaysInMonth(year, date.month);\n  }\n\n  isInverseEra(date: AnyCalendarDate): boolean {\n    return date.era === 'BCE';\n  }\n\n  balanceDate(date: Mutable<AnyCalendarDate>): void {\n    if (date.year <= 0) {\n      date.era = date.era === 'BCE' ? 'CE' : 'BCE';\n      date.year = 1 - date.year;\n    }\n  }\n\n  getEras(): string[] {\n    return ['BCE', 'CE'];\n  }\n\n  getYearsInEra(date: AnyCalendarDate): number {\n    // 9999-12-30 gregorian is 9716-02-20 coptic.\n    // Round down to 9715 for the last full year.\n    // BCE 9999-01-01 coptic is BC 9716-06-15 gregorian.\n    return date.era === 'BCE' ? 9999 : 9715;\n  }\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {BuddhistCalendar} from './calendars/BuddhistCalendar';\nimport {Calendar, CalendarIdentifier} from './types';\nimport {CopticCalendar, EthiopicAmeteAlemCalendar, EthiopicCalendar} from './calendars/EthiopicCalendar';\nimport {GregorianCalendar} from './calendars/GregorianCalendar';\nimport {HebrewCalendar} from './calendars/HebrewCalendar';\nimport {IndianCalendar} from './calendars/IndianCalendar';\nimport {IslamicCivilCalendar, IslamicTabularCalendar, IslamicUmalquraCalendar} from './calendars/IslamicCalendar';\nimport {JapaneseCalendar} from './calendars/JapaneseCalendar';\nimport {PersianCalendar} from './calendars/PersianCalendar';\nimport {TaiwanCalendar} from './calendars/TaiwanCalendar';\n\n/** Creates a `Calendar` instance from a Unicode calendar identifier string. */\nexport function createCalendar(name: CalendarIdentifier): Calendar {\n  switch (name) {\n    case 'buddhist':\n      return new BuddhistCalendar();\n    case 'ethiopic':\n      return new EthiopicCalendar();\n    case 'ethioaa':\n      return new EthiopicAmeteAlemCalendar();\n    case 'coptic':\n      return new CopticCalendar();\n    case 'hebrew':\n      return new HebrewCalendar();\n    case 'indian':\n      return new IndianCalendar();\n    case 'islamic-civil':\n      return new IslamicCivilCalendar();\n    case 'islamic-tbla':\n      return new IslamicTabularCalendar();\n    case 'islamic-umalqura':\n      return new IslamicUmalquraCalendar();\n    case 'japanese':\n      return new JapaneseCalendar();\n    case 'persian':\n      return new PersianCalendar();\n    case 'roc':\n      return new TaiwanCalendar();\n    case 'gregory':\n    default:\n      return new GregorianCalendar();\n  }\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nlet formatterCache = new Map<string, Intl.DateTimeFormat>();\n\ninterface DateRangeFormatPart extends Intl.DateTimeFormatPart {\n  source: 'startRange' | 'endRange' | 'shared'\n}\n\n/** A wrapper around Intl.DateTimeFormat that fixes various browser bugs, and polyfills new features. */\nexport class DateFormatter implements Intl.DateTimeFormat {\n  private formatter: Intl.DateTimeFormat;\n  private options: Intl.DateTimeFormatOptions;\n  private resolvedHourCycle: Intl.DateTimeFormatOptions['hourCycle'];\n\n  constructor(locale: string, options: Intl.DateTimeFormatOptions = {}) {\n    this.formatter = getCachedDateFormatter(locale, options);\n    this.options = options;\n  }\n\n  /** Formats a date as a string according to the locale and format options passed to the constructor. */\n  format(value: Date): string {\n    return this.formatter.format(value);\n  }\n\n  /** Formats a date to an array of parts such as separators, numbers, punctuation, and more. */\n  formatToParts(value: Date): Intl.DateTimeFormatPart[] {\n    return this.formatter.formatToParts(value);\n  }\n\n  /** Formats a date range as a string. */\n  formatRange(start: Date, end: Date): string {\n    // @ts-ignore\n    if (typeof this.formatter.formatRange === 'function') {\n      // @ts-ignore\n      return this.formatter.formatRange(start, end);\n    }\n\n    if (end < start) {\n      throw new RangeError('End date must be >= start date');\n    }\n\n    // Very basic fallback for old browsers.\n    return `${this.formatter.format(start)} – ${this.formatter.format(end)}`;\n  }\n\n  /** Formats a date range as an array of parts. */\n  formatRangeToParts(start: Date, end: Date): DateRangeFormatPart[] {\n    // @ts-ignore\n    if (typeof this.formatter.formatRangeToParts === 'function') {\n      // @ts-ignore\n      return this.formatter.formatRangeToParts(start, end);\n    }\n\n    if (end < start) {\n      throw new RangeError('End date must be >= start date');\n    }\n\n    let startParts = this.formatter.formatToParts(start);\n    let endParts = this.formatter.formatToParts(end);\n    return [\n      ...startParts.map(p => ({...p, source: 'startRange'} as DateRangeFormatPart)),\n      {type: 'literal', value: ' – ', source: 'shared'},\n      ...endParts.map(p => ({...p, source: 'endRange'} as DateRangeFormatPart))\n    ];\n  }\n\n  /** Returns the resolved formatting options based on the values passed to the constructor. */\n  resolvedOptions(): Intl.ResolvedDateTimeFormatOptions {\n    let resolvedOptions = this.formatter.resolvedOptions();\n    if (hasBuggyResolvedHourCycle()) {\n      if (!this.resolvedHourCycle) {\n        this.resolvedHourCycle = getResolvedHourCycle(resolvedOptions.locale, this.options);\n      }\n      resolvedOptions.hourCycle = this.resolvedHourCycle;\n      resolvedOptions.hour12 = this.resolvedHourCycle === 'h11' || this.resolvedHourCycle === 'h12';\n    }\n\n    // Safari uses a different name for the Ethiopic (Amete Alem) calendar.\n    // https://bugs.webkit.org/show_bug.cgi?id=241564\n    if (resolvedOptions.calendar === 'ethiopic-amete-alem') {\n      resolvedOptions.calendar = 'ethioaa';\n    }\n\n    return resolvedOptions;\n  }\n}\n\n// There are multiple bugs involving the hour12 and hourCycle options in various browser engines.\n//   - Chrome [1] (and the ECMA 402 spec [2]) resolve hour12: false in English and other locales to h24 (24:00 - 23:59)\n//     rather than h23 (00:00 - 23:59). Same can happen with hour12: true in French, which Chrome resolves to h11 (00:00 - 11:59)\n//     rather than h12 (12:00 - 11:59).\n//   - WebKit returns an incorrect hourCycle resolved option in the French locale due to incorrect parsing of 'h' literal\n//     in the resolved pattern. It also formats incorrectly when specifying the hourCycle option for the same reason. [3]\n// [1] https://bugs.chromium.org/p/chromium/issues/detail?id=1045791\n// [2] https://github.com/tc39/ecma402/issues/402\n// [3] https://bugs.webkit.org/show_bug.cgi?id=229313\n\n// https://github.com/unicode-org/cldr/blob/018b55eff7ceb389c7e3fc44e2f657eae3b10b38/common/supplemental/supplementalData.xml#L4774-L4802\nconst hour12Preferences = {\n  true: {\n    // Only Japanese uses the h11 style for 12 hour time. All others use h12.\n    ja: 'h11'\n  },\n  false: {\n    // All locales use h23 for 24 hour time. None use h24.\n  }\n};\n\nfunction getCachedDateFormatter(locale: string, options: Intl.DateTimeFormatOptions = {}): Intl.DateTimeFormat {\n  // Work around buggy hour12 behavior in Chrome / ECMA 402 spec by using hourCycle instead.\n  // Only apply the workaround if the issue is detected, because the hourCycle option is buggy in Safari.\n  if (typeof options.hour12 === 'boolean' && hasBuggyHour12Behavior()) {\n    options = {...options};\n    let pref = hour12Preferences[String(options.hour12)][locale.split('-')[0]];\n    let defaultHourCycle = options.hour12 ? 'h12' : 'h23';\n    options.hourCycle = pref ?? defaultHourCycle;\n    delete options.hour12;\n  }\n\n  let cacheKey = locale + (options ? Object.entries(options).sort((a, b) => a[0] < b[0] ? -1 : 1).join() : '');\n  if (formatterCache.has(cacheKey)) {\n    return formatterCache.get(cacheKey)!;\n  }\n\n  let numberFormatter = new Intl.DateTimeFormat(locale, options);\n  formatterCache.set(cacheKey, numberFormatter);\n  return numberFormatter;\n}\n\nlet _hasBuggyHour12Behavior: boolean | null = null;\nfunction hasBuggyHour12Behavior() {\n  if (_hasBuggyHour12Behavior == null) {\n    _hasBuggyHour12Behavior = new Intl.DateTimeFormat('en-US', {\n      hour: 'numeric',\n      hour12: false\n    }).format(new Date(2020, 2, 3, 0)) === '24';\n  }\n\n  return _hasBuggyHour12Behavior;\n}\n\nlet _hasBuggyResolvedHourCycle: boolean | null = null;\nfunction hasBuggyResolvedHourCycle() {\n  if (_hasBuggyResolvedHourCycle == null) {\n    _hasBuggyResolvedHourCycle = new Intl.DateTimeFormat('fr', {\n      hour: 'numeric',\n      hour12: false\n    }).resolvedOptions().hourCycle === 'h12';\n  }\n\n  return _hasBuggyResolvedHourCycle;\n}\n\nfunction getResolvedHourCycle(locale: string, options: Intl.DateTimeFormatOptions) {\n  if (!options.timeStyle && !options.hour) {\n    return undefined;\n  }\n\n  // Work around buggy results in resolved hourCycle and hour12 options in WebKit.\n  // Format the minimum possible hour and maximum possible hour in a day and parse the results.\n  locale = locale.replace(/(-u-)?-nu-[a-zA-Z0-9]+/, '');\n  locale += (locale.includes('-u-') ? '' : '-u') + '-nu-latn';\n  let formatter = getCachedDateFormatter(locale, {\n    ...options,\n    timeZone: undefined // use local timezone\n  });\n\n  let min = parseInt(formatter.formatToParts(new Date(2020, 2, 3, 0)).find(p => p.type === 'hour')!.value, 10);\n  let max = parseInt(formatter.formatToParts(new Date(2020, 2, 3, 23)).find(p => p.type === 'hour')!.value, 10);\n\n  if (min === 0 && max === 23) {\n    return 'h23';\n  }\n\n  if (min === 24 && max === 23) {\n    return 'h24';\n  }\n\n  if (min === 0 && max === 11) {\n    return 'h11';\n  }\n\n  if (min === 12 && max === 11) {\n    return 'h12';\n  }\n\n  throw new Error('Unexpected hour cycle result');\n}\n", "import { Button, CenterChild, IconChevronLeft, IconChevronRight, Popover, Stack } from \"@framerjs/fresco\"\nimport type { AttachmentEdgePreferences } from \"@framerjs/fresco/src/components/Popover\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { type CalendarDateTime, fromDate, toCalendarDateTime } from \"@internationalized/date\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { tabularNumbers } from \"app/styles/typography.styles.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { LoadedScopeNode, RichTextNode } from \"document/models/CanvasTree/index.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { CollectionControlProp } from \"document/models/controlProps/CollectionControlProp.ts\"\nimport type { DateControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport type { RenderId } from \"document/utils/RenderId.ts\"\nimport type { OnPageDateVariableEditTool } from \"editorbar/engine/tools/OnPageDateVariableEditTool.ts\"\nimport { ControlType, type DateControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport { assert } from \"library/utils/assert.ts\"\nimport { useMemo, useState } from \"react\"\nimport {\n\tButton as AriaButton,\n\tCalendar,\n\tCalendarCell,\n\tCalendarGrid,\n\tCalendarGridBody,\n\tCalendarGridHeader,\n\tCalendarHeaderCell,\n\tHeading,\n\tI18nProvider,\n} from \"react-aria-components\"\nimport { DateControlPropRow } from \"../chrome/properties/codeComponentRows/DateControlPropRow.tsx\"\nimport { InlinePopoutNavigation } from \"../chrome/shared/InlinePopoutNavigation.tsx\"\nimport type { DateVariableEditTool } from \"../tools/DateVariableEditTool.ts\"\nimport type { CollectionVariableInfo } from \"../utils/getEditableCollectionVariableInfo.ts\"\nimport { calendar, popover } from \"./DateVariableEditor.styles.ts\"\nimport { useContainerStyle, useNodeRect } from \"./editorUtils.tsx\"\n\nconst popoverAttachmentEdges: AttachmentEdgePreferences = [\"bottom\", \"top\"]\n\ninterface DateVariableEditorProps {\n\ttool: DateVariableEditTool | OnPageDateVariableEditTool\n\tscopeNode: LoadedScopeNode\n\tnode: RichTextNode\n\trenderId: RenderId\n\thidden?: boolean\n\tbackdropEnabled?: boolean\n}\n\nexport function DateVariableEditor({\n\ttool,\n\tscopeNode,\n\tnode,\n\trenderId,\n\thidden,\n\tbackdropEnabled = true,\n}: DateVariableEditorProps) {\n\tconst variableInfo = tool.getVariableInfo()\n\tconst isRequired = variableInfo?.variableDefinition?.required === true\n\n\tconst engine = useBaseEngine()\n\tconst rect = useNodeRect(node, renderId)\n\tconst containerStyle = useContainerStyle({\n\t\tscopeNode,\n\t\tnode,\n\t\trect,\n\t\tzoom: 1,\n\t\tvariant: \"selectionBox\",\n\t\thasValidationWarning: false,\n\t})\n\tconst [nodeOutline, setNodeOutline] = useState<HTMLDivElement | null>(null)\n\n\tconst controlProp = tool.getControlProp()\n\tassert(controlProp, \"Control prop must exist\")\n\n\tconst value = controlProp?.value\n\tassert(!isDynamicValue(value), \"Value must not be a dynamic value\")\n\n\tconst zonedDateTime = value ? fromDate(new Date(value), \"UTC\") : undefined\n\tconst selectedDate = zonedDateTime ? toCalendarDateTime(zonedDateTime) : undefined\n\n\tconst handleDateTimeChange = useEngineCallback(\n\t\t(newControlProp: DateControlProp) => {\n\t\t\tassert(!isDynamicValue(newControlProp.value), \"Value must not be a dynamic value\")\n\t\t\ttool.changeValue(newControlProp.value)\n\t\t},\n\t\t[tool],\n\t)\n\n\tconst handleCustomDateChange = useEngineCallback(\n\t\t(date: CalendarDateTime) => {\n\t\t\ttool.changeValue(date.toDate(\"UTC\").toISOString())\n\t\t\tengine.exitTool()\n\t\t},\n\t\t[tool],\n\t)\n\n\tconst handleClear = useEngineCallback(() => {\n\t\ttool.changeValue(undefined)\n\t\tengine.exitTool()\n\t}, [tool])\n\n\tconst handleClose = () => engine.exitTool()\n\n\tconst nodeOutlineStyle: React.CSSProperties = useMemo(\n\t\t() => ({\n\t\t\twidth: rect.width,\n\t\t\theight: rect.height,\n\t\t\tcursor: \"pointer\",\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\topacity: 0,\n\t\t\tpointerEvents: \"auto\",\n\t\t}),\n\t\t[rect],\n\t)\n\n\tconst displayTime = variableInfo?.variableDefinition.options?.displayTime === true\n\n\treturn (\n\t\t<>\n\t\t\t<div ref={setNodeOutline} style={containerStyle}>\n\t\t\t\t<div style={nodeOutlineStyle} />\n\t\t\t</div>\n\t\t\t<Popover\n\t\t\t\tclassName={popover}\n\t\t\t\tstyle={{ opacity: hidden ? 0 : 1 }}\n\t\t\t\tanchor={nodeOutline}\n\t\t\t\talignSelf=\"center\"\n\t\t\t\tbackdropEnabled={backdropEnabled}\n\t\t\t\tattachTo={popoverAttachmentEdges}\n\t\t\t\toffset={{ x: 0, y: dimensions.values.inputSpacing }}\n\t\t\t\tonClose={handleClose}\n\t\t\t>\n\t\t\t\t{displayTime ? (\n\t\t\t\t\t<DateTimeEditor\n\t\t\t\t\t\tvariableInfo={variableInfo}\n\t\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\t\tonChange={handleDateTimeChange}\n\t\t\t\t\t\tonClose={handleClose}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<CustomCalendar\n\t\t\t\t\t\tonChange={handleCustomDateChange}\n\t\t\t\t\t\tonClear={isRequired ? undefined : handleClear}\n\t\t\t\t\t\tdefaultValue={selectedDate}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</Popover>\n\t\t</>\n\t)\n}\n\ninterface DateTimeEditorProps {\n\tvariableInfo: CollectionVariableInfo<ControlType.Date>\n\tcontrolProp: CollectionControlProp<ControlType.Date>\n\tonChange: (newControlProp: DateControlProp) => void\n\tonClose: VoidFunction\n}\n\nfunction DateTimeEditor({ variableInfo, controlProp, onChange, onClose }: DateTimeEditorProps) {\n\tconst controlDescriptionWithOverriddenTitle = useMemo<DateControlDescription>(() => {\n\t\tassert(variableInfo.controlDescription.type === ControlType.Date, \"Control description must be a date\")\n\t\treturn { ...variableInfo.controlDescription, title: \"Date\" }\n\t}, [variableInfo.controlDescription])\n\n\treturn (\n\t\t<InlinePopoutNavigation displayDivider title={variableInfo.variableDefinition.name} onClose={onClose}>\n\t\t\t<Stack\n\t\t\t\tgap={0}\n\t\t\t\tpaddingTop={dimensions.css.inputSpacing}\n\t\t\t\tpaddingBottom={dimensions.css.inputSpacing}\n\t\t\t\tpaddingLeft={dimensions.css.panelPadding}\n\t\t\t\tpaddingRight={dimensions.css.panelPadding}\n\t\t\t>\n\t\t\t\t<DateControlPropRow\n\t\t\t\t\tcontrolKey={variableInfo.variableDefinition.id}\n\t\t\t\t\tcontrol={controlDescriptionWithOverriddenTitle}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\ttimeRowTitle=\"Time\"\n\t\t\t\t/>\n\t\t\t</Stack>\n\t\t</InlinePopoutNavigation>\n\t)\n}\n\ninterface CustomCalendarProps {\n\tonChange: (date: CalendarDateTime) => void\n\tonClear?: VoidFunction\n\tdefaultValue: CalendarDateTime | undefined\n}\n\nfunction CustomCalendar({ onChange, onClear, defaultValue }: CustomCalendarProps) {\n\treturn (\n\t\t<I18nProvider locale=\"en-EN\">\n\t\t\t<Calendar\n\t\t\t\tclassName={cx(calendar, tabularNumbers)}\n\t\t\t\tonChange={onChange}\n\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\tfirstDayOfWeek=\"mon\"\n\t\t\t>\n\t\t\t\t<header>\n\t\t\t\t\t<AriaButton slot=\"previous\" className=\"calendarButton\">\n\t\t\t\t\t\t<CenterChild>\n\t\t\t\t\t\t\t<IconChevronLeft />\n\t\t\t\t\t\t</CenterChild>\n\t\t\t\t\t</AriaButton>\n\t\t\t\t\t<Heading className=\"calendarHeading\" />\n\t\t\t\t\t<AriaButton slot=\"next\" className=\"calendarButton\">\n\t\t\t\t\t\t<CenterChild>\n\t\t\t\t\t\t\t<IconChevronRight />\n\t\t\t\t\t\t</CenterChild>\n\t\t\t\t\t</AriaButton>\n\t\t\t\t</header>\n\n\t\t\t\t<CalendarGrid className=\"calendarGrid\">\n\t\t\t\t\t<CalendarGridHeader>\n\t\t\t\t\t\t{(day: string) => <CalendarHeaderCell className=\"headerCell\">{day}</CalendarHeaderCell>}\n\t\t\t\t\t</CalendarGridHeader>\n\t\t\t\t\t<CalendarGridBody className=\"calendarGridBody\">\n\t\t\t\t\t\t{date => <CalendarCell date={date} className=\"calendarCell\" />}\n\t\t\t\t\t</CalendarGridBody>\n\t\t\t\t</CalendarGrid>\n\n\t\t\t\t<footer>\n\t\t\t\t\t<Button onClick={onClear} enabled={!!onClear}>\n\t\t\t\t\t\t{Dictionary.Clear}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tonChange(toCalendarDateTime(fromDate(new Date(), \"UTC\")))\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tToday\n\t\t\t\t\t</Button>\n\t\t\t\t</footer>\n\t\t\t</Calendar>\n\t\t</I18nProvider>\n\t)\n}\n", "/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CheckboxProps} from './Checkbox';\nimport {ColorAreaProps} from './ColorArea';\nimport {ColorFieldProps} from './ColorField';\nimport {ColorSliderProps} from './ColorSlider';\nimport {ColorWheelProps} from './ColorWheel';\nimport {ContextValue} from './utils';\nimport {createContext} from 'react';\nimport {HeadingProps} from './Heading';\n\n// This file is a temporary workaround for a tree shaking issue in SWC (the minifier used by Parcel).\n// These are the contexts consumed by React Spectrum components that don't use the implementation from RAC\n// (they use hooks). When included in the same file as the implementation, Parcel includes both the context\n// and implementation even if only the context is imported. We moved these contexts to a separate file so\n// that the implementation does not get included in the bundle. This will be removed once the tree shaking\n// issue is fixed.\nexport const CheckboxContext = createContext<ContextValue<CheckboxProps, HTMLLabelElement>>(null);\nexport const ColorAreaContext = createContext<ContextValue<Partial<ColorAreaProps>, HTMLDivElement>>(null);\nexport const ColorFieldContext = createContext<ContextValue<ColorFieldProps, HTMLDivElement>>(null);\nexport const ColorSliderContext = createContext<ContextValue<Partial<ColorSliderProps>, HTMLDivElement>>(null);\nexport const ColorWheelContext = createContext<ContextValue<Partial<ColorWheelProps>, HTMLDivElement>>(null);\nexport const HeadingContext = createContext<ContextValue<HeadingProps, HTMLHeadingElement>>({});\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport React from 'react';\n\n// During SSR, React emits a warning when calling useLayoutEffect.\n// Since neither useLayoutEffect nor useEffect run on the server,\n// we can suppress this by replace it with a noop on the server.\nexport const useLayoutEffect = typeof document !== 'undefined'\n  ? React.useLayoutEffect\n  : () => {};\n", "/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useRef} from 'react';\nimport {useLayoutEffect} from './useLayoutEffect';\n\nexport function useEffectEvent<T extends Function>(fn?: T): T {\n  const ref = useRef<T | null | undefined>(null);\n  useLayoutEffect(() => {\n    ref.current = fn;\n  }, [fn]);\n  // @ts-ignore\n  return useCallback<T>((...args) => {\n    const f = ref.current!;\n    return f?.(...args);\n  }, []);\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Dispatch, MutableRefObject, useRef, useState} from 'react';\nimport {useEffectEvent, useLayoutEffect} from './';\n\ntype SetValueAction<S> = (prev: S) => Generator<any, void, unknown>;\n\n// This hook works like `useState`, but when setting the value, you pass a generator function\n// that can yield multiple values. Each yielded value updates the state and waits for the next\n// layout effect, then continues the generator. This allows sequential updates to state to be\n// written linearly.\nexport function useValueEffect<S>(defaultValue: S | (() => S)): [S, Dispatch<SetValueAction<S>>] {\n  let [value, setValue] = useState(defaultValue);\n  let effect: MutableRefObject<Generator<S> | null> = useRef<Generator<S> | null>(null);\n\n  // Store the function in a ref so we can always access the current version\n  // which has the proper `value` in scope.\n  let nextRef = useEffectEvent(() => {\n    if (!effect.current) {\n      return;\n    }\n    // Run the generator to the next yield.\n    let newValue = effect.current.next();\n\n    // If the generator is done, reset the effect.\n    if (newValue.done) {\n      effect.current = null;\n      return;\n    }\n\n    // If the value is the same as the current value,\n    // then continue to the next yield. Otherwise,\n    // set the value in state and wait for the next layout effect.\n    if (value === newValue.value) {\n      nextRef();\n    } else {\n      setValue(newValue.value);\n    }\n  });\n\n  useLayoutEffect(() => {\n    // If there is an effect currently running, continue to the next yield.\n    if (effect.current) {\n      nextRef();\n    }\n  });\n\n  let queue = useEffectEvent(fn => {\n    effect.current = fn(value);\n    nextRef();\n  });\n\n  return [value, queue];\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is\n// guarded by a check that it only runs on the client side.\n// eslint-disable-next-line rulesdir/useLayoutEffectRule\nimport React, {JSX, ReactNode, useContext, useLayoutEffect, useMemo, useRef, useState} from 'react';\n\n// To support SSR, the auto incrementing id counter is stored in a context. This allows\n// it to be reset on every request to ensure the client and server are consistent.\n// There is also a prefix string that is used to support async loading components\n// Each async boundary must be wrapped in an SSR provider, which appends to the prefix\n// and resets the current id counter. This ensures that async loaded components have\n// consistent ids regardless of the loading order.\ninterface SSRContextValue {\n  prefix: string,\n  current: number\n}\n\n// Default context value to use in case there is no SSRProvider. This is fine for\n// client-only apps. In order to support multiple copies of React Aria potentially\n// being on the page at once, the prefix is set to a random number. SSRProvider\n// will reset this to zero for consistency between server and client, so in the\n// SSR case multiple copies of React Aria is not supported.\nconst defaultContext: SSRContextValue = {\n  prefix: String(Math.round(Math.random() * 10000000000)),\n  current: 0\n};\n\nconst SSRContext = React.createContext<SSRContextValue>(defaultContext);\nconst IsSSRContext = React.createContext(false);\n\nexport interface SSRProviderProps {\n  /** Your application here. */\n  children: ReactNode\n}\n\n// This is only used in React < 18.\nfunction LegacySSRProvider(props: SSRProviderProps): JSX.Element {\n  let cur = useContext(SSRContext);\n  let counter = useCounter(cur === defaultContext);\n  let [isSSR, setIsSSR] = useState(true);\n  let value: SSRContextValue = useMemo(() => ({\n    // If this is the first SSRProvider, start with an empty string prefix, otherwise\n    // append and increment the counter.\n    prefix: cur === defaultContext ? '' : `${cur.prefix}-${counter}`,\n    current: 0\n  }), [cur, counter]);\n\n  // If on the client, and the component was initially server rendered,\n  // then schedule a layout effect to update the component after hydration.\n  if (typeof document !== 'undefined') {\n    // This if statement technically breaks the rules of hooks, but is safe\n    // because the condition never changes after mounting.\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    useLayoutEffect(() => {\n      setIsSSR(false);\n    }, []);\n  }\n\n  return (\n    <SSRContext.Provider value={value}>\n      <IsSSRContext.Provider value={isSSR}>\n        {props.children}\n      </IsSSRContext.Provider>\n    </SSRContext.Provider>\n  );\n}\n\nlet warnedAboutSSRProvider = false;\n\n/**\n * When using SSR with React Aria in React 16 or 17, applications must be wrapped in an SSRProvider.\n * This ensures that auto generated ids are consistent between the client and server.\n */\nexport function SSRProvider(props: SSRProviderProps): JSX.Element {\n  if (typeof React['useId'] === 'function') {\n    if (process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production' && !warnedAboutSSRProvider) {\n      console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');\n      warnedAboutSSRProvider = true;\n    }\n    return <>{props.children}</>;\n  }\n  return <LegacySSRProvider {...props} />;\n}\n\nlet canUseDOM = Boolean(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n);\n\nlet componentIds = new WeakMap();\n\nfunction useCounter(isDisabled = false) {\n  let ctx = useContext(SSRContext);\n  let ref = useRef<number | null>(null);\n  // eslint-disable-next-line rulesdir/pure-render\n  if (ref.current === null && !isDisabled) {\n    // In strict mode, React renders components twice, and the ref will be reset to null on the second render.\n    // This means our id counter will be incremented twice instead of once. This is a problem because on the\n    // server, components are only rendered once and so ids generated on the server won't match the client.\n    // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this\n    // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.\n    // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.\n    // To ensure that we only increment the global counter once, we store the starting id for this component in\n    // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.\n    // Since React runs the second render immediately after the first, this is safe.\n    // @ts-ignore\n    let currentOwner = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current;\n    if (currentOwner) {\n      let prevComponentValue = componentIds.get(currentOwner);\n      if (prevComponentValue == null) {\n        // On the first render, and first call to useId, store the id and state in our weak map.\n        componentIds.set(currentOwner, {\n          id: ctx.current,\n          state: currentOwner.memoizedState\n        });\n      } else if (currentOwner.memoizedState !== prevComponentValue.state) {\n        // On the second render, the memoizedState gets reset by React.\n        // Reset the counter, and remove from the weak map so we don't\n        // do this for subsequent useId calls.\n        ctx.current = prevComponentValue.id;\n        componentIds.delete(currentOwner);\n      }\n    }\n\n    // eslint-disable-next-line rulesdir/pure-render\n    ref.current = ++ctx.current;\n  }\n\n  // eslint-disable-next-line rulesdir/pure-render\n  return ref.current;\n}\n\nfunction useLegacySSRSafeId(defaultId?: string): string {\n  let ctx = useContext(SSRContext);\n\n  // If we are rendering in a non-DOM environment, and there's no SSRProvider,\n  // provide a warning to hint to the developer to add one.\n  if (ctx === defaultContext && !canUseDOM && process.env.NODE_ENV !== 'production') {\n    console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');\n  }\n\n  let counter = useCounter(!!defaultId);\n  let prefix = ctx === defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;\n  return defaultId || `${prefix}-${counter}`;\n}\n\nfunction useModernSSRSafeId(defaultId?: string): string {\n  let id = React.useId();\n  let [didSSR] = useState(useIsSSR());\n  let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${defaultContext.prefix}`;\n  return defaultId || `${prefix}-${id}`;\n}\n\n// Use React.useId in React 18 if available, otherwise fall back to our old implementation.\n/** @private */\nexport const useSSRSafeId = typeof React['useId'] === 'function' ? useModernSSRSafeId : useLegacySSRSafeId;\n\nfunction getSnapshot() {\n  return false;\n}\n\nfunction getServerSnapshot() {\n  return true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction subscribe(onStoreChange: () => void): () => void {\n  // noop\n  return () => {};\n}\n\n/**\n * Returns whether the component is currently being server side rendered or\n * hydrated on the client. Can be used to delay browser-specific rendering\n * until after hydration.\n */\nexport function useIsSSR(): boolean {\n  // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.\n  if (typeof React['useSyncExternalStore'] === 'function') {\n    return React['useSyncExternalStore'](subscribe, getSnapshot, getServerSnapshot);\n  }\n\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  return useContext(IsSSRContext);\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useEffect, useRef, useState} from 'react';\nimport {useLayoutEffect} from './useLayoutEffect';\nimport {useSSRSafeId} from '@react-aria/ssr';\nimport {useValueEffect} from './';\n\n// copied from SSRProvider.tsx to reduce exports, if needed again, consider sharing\nlet canUseDOM = Boolean(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n);\n\nexport let idsUpdaterMap: Map<string, { current: string | null }[]> = new Map();\n// This allows us to clean up the idsUpdaterMap when the id is no longer used.\n// Map is a strong reference, so unused ids wouldn't be cleaned up otherwise.\n// This can happen in suspended components where mount/unmount is not called.\nlet registry;\nif (typeof FinalizationRegistry !== 'undefined') {\n  registry = new FinalizationRegistry<string>((heldValue) => {\n    idsUpdaterMap.delete(heldValue);\n  });\n}\n\n/**\n * If a default is not provided, generate an id.\n * @param defaultId - Default component id.\n */\nexport function useId(defaultId?: string): string {\n  let [value, setValue] = useState(defaultId);\n  let nextId = useRef(null);\n\n  let res = useSSRSafeId(value);\n  let cleanupRef = useRef(null);\n\n  if (registry) {\n    registry.register(cleanupRef, res);\n  }\n\n  if (canUseDOM) {\n    const cacheIdRef = idsUpdaterMap.get(res);\n    if (cacheIdRef && !cacheIdRef.includes(nextId)) {\n      cacheIdRef.push(nextId);\n    } else {\n      idsUpdaterMap.set(res, [nextId]);\n    }\n  }\n\n  useLayoutEffect(() => {\n    let r = res;\n    return () => {\n      // In Suspense, the cleanup function may be not called\n      // when it is though, also remove it from the finalization registry.\n      if (registry) {\n        registry.unregister(cleanupRef);\n      }\n      idsUpdaterMap.delete(r);\n    };\n  }, [res]);\n\n  // This cannot cause an infinite loop because the ref is always cleaned up.\n  // eslint-disable-next-line\n  useEffect(() => {\n    let newId = nextId.current;\n    if (newId) { setValue(newId); }\n\n    return () => {\n      if (newId) { nextId.current = null; }\n    };\n  });\n\n  return res;\n}\n\n/**\n * Merges two ids.\n * Different ids will trigger a side-effect and re-render components hooked up with `useId`.\n */\nexport function mergeIds(idA: string, idB: string): string {\n  if (idA === idB) {\n    return idA;\n  }\n\n  let setIdsA = idsUpdaterMap.get(idA);\n  if (setIdsA) {\n    setIdsA.forEach(ref => (ref.current = idB));\n    return idB;\n  }\n\n  let setIdsB = idsUpdaterMap.get(idB);\n  if (setIdsB) {\n    setIdsB.forEach((ref) => (ref.current = idA));\n    return idA;\n  }\n\n  return idB;\n}\n\n/**\n * Used to generate an id, and after render, check if that id is rendered so we know\n * if we can use it in places such as labelledby.\n * @param depArray - When to recalculate if the id is in the DOM.\n */\nexport function useSlotId(depArray: ReadonlyArray<any> = []): string {\n  let id = useId();\n  let [resolvedId, setResolvedId] = useValueEffect(id);\n  let updateId = useCallback(() => {\n    setResolvedId(function *() {\n      yield id;\n\n      yield document.getElementById(id) ? id : undefined;\n    });\n  }, [id, setResolvedId]);\n\n  useLayoutEffect(updateId, [id, updateId, ...depArray]);\n\n  return resolvedId;\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n/**\n * Calls all functions in the order they were chained with the same arguments.\n */\nexport function chain(...callbacks: any[]): (...args: any[]) => void {\n  return (...args: any[]) => {\n    for (let callback of callbacks) {\n      if (typeof callback === 'function') {\n        callback(...args);\n      }\n    }\n  };\n}\n", "export const getOwnerDocument = (el: Element | null | undefined): Document => {\n  return el?.ownerDocument ?? document;\n};\n\nexport const getOwnerWindow = (\n  el: (Window & typeof global) | Element | null | undefined\n): Window & typeof global => {\n  if (el && 'window' in el && el.window === el) {\n    return el;\n  }\n\n  const doc = getOwnerDocument(el as Element | null | undefined);\n  return doc.defaultView || window;\n};\n\n/**\n * Type guard that checks if a value is a Node. Verifies the presence and type of the nodeType property.\n */\nfunction isNode(value: unknown): value is Node {\n  return value !== null &&\n    typeof value === 'object' &&\n    'nodeType' in value &&\n    typeof (value as Node).nodeType === 'number';\n}\n/**\n * Type guard that checks if a node is a ShadowRoot. Uses nodeType and host property checks to\n * distinguish ShadowRoot from other DocumentFragments.\n */\nexport function isShadowRoot(node: Node | null): node is ShadowRoot {\n  return isNode(node) &&\n    node.nodeType === Node.DOCUMENT_FRAGMENT_NODE &&\n    'host' in node;\n}\n", "/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nlet _tableNestedRows = false;\nlet _shadowDOM = false;\n\nexport function enableTableNestedRows(): void {\n  _tableNestedRows = true;\n}\n\nexport function tableNestedRows(): boolean {\n  return _tableNestedRows;\n}\n\nexport function enableShadowDOM(): void {\n  _shadowDOM = true;\n}\n\nexport function shadowDOM(): boolean {\n  return _shadowDOM;\n}\n", "// Source: https://github.com/microsoft/tabster/blob/a89fc5d7e332d48f68d03b1ca6e344489d1c3898/src/Shadowdomize/DOMFunctions.ts#L16\n\nimport {isShadowRoot} from '../domHelpers';\nimport {shadowDOM} from '@react-stately/flags';\n\n/**\n * ShadowDOM safe version of Node.contains.\n */\nexport function nodeContains(\n  node: Node | null | undefined,\n  otherNode: Node | null | undefined\n): boolean {\n  if (!shadowDOM()) {\n    return otherNode && node ? node.contains(otherNode) : false;\n  }\n\n  if (!node || !otherNode) {\n    return false;\n  }\n\n  let currentNode: HTMLElement | Node | null | undefined = otherNode;\n\n  while (currentNode !== null) {\n    if (currentNode === node) {\n      return true;\n    }\n\n    if ((currentNode as HTMLSlotElement).tagName === 'SLOT' &&\n      (currentNode as HTMLSlotElement).assignedSlot) {\n      // Element is slotted\n      currentNode = (currentNode as HTMLSlotElement).assignedSlot!.parentNode;\n    } else if (isShadowRoot(currentNode)) {\n      // Element is in shadow root\n      currentNode = currentNode.host;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return false;\n}\n\n/**\n * ShadowDOM safe version of document.activeElement.\n */\nexport const getActiveElement = (doc: Document = document): Element | null => {\n  if (!shadowDOM()) {\n    return doc.activeElement;\n  }\n  let activeElement: Element | null = doc.activeElement;\n\n  while (activeElement && 'shadowRoot' in activeElement &&\n  activeElement.shadowRoot?.activeElement) {\n    activeElement = activeElement.shadowRoot.activeElement;\n  }\n\n  return activeElement;\n};\n\n/**\n * ShadowDOM safe version of event.target.\n */\nexport function getEventTarget<T extends Event>(event: T): Element {\n  if (shadowDOM() && (event.target as HTMLElement).shadowRoot) {\n    if (event.composedPath) {\n      return event.composedPath()[0] as Element;\n    }\n  }\n  return event.target as Element;\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {chain} from './chain';\nimport clsx from 'clsx';\nimport {mergeIds} from './useId';\n\ninterface Props {\n  [key: string]: any\n}\n\ntype PropsArg = Props | null | undefined;\n\n// taken from: https://stackoverflow.com/questions/51603250/typescript-3-parameter-list-intersection-type/51604379#51604379\ntype TupleTypes<T> = { [P in keyof T]: T[P] } extends { [key: number]: infer V } ? NullToObject<V> : never;\ntype NullToObject<T> = T extends (null | undefined) ? {} : T;\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n/**\n * Merges multiple props objects together. Event handlers are chained,\n * classNames are combined, and ids are deduplicated - different ids\n * will trigger a side-effect and re-render components hooked up with `useId`.\n * For all other props, the last prop object overrides all previous ones.\n * @param args - Multiple sets of props to merge together.\n */\nexport function mergeProps<T extends PropsArg[]>(...args: T): UnionToIntersection<TupleTypes<T>> {\n  // Start with a base clone of the first argument. This is a lot faster than starting\n  // with an empty object and adding properties as we go.\n  let result: Props = {...args[0]};\n  for (let i = 1; i < args.length; i++) {\n    let props = args[i];\n    for (let key in props) {\n      let a = result[key];\n      let b = props[key];\n\n      // Chain events\n      if (\n        typeof a === 'function' &&\n        typeof b === 'function' &&\n        // This is a lot faster than a regex.\n        key[0] === 'o' &&\n        key[1] === 'n' &&\n        key.charCodeAt(2) >= /* 'A' */ 65 &&\n        key.charCodeAt(2) <= /* 'Z' */ 90\n      ) {\n        result[key] = chain(a, b);\n\n        // Merge classnames, sometimes classNames are empty string which eval to false, so we just need to do a type check\n      } else if (\n        (key === 'className' || key === 'UNSAFE_className') &&\n        typeof a === 'string' &&\n        typeof b === 'string'\n      ) {\n        result[key] = clsx(a, b);\n      } else if (key === 'id' && a && b) {\n        result.id = mergeIds(a, b);\n        // Override others\n      } else {\n        result[key] = b !== undefined ? b : a;\n      }\n    }\n  }\n\n  return result as UnionToIntersection<TupleTypes<T>>;\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {MutableRefObject, Ref} from 'react';\n\n/**\n * Merges multiple refs into one. Works with either callback or object refs.\n */\nexport function mergeRefs<T>(...refs: Array<Ref<T> | MutableRefObject<T> | null | undefined>): Ref<T> {\n  if (refs.length === 1 && refs[0]) {\n    return refs[0];\n  }\n\n  return (value: T | null) => {\n    let hasCleanup = false;\n\n    const cleanups = refs.map(ref => {\n      const cleanup = setRef(ref, value);\n      hasCleanup ||= typeof cleanup == 'function';\n      return cleanup;\n    });\n\n    if (hasCleanup) {\n      return () => {\n        cleanups.forEach((cleanup, i) => {\n          if (typeof cleanup === 'function') {\n            cleanup();\n          } else {\n            setRef(refs[i], null);\n          }\n        });\n      };\n    }\n  };\n}\n\nfunction setRef<T>(ref: Ref<T> | MutableRefObject<T> | null | undefined, value: T) {\n  if (typeof ref === 'function') {\n    return ref(value);\n  } else if (ref != null) {\n    ref.current = value;\n  }\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps, DOMProps, LinkDOMProps} from '@react-types/shared';\n\nconst DOMPropNames = new Set([\n  'id'\n]);\n\nconst labelablePropNames = new Set([\n  'aria-label',\n  'aria-labelledby',\n  'aria-describedby',\n  'aria-details'\n]);\n\n// See LinkDOMProps in dom.d.ts.\nconst linkPropNames = new Set([\n  'href',\n  'hrefLang',\n  'target',\n  'rel',\n  'download',\n  'ping',\n  'referrerPolicy'\n]);\n\ninterface Options {\n  /**\n   * If labelling associated aria properties should be included in the filter.\n   */\n  labelable?: boolean,\n  /** Whether the element is a link and should include DOM props for <a> elements. */\n  isLink?: boolean,\n  /**\n   * A Set of other property names that should be included in the filter.\n   */\n  propNames?: Set<string>\n}\n\nconst propRe = /^(data-.*)$/;\n\n/**\n * Filters out all props that aren't valid DOM props or defined via override prop obj.\n * @param props - The component props to be filtered.\n * @param opts - Props to override.\n */\nexport function filterDOMProps(props: DOMProps & AriaLabelingProps & LinkDOMProps, opts: Options = {}): DOMProps & AriaLabelingProps {\n  let {labelable, isLink, propNames} = opts;\n  let filteredProps = {};\n\n  for (const prop in props) {\n    if (\n      Object.prototype.hasOwnProperty.call(props, prop) && (\n        DOMPropNames.has(prop) ||\n        (labelable && labelablePropNames.has(prop)) ||\n        (isLink && linkPropNames.has(prop)) ||\n        propNames?.has(prop) ||\n        propRe.test(prop)\n      )\n    ) {\n      filteredProps[prop] = props[prop];\n    }\n  }\n\n  return filteredProps;\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusableElement} from '@react-types/shared';\n\n// This is a polyfill for element.focus({preventScroll: true});\n// Currently necessary for Safari and old Edge:\n// https://caniuse.com/#feat=mdn-api_htmlelement_focus_preventscroll_option\n// See https://bugs.webkit.org/show_bug.cgi?id=178583\n//\n\n// Original licensing for the following methods can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/calvellido/focus-options-polyfill\n\ninterface ScrollableElement {\n  element: HTMLElement,\n  scrollTop: number,\n  scrollLeft: number\n}\n\nexport function focusWithoutScrolling(element: FocusableElement): void {\n  if (supportsPreventScroll()) {\n    element.focus({preventScroll: true});\n  } else {\n    let scrollableElements = getScrollableElements(element);\n    element.focus();\n    restoreScrollPosition(scrollableElements);\n  }\n}\n\nlet supportsPreventScrollCached: boolean | null = null;\nfunction supportsPreventScroll() {\n  if (supportsPreventScrollCached == null) {\n    supportsPreventScrollCached = false;\n    try {\n      let focusElem = document.createElement('div');\n      focusElem.focus({\n        get preventScroll() {\n          supportsPreventScrollCached = true;\n          return true;\n        }\n      });\n    } catch {\n      // Ignore\n    }\n  }\n\n  return supportsPreventScrollCached;\n}\n\nfunction getScrollableElements(element: FocusableElement): ScrollableElement[] {\n  let parent = element.parentNode;\n  let scrollableElements: ScrollableElement[] = [];\n  let rootScrollingElement = document.scrollingElement || document.documentElement;\n\n  while (parent instanceof HTMLElement && parent !== rootScrollingElement) {\n    if (\n      parent.offsetHeight < parent.scrollHeight ||\n      parent.offsetWidth < parent.scrollWidth\n    ) {\n      scrollableElements.push({\n        element: parent,\n        scrollTop: parent.scrollTop,\n        scrollLeft: parent.scrollLeft\n      });\n    }\n    parent = parent.parentNode;\n  }\n\n  if (rootScrollingElement instanceof HTMLElement) {\n    scrollableElements.push({\n      element: rootScrollingElement,\n      scrollTop: rootScrollingElement.scrollTop,\n      scrollLeft: rootScrollingElement.scrollLeft\n    });\n  }\n\n  return scrollableElements;\n}\n\nfunction restoreScrollPosition(scrollableElements: ScrollableElement[]) {\n  for (let {element, scrollTop, scrollLeft} of scrollableElements) {\n    element.scrollTop = scrollTop;\n    element.scrollLeft = scrollLeft;\n  }\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nfunction testUserAgent(re: RegExp) {\n  if (typeof window === 'undefined' || window.navigator == null) {\n    return false;\n  }\n  return (\n    window.navigator['userAgentData']?.brands.some((brand: {brand: string, version: string}) => re.test(brand.brand))\n  ) ||\n  re.test(window.navigator.userAgent);\n}\n\nfunction testPlatform(re: RegExp) {\n  return typeof window !== 'undefined' && window.navigator != null\n    ? re.test(window.navigator['userAgentData']?.platform || window.navigator.platform)\n    : false;\n}\n\nfunction cached(fn: () => boolean) {\n  if (process.env.NODE_ENV === 'test') {\n    return fn;\n  }\n  \n  let res: boolean | null = null;\n  return () => {\n    if (res == null) {\n      res = fn();\n    }\n    return res;\n  };\n}\n\nexport const isMac = cached(function () {\n  return testPlatform(/^Mac/i);\n});\n\nexport const isIPhone = cached(function () {\n  return testPlatform(/^iPhone/i);\n});\n\nexport const isIPad = cached(function () {\n  return testPlatform(/^iPad/i) ||\n    // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n    (isMac() && navigator.maxTouchPoints > 1);\n});\n\nexport const isIOS = cached(function () {\n  return isIPhone() || isIPad();\n});\n\nexport const isAppleDevice = cached(function () {\n  return isMac() || isIOS();\n});\n\nexport const isWebKit = cached(function () {\n  return testUserAgent(/AppleWebKit/i) && !isChrome();\n});\n\nexport const isChrome = cached(function () {\n  return testUserAgent(/Chrome/i);\n});\n\nexport const isAndroid = cached(function () {\n  return testUserAgent(/Android/i);\n});\n\nexport const isFirefox = cached(function () {\n  return testUserAgent(/Firefox/i);\n});\n", "/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {focusWithoutScrolling, isMac, isWebKit} from './index';\nimport {Href, LinkDOMProps, RouterOptions} from '@react-types/shared';\nimport {isFirefox, isIPad} from './platform';\nimport React, {createContext, DOMAttributes, JSX, ReactNode, useContext, useMemo} from 'react';\n\ninterface Router {\n  isNative: boolean,\n  open: (target: Element, modifiers: Modifiers, href: Href, routerOptions: RouterOptions | undefined) => void,\n  useHref: (href: Href) => string\n}\n\nconst RouterContext = createContext<Router>({\n  isNative: true,\n  open: openSyntheticLink,\n  useHref: (href) => href\n});\n\ninterface RouterProviderProps {\n  navigate: (path: Href, routerOptions: RouterOptions | undefined) => void,\n  useHref?: (href: Href) => string,\n  children: ReactNode\n}\n\n/**\n * A RouterProvider accepts a `navigate` function from a framework or client side router,\n * and provides it to all nested React Aria links to enable client side navigation.\n */\nexport function RouterProvider(props: RouterProviderProps): JSX.Element {\n  let {children, navigate, useHref} = props;\n\n  let ctx = useMemo(() => ({\n    isNative: false,\n    open: (target: Element, modifiers: Modifiers, href: Href, routerOptions: RouterOptions | undefined) => {\n      getSyntheticLink(target, link => {\n        if (shouldClientNavigate(link, modifiers)) {\n          navigate(href, routerOptions);\n        } else {\n          openLink(link, modifiers);\n        }\n      });\n    },\n    useHref: useHref || ((href) => href)\n  }), [navigate, useHref]);\n\n  return (\n    <RouterContext.Provider value={ctx}>\n      {children}\n    </RouterContext.Provider>\n  );\n}\n\nexport function useRouter(): Router {\n  return useContext(RouterContext);\n}\n\ninterface Modifiers {\n  metaKey?: boolean,\n  ctrlKey?: boolean,\n  altKey?: boolean,\n  shiftKey?: boolean\n}\n\nexport function shouldClientNavigate(link: HTMLAnchorElement, modifiers: Modifiers): boolean {\n  // Use getAttribute here instead of link.target. Firefox will default link.target to \"_parent\" when inside an iframe.\n  let target = link.getAttribute('target');\n  return (\n    (!target || target === '_self') &&\n    link.origin === location.origin &&\n    !link.hasAttribute('download') &&\n    !modifiers.metaKey && // open in new tab (mac)\n    !modifiers.ctrlKey && // open in new tab (windows)\n    !modifiers.altKey && // download\n    !modifiers.shiftKey\n  );\n}\n\nexport function openLink(target: HTMLAnchorElement, modifiers: Modifiers, setOpening = true): void {\n  let {metaKey, ctrlKey, altKey, shiftKey} = modifiers;\n\n  // Firefox does not recognize keyboard events as a user action by default, and the popup blocker\n  // will prevent links with target=\"_blank\" from opening. However, it does allow the event if the\n  // Command/Control key is held, which opens the link in a background tab. This seems like the best we can do.\n  // See https://bugzilla.mozilla.org/show_bug.cgi?id=257870 and https://bugzilla.mozilla.org/show_bug.cgi?id=746640.\n  if (isFirefox() && window.event?.type?.startsWith('key') && target.target === '_blank') {\n    if (isMac()) {\n      metaKey = true;\n    } else {\n      ctrlKey = true;\n    }\n  }\n\n  // WebKit does not support firing click events with modifier keys, but does support keyboard events.\n  // https://github.com/WebKit/WebKit/blob/c03d0ac6e6db178f90923a0a63080b5ca210d25f/Source/WebCore/html/HTMLAnchorElement.cpp#L184\n  let event = isWebKit() && isMac() && !isIPad() && process.env.NODE_ENV !== 'test'\n    // @ts-ignore - keyIdentifier is a non-standard property, but it's what webkit expects\n    ? new KeyboardEvent('keydown', {keyIdentifier: 'Enter', metaKey, ctrlKey, altKey, shiftKey})\n    : new MouseEvent('click', {metaKey, ctrlKey, altKey, shiftKey, bubbles: true, cancelable: true});\n  (openLink as any).isOpening = setOpening;\n  focusWithoutScrolling(target);\n  target.dispatchEvent(event);\n  (openLink as any).isOpening = false;\n}\n// https://github.com/parcel-bundler/parcel/issues/8724\n(openLink as any).isOpening = false;\n\nfunction getSyntheticLink(target: Element, open: (link: HTMLAnchorElement) => void) {\n  if (target instanceof HTMLAnchorElement) {\n    open(target);\n  } else if (target.hasAttribute('data-href')) {\n    let link = document.createElement('a');\n    link.href = target.getAttribute('data-href')!;\n    if (target.hasAttribute('data-target')) {\n      link.target = target.getAttribute('data-target')!;\n    }\n    if (target.hasAttribute('data-rel')) {\n      link.rel = target.getAttribute('data-rel')!;\n    }\n    if (target.hasAttribute('data-download')) {\n      link.download = target.getAttribute('data-download')!;\n    }\n    if (target.hasAttribute('data-ping')) {\n      link.ping = target.getAttribute('data-ping')!;\n    }\n    if (target.hasAttribute('data-referrer-policy')) {\n      link.referrerPolicy = target.getAttribute('data-referrer-policy')!;\n    }\n    target.appendChild(link);\n    open(link);\n    target.removeChild(link);\n  }\n}\n\nfunction openSyntheticLink(target: Element, modifiers: Modifiers) {\n  getSyntheticLink(target, link => openLink(link, modifiers));\n}\n\nexport function useSyntheticLinkProps(props: LinkDOMProps): DOMAttributes<HTMLElement> {\n  let router = useRouter();\n  const href = router.useHref(props.href ?? '');\n  return {\n    'data-href': props.href ? href : undefined,\n    'data-target': props.target,\n    'data-rel': props.rel,\n    'data-download': props.download,\n    'data-ping': props.ping,\n    'data-referrer-policy': props.referrerPolicy\n  } as DOMAttributes<HTMLElement>;\n}\n\n/** @deprecated - For backward compatibility. */\nexport function getSyntheticLinkProps(props: LinkDOMProps): DOMAttributes<HTMLElement> {\n  return {\n    'data-href': props.href,\n    'data-target': props.target,\n    'data-rel': props.rel,\n    'data-download': props.download,\n    'data-ping': props.ping,\n    'data-referrer-policy': props.referrerPolicy\n  } as DOMAttributes<HTMLElement>;\n}\n\nexport function useLinkProps(props?: LinkDOMProps): LinkDOMProps {\n  let router = useRouter();\n  const href = router.useHref(props?.href ?? '');\n  return {\n    href: props?.href ? href : undefined,\n    target: props?.target,\n    rel: props?.rel,\n    download: props?.download,\n    ping: props?.ping,\n    referrerPolicy: props?.referrerPolicy\n  };\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// We store a global list of elements that are currently transitioning,\n// mapped to a set of CSS properties that are transitioning for that element.\n// This is necessary rather than a simple count of transitions because of browser\n// bugs, e.g. Chrome sometimes fires both transitionend and transitioncancel rather\n// than one or the other. So we need to track what's actually transitioning so that\n// we can ignore these duplicate events.\nlet transitionsByElement = new Map<EventTarget, Set<string>>();\n\n// A list of callbacks to call once there are no transitioning elements.\nlet transitionCallbacks = new Set<() => void>();\n\nfunction setupGlobalEvents() {\n  if (typeof window === 'undefined') {\n    return;\n  }\n\n  function isTransitionEvent(event: Event): event is TransitionEvent {\n    return 'propertyName' in event;\n  }\n\n  let onTransitionStart = (e: Event) => {\n    if (!isTransitionEvent(e) || !e.target) {\n      return;\n    }\n    // Add the transitioning property to the list for this element.\n    let transitions = transitionsByElement.get(e.target);\n    if (!transitions) {\n      transitions = new Set();\n      transitionsByElement.set(e.target, transitions);\n\n      // The transitioncancel event must be registered on the element itself, rather than as a global\n      // event. This enables us to handle when the node is deleted from the document while it is transitioning.\n      // In that case, the cancel event would have nowhere to bubble to so we need to handle it directly.\n      e.target.addEventListener('transitioncancel', onTransitionEnd, {\n        once: true\n      });\n    }\n\n    transitions.add(e.propertyName);\n  };\n\n  let onTransitionEnd = (e: Event) => {\n    if (!isTransitionEvent(e) || !e.target) {\n      return;\n    }\n    // Remove property from list of transitioning properties.\n    let properties = transitionsByElement.get(e.target);\n    if (!properties) {\n      return;\n    }\n\n    properties.delete(e.propertyName);\n\n    // If empty, remove transitioncancel event, and remove the element from the list of transitioning elements.\n    if (properties.size === 0) {\n      e.target.removeEventListener('transitioncancel', onTransitionEnd);\n      transitionsByElement.delete(e.target);\n    }\n\n    // If no transitioning elements, call all of the queued callbacks.\n    if (transitionsByElement.size === 0) {\n      for (let cb of transitionCallbacks) {\n        cb();\n      }\n\n      transitionCallbacks.clear();\n    }\n  };\n\n  document.body.addEventListener('transitionrun', onTransitionStart);\n  document.body.addEventListener('transitionend', onTransitionEnd);\n}\n\nif (typeof document !== 'undefined') {\n  if (document.readyState !== 'loading') {\n    setupGlobalEvents();\n  } else {\n    document.addEventListener('DOMContentLoaded', setupGlobalEvents);\n  }\n}\n\n/**\n * Cleans up any elements that are no longer in the document.\n * This is necessary because we can't rely on transitionend events to fire\n * for elements that are removed from the document while transitioning.\n */\nfunction cleanupDetachedElements() {\n  for (const [eventTarget] of transitionsByElement) {\n    // Similar to `eventTarget instanceof Element && !eventTarget.isConnected`, but avoids\n    // the explicit instanceof check, since it may be different in different contexts.\n    if ('isConnected' in eventTarget && !eventTarget.isConnected) {\n      transitionsByElement.delete(eventTarget);\n    }\n  }\n}\n\nexport function runAfterTransition(fn: () => void): void {\n  // Wait one frame to see if an animation starts, e.g. a transition on mount.\n  requestAnimationFrame(() => {\n    cleanupDetachedElements();\n    // If no transitions are running, call the function immediately.\n    // Otherwise, add it to a list of callbacks to run at the end of the animation.\n    if (transitionsByElement.size === 0) {\n      fn();\n    } else {\n      transitionCallbacks.add(fn);\n    }\n  });\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useEffect, useRef} from 'react';\n\ninterface GlobalListeners {\n  addGlobalListener<K extends keyof WindowEventMap>(el: Window, type: K, listener: (this: Document, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void,\n  addGlobalListener<K extends keyof DocumentEventMap>(el: EventTarget, type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void,\n  addGlobalListener(el: EventTarget, type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void,\n  removeGlobalListener<K extends keyof DocumentEventMap>(el: EventTarget, type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void,\n  removeGlobalListener(el: EventTarget, type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void,\n  removeAllGlobalListeners(): void\n}\n\nexport function useGlobalListeners(): GlobalListeners {\n  let globalListeners = useRef(new Map());\n  let addGlobalListener = useCallback((eventTarget, type, listener, options) => {\n    // Make sure we remove the listener after it is called with the `once` option.\n    let fn = options?.once ? (...args) => {\n      globalListeners.current.delete(listener);\n      listener(...args);\n    } : listener;\n    globalListeners.current.set(listener, {type, eventTarget, fn, options});\n    eventTarget.addEventListener(type, fn, options);\n  }, []);\n  let removeGlobalListener = useCallback((eventTarget, type, listener, options) => {\n    let fn = globalListeners.current.get(listener)?.fn || listener;\n    eventTarget.removeEventListener(type, fn, options);\n    globalListeners.current.delete(listener);\n  }, []);\n  let removeAllGlobalListeners = useCallback(() => {\n    globalListeners.current.forEach((value, key) => {\n      removeGlobalListener(value.eventTarget, value.type, key, value.options);\n    });\n  }, [removeGlobalListener]);\n\n   \n  useEffect(() => {\n    return removeAllGlobalListeners;\n  }, [removeAllGlobalListeners]);\n\n  return {addGlobalListener, removeGlobalListener, removeAllGlobalListeners};\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps, DOMProps} from '@react-types/shared';\nimport {useId} from './useId';\n\n/**\n * Merges aria-label and aria-labelledby into aria-labelledby when both exist.\n * @param props - Aria label props.\n * @param defaultLabel - Default value for aria-label when not present.\n */\nexport function useLabels(props: DOMProps & AriaLabelingProps, defaultLabel?: string): DOMProps & AriaLabelingProps {\n  let {\n    id,\n    'aria-label': label,\n    'aria-labelledby': labelledBy\n  } = props;\n\n  // If there is both an aria-label and aria-labelledby,\n  // combine them by pointing to the element itself.\n  id = useId(id);\n  if (labelledBy && label) {\n    let ids = new Set([id, ...labelledBy.trim().split(/\\s+/)]);\n    labelledBy = [...ids].join(' ');\n  } else if (labelledBy) {\n    labelledBy = labelledBy.trim().split(/\\s+/).join(' ');\n  }\n\n  // If no labels are provided, use the default\n  if (!label && !labelledBy && defaultLabel) {\n    label = defaultLabel;\n  }\n\n  return {\n    id,\n    'aria-label': label,\n    'aria-labelledby': labelledBy\n  };\n}\n", "/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {MutableRefObject, useCallback, useMemo, useRef} from 'react';\n\n/**\n * Offers an object ref for a given callback ref or an object ref. Especially\n * helfpul when passing forwarded refs (created using `React.forwardRef`) to\n * React Aria hooks.\n *\n * @param ref The original ref intended to be used.\n * @returns An object ref that updates the given ref.\n * @see https://react.dev/reference/react/forwardRef\n */\nexport function useObjectRef<T>(ref?: ((instance: T | null) => (() => void) | void) | MutableRefObject<T | null> | null): MutableRefObject<T | null> {\n  const objRef: MutableRefObject<T | null> = useRef<T>(null);\n  const cleanupRef: MutableRefObject<(() => void) | void> = useRef(undefined);\n\n  const refEffect = useCallback(\n    (instance: T | null) => {\n      if (typeof ref === 'function') {\n        const refCallback = ref;\n        const refCleanup = refCallback(instance);\n        return () => {\n          if (typeof refCleanup === 'function') {\n            refCleanup();\n          } else {\n            refCallback(null);\n          }\n        };\n      } else if (ref) {\n        ref.current = instance;\n        return () => {\n          ref.current = null;\n        };\n      }\n    },\n    [ref]\n  );\n\n  return useMemo(\n    () => ({\n      get current() {\n        return objRef.current;\n      },\n      set current(value) {\n        objRef.current = value;\n        if (cleanupRef.current) {\n          cleanupRef.current();\n          cleanupRef.current = undefined;\n        }\n\n        if (value != null) {\n          cleanupRef.current = refEffect(value);\n        }\n      }\n    }),\n    [refEffect]\n  );\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {EffectCallback, useEffect, useRef} from 'react';\n\n// Like useEffect, but only called for updates after the initial render.\nexport function useUpdateEffect(effect: EffectCallback, dependencies: any[]): void {\n  const isInitialMount = useRef(true);\n  const lastDeps = useRef<any[] | null>(null);\n\n  useEffect(() => {\n    isInitialMount.current = true;\n    return () => {\n      isInitialMount.current = false;\n    };\n  }, []);\n\n  useEffect(() => {\n    let prevDeps = lastDeps.current;\n    if (isInitialMount.current) {\n      isInitialMount.current = false;\n    } else if (!prevDeps || dependencies.some((dep, i) => !Object.is(dep, prevDeps[i]))) {\n      effect();\n    }\n    lastDeps.current = dependencies;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, dependencies);\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {MutableRefObject} from 'react';\nimport {RefObject} from '@react-types/shared';\nimport {useLayoutEffect} from './';\n\ninterface ContextValue<T> {\n  ref?: MutableRefObject<T | null>\n}\n\n// Syncs ref from context with ref passed to hook\nexport function useSyncRef<T>(context?: ContextValue<T> | null, ref?: RefObject<T | null>): void {\n  useLayoutEffect(() => {\n    if (context && context.ref && ref) {\n      context.ref.current = ref.current;\n      return () => {\n        if (context.ref) {\n          context.ref.current = null;\n        }\n      };\n    }\n  });\n}\n", "/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport function isScrollable(node: Element | null, checkForOverflow?: boolean): boolean {\n  if (!node) {\n    return false;\n  }\n  let style = window.getComputedStyle(node);\n  let isScrollable = /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);\n\n  if (isScrollable && checkForOverflow) {\n    isScrollable = node.scrollHeight !== node.clientHeight || node.scrollWidth !== node.clientWidth;\n  }\n\n  return isScrollable;\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {isScrollable} from './isScrollable';\n\nexport function getScrollParent(node: Element, checkForOverflow?: boolean): Element {\n  let scrollableNode: Element | null = node;\n  if (isScrollable(scrollableNode, checkForOverflow)) {\n    scrollableNode = scrollableNode.parentElement;\n  }\n\n  while (scrollableNode && !isScrollable(scrollableNode, checkForOverflow)) {\n    scrollableNode = scrollableNode.parentElement;\n  }\n\n  return scrollableNode || document.scrollingElement || document.documentElement;\n}\n\n", "/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {isScrollable} from './isScrollable';\n\nexport function getScrollParents(node: Element, checkForOverflow?: boolean): Element[] {\n  const scrollParents: Element[] = [];\n\n  while (node && node !== document.documentElement) {\n    if (isScrollable(node, checkForOverflow)) {\n      scrollParents.push(node);\n    }\n    node = node.parentElement as Element;\n  }\n\n  return scrollParents;\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps} from '@react-types/shared';\nimport {useLayoutEffect} from './useLayoutEffect';\nimport {useState} from 'react';\n\nlet descriptionId = 0;\nconst descriptionNodes = new Map<string, {refCount: number, element: Element}>();\n\nexport function useDescription(description?: string): AriaLabelingProps {\n  let [id, setId] = useState<string | undefined>();\n\n  useLayoutEffect(() => {\n    if (!description) {\n      return;\n    }\n\n    let desc = descriptionNodes.get(description);\n    if (!desc) {\n      let id = `react-aria-description-${descriptionId++}`;\n      setId(id);\n\n      let node = document.createElement('div');\n      node.id = id;\n      node.style.display = 'none';\n      node.textContent = description;\n      document.body.appendChild(node);\n      desc = {refCount: 0, element: node};\n      descriptionNodes.set(description, desc);\n    } else {\n      setId(desc.element.id);\n    }\n\n    desc.refCount++;\n    return () => {\n      if (desc && --desc.refCount === 0) {\n        desc.element.remove();\n        descriptionNodes.delete(description);\n      }\n    };\n  }, [description]);\n\n  return {\n    'aria-describedby': description ? id : undefined\n  };\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {getScrollParents} from './getScrollParents';\n\ninterface ScrollIntoViewportOpts {\n  /** The optional containing element of the target to be centered in the viewport. */\n  containingElement?: Element | null\n}\n\n/**\n * Scrolls `scrollView` so that `element` is visible.\n * Similar to `element.scrollIntoView({block: 'nearest'})` (not supported in Edge),\n * but doesn't affect parents above `scrollView`.\n */\nexport function scrollIntoView(scrollView: HTMLElement, element: HTMLElement): void {\n  let offsetX = relativeOffset(scrollView, element, 'left');\n  let offsetY = relativeOffset(scrollView, element, 'top');\n  let width = element.offsetWidth;\n  let height = element.offsetHeight;\n  let x = scrollView.scrollLeft;\n  let y = scrollView.scrollTop;\n\n  // Account for top/left border offsetting the scroll top/Left + scroll padding\n  let {\n    borderTopWidth,\n    borderLeftWidth,\n    scrollPaddingTop,\n    scrollPaddingRight,\n    scrollPaddingBottom,\n    scrollPaddingLeft\n  } = getComputedStyle(scrollView);\n\n  let borderAdjustedX = x + parseInt(borderLeftWidth, 10);\n  let borderAdjustedY = y + parseInt(borderTopWidth, 10);\n  // Ignore end/bottom border via clientHeight/Width instead of offsetHeight/Width\n  let maxX = borderAdjustedX + scrollView.clientWidth;\n  let maxY = borderAdjustedY + scrollView.clientHeight;\n\n  // Get scroll padding values as pixels - defaults to 0 if no scroll padding\n  // is used.\n  let scrollPaddingTopNumber = parseInt(scrollPaddingTop, 10) || 0;\n  let scrollPaddingBottomNumber = parseInt(scrollPaddingBottom, 10) || 0;\n  let scrollPaddingRightNumber = parseInt(scrollPaddingRight, 10) || 0;\n  let scrollPaddingLeftNumber = parseInt(scrollPaddingLeft, 10) || 0;\n\n  if (offsetX <= x + scrollPaddingLeftNumber) {\n    x = offsetX - parseInt(borderLeftWidth, 10) - scrollPaddingLeftNumber;\n  } else if (offsetX + width > maxX - scrollPaddingRightNumber) {\n    x += offsetX + width - maxX + scrollPaddingRightNumber;\n  }\n  if (offsetY <= borderAdjustedY + scrollPaddingTopNumber) {\n    y = offsetY - parseInt(borderTopWidth, 10) - scrollPaddingTopNumber;\n  } else if (offsetY + height > maxY - scrollPaddingBottomNumber) {\n    y += offsetY + height - maxY + scrollPaddingBottomNumber;\n  }\n\n  scrollView.scrollLeft = x;\n  scrollView.scrollTop = y;\n}\n\n/**\n * Computes the offset left or top from child to ancestor by accumulating\n * offsetLeft or offsetTop through intervening offsetParents.\n */\nfunction relativeOffset(ancestor: HTMLElement, child: HTMLElement, axis: 'left'|'top') {\n  const prop = axis === 'left' ? 'offsetLeft' : 'offsetTop';\n  let sum = 0;\n  while (child.offsetParent) {\n    sum += child[prop];\n    if (child.offsetParent === ancestor) {\n      // Stop once we have found the ancestor we are interested in.\n      break;\n    } else if (child.offsetParent.contains(ancestor)) {\n      // If the ancestor is not `position:relative`, then we stop at\n      // _its_ offset parent, and we subtract off _its_ offset, so that\n      // we end up with the proper offset from child to ancestor.\n      sum -= ancestor[prop];\n      break;\n    }\n    child = child.offsetParent as HTMLElement;\n  }\n  return sum;\n}\n\n/**\n * Scrolls the `targetElement` so it is visible in the viewport. Accepts an optional `opts.containingElement`\n * that will be centered in the viewport prior to scrolling the targetElement into view. If scrolling is prevented on\n * the body (e.g. targetElement is in a popover), this will only scroll the scroll parents of the targetElement up to but not including the body itself.\n */\nexport function scrollIntoViewport(targetElement: Element | null, opts?: ScrollIntoViewportOpts): void {\n  if (targetElement && document.contains(targetElement)) {\n    let root = document.scrollingElement || document.documentElement;\n    let isScrollPrevented = window.getComputedStyle(root).overflow === 'hidden';\n    // If scrolling is not currently prevented then we aren’t in a overlay nor is a overlay open, just use element.scrollIntoView to bring the element into view\n    if (!isScrollPrevented) {\n      let {left: originalLeft, top: originalTop} = targetElement.getBoundingClientRect();\n\n      // use scrollIntoView({block: 'nearest'}) instead of .focus to check if the element is fully in view or not since .focus()\n      // won't cause a scroll if the element is already focused and doesn't behave consistently when an element is partially out of view horizontally vs vertically\n      targetElement?.scrollIntoView?.({block: 'nearest'});\n      let {left: newLeft, top: newTop} = targetElement.getBoundingClientRect();\n      // Account for sub pixel differences from rounding\n      if ((Math.abs(originalLeft - newLeft) > 1) || (Math.abs(originalTop - newTop) > 1)) {\n        opts?.containingElement?.scrollIntoView?.({block: 'center', inline: 'center'});\n        targetElement.scrollIntoView?.({block: 'nearest'});\n      }\n    } else {\n      let scrollParents = getScrollParents(targetElement);\n      // If scrolling is prevented, we don't want to scroll the body since it might move the overlay partially offscreen and the user can't scroll it back into view.\n      for (let scrollParent of scrollParents) {\n        scrollIntoView(scrollParent as HTMLElement, targetElement as HTMLElement);\n      }\n    }\n  }\n}\n", "/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {isAndroid} from './platform';\n\n// Original licensing for the following method can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/blob/3c713d513195a53788b3f8bb4b70279d68b15bcc/packages/react-interactions/events/src/dom/shared/index.js#L74-L87\n\n// Keyboards, Assistive Technologies, and element.click() all produce a \"virtual\"\n// click event. This is a method of inferring such clicks. Every browser except\n// IE 11 only sets a zero value of \"detail\" for click events that are \"virtual\".\n// However, IE 11 uses a zero value for all click events. For IE 11 we rely on\n// the quirk that it produces click events that are of type PointerEvent, and\n// where only the \"virtual\" click lacks a pointerType field.\n\nexport function isVirtualClick(event: MouseEvent | PointerEvent): boolean {\n  // JAWS/NVDA with Firefox.\n  if ((event as any).mozInputSource === 0 && event.isTrusted) {\n    return true;\n  }\n\n  // Android TalkBack's detail value varies depending on the event listener providing the event so we have specific logic here instead\n  // If pointerType is defined, event is from a click listener. For events from mousedown listener, detail === 0 is a sufficient check\n  // to detect TalkBack virtual clicks.\n  if (isAndroid() && (event as PointerEvent).pointerType) {\n    return event.type === 'click' && event.buttons === 1;\n  }\n\n  return event.detail === 0 && !(event as PointerEvent).pointerType;\n}\n\nexport function isVirtualPointerEvent(event: PointerEvent): boolean {\n  // If the pointer size is zero, then we assume it's from a screen reader.\n  // Android TalkBack double tap will sometimes return a event with width and height of 1\n  // and pointerType === 'mouse' so we need to check for a specific combination of event attributes.\n  // Cannot use \"event.pressure === 0\" as the sole check due to Safari pointer events always returning pressure === 0\n  // instead of .5, see https://bugs.webkit.org/show_bug.cgi?id=206216. event.pointerType === 'mouse' is to distingush\n  // Talkback double tap from Windows Firefox touch screen press\n  return (\n    (!isAndroid() && event.width === 0 && event.height === 0) ||\n    (event.width === 1 &&\n      event.height === 1 &&\n      event.pressure === 0 &&\n      event.detail === 0 &&\n      event.pointerType === 'mouse'\n    )\n  );\n}\n", "/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n/* eslint-disable rulesdir/pure-render */\n\nimport {useRef} from 'react';\n\nexport function useDeepMemo<T>(value: T, isEqual: (a: T, b: T) => boolean): T {\n  // Using a ref during render is ok here because it's only an optimization – both values are equivalent.\n  // If a render is thrown away, it'll still work the same no matter if the next render is the same or not.\n  let lastValue = useRef<T | null>(null);\n  if (value && lastValue.current && isEqual(value, lastValue.current)) {\n    value = lastValue.current;\n  }\n\n  lastValue.current = value;\n  return value;\n}\n", "const focusableElements = [\n  'input:not([disabled]):not([type=hidden])',\n  'select:not([disabled])',\n  'textarea:not([disabled])',\n  'button:not([disabled])',\n  'a[href]',\n  'area[href]',\n  'summary',\n  'iframe',\n  'object',\n  'embed',\n  'audio[controls]',\n  'video[controls]',\n  '[contenteditable]:not([contenteditable^=\"false\"])'\n];\n\nconst FOCUSABLE_ELEMENT_SELECTOR = focusableElements.join(':not([hidden]),') + ',[tabindex]:not([disabled]):not([hidden])';\n\nfocusableElements.push('[tabindex]:not([tabindex=\"-1\"]):not([disabled])');\nconst TABBABLE_ELEMENT_SELECTOR = focusableElements.join(':not([hidden]):not([tabindex=\"-1\"]),');\n\nexport function isFocusable(element: Element): boolean {\n  return element.matches(FOCUSABLE_ELEMENT_SELECTOR);\n}\n\nexport function isTabbable(element: Element): boolean {\n  return element.matches(TABBABLE_ELEMENT_SELECTOR);\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useEffect, useRef, useState} from 'react';\n\nexport function useControlledState<T, C = T>(value: Exclude<T, undefined>, defaultValue: Exclude<T, undefined> | undefined, onChange?: (v: C, ...args: any[]) => void): [T, (value: T, ...args: any[]) => void];\nexport function useControlledState<T, C = T>(value: Exclude<T, undefined> | undefined, defaultValue: Exclude<T, undefined>, onChange?: (v: C, ...args: any[]) => void): [T, (value: T, ...args: any[]) => void];\nexport function useControlledState<T, C = T>(value: T, defaultValue: T, onChange?: (v: C, ...args: any[]) => void): [T, (value: T, ...args: any[]) => void] {\n  let [stateValue, setStateValue] = useState(value || defaultValue);\n\n  let isControlledRef = useRef(value !== undefined);\n  let isControlled = value !== undefined;\n  useEffect(() => {\n    let wasControlled = isControlledRef.current;\n    if (wasControlled !== isControlled && process.env.NODE_ENV !== 'production') {\n      console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);\n    }\n    isControlledRef.current = isControlled;\n  }, [isControlled]);\n\n  let currentValue = isControlled ? value : stateValue;\n  let setValue = useCallback((value, ...args) => {\n    let onChangeCaller = (value, ...onChangeArgs) => {\n      if (onChange) {\n        if (!Object.is(currentValue, value)) {\n          onChange(value, ...onChangeArgs);\n        }\n      }\n      if (!isControlled) {\n        // If uncontrolled, mutate the currentValue local variable so that\n        // calling setState multiple times with the same value only emits onChange once.\n        // We do not use a ref for this because we specifically _do_ want the value to\n        // reset every render, and assigning to a ref in render breaks aborted suspended renders.\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        currentValue = value;\n      }\n    };\n\n    if (typeof value === 'function') {\n      if (process.env.NODE_ENV !== 'production') {\n        console.warn('We can not support a function callback. See Github Issues for details https://github.com/adobe/react-spectrum/issues/2320');\n      }\n      // this supports functional updates https://reactjs.org/docs/hooks-reference.html#functional-updates\n      // when someone using useControlledState calls setControlledState(myFunc)\n      // this will call our useState setState with a function as well which invokes myFunc and calls onChange with the value from myFunc\n      // if we're in an uncontrolled state, then we also return the value of myFunc which to setState looks as though it was just called with myFunc from the beginning\n      // otherwise we just return the controlled value, which won't cause a rerender because React knows to bail out when the value is the same\n      let updateFunction = (oldValue, ...functionArgs) => {\n        let interceptedValue = value(isControlled ? currentValue : oldValue, ...functionArgs);\n        onChangeCaller(interceptedValue, ...args);\n        if (!isControlled) {\n          return interceptedValue;\n        }\n        return oldValue;\n      };\n      setStateValue(updateFunction);\n    } else {\n      if (!isControlled) {\n        setStateValue(value);\n      }\n      onChangeCaller(value, ...args);\n    }\n  }, [isControlled, currentValue, onChange]);\n\n  return [currentValue, setValue];\n}\n", "/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps, RefObject,  DOMProps as SharedDOMProps} from '@react-types/shared';\nimport {mergeProps, mergeRefs, useLayoutEffect, useObjectRef} from '@react-aria/utils';\nimport React, {Context, CSSProperties, ForwardedRef, JSX, ReactNode, RefCallback, UIEvent, useCallback, useContext, useMemo, useRef, useState} from 'react';\n\nexport const DEFAULT_SLOT = Symbol('default');\n\ninterface SlottedValue<T> {\n  slots?: Record<string | symbol, T>\n}\n\nexport type SlottedContextValue<T> = SlottedValue<T> | T | null | undefined;\nexport type ContextValue<T, E> = SlottedContextValue<WithRef<T, E>>;\n\ntype ProviderValue<T> = [Context<T>, T];\ntype ProviderValues<A, B, C, D, E, F, G, H, I, J, K> =\n  | [ProviderValue<A>]\n  | [ProviderValue<A>, ProviderValue<B>]\n  | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>]\n  | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>]\n  | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>]\n  | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>, ProviderValue<F>]\n  | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>, ProviderValue<F>, ProviderValue<G>]\n  | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>, ProviderValue<F>, ProviderValue<G>, ProviderValue<H>]\n  | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>, ProviderValue<F>, ProviderValue<G>, ProviderValue<H>, ProviderValue<I>]\n  | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>, ProviderValue<F>, ProviderValue<G>, ProviderValue<H>, ProviderValue<I>, ProviderValue<J>]\n  | [ProviderValue<A>, ProviderValue<B>, ProviderValue<C>, ProviderValue<D>, ProviderValue<E>, ProviderValue<F>, ProviderValue<G>, ProviderValue<H>, ProviderValue<I>, ProviderValue<J>, ProviderValue<K>];\n\ninterface ProviderProps<A, B, C, D, E, F, G, H, I, J, K> {\n  values: ProviderValues<A, B, C, D, E, F, G, H, I, J, K>,\n  children: ReactNode\n}\n\nexport function Provider<A, B, C, D, E, F, G, H, I, J, K>({values, children}: ProviderProps<A, B, C, D, E, F, G, H, I, J, K>): JSX.Element {\n  for (let [Context, value] of values) {\n    // @ts-ignore\n    children = <Context.Provider value={value}>{children}</Context.Provider>;\n  }\n\n  return children as JSX.Element;\n}\n\nexport interface StyleProps {\n  /** The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. */\n  className?: string,\n  /** The inline [style](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style) for the element. */\n  style?: CSSProperties\n}\n\nexport interface DOMProps extends StyleProps, SharedDOMProps {\n  /** The children of the component. */\n  children?: ReactNode\n}\n\nexport interface ScrollableProps<T extends Element> {\n  /** Handler that is called when a user scrolls. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Element/scroll_event). */\n  onScroll?: (e: UIEvent<T>) => void\n}\n\nexport interface StyleRenderProps<T> {\n  /** The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. A function may be provided to compute the class based on component state. */\n  className?: string | ((values: T & {defaultClassName: string | undefined}) => string),\n  /** The inline [style](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style) for the element. A function may be provided to compute the style based on component state. */\n  style?: CSSProperties | ((values: T & {defaultStyle: CSSProperties}) => CSSProperties | undefined)\n}\n\nexport interface RenderProps<T> extends StyleRenderProps<T> {\n  /** The children of the component. A function may be provided to alter the children based on component state. */\n  children?: ReactNode | ((values: T & {defaultChildren: ReactNode | undefined}) => ReactNode)\n}\n\ninterface RenderPropsHookOptions<T> extends RenderProps<T>, SharedDOMProps, AriaLabelingProps {\n  values: T,\n  defaultChildren?: ReactNode,\n  defaultClassName?: string,\n  defaultStyle?: CSSProperties\n}\n\ninterface RenderPropsHookRetVal {\n  className?: string,\n  style?: CSSProperties,\n  children?: ReactNode,\n  'data-rac': string\n}\n\nexport function useRenderProps<T>(props: RenderPropsHookOptions<T>): RenderPropsHookRetVal {\n  let {\n    className,\n    style,\n    children,\n    defaultClassName = undefined,\n    defaultChildren = undefined,\n    defaultStyle,\n    values\n  } = props;\n\n  return useMemo(() => {\n    let computedClassName: string | undefined;\n    let computedStyle: React.CSSProperties | undefined;\n    let computedChildren: React.ReactNode | undefined;\n\n    if (typeof className === 'function') {\n      computedClassName = className({...values, defaultClassName});\n    } else {\n      computedClassName = className;\n    }\n\n    if (typeof style === 'function') {\n      computedStyle = style({...values, defaultStyle: defaultStyle || {}});\n    } else {\n      computedStyle = style;\n    }\n\n    if (typeof children === 'function') {\n      computedChildren = children({...values, defaultChildren});\n    } else if (children == null) {\n      computedChildren = defaultChildren;\n    } else {\n      computedChildren = children;\n    }\n\n    return {\n      className: computedClassName ?? defaultClassName,\n      style: (computedStyle || defaultStyle) ? {...defaultStyle, ...computedStyle} : undefined,\n      children: computedChildren ?? defaultChildren,\n      'data-rac': ''\n    };\n  }, [className, style, children, defaultClassName, defaultChildren, defaultStyle, values]);\n}\n\n/**\n * A helper function that accepts a user-provided render prop value (either a static value or a function),\n * and combines it with another value to create a final result.\n */\nexport function composeRenderProps<T, U, V extends T>(\n  // https://stackoverflow.com/questions/60898079/typescript-type-t-or-function-t-usage\n  value: T extends any ? (T | ((renderProps: U) => V)) : never,\n  wrap: (prevValue: T, renderProps: U) => V\n): (renderProps: U) => V {\n  return (renderProps) => wrap(typeof value === 'function' ? value(renderProps) : value, renderProps);\n}\n\nexport type WithRef<T, E> = T & {ref?: ForwardedRef<E>};\nexport interface SlotProps {\n  /**\n   * A slot name for the component. Slots allow the component to receive props from a parent component.\n   * An explicit `null` value indicates that the local props completely override all props received from a parent.\n   */\n  slot?: string | null\n}\n\nexport function useSlottedContext<T>(context: Context<SlottedContextValue<T>>, slot?: string | null): T | null | undefined {\n  let ctx = useContext(context);\n  if (slot === null) {\n    // An explicit `null` slot means don't use context.\n    return null;\n  }\n  if (ctx && typeof ctx === 'object' && 'slots' in ctx && ctx.slots) {\n    let slotKey = slot || DEFAULT_SLOT;\n    if (!ctx.slots[slotKey]) {\n      let availableSlots = new Intl.ListFormat().format(Object.keys(ctx.slots).map(p => `\"${p}\"`));\n      let errorMessage = slot ? `Invalid slot \"${slot}\".` : 'A slot prop is required.';\n\n      throw new Error(`${errorMessage} Valid slot names are ${availableSlots}.`);\n    }\n    return ctx.slots[slotKey];\n  }\n  // @ts-ignore\n  return ctx;\n}\n\nexport function useContextProps<T, U extends SlotProps, E extends Element>(props: T & SlotProps, ref: ForwardedRef<E>, context: Context<ContextValue<U, E>>): [T, RefObject<E | null>] {\n  let ctx = useSlottedContext(context, props.slot) || {};\n  // @ts-ignore - TS says \"Type 'unique symbol' cannot be used as an index type.\" but not sure why.\n  let {ref: contextRef, ...contextProps} = ctx as any;\n  let mergedRef = useObjectRef(useMemo(() => mergeRefs(ref, contextRef), [ref, contextRef]));\n  let mergedProps = mergeProps(contextProps, props) as unknown as T;\n\n  // mergeProps does not merge `style`. Adding this there might be a breaking change.\n  if (\n    'style' in contextProps &&\n    contextProps.style &&\n    'style' in props &&\n    props.style\n  ) {\n    if (typeof contextProps.style === 'function' || typeof props.style === 'function') {\n      // @ts-ignore\n      mergedProps.style = (renderProps) => {\n        let contextStyle = typeof contextProps.style === 'function' ? contextProps.style(renderProps) : contextProps.style;\n        let defaultStyle = {...renderProps.defaultStyle, ...contextStyle};\n        let style = typeof props.style === 'function'\n          ? props.style({...renderProps, defaultStyle})\n          : props.style;\n        return {...defaultStyle, ...style};\n      };\n    } else {\n      // @ts-ignore\n      mergedProps.style = {...contextProps.style, ...props.style};\n    }\n  }\n\n  return [mergedProps, mergedRef];\n}\n\nexport function useSlot(initialState: boolean | (() => boolean) = true): [RefCallback<Element>, boolean] {\n  // Initial state is typically based on the parent having an aria-label or aria-labelledby.\n  // If it does, this value should be false so that we don't update the state and cause a rerender when we go through the layoutEffect\n  let [hasSlot, setHasSlot] = useState(initialState);\n  let hasRun = useRef(false);\n\n  // A callback ref which will run when the slotted element mounts.\n  // This should happen before the useLayoutEffect below.\n  let ref = useCallback(el => {\n    hasRun.current = true;\n    setHasSlot(!!el);\n  }, []);\n\n  // If the callback hasn't been called, then reset to false.\n  useLayoutEffect(() => {\n    if (!hasRun.current) {\n      setHasSlot(false);\n    }\n  }, []);\n\n  return [ref, hasSlot];\n}\n\n/**\n * Filters out `data-*` attributes to keep them from being passed down and duplicated.\n * @param props\n */\nexport function removeDataAttributes<T>(props: T): T {\n  const prefix = /^(data-.*)$/;\n  let filteredProps = {} as T;\n\n  for (const prop in props) {\n    if (!prefix.test(prop)) {\n      filteredProps[prop] = props[prop];\n    }\n  }\n\n  return filteredProps;\n}\n\n// Override base type to change the default.\nexport interface RACValidation {\n  /**\n   * Whether to use native HTML form validation to prevent form submission\n   * when the value is missing or invalid, or mark the field as required\n   * or invalid via ARIA.\n   * @default 'native'\n   */\n  validationBehavior?: 'native' | 'aria'\n}\n", "/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {forwardRefType} from '@react-types/shared';\nimport React, {createContext, forwardRef, JSX, ReactElement, ReactNode, useContext} from 'react';\n\n// React doesn't understand the <template> element, which doesn't have children like a normal element.\n// It will throw an error during hydration when it expects the firstChild to contain content rendered\n// on the server, when in reality, the browser will have placed this inside the `content` document fragment.\n// This monkey patches the firstChild property for our special hidden template elements to work around this error.\n// See https://github.com/facebook/react/issues/19932\nif (typeof HTMLTemplateElement !== 'undefined') {\n  const getFirstChild = Object.getOwnPropertyDescriptor(Node.prototype, 'firstChild')!.get!;\n  Object.defineProperty(HTMLTemplateElement.prototype, 'firstChild', {\n    configurable: true,\n    enumerable: true,\n    get: function () {\n      if (this.dataset.reactAriaHidden) {\n        return this.content.firstChild;\n      } else {\n        return getFirstChild.call(this);\n      }\n    }\n  });\n}\n\nexport const HiddenContext = createContext<boolean>(false);\n\nexport function Hidden(props: {children: ReactNode}): JSX.Element {\n  let isHidden = useContext(HiddenContext);\n  if (isHidden) {\n    // Don't hide again if we are already hidden.\n    return <>{props.children}</>;\n  }\n\n  let children = (\n    <HiddenContext.Provider value>\n      {props.children}\n    </HiddenContext.Provider>\n  );\n\n  // In SSR, portals are not supported by React. Instead, always render into a <template>\n  // element, which the browser will never display to the user. In addition, the\n  // content is not part of the accessible DOM tree, so it won't affect ids or other accessibility attributes.\n  return <template data-react-aria-hidden>{children}</template>;\n}\n\n/** Creates a component that forwards its ref and returns null if it is in a hidden subtree. */\n// Note: this function is handled specially in the documentation generator. If you change it, you'll need to update DocsTransformer as well.\nexport function createHideableComponent<T, P = {}>(fn: (props: P, ref: React.Ref<T>) => ReactElement | null): (props: P & React.RefAttributes<T>) => ReactElement | null {\n  let Wrapper = (props: P, ref: React.Ref<T>) => {\n    let isHidden = useContext(HiddenContext);\n    if (isHidden) {\n      return null;\n    }\n\n    return fn(props, ref);\n  };\n  // @ts-ignore - for react dev tools\n  Wrapper.displayName = fn.displayName || fn.name;\n  return (forwardRef as forwardRefType)(Wrapper);\n}\n\n/** Returns whether the component is in a hidden subtree. */\nexport function useIsHidden(): boolean {\n  return useContext(HiddenContext);\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusableElement} from '@react-types/shared';\nimport {focusWithoutScrolling, getOwnerWindow, isFocusable, useEffectEvent, useLayoutEffect} from '@react-aria/utils';\nimport {FocusEvent as ReactFocusEvent, SyntheticEvent, useCallback, useRef} from 'react';\n\n// Turn a native event into a React synthetic event.\nexport function createSyntheticEvent<E extends SyntheticEvent>(nativeEvent: Event): E {\n  let event = nativeEvent as any as E;\n  event.nativeEvent = nativeEvent;\n  event.isDefaultPrevented = () => event.defaultPrevented;\n  // cancelBubble is technically deprecated in the spec, but still supported in all browsers.\n  event.isPropagationStopped = () => (event as any).cancelBubble;\n  event.persist = () => {};\n  return event;\n}\n\nexport function setEventTarget(event: Event, target: Element): void {\n  Object.defineProperty(event, 'target', {value: target});\n  Object.defineProperty(event, 'currentTarget', {value: target});\n}\n\nexport function useSyntheticBlurEvent<Target extends Element = Element>(onBlur: (e: ReactFocusEvent<Target>) => void): (e: ReactFocusEvent<Target>) => void {\n  let stateRef = useRef({\n    isFocused: false,\n    observer: null as MutationObserver | null\n  });\n\n  // Clean up MutationObserver on unmount. See below.\n\n  useLayoutEffect(() => {\n    const state = stateRef.current;\n    return () => {\n      if (state.observer) {\n        state.observer.disconnect();\n        state.observer = null;\n      }\n    };\n  }, []);\n\n  let dispatchBlur = useEffectEvent((e: ReactFocusEvent<Target>) => {\n    onBlur?.(e);\n  });\n\n  // This function is called during a React onFocus event.\n  return useCallback((e: ReactFocusEvent<Target>) => {\n    // React does not fire onBlur when an element is disabled. https://github.com/facebook/react/issues/9142\n    // Most browsers fire a native focusout event in this case, except for Firefox. In that case, we use a\n    // MutationObserver to watch for the disabled attribute, and dispatch these events ourselves.\n    // For browsers that do, focusout fires before the MutationObserver, so onBlur should not fire twice.\n    if (\n      e.target instanceof HTMLButtonElement ||\n      e.target instanceof HTMLInputElement ||\n      e.target instanceof HTMLTextAreaElement ||\n      e.target instanceof HTMLSelectElement\n    ) {\n      stateRef.current.isFocused = true;\n\n      let target = e.target;\n      let onBlurHandler: EventListenerOrEventListenerObject | null = (e) => {\n        stateRef.current.isFocused = false;\n\n        if (target.disabled) {\n          // For backward compatibility, dispatch a (fake) React synthetic event.\n          let event = createSyntheticEvent<ReactFocusEvent<Target>>(e);\n          dispatchBlur(event);\n        }\n\n        // We no longer need the MutationObserver once the target is blurred.\n        if (stateRef.current.observer) {\n          stateRef.current.observer.disconnect();\n          stateRef.current.observer = null;\n        }\n      };\n\n      target.addEventListener('focusout', onBlurHandler, {once: true});\n\n      stateRef.current.observer = new MutationObserver(() => {\n        if (stateRef.current.isFocused && target.disabled) {\n          stateRef.current.observer?.disconnect();\n          let relatedTargetEl = target === document.activeElement ? null : document.activeElement;\n          target.dispatchEvent(new FocusEvent('blur', {relatedTarget: relatedTargetEl}));\n          target.dispatchEvent(new FocusEvent('focusout', {bubbles: true, relatedTarget: relatedTargetEl}));\n        }\n      });\n\n      stateRef.current.observer.observe(target, {attributes: true, attributeFilter: ['disabled']});\n    }\n  }, [dispatchBlur]);\n}\n\nexport let ignoreFocusEvent = false;\n\n/**\n * This function prevents the next focus event fired on `target`, without using `event.preventDefault()`.\n * It works by waiting for the series of focus events to occur, and reverts focus back to where it was before.\n * It also makes these events mostly non-observable by using a capturing listener on the window and stopping propagation.\n */\nexport function preventFocus(target: FocusableElement | null): (() => void) | undefined {\n  // The browser will focus the nearest focusable ancestor of our target.\n  while (target && !isFocusable(target)) {\n    target = target.parentElement;\n  }\n\n  let window = getOwnerWindow(target);\n  let activeElement = window.document.activeElement as FocusableElement | null;\n  if (!activeElement || activeElement === target) {\n    return;\n  }\n\n  ignoreFocusEvent = true;\n  let isRefocusing = false;\n  let onBlur = (e: FocusEvent) => {\n    if (e.target === activeElement || isRefocusing) {\n      e.stopImmediatePropagation();\n    }\n  };\n\n  let onFocusOut = (e: FocusEvent) => {\n    if (e.target === activeElement || isRefocusing) {\n      e.stopImmediatePropagation();\n\n      // If there was no focusable ancestor, we don't expect a focus event.\n      // Re-focus the original active element here.\n      if (!target && !isRefocusing) {\n        isRefocusing = true;\n        focusWithoutScrolling(activeElement);\n        cleanup();\n      }\n    }\n  };\n\n  let onFocus = (e: FocusEvent) => {\n    if (e.target === target || isRefocusing) {\n      e.stopImmediatePropagation();\n    }\n  };\n\n  let onFocusIn = (e: FocusEvent) => {\n    if (e.target === target || isRefocusing) {\n      e.stopImmediatePropagation();\n\n      if (!isRefocusing) {\n        isRefocusing = true;\n        focusWithoutScrolling(activeElement);\n        cleanup();\n      }\n    }\n  };\n\n  window.addEventListener('blur', onBlur, true);\n  window.addEventListener('focusout', onFocusOut, true);\n  window.addEventListener('focusin', onFocusIn, true);\n  window.addEventListener('focus', onFocus, true);\n\n  let cleanup = () => {\n    cancelAnimationFrame(raf);\n    window.removeEventListener('blur', onBlur, true);\n    window.removeEventListener('focusout', onFocusOut, true);\n    window.removeEventListener('focusin', onFocusIn, true);\n    window.removeEventListener('focus', onFocus, true);\n    ignoreFocusEvent = false;\n    isRefocusing = false;\n  };\n\n  let raf = requestAnimationFrame(cleanup);\n  return cleanup;\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {getOwnerDocument, isIOS, runAfterTransition} from '@react-aria/utils';\n\n// Safari on iOS starts selecting text on long press. The only way to avoid this, it seems,\n// is to add user-select: none to the entire page. Adding it to the pressable element prevents\n// that element from being selected, but nearby elements may still receive selection. We add\n// user-select: none on touch start, and remove it again on touch end to prevent this.\n// This must be implemented using global state to avoid race conditions between multiple elements.\n\n// There are three possible states due to the delay before removing user-select: none after\n// pointer up. The 'default' state always transitions to the 'disabled' state, which transitions\n// to 'restoring'. The 'restoring' state can either transition back to 'disabled' or 'default'.\n\n// For non-iOS devices, we apply user-select: none to the pressed element instead to avoid possible\n// performance issues that arise from applying and removing user-select: none to the entire page\n// (see https://github.com/adobe/react-spectrum/issues/1609).\ntype State = 'default' | 'disabled' | 'restoring';\n\n// Note that state only matters here for iOS. Non-iOS gets user-select: none applied to the target element\n// rather than at the document level so we just need to apply/remove user-select: none for each pressed element individually\nlet state: State = 'default';\nlet savedUserSelect = '';\nlet modifiedElementMap = new WeakMap<Element, string>();\n\nexport function disableTextSelection(target?: Element): void {\n  if (isIOS()) {\n    if (state === 'default') {\n\n      const documentObject = getOwnerDocument(target);\n      savedUserSelect = documentObject.documentElement.style.webkitUserSelect;\n      documentObject.documentElement.style.webkitUserSelect = 'none';\n    }\n\n    state = 'disabled';\n  } else if (target instanceof HTMLElement || target instanceof SVGElement) {\n    // If not iOS, store the target's original user-select and change to user-select: none\n    // Ignore state since it doesn't apply for non iOS\n    let property = 'userSelect' in target.style ? 'userSelect' : 'webkitUserSelect';\n    modifiedElementMap.set(target, target.style[property]);\n    target.style[property] = 'none';\n  }\n}\n\nexport function restoreTextSelection(target?: Element): void {\n  if (isIOS()) {\n    // If the state is already default, there's nothing to do.\n    // If it is restoring, then there's no need to queue a second restore.\n    if (state !== 'disabled') {\n      return;\n    }\n\n    state = 'restoring';\n\n    // There appears to be a delay on iOS where selection still might occur\n    // after pointer up, so wait a bit before removing user-select.\n    setTimeout(() => {\n      // Wait for any CSS transitions to complete so we don't recompute style\n      // for the whole page in the middle of the animation and cause jank.\n      runAfterTransition(() => {\n        // Avoid race conditions\n        if (state === 'restoring') {\n\n          const documentObject = getOwnerDocument(target);\n          if (documentObject.documentElement.style.webkitUserSelect === 'none') {\n            documentObject.documentElement.style.webkitUserSelect = savedUserSelect || '';\n          }\n\n          savedUserSelect = '';\n          state = 'default';\n        }\n      });\n    }, 300);\n  } else if (target instanceof HTMLElement || target instanceof SVGElement) {\n    // If not iOS, restore the target's original user-select if any\n    // Ignore state since it doesn't apply for non iOS\n    if (target && modifiedElementMap.has(target)) {\n      let targetOldUserSelect = modifiedElementMap.get(target) as string;\n      let property = 'userSelect' in target.style ? 'userSelect' : 'webkitUserSelect';\n\n      if (target.style[property] === 'none') {\n        target.style[property] = targetOldUserSelect;\n      }\n\n      if (target.getAttribute('style') === '') {\n        target.removeAttribute('style');\n      }\n      modifiedElementMap.delete(target);\n    }\n  }\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusableElement} from '@react-types/shared';\nimport {PressProps} from './usePress';\nimport React, {MutableRefObject} from 'react';\n\ninterface IPressResponderContext extends PressProps {\n  register(): void,\n  ref?: MutableRefObject<FocusableElement>\n}\n\nexport const PressResponderContext = React.createContext<IPressResponderContext>({register: () => {}});\nPressResponderContext.displayName = 'PressResponderContext';\n", "function _class_apply_descriptor_get(receiver, descriptor) {\n    if (descriptor.get) return descriptor.get.call(receiver);\n\n    return descriptor.value;\n}\nexport { _class_apply_descriptor_get as _ };\n", "function _class_extract_field_descriptor(receiver, privateMap, action) {\n    if (!privateMap.has(receiver)) throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n\n    return privateMap.get(receiver);\n}\nexport { _class_extract_field_descriptor as _ };\n", "import { _ as _class_apply_descriptor_get } from \"./_class_apply_descriptor_get.js\";\nimport { _ as _class_extract_field_descriptor } from \"./_class_extract_field_descriptor.js\";\n\nfunction _class_private_field_get(receiver, privateMap) {\n    var descriptor = _class_extract_field_descriptor(receiver, privateMap, \"get\");\n    return _class_apply_descriptor_get(receiver, descriptor);\n}\nexport { _class_private_field_get as _ };\n", "function _class_apply_descriptor_set(receiver, descriptor, value) {\n    if (descriptor.set) descriptor.set.call(receiver, value);\n    else {\n        if (!descriptor.writable) {\n            // This should only throw in strict mode, but class bodies are\n            // always strict and private fields can only be used inside\n            // class bodies.\n            throw new TypeError(\"attempted to set read only private field\");\n        }\n        descriptor.value = value;\n    }\n}\nexport { _class_apply_descriptor_set as _ };\n", "import { _ as _class_apply_descriptor_set } from \"./_class_apply_descriptor_set.js\";\nimport { _ as _class_extract_field_descriptor } from \"./_class_extract_field_descriptor.js\";\n\nfunction _class_private_field_set(receiver, privateMap, value) {\n    var descriptor = _class_extract_field_descriptor(receiver, privateMap, \"set\");\n    _class_apply_descriptor_set(receiver, descriptor, value);\n    return value;\n}\nexport { _class_private_field_set as _ };\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {\n  chain,\n  focusWithoutScrolling,\n  getEventTarget,\n  getOwnerDocument,\n  getOwnerWindow,\n  isMac,\n  isVirtualClick,\n  isVirtualPointerEvent,\n  mergeProps,\n  nodeContains,\n  openLink,\n  useEffectEvent,\n  useGlobalListeners,\n  useSyncRef\n} from '@react-aria/utils';\nimport {createSyntheticEvent, preventFocus, setEventTarget} from './utils';\nimport {disableTextSelection, restoreTextSelection} from './textSelection';\nimport {DOMAttributes, FocusableElement, PressEvent as IPressEvent, PointerType, PressEvents, RefObject} from '@react-types/shared';\nimport {flushSync} from 'react-dom';\nimport {PressResponderContext} from './context';\nimport {MouseEvent as RMouseEvent, TouchEvent as RTouchEvent, useContext, useEffect, useMemo, useRef, useState} from 'react';\n\nexport interface PressProps extends PressEvents {\n  /** Whether the target is in a controlled press state (e.g. an overlay it triggers is open). */\n  isPressed?: boolean,\n  /** Whether the press events should be disabled. */\n  isDisabled?: boolean,\n  /** Whether the target should not receive focus on press. */\n  preventFocusOnPress?: boolean,\n  /**\n   * Whether press events should be canceled when the pointer leaves the target while pressed.\n   * By default, this is `false`, which means if the pointer returns back over the target while\n   * still pressed, onPressStart will be fired again. If set to `true`, the press is canceled\n   * when the pointer leaves the target and onPressStart will not be fired if the pointer returns.\n   */\n  shouldCancelOnPointerExit?: boolean,\n  /** Whether text selection should be enabled on the pressable element. */\n  allowTextSelectionOnPress?: boolean\n}\n\nexport interface PressHookProps extends PressProps {\n  /** A ref to the target element. */\n  ref?: RefObject<Element | null>\n}\n\ninterface PressState {\n  isPressed: boolean,\n  ignoreEmulatedMouseEvents: boolean,\n  didFirePressStart: boolean,\n  isTriggeringEvent: boolean,\n  activePointerId: any,\n  target: FocusableElement | null,\n  isOverTarget: boolean,\n  pointerType: PointerType | null,\n  userSelect?: string,\n  metaKeyEvents?: Map<string, KeyboardEvent>,\n  disposables: Array<() => void>\n}\n\ninterface EventBase {\n  currentTarget: EventTarget | null,\n  shiftKey: boolean,\n  ctrlKey: boolean,\n  metaKey: boolean,\n  altKey: boolean,\n  clientX?: number,\n  clientY?: number,\n  targetTouches?: Array<{clientX?: number, clientY?: number}>\n}\n\nexport interface PressResult {\n  /** Whether the target is currently pressed. */\n  isPressed: boolean,\n  /** Props to spread on the target element. */\n  pressProps: DOMAttributes\n}\n\nfunction usePressResponderContext(props: PressHookProps): PressHookProps {\n  // Consume context from <PressResponder> and merge with props.\n  let context = useContext(PressResponderContext);\n  if (context) {\n    let {register, ...contextProps} = context;\n    props = mergeProps(contextProps, props) as PressHookProps;\n    register();\n  }\n  useSyncRef(context, props.ref);\n\n  return props;\n}\n\nclass PressEvent implements IPressEvent {\n  type: IPressEvent['type'];\n  pointerType: PointerType;\n  target: Element;\n  shiftKey: boolean;\n  ctrlKey: boolean;\n  metaKey: boolean;\n  altKey: boolean;\n  x: number;\n  y: number;\n  #shouldStopPropagation = true;\n\n  constructor(type: IPressEvent['type'], pointerType: PointerType, originalEvent: EventBase, state?: PressState) {\n    let currentTarget = state?.target ?? originalEvent.currentTarget;\n    const rect: DOMRect | undefined = (currentTarget as Element)?.getBoundingClientRect();\n    let x, y = 0;\n    let clientX, clientY: number | null = null;\n    if (originalEvent.clientX != null && originalEvent.clientY != null) {\n      clientX = originalEvent.clientX;\n      clientY = originalEvent.clientY;\n    }\n    if (rect) {\n      if (clientX != null && clientY != null) {\n        x = clientX - rect.left;\n        y = clientY - rect.top;\n      } else {\n        x = rect.width / 2;\n        y = rect.height / 2;\n      }\n    }\n    this.type = type;\n    this.pointerType = pointerType;\n    this.target = originalEvent.currentTarget as Element;\n    this.shiftKey = originalEvent.shiftKey;\n    this.metaKey = originalEvent.metaKey;\n    this.ctrlKey = originalEvent.ctrlKey;\n    this.altKey = originalEvent.altKey;\n    this.x = x;\n    this.y = y;\n  }\n\n  continuePropagation() {\n    this.#shouldStopPropagation = false;\n  }\n\n  get shouldStopPropagation() {\n    return this.#shouldStopPropagation;\n  }\n}\n\nconst LINK_CLICKED = Symbol('linkClicked');\nconst STYLE_ID = 'react-aria-pressable-style';\nconst PRESSABLE_ATTRIBUTE = 'data-react-aria-pressable';\n\n/**\n * Handles press interactions across mouse, touch, keyboard, and screen readers.\n * It normalizes behavior across browsers and platforms, and handles many nuances\n * of dealing with pointer and keyboard events.\n */\nexport function usePress(props: PressHookProps): PressResult {\n  let {\n    onPress,\n    onPressChange,\n    onPressStart,\n    onPressEnd,\n    onPressUp,\n    onClick,\n    isDisabled,\n    isPressed: isPressedProp,\n    preventFocusOnPress,\n    shouldCancelOnPointerExit,\n    allowTextSelectionOnPress,\n    ref: domRef,\n    ...domProps\n  } = usePressResponderContext(props);\n\n  let [isPressed, setPressed] = useState(false);\n  let ref = useRef<PressState>({\n    isPressed: false,\n    ignoreEmulatedMouseEvents: false,\n    didFirePressStart: false,\n    isTriggeringEvent: false,\n    activePointerId: null,\n    target: null,\n    isOverTarget: false,\n    pointerType: null,\n    disposables: []\n  });\n\n  let {addGlobalListener, removeAllGlobalListeners} = useGlobalListeners();\n\n  let triggerPressStart = useEffectEvent((originalEvent: EventBase, pointerType: PointerType) => {\n    let state = ref.current;\n    if (isDisabled || state.didFirePressStart) {\n      return false;\n    }\n\n    let shouldStopPropagation = true;\n    state.isTriggeringEvent = true;\n    if (onPressStart) {\n      let event = new PressEvent('pressstart', pointerType, originalEvent);\n      onPressStart(event);\n      shouldStopPropagation = event.shouldStopPropagation;\n    }\n\n    if (onPressChange) {\n      onPressChange(true);\n    }\n\n    state.isTriggeringEvent = false;\n    state.didFirePressStart = true;\n    setPressed(true);\n    return shouldStopPropagation;\n  });\n\n  let triggerPressEnd = useEffectEvent((originalEvent: EventBase, pointerType: PointerType, wasPressed = true) => {\n    let state = ref.current;\n    if (!state.didFirePressStart) {\n      return false;\n    }\n\n    state.didFirePressStart = false;\n    state.isTriggeringEvent = true;\n\n    let shouldStopPropagation = true;\n    if (onPressEnd) {\n      let event = new PressEvent('pressend', pointerType, originalEvent);\n      onPressEnd(event);\n      shouldStopPropagation = event.shouldStopPropagation;\n    }\n\n    if (onPressChange) {\n      onPressChange(false);\n    }\n\n    setPressed(false);\n\n    if (onPress && wasPressed && !isDisabled) {\n      let event = new PressEvent('press', pointerType, originalEvent);\n      onPress(event);\n      shouldStopPropagation &&= event.shouldStopPropagation;\n    }\n\n    state.isTriggeringEvent = false;\n    return shouldStopPropagation;\n  });\n\n  let triggerPressUp = useEffectEvent((originalEvent: EventBase, pointerType: PointerType) => {\n    let state = ref.current;\n    if (isDisabled) {\n      return false;\n    }\n\n    if (onPressUp) {\n      state.isTriggeringEvent = true;\n      let event = new PressEvent('pressup', pointerType, originalEvent);\n      onPressUp(event);\n      state.isTriggeringEvent = false;\n      return event.shouldStopPropagation;\n    }\n\n    return true;\n  });\n\n  let cancel = useEffectEvent((e: EventBase) => {\n    let state = ref.current;\n    if (state.isPressed && state.target) {\n      if (state.didFirePressStart && state.pointerType != null) {\n        triggerPressEnd(createEvent(state.target, e), state.pointerType, false);\n      }\n      state.isPressed = false;\n      state.isOverTarget = false;\n      state.activePointerId = null;\n      state.pointerType = null;\n      removeAllGlobalListeners();\n      if (!allowTextSelectionOnPress) {\n        restoreTextSelection(state.target);\n      }\n      for (let dispose of state.disposables) {\n        dispose();\n      }\n      state.disposables = [];\n    }\n  });\n\n  let cancelOnPointerExit = useEffectEvent((e: EventBase) => {\n    if (shouldCancelOnPointerExit) {\n      cancel(e);\n    }\n  });\n\n  let triggerClick = useEffectEvent((e: RMouseEvent<FocusableElement>) => {\n    onClick?.(e);\n  });\n\n  let triggerSyntheticClick = useEffectEvent((e: KeyboardEvent | TouchEvent, target: FocusableElement) => {\n    // Some third-party libraries pass in onClick instead of onPress.\n    // Create a fake mouse event and trigger onClick as well.\n    // This matches the browser's native activation behavior for certain elements (e.g. button).\n    // https://html.spec.whatwg.org/#activation\n    // https://html.spec.whatwg.org/#fire-a-synthetic-pointer-event\n    if (onClick) {\n      let event = new MouseEvent('click', e);\n      setEventTarget(event, target);\n      onClick(createSyntheticEvent(event));\n    }\n  });\n\n  let pressProps = useMemo(() => {\n    let state = ref.current;\n    let pressProps: DOMAttributes = {\n      onKeyDown(e) {\n        if (isValidKeyboardEvent(e.nativeEvent, e.currentTarget) && nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          if (shouldPreventDefaultKeyboard(getEventTarget(e.nativeEvent), e.key)) {\n            e.preventDefault();\n          }\n\n          // If the event is repeating, it may have started on a different element\n          // after which focus moved to the current element. Ignore these events and\n          // only handle the first key down event.\n          let shouldStopPropagation = true;\n          if (!state.isPressed && !e.repeat) {\n            state.target = e.currentTarget;\n            state.isPressed = true;\n            state.pointerType = 'keyboard';\n            shouldStopPropagation = triggerPressStart(e, 'keyboard');\n\n            // Focus may move before the key up event, so register the event on the document\n            // instead of the same element where the key down event occurred. Make it capturing so that it will trigger\n            // before stopPropagation from useKeyboard on a child element may happen and thus we can still call triggerPress for the parent element.\n            let originalTarget = e.currentTarget;\n            let pressUp = (e) => {\n              if (isValidKeyboardEvent(e, originalTarget) && !e.repeat && nodeContains(originalTarget, getEventTarget(e)) && state.target) {\n                triggerPressUp(createEvent(state.target, e), 'keyboard');\n              }\n            };\n\n            addGlobalListener(getOwnerDocument(e.currentTarget), 'keyup', chain(pressUp, onKeyUp), true);\n          }\n\n          if (shouldStopPropagation) {\n            e.stopPropagation();\n          }\n\n          // Keep track of the keydown events that occur while the Meta (e.g. Command) key is held.\n          // macOS has a bug where keyup events are not fired while the Meta key is down.\n          // When the Meta key itself is released we will get an event for that, and we'll act as if\n          // all of these other keys were released as well.\n          // https://bugs.chromium.org/p/chromium/issues/detail?id=1393524\n          // https://bugs.webkit.org/show_bug.cgi?id=55291\n          // https://bugzilla.mozilla.org/show_bug.cgi?id=1299553\n          if (e.metaKey && isMac()) {\n            state.metaKeyEvents?.set(e.key, e.nativeEvent);\n          }\n        } else if (e.key === 'Meta') {\n          state.metaKeyEvents = new Map();\n        }\n      },\n      onClick(e) {\n        if (e && !nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          return;\n        }\n\n        if (e && e.button === 0 && !state.isTriggeringEvent && !(openLink as any).isOpening) {\n          let shouldStopPropagation = true;\n          if (isDisabled) {\n            e.preventDefault();\n          }\n          \n          // If triggered from a screen reader or by using element.click(),\n          // trigger as if it were a keyboard click.\n          if (!state.ignoreEmulatedMouseEvents && !state.isPressed && (state.pointerType === 'virtual' || isVirtualClick(e.nativeEvent))) {\n            let stopPressStart = triggerPressStart(e, 'virtual');\n            let stopPressUp = triggerPressUp(e, 'virtual');\n            let stopPressEnd = triggerPressEnd(e, 'virtual');\n            triggerClick(e);\n            shouldStopPropagation = stopPressStart && stopPressUp && stopPressEnd;\n          } else if (state.isPressed && state.pointerType !== 'keyboard') {\n            let pointerType = state.pointerType || (e.nativeEvent as PointerEvent).pointerType as PointerType || 'virtual';\n            let stopPressUp = triggerPressUp(createEvent(e.currentTarget, e), pointerType);\n            let stopPressEnd =  triggerPressEnd(createEvent(e.currentTarget, e), pointerType, true);\n            shouldStopPropagation = stopPressUp && stopPressEnd;\n            state.isOverTarget = false;\n            triggerClick(e);\n            cancel(e);\n          }\n\n          state.ignoreEmulatedMouseEvents = false;\n          if (shouldStopPropagation) {\n            e.stopPropagation();\n          }\n        }\n      }\n    };\n\n    let onKeyUp = (e: KeyboardEvent) => {\n      if (state.isPressed && state.target && isValidKeyboardEvent(e, state.target)) {\n        if (shouldPreventDefaultKeyboard(getEventTarget(e), e.key)) {\n          e.preventDefault();\n        }\n\n        let target = getEventTarget(e);\n        let wasPressed = nodeContains(state.target, getEventTarget(e));\n        triggerPressEnd(createEvent(state.target, e), 'keyboard', wasPressed);\n        if (wasPressed) {\n          triggerSyntheticClick(e, state.target);\n        }\n        removeAllGlobalListeners();\n\n        // If a link was triggered with a key other than Enter, open the URL ourselves.\n        // This means the link has a role override, and the default browser behavior\n        // only applies when using the Enter key.\n        if (e.key !== 'Enter' && isHTMLAnchorLink(state.target) && nodeContains(state.target, target) && !e[LINK_CLICKED]) {\n          // Store a hidden property on the event so we only trigger link click once,\n          // even if there are multiple usePress instances attached to the element.\n          e[LINK_CLICKED] = true;\n          openLink(state.target, e, false);\n        }\n\n        state.isPressed = false;\n        state.metaKeyEvents?.delete(e.key);\n      } else if (e.key === 'Meta' && state.metaKeyEvents?.size) {\n        // If we recorded keydown events that occurred while the Meta key was pressed,\n        // and those haven't received keyup events already, fire keyup events ourselves.\n        // See comment above for more info about the macOS bug causing this.\n        let events = state.metaKeyEvents;\n        state.metaKeyEvents = undefined;\n        for (let event of events.values()) {\n          state.target?.dispatchEvent(new KeyboardEvent('keyup', event));\n        }\n      }\n    };\n\n    if (typeof PointerEvent !== 'undefined') {\n      pressProps.onPointerDown = (e) => {\n        // Only handle left clicks, and ignore events that bubbled through portals.\n        if (e.button !== 0 || !nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          return;\n        }\n\n        // iOS safari fires pointer events from VoiceOver with incorrect coordinates/target.\n        // Ignore and let the onClick handler take care of it instead.\n        // https://bugs.webkit.org/show_bug.cgi?id=222627\n        // https://bugs.webkit.org/show_bug.cgi?id=223202\n        if (isVirtualPointerEvent(e.nativeEvent)) {\n          state.pointerType = 'virtual';\n          return;\n        }\n\n        state.pointerType = e.pointerType;\n\n        let shouldStopPropagation = true;\n        if (!state.isPressed) {\n          state.isPressed = true;\n          state.isOverTarget = true;\n          state.activePointerId = e.pointerId;\n          state.target = e.currentTarget as FocusableElement;\n\n          if (!allowTextSelectionOnPress) {\n            disableTextSelection(state.target);\n          }\n\n          shouldStopPropagation = triggerPressStart(e, state.pointerType);\n\n          // Release pointer capture so that touch interactions can leave the original target.\n          // This enables onPointerLeave and onPointerEnter to fire.\n          let target = getEventTarget(e.nativeEvent);\n          if ('releasePointerCapture' in target) {\n            target.releasePointerCapture(e.pointerId);\n          }\n\n          addGlobalListener(getOwnerDocument(e.currentTarget), 'pointerup', onPointerUp, false);\n          addGlobalListener(getOwnerDocument(e.currentTarget), 'pointercancel', onPointerCancel, false);\n        }\n\n        if (shouldStopPropagation) {\n          e.stopPropagation();\n        }\n      };\n\n      pressProps.onMouseDown = (e) => {\n        if (!nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          return;\n        }\n\n        if (e.button === 0) {\n          if (preventFocusOnPress) {\n            let dispose = preventFocus(e.target as FocusableElement);\n            if (dispose) {\n              state.disposables.push(dispose);\n            }\n          }\n\n          e.stopPropagation();\n        }\n      };\n\n      pressProps.onPointerUp = (e) => {\n        // iOS fires pointerup with zero width and height, so check the pointerType recorded during pointerdown.\n        if (!nodeContains(e.currentTarget, getEventTarget(e.nativeEvent)) || state.pointerType === 'virtual') {\n          return;\n        }\n\n        // Only handle left clicks. If isPressed is true, delay until onClick.\n        if (e.button === 0 && !state.isPressed) {\n          triggerPressUp(e, state.pointerType || e.pointerType);\n        }\n      };\n\n      pressProps.onPointerEnter = (e) => {\n        if (e.pointerId === state.activePointerId && state.target && !state.isOverTarget && state.pointerType != null) {\n          state.isOverTarget = true;\n          triggerPressStart(createEvent(state.target, e), state.pointerType);\n        }\n      };\n\n      pressProps.onPointerLeave = (e) => {\n        if (e.pointerId === state.activePointerId && state.target && state.isOverTarget && state.pointerType != null) {\n          state.isOverTarget = false;\n          triggerPressEnd(createEvent(state.target, e), state.pointerType, false);\n          cancelOnPointerExit(e);\n        }\n      };\n\n      let onPointerUp = (e: PointerEvent) => {\n        if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0 && state.target) {\n          if (nodeContains(state.target, getEventTarget(e)) && state.pointerType != null) {\n            // Wait for onClick to fire onPress. This avoids browser issues when the DOM\n            // is mutated between onPointerUp and onClick, and is more compatible with third party libraries.\n            // https://github.com/adobe/react-spectrum/issues/1513\n            // https://issues.chromium.org/issues/40732224\n            // However, iOS and Android do not focus or fire onClick after a long press.\n            // We work around this by triggering a click ourselves after a timeout.\n            // This timeout is canceled during the click event in case the real one fires first.\n            // The timeout must be at least 32ms, because Safari on iOS delays the click event on\n            // non-form elements without certain ARIA roles (for hover emulation).\n            // https://github.com/WebKit/WebKit/blob/dccfae42bb29bd4bdef052e469f604a9387241c0/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm#L875-L892\n            let clicked = false;\n            let timeout = setTimeout(() => {\n              if (state.isPressed && state.target instanceof HTMLElement) {\n                if (clicked) {\n                  cancel(e);\n                } else {\n                  focusWithoutScrolling(state.target);\n                  state.target.click();\n                }\n              }\n            }, 80);\n            // Use a capturing listener to track if a click occurred.\n            // If stopPropagation is called it may never reach our handler.\n            addGlobalListener(e.currentTarget as Document, 'click', () => clicked = true, true);\n            state.disposables.push(() => clearTimeout(timeout));\n          } else {\n            cancel(e);\n          }\n\n          // Ignore subsequent onPointerLeave event before onClick on touch devices.\n          state.isOverTarget = false;\n        }\n      };\n\n      let onPointerCancel = (e: PointerEvent) => {\n        cancel(e);\n      };\n\n      pressProps.onDragStart = (e) => {\n        if (!nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          return;\n        }\n\n        // Safari does not call onPointerCancel when a drag starts, whereas Chrome and Firefox do.\n        cancel(e);\n      };\n    } else if (process.env.NODE_ENV === 'test') {\n      // NOTE: this fallback branch is entirely used by unit tests.\n      // All browsers now support pointer events, but JSDOM still does not.\n\n      pressProps.onMouseDown = (e) => {\n        // Only handle left clicks\n        if (e.button !== 0 || !nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          return;\n        }\n\n        if (state.ignoreEmulatedMouseEvents) {\n          e.stopPropagation();\n          return;\n        }\n\n        state.isPressed = true;\n        state.isOverTarget = true;\n        state.target = e.currentTarget;\n        state.pointerType = isVirtualClick(e.nativeEvent) ? 'virtual' : 'mouse';\n\n        // Flush sync so that focus moved during react re-renders occurs before we yield back to the browser.\n        let shouldStopPropagation = flushSync(() => triggerPressStart(e, state.pointerType!));\n        if (shouldStopPropagation) {\n          e.stopPropagation();\n        }\n\n        if (preventFocusOnPress) {\n          let dispose = preventFocus(e.target as FocusableElement);\n          if (dispose) {\n            state.disposables.push(dispose);\n          }\n        }\n\n        addGlobalListener(getOwnerDocument(e.currentTarget), 'mouseup', onMouseUp, false);\n      };\n\n      pressProps.onMouseEnter = (e) => {\n        if (!nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          return;\n        }\n\n        let shouldStopPropagation = true;\n        if (state.isPressed && !state.ignoreEmulatedMouseEvents && state.pointerType != null) {\n          state.isOverTarget = true;\n          shouldStopPropagation = triggerPressStart(e, state.pointerType);\n        }\n\n        if (shouldStopPropagation) {\n          e.stopPropagation();\n        }\n      };\n\n      pressProps.onMouseLeave = (e) => {\n        if (!nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          return;\n        }\n\n        let shouldStopPropagation = true;\n        if (state.isPressed && !state.ignoreEmulatedMouseEvents && state.pointerType != null) {\n          state.isOverTarget = false;\n          shouldStopPropagation = triggerPressEnd(e, state.pointerType, false);\n          cancelOnPointerExit(e);\n        }\n\n        if (shouldStopPropagation) {\n          e.stopPropagation();\n        }\n      };\n\n      pressProps.onMouseUp = (e) => {\n        if (!nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          return;\n        }\n\n        if (!state.ignoreEmulatedMouseEvents && e.button === 0 && !state.isPressed) {\n          triggerPressUp(e, state.pointerType || 'mouse');\n        }\n      };\n\n      let onMouseUp = (e: MouseEvent) => {\n        // Only handle left clicks\n        if (e.button !== 0) {\n          return;\n        }\n\n        if (state.ignoreEmulatedMouseEvents) {\n          state.ignoreEmulatedMouseEvents = false;\n          return;\n        }\n\n        if (state.target && state.target.contains(e.target as Element) && state.pointerType != null) {\n          // Wait for onClick to fire onPress. This avoids browser issues when the DOM\n          // is mutated between onMouseUp and onClick, and is more compatible with third party libraries.\n        } else {\n          cancel(e);\n        }\n\n        state.isOverTarget = false;\n      };\n\n      pressProps.onTouchStart = (e) => {\n        if (!nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          return;\n        }\n\n        let touch = getTouchFromEvent(e.nativeEvent);\n        if (!touch) {\n          return;\n        }\n        state.activePointerId = touch.identifier;\n        state.ignoreEmulatedMouseEvents = true;\n        state.isOverTarget = true;\n        state.isPressed = true;\n        state.target = e.currentTarget;\n        state.pointerType = 'touch';\n\n        if (!allowTextSelectionOnPress) {\n          disableTextSelection(state.target);\n        }\n\n        let shouldStopPropagation = triggerPressStart(createTouchEvent(state.target, e), state.pointerType);\n        if (shouldStopPropagation) {\n          e.stopPropagation();\n        }\n\n        addGlobalListener(getOwnerWindow(e.currentTarget), 'scroll', onScroll, true);\n      };\n\n      pressProps.onTouchMove = (e) => {\n        if (!nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          return;\n        }\n\n        if (!state.isPressed) {\n          e.stopPropagation();\n          return;\n        }\n\n        let touch = getTouchById(e.nativeEvent, state.activePointerId);\n        let shouldStopPropagation = true;\n        if (touch && isOverTarget(touch, e.currentTarget)) {\n          if (!state.isOverTarget && state.pointerType != null) {\n            state.isOverTarget = true;\n            shouldStopPropagation = triggerPressStart(createTouchEvent(state.target!, e), state.pointerType);\n          }\n        } else if (state.isOverTarget && state.pointerType != null) {\n          state.isOverTarget = false;\n          shouldStopPropagation = triggerPressEnd(createTouchEvent(state.target!, e), state.pointerType, false);\n          cancelOnPointerExit(createTouchEvent(state.target!, e));\n        }\n\n        if (shouldStopPropagation) {\n          e.stopPropagation();\n        }\n      };\n\n      pressProps.onTouchEnd = (e) => {\n        if (!nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          return;\n        }\n\n        if (!state.isPressed) {\n          e.stopPropagation();\n          return;\n        }\n\n        let touch = getTouchById(e.nativeEvent, state.activePointerId);\n        let shouldStopPropagation = true;\n        if (touch && isOverTarget(touch, e.currentTarget) && state.pointerType != null) {\n          triggerPressUp(createTouchEvent(state.target!, e), state.pointerType);\n          shouldStopPropagation = triggerPressEnd(createTouchEvent(state.target!, e), state.pointerType);\n          triggerSyntheticClick(e.nativeEvent, state.target!);\n        } else if (state.isOverTarget && state.pointerType != null) {\n          shouldStopPropagation = triggerPressEnd(createTouchEvent(state.target!, e), state.pointerType, false);\n        }\n\n        if (shouldStopPropagation) {\n          e.stopPropagation();\n        }\n\n        state.isPressed = false;\n        state.activePointerId = null;\n        state.isOverTarget = false;\n        state.ignoreEmulatedMouseEvents = true;\n        if (state.target && !allowTextSelectionOnPress) {\n          restoreTextSelection(state.target);\n        }\n        removeAllGlobalListeners();\n      };\n\n      pressProps.onTouchCancel = (e) => {\n        if (!nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          return;\n        }\n\n        e.stopPropagation();\n        if (state.isPressed) {\n          cancel(createTouchEvent(state.target!, e));\n        }\n      };\n\n      let onScroll = (e: Event) => {\n        if (state.isPressed && nodeContains(getEventTarget(e), state.target)) {\n          cancel({\n            currentTarget: state.target,\n            shiftKey: false,\n            ctrlKey: false,\n            metaKey: false,\n            altKey: false\n          });\n        }\n      };\n\n      pressProps.onDragStart = (e) => {\n        if (!nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))) {\n          return;\n        }\n\n        cancel(e);\n      };\n    }\n\n    return pressProps;\n  }, [\n    addGlobalListener,\n    isDisabled,\n    preventFocusOnPress,\n    removeAllGlobalListeners,\n    allowTextSelectionOnPress,\n    cancel,\n    cancelOnPointerExit,\n    triggerPressEnd,\n    triggerPressStart,\n    triggerPressUp,\n    triggerClick,\n    triggerSyntheticClick\n  ]);\n\n  // Avoid onClick delay for double tap to zoom by default.\n  useEffect(() => {\n    if (!domRef || process.env.NODE_ENV === 'test') {\n      return;\n    }\n\n    const ownerDocument = getOwnerDocument(domRef.current);\n    if (!ownerDocument || !ownerDocument.head || ownerDocument.getElementById(STYLE_ID)) {\n      return;\n    }\n\n    const style = ownerDocument.createElement('style');\n    style.id = STYLE_ID;\n    // touchAction: 'manipulation' is supposed to be equivalent, but in\n    // Safari it causes onPointerCancel not to fire on scroll.\n    // https://bugs.webkit.org/show_bug.cgi?id=240917\n    style.textContent = `\n@layer {\n  [${PRESSABLE_ATTRIBUTE}] {\n    touch-action: pan-x pan-y pinch-zoom;\n  }\n}\n    `.trim();\n    ownerDocument.head.prepend(style);\n  }, [domRef]);\n\n  // Remove user-select: none in case component unmounts immediately after pressStart\n  useEffect(() => {\n    let state = ref.current;\n    return () => {\n      if (!allowTextSelectionOnPress) {\n        restoreTextSelection(state.target ?? undefined);\n      }\n      for (let dispose of state.disposables) {\n        dispose();\n      }\n      state.disposables = [];\n    };\n  }, [allowTextSelectionOnPress]);\n\n  return {\n    isPressed: isPressedProp || isPressed,\n    pressProps: mergeProps(domProps, pressProps, {[PRESSABLE_ATTRIBUTE]: true})\n  };\n}\n\nfunction isHTMLAnchorLink(target: Element): target is HTMLAnchorElement {\n  return target.tagName === 'A' && target.hasAttribute('href');\n}\n\nfunction isValidKeyboardEvent(event: KeyboardEvent, currentTarget: Element): boolean {\n  const {key, code} = event;\n  const element = currentTarget as HTMLElement;\n  const role = element.getAttribute('role');\n  // Accessibility for keyboards. Space and Enter only.\n  // \"Spacebar\" is for IE 11\n  return (\n    (key === 'Enter' || key === ' ' || key === 'Spacebar' || code === 'Space') &&\n    !((element instanceof getOwnerWindow(element).HTMLInputElement && !isValidInputKey(element, key)) ||\n      element instanceof getOwnerWindow(element).HTMLTextAreaElement ||\n      element.isContentEditable) &&\n    // Links should only trigger with Enter key\n    !((role === 'link' || (!role && isHTMLAnchorLink(element))) && key !== 'Enter')\n  );\n}\n\nfunction getTouchFromEvent(event: TouchEvent): Touch | null {\n  const {targetTouches} = event;\n  if (targetTouches.length > 0) {\n    return targetTouches[0];\n  }\n  return null;\n}\n\nfunction getTouchById(\n  event: TouchEvent,\n  pointerId: null | number\n): null | Touch {\n  const changedTouches = event.changedTouches;\n  for (let i = 0; i < changedTouches.length; i++) {\n    const touch = changedTouches[i];\n    if (touch.identifier === pointerId) {\n      return touch;\n    }\n  }\n  return null;\n}\n\nfunction createTouchEvent(target: FocusableElement, e: RTouchEvent<FocusableElement>): EventBase {\n  let clientX = 0;\n  let clientY = 0;\n  if (e.targetTouches && e.targetTouches.length === 1) {\n    clientX = e.targetTouches[0].clientX;\n    clientY = e.targetTouches[0].clientY;\n  }\n  return {\n    currentTarget: target,\n    shiftKey: e.shiftKey,\n    ctrlKey: e.ctrlKey,\n    metaKey: e.metaKey,\n    altKey: e.altKey,\n    clientX,\n    clientY\n  };\n}\n\nfunction createEvent(target: FocusableElement, e: EventBase): EventBase {\n  let clientX = e.clientX;\n  let clientY = e.clientY;\n  return {\n    currentTarget: target,\n    shiftKey: e.shiftKey,\n    ctrlKey: e.ctrlKey,\n    metaKey: e.metaKey,\n    altKey: e.altKey,\n    clientX,\n    clientY\n  };\n}\n\ninterface Rect {\n  top: number,\n  right: number,\n  bottom: number,\n  left: number\n}\n\ninterface EventPoint {\n  clientX: number,\n  clientY: number,\n  width?: number,\n  height?: number,\n  radiusX?: number,\n  radiusY?: number\n}\n\nfunction getPointClientRect(point: EventPoint): Rect {\n  let offsetX = 0;\n  let offsetY = 0;\n  if (point.width !== undefined) {\n    offsetX = (point.width / 2);\n  } else if (point.radiusX !== undefined) {\n    offsetX = point.radiusX;\n  }\n  if (point.height !== undefined) {\n    offsetY = (point.height / 2);\n  } else if (point.radiusY !== undefined) {\n    offsetY = point.radiusY;\n  }\n\n  return {\n    top: point.clientY - offsetY,\n    right: point.clientX + offsetX,\n    bottom: point.clientY + offsetY,\n    left: point.clientX - offsetX\n  };\n}\n\nfunction areRectanglesOverlapping(a: Rect, b: Rect) {\n  // check if they cannot overlap on x axis\n  if (a.left > b.right || b.left > a.right) {\n    return false;\n  }\n  // check if they cannot overlap on y axis\n  if (a.top > b.bottom || b.top > a.bottom) {\n    return false;\n  }\n  return true;\n}\n\nfunction isOverTarget(point: EventPoint, target: Element) {\n  let rect = target.getBoundingClientRect();\n  let pointRect = getPointClientRect(point);\n  return areRectanglesOverlapping(rect, pointRect);\n}\n\nfunction shouldPreventDefaultUp(target: Element) {\n  if (target instanceof HTMLInputElement) {\n    return false;\n  }\n\n  if (target instanceof HTMLButtonElement) {\n    return target.type !== 'submit' && target.type !== 'reset';\n  }\n\n  if (isHTMLAnchorLink(target)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction shouldPreventDefaultKeyboard(target: Element, key: string) {\n  if (target instanceof HTMLInputElement) {\n    return !isValidInputKey(target, key);\n  }\n\n  return shouldPreventDefaultUp(target);\n}\n\nconst nonTextInputTypes = new Set([\n  'checkbox',\n  'radio',\n  'range',\n  'color',\n  'file',\n  'image',\n  'button',\n  'submit',\n  'reset'\n]);\n\nfunction isValidInputKey(target: HTMLInputElement, key: string) {\n  // Only space should toggle checkboxes and radios, not enter.\n  return target.type === 'checkbox' || target.type === 'radio'\n    ? key === ' '\n    : nonTextInputTypes.has(target.type);\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {getOwnerDocument, getOwnerWindow, isMac, isVirtualClick} from '@react-aria/utils';\nimport {ignoreFocusEvent} from './utils';\nimport {useEffect, useState} from 'react';\nimport {useIsSSR} from '@react-aria/ssr';\n\nexport type Modality = 'keyboard' | 'pointer' | 'virtual';\ntype HandlerEvent = PointerEvent | MouseEvent | KeyboardEvent | FocusEvent | null;\ntype Handler = (modality: Modality, e: HandlerEvent) => void;\nexport type FocusVisibleHandler = (isFocusVisible: boolean) => void;\nexport interface FocusVisibleProps {\n  /** Whether the element is a text input. */\n  isTextInput?: boolean,\n  /** Whether the element will be auto focused. */\n  autoFocus?: boolean\n}\n\nexport interface FocusVisibleResult {\n  /** Whether keyboard focus is visible globally. */\n  isFocusVisible: boolean\n}\n\nlet currentModality: null | Modality = null;\nlet changeHandlers = new Set<Handler>();\ninterface GlobalListenerData {\n  focus: () => void\n}\nexport let hasSetupGlobalListeners = new Map<Window, GlobalListenerData>(); // We use a map here to support setting event listeners across multiple document objects.\nlet hasEventBeforeFocus = false;\nlet hasBlurredWindowRecently = false;\n\n// Only Tab or Esc keys will make focus visible on text input elements\nconst FOCUS_VISIBLE_INPUT_KEYS = {\n  Tab: true,\n  Escape: true\n};\n\nfunction triggerChangeHandlers(modality: Modality, e: HandlerEvent) {\n  for (let handler of changeHandlers) {\n    handler(modality, e);\n  }\n}\n\n/**\n * Helper function to determine if a KeyboardEvent is unmodified and could make keyboard focus styles visible.\n */\nfunction isValidKey(e: KeyboardEvent) {\n  // Control and Shift keys trigger when navigating back to the tab with keyboard.\n  return !(e.metaKey || (!isMac() && e.altKey) || e.ctrlKey || e.key === 'Control' || e.key === 'Shift' || e.key === 'Meta');\n}\n\n\nfunction handleKeyboardEvent(e: KeyboardEvent) {\n  hasEventBeforeFocus = true;\n  if (isValidKey(e)) {\n    currentModality = 'keyboard';\n    triggerChangeHandlers('keyboard', e);\n  }\n}\n\nfunction handlePointerEvent(e: PointerEvent | MouseEvent) {\n  currentModality = 'pointer';\n  if (e.type === 'mousedown' || e.type === 'pointerdown') {\n    hasEventBeforeFocus = true;\n    triggerChangeHandlers('pointer', e);\n  }\n}\n\nfunction handleClickEvent(e: MouseEvent) {\n  if (isVirtualClick(e)) {\n    hasEventBeforeFocus = true;\n    currentModality = 'virtual';\n  }\n}\n\nfunction handleFocusEvent(e: FocusEvent) {\n  // Firefox fires two extra focus events when the user first clicks into an iframe:\n  // first on the window, then on the document. We ignore these events so they don't\n  // cause keyboard focus rings to appear.\n  if (e.target === window || e.target === document || ignoreFocusEvent || !e.isTrusted) {\n    return;\n  }\n\n  // If a focus event occurs without a preceding keyboard or pointer event, switch to virtual modality.\n  // This occurs, for example, when navigating a form with the next/previous buttons on iOS.\n  if (!hasEventBeforeFocus && !hasBlurredWindowRecently) {\n    currentModality = 'virtual';\n    triggerChangeHandlers('virtual', e);\n  }\n\n  hasEventBeforeFocus = false;\n  hasBlurredWindowRecently = false;\n}\n\nfunction handleWindowBlur() {\n  if (ignoreFocusEvent) {\n    return;\n  }\n\n  // When the window is blurred, reset state. This is necessary when tabbing out of the window,\n  // for example, since a subsequent focus event won't be fired.\n  hasEventBeforeFocus = false;\n  hasBlurredWindowRecently = true;\n}\n\n/**\n * Setup global event listeners to control when keyboard focus style should be visible.\n */\nfunction setupGlobalFocusEvents(element?: HTMLElement | null) {\n  if (typeof window === 'undefined' || typeof document === 'undefined' || hasSetupGlobalListeners.get(getOwnerWindow(element))) {\n    return;\n  }\n\n  const windowObject = getOwnerWindow(element);\n  const documentObject = getOwnerDocument(element);\n\n  // Programmatic focus() calls shouldn't affect the current input modality.\n  // However, we need to detect other cases when a focus event occurs without\n  // a preceding user event (e.g. screen reader focus). Overriding the focus\n  // method on HTMLElement.prototype is a bit hacky, but works.\n  let focus = windowObject.HTMLElement.prototype.focus;\n  windowObject.HTMLElement.prototype.focus = function () {\n    hasEventBeforeFocus = true;\n    focus.apply(this, arguments as unknown as [options?: FocusOptions | undefined]);\n  };\n\n  documentObject.addEventListener('keydown', handleKeyboardEvent, true);\n  documentObject.addEventListener('keyup', handleKeyboardEvent, true);\n  documentObject.addEventListener('click', handleClickEvent, true);\n\n  // Register focus events on the window so they are sure to happen\n  // before React's event listeners (registered on the document).\n  windowObject.addEventListener('focus', handleFocusEvent, true);\n  windowObject.addEventListener('blur', handleWindowBlur, false);\n\n  if (typeof PointerEvent !== 'undefined') {\n    documentObject.addEventListener('pointerdown', handlePointerEvent, true);\n    documentObject.addEventListener('pointermove', handlePointerEvent, true);\n    documentObject.addEventListener('pointerup', handlePointerEvent, true);\n  } else if (process.env.NODE_ENV === 'test') {\n    documentObject.addEventListener('mousedown', handlePointerEvent, true);\n    documentObject.addEventListener('mousemove', handlePointerEvent, true);\n    documentObject.addEventListener('mouseup', handlePointerEvent, true);\n  }\n\n  // Add unmount handler\n  windowObject.addEventListener('beforeunload', () => {\n    tearDownWindowFocusTracking(element);\n  }, {once: true});\n\n  hasSetupGlobalListeners.set(windowObject, {focus});\n}\n\nconst tearDownWindowFocusTracking = (element, loadListener?: () => void) => {\n  const windowObject = getOwnerWindow(element);\n  const documentObject = getOwnerDocument(element);\n  if (loadListener) {\n    documentObject.removeEventListener('DOMContentLoaded', loadListener);\n  }\n  if (!hasSetupGlobalListeners.has(windowObject)) {\n    return;\n  }\n  windowObject.HTMLElement.prototype.focus = hasSetupGlobalListeners.get(windowObject)!.focus;\n\n  documentObject.removeEventListener('keydown', handleKeyboardEvent, true);\n  documentObject.removeEventListener('keyup', handleKeyboardEvent, true);\n  documentObject.removeEventListener('click', handleClickEvent, true);\n\n  windowObject.removeEventListener('focus', handleFocusEvent, true);\n  windowObject.removeEventListener('blur', handleWindowBlur, false);\n\n  if (typeof PointerEvent !== 'undefined') {\n    documentObject.removeEventListener('pointerdown', handlePointerEvent, true);\n    documentObject.removeEventListener('pointermove', handlePointerEvent, true);\n    documentObject.removeEventListener('pointerup', handlePointerEvent, true);\n  } else if (process.env.NODE_ENV === 'test') {\n    documentObject.removeEventListener('mousedown', handlePointerEvent, true);\n    documentObject.removeEventListener('mousemove', handlePointerEvent, true);\n    documentObject.removeEventListener('mouseup', handlePointerEvent, true);\n  }\n\n  hasSetupGlobalListeners.delete(windowObject);\n};\n\n/**\n * EXPERIMENTAL\n * Adds a window (i.e. iframe) to the list of windows that are being tracked for focus visible.\n *\n * Sometimes apps render portions of their tree into an iframe. In this case, we cannot accurately track if the focus\n * is visible because we cannot see interactions inside the iframe. If you have this in your application's architecture,\n * then this function will attach event listeners inside the iframe. You should call `addWindowFocusTracking` with an\n * element from inside the window you wish to add. We'll retrieve the relevant elements based on that.\n * Note, you do not need to call this for the default window, as we call it for you.\n *\n * When you are ready to stop listening, but you do not wish to unmount the iframe, you may call the cleanup function\n * returned by `addWindowFocusTracking`. Otherwise, when you unmount the iframe, all listeners and state will be cleaned\n * up automatically for you.\n *\n * @param element @default document.body - The element provided will be used to get the window to add.\n * @returns A function to remove the event listeners and cleanup the state.\n */\nexport function addWindowFocusTracking(element?: HTMLElement | null): () => void {\n  const documentObject = getOwnerDocument(element);\n  let loadListener;\n  if (documentObject.readyState !== 'loading') {\n    setupGlobalFocusEvents(element);\n  } else {\n    loadListener = () => {\n      setupGlobalFocusEvents(element);\n    };\n    documentObject.addEventListener('DOMContentLoaded', loadListener);\n  }\n\n  return () => tearDownWindowFocusTracking(element, loadListener);\n}\n\n// Server-side rendering does not have the document object defined\n// eslint-disable-next-line no-restricted-globals\nif (typeof document !== 'undefined') {\n  addWindowFocusTracking();\n}\n\n/**\n * If true, keyboard focus is visible.\n */\nexport function isFocusVisible(): boolean {\n  return currentModality !== 'pointer';\n}\n\nexport function getInteractionModality(): Modality | null {\n  return currentModality;\n}\n\nexport function setInteractionModality(modality: Modality): void {\n  currentModality = modality;\n  triggerChangeHandlers(modality, null);\n}\n\n/**\n * Keeps state of the current modality.\n */\nexport function useInteractionModality(): Modality | null {\n  setupGlobalFocusEvents();\n\n  let [modality, setModality] = useState(currentModality);\n  useEffect(() => {\n    let handler = () => {\n      setModality(currentModality);\n    };\n\n    changeHandlers.add(handler);\n    return () => {\n      changeHandlers.delete(handler);\n    };\n  }, []);\n\n  return useIsSSR() ? null : modality;\n}\n\nconst nonTextInputTypes = new Set([\n  'checkbox',\n  'radio',\n  'range',\n  'color',\n  'file',\n  'image',\n  'button',\n  'submit',\n  'reset'\n]);\n\n/**\n * If this is attached to text input component, return if the event is a focus event (Tab/Escape keys pressed) so that\n * focus visible style can be properly set.\n */\nfunction isKeyboardFocusEvent(isTextInput: boolean, modality: Modality, e: HandlerEvent) {\n  let document = getOwnerDocument(e?.target as Element);\n  const IHTMLInputElement = typeof window !== 'undefined' ? getOwnerWindow(e?.target as Element).HTMLInputElement : HTMLInputElement;\n  const IHTMLTextAreaElement = typeof window !== 'undefined' ? getOwnerWindow(e?.target as Element).HTMLTextAreaElement : HTMLTextAreaElement;\n  const IHTMLElement = typeof window !== 'undefined' ? getOwnerWindow(e?.target as Element).HTMLElement : HTMLElement;\n  const IKeyboardEvent = typeof window !== 'undefined' ? getOwnerWindow(e?.target as Element).KeyboardEvent : KeyboardEvent;\n\n  // For keyboard events that occur on a non-input element that will move focus into input element (aka ArrowLeft going from Datepicker button to the main input group)\n  // we need to rely on the user passing isTextInput into here. This way we can skip toggling focus visiblity for said input element\n  isTextInput = isTextInput ||\n    (document.activeElement instanceof IHTMLInputElement && !nonTextInputTypes.has(document.activeElement.type)) ||\n    document.activeElement instanceof IHTMLTextAreaElement ||\n    (document.activeElement instanceof IHTMLElement && document.activeElement.isContentEditable);\n  return !(isTextInput && modality === 'keyboard' && e instanceof IKeyboardEvent && !FOCUS_VISIBLE_INPUT_KEYS[e.key]);\n}\n\n/**\n * Manages focus visible state for the page, and subscribes individual components for updates.\n */\nexport function useFocusVisible(props: FocusVisibleProps = {}): FocusVisibleResult {\n  let {isTextInput, autoFocus} = props;\n  let [isFocusVisibleState, setFocusVisible] = useState(autoFocus || isFocusVisible());\n  useFocusVisibleListener((isFocusVisible) => {\n    setFocusVisible(isFocusVisible);\n  }, [isTextInput], {isTextInput});\n\n  return {isFocusVisible: isFocusVisibleState};\n}\n\n/**\n * Listens for trigger change and reports if focus is visible (i.e., modality is not pointer).\n */\nexport function useFocusVisibleListener(fn: FocusVisibleHandler, deps: ReadonlyArray<any>, opts?: {isTextInput?: boolean}): void {\n  setupGlobalFocusEvents();\n\n  useEffect(() => {\n    let handler = (modality: Modality, e: HandlerEvent) => {\n      // We want to early return for any keyboard events that occur inside text inputs EXCEPT for Tab and Escape\n      if (!isKeyboardFocusEvent(!!(opts?.isTextInput), modality, e)) {\n        return;\n      }\n      fn(isFocusVisible());\n    };\n    changeHandlers.add(handler);\n    return () => {\n      changeHandlers.delete(handler);\n    };\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, deps);\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusableElement} from '@react-types/shared';\nimport {\n  focusWithoutScrolling,\n  getActiveElement,\n  getOwnerDocument,\n  runAfterTransition\n} from '@react-aria/utils';\nimport {getInteractionModality} from './useFocusVisible';\n\n/**\n * A utility function that focuses an element while avoiding undesired side effects such\n * as page scrolling and screen reader issues with CSS transitions.\n */\nexport function focusSafely(element: FocusableElement): void {\n  // If the user is interacting with a virtual cursor, e.g. screen reader, then\n  // wait until after any animated transitions that are currently occurring on\n  // the page before shifting focus. This avoids issues with VoiceOver on iOS\n  // causing the page to scroll when moving focus if the element is transitioning\n  // from off the screen.\n  const ownerDocument = getOwnerDocument(element);\n  const activeElement = getActiveElement(ownerDocument);\n  if (getInteractionModality() === 'virtual') {\n    let lastFocusedElement = activeElement;\n    runAfterTransition(() => {\n      // If focus did not move and the element is still in the document, focus it.\n      if (getActiveElement(ownerDocument) === lastFocusedElement && element.isConnected) {\n        focusWithoutScrolling(element);\n      }\n    });\n  } else {\n    focusWithoutScrolling(element);\n  }\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {DOMAttributes, FocusableElement, FocusEvents} from '@react-types/shared';\nimport {FocusEvent, useCallback} from 'react';\nimport {getActiveElement, getEventTarget, getOwnerDocument} from '@react-aria/utils';\nimport {useSyntheticBlurEvent} from './utils';\n\nexport interface FocusProps<Target = FocusableElement> extends FocusEvents<Target> {\n  /** Whether the focus events should be disabled. */\n  isDisabled?: boolean\n}\n\nexport interface FocusResult<Target = FocusableElement> {\n  /** Props to spread onto the target element. */\n  focusProps: DOMAttributes<Target>\n}\n\n/**\n * Handles focus events for the immediate target.\n * Focus events on child elements will be ignored.\n */\nexport function useFocus<Target extends FocusableElement = FocusableElement>(props: FocusProps<Target>): FocusResult<Target> {\n  let {\n    isDisabled,\n    onFocus: onFocusProp,\n    onBlur: onBlurProp,\n    onFocusChange\n  } = props;\n\n  const onBlur: FocusProps<Target>['onBlur'] = useCallback((e: FocusEvent<Target>) => {\n    if (e.target === e.currentTarget) {\n      if (onBlurProp) {\n        onBlurProp(e);\n      }\n\n      if (onFocusChange) {\n        onFocusChange(false);\n      }\n\n      return true;\n    }\n  }, [onBlurProp, onFocusChange]);\n\n\n  const onSyntheticFocus = useSyntheticBlurEvent<Target>(onBlur);\n\n  const onFocus: FocusProps<Target>['onFocus'] = useCallback((e: FocusEvent<Target>) => {\n    // Double check that document.activeElement actually matches e.target in case a previously chained\n    // focus handler already moved focus somewhere else.\n\n    const ownerDocument = getOwnerDocument(e.target);\n    const activeElement = ownerDocument ? getActiveElement(ownerDocument) : getActiveElement();\n    if (e.target === e.currentTarget && activeElement === getEventTarget(e.nativeEvent)) {\n      if (onFocusProp) {\n        onFocusProp(e);\n      }\n\n      if (onFocusChange) {\n        onFocusChange(true);\n      }\n\n      onSyntheticFocus(e);\n    }\n  }, [onFocusChange, onFocusProp, onSyntheticFocus]);\n\n  return {\n    focusProps: {\n      onFocus: (!isDisabled && (onFocusProp || onFocusChange || onBlurProp)) ? onFocus : undefined,\n      onBlur: (!isDisabled && (onBlurProp || onFocusChange)) ? onBlur : undefined\n    }\n  };\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {BaseEvent} from '@react-types/shared';\nimport {SyntheticEvent} from 'react';\n\n/**\n * This function wraps a React event handler to make stopPropagation the default, and support continuePropagation instead.\n */\nexport function createEventHandler<T extends SyntheticEvent>(handler?: (e: BaseEvent<T>) => void): ((e: T) => void) | undefined {\n  if (!handler) {\n    return undefined;\n  }\n\n  let shouldStopPropagation = true;\n  return (e: T) => {\n    let event: BaseEvent<T> = {\n      ...e,\n      preventDefault() {\n        e.preventDefault();\n      },\n      isDefaultPrevented() {\n        return e.isDefaultPrevented();\n      },\n      stopPropagation() {\n        if (shouldStopPropagation && process.env.NODE_ENV !== 'production') {\n          console.error('stopPropagation is now the default behavior for events in React Spectrum. You can use continuePropagation() to revert this behavior.');\n        } else {\n          shouldStopPropagation = true;\n        }\n      },\n      continuePropagation() {\n        shouldStopPropagation = false;\n      },\n      isPropagationStopped() {\n        return shouldStopPropagation;\n      }\n    };\n\n    handler(event);\n\n    if (shouldStopPropagation) {\n      e.stopPropagation();\n    }\n  };\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {createEventHandler} from './createEventHandler';\nimport {DOMAttributes, KeyboardEvents} from '@react-types/shared';\n\nexport interface KeyboardProps extends KeyboardEvents {\n  /** Whether the keyboard events should be disabled. */\n  isDisabled?: boolean\n}\n\nexport interface KeyboardResult {\n  /** Props to spread onto the target element. */\n  keyboardProps: DOMAttributes\n}\n\n/**\n * Handles keyboard interactions for a focusable element.\n */\nexport function useKeyboard(props: KeyboardProps): KeyboardResult {\n  return {\n    keyboardProps: props.isDisabled ? {} : {\n      onKeyDown: createEventHandler(props.onKeyDown),\n      onKeyUp: createEventHandler(props.onKeyUp)\n    }\n  };\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes, FocusableDOMProps, FocusableElement, FocusableProps, RefObject} from '@react-types/shared';\nimport {focusSafely} from './';\nimport {getOwnerWindow, isFocusable, mergeProps, mergeRefs, useObjectRef, useSyncRef} from '@react-aria/utils';\nimport React, {ForwardedRef, forwardRef, MutableRefObject, ReactElement, ReactNode, useContext, useEffect, useRef} from 'react';\nimport {useFocus} from './useFocus';\nimport {useKeyboard} from './useKeyboard';\n\nexport interface FocusableOptions<T = FocusableElement> extends FocusableProps<T>, FocusableDOMProps {\n  /** Whether focus should be disabled. */\n  isDisabled?: boolean\n}\n\nexport interface FocusableProviderProps extends DOMAttributes {\n  /** The child element to provide DOM props to. */\n  children?: ReactNode\n}\n\ninterface FocusableContextValue extends FocusableProviderProps {\n  ref?: MutableRefObject<FocusableElement | null>\n}\n\n// Exported for @react-aria/collections, which forwards this context.\n/** @private */\nexport let FocusableContext = React.createContext<FocusableContextValue | null>(null);\n\nfunction useFocusableContext(ref: RefObject<FocusableElement | null>): FocusableContextValue {\n  let context = useContext(FocusableContext) || {};\n  useSyncRef(context, ref);\n\n  // eslint-disable-next-line\n  let {ref: _, ...otherProps} = context;\n  return otherProps;\n}\n\n/**\n * Provides DOM props to the nearest focusable child.\n */\nexport const FocusableProvider = React.forwardRef(function FocusableProvider(props: FocusableProviderProps, ref: ForwardedRef<FocusableElement>) {\n  let {children, ...otherProps} = props;\n  let objRef = useObjectRef(ref);\n  let context = {\n    ...otherProps,\n    ref: objRef\n  };\n\n  return (\n    <FocusableContext.Provider value={context}>\n      {children}\n    </FocusableContext.Provider>\n  );\n});\n\nexport interface FocusableAria {\n  /** Props for the focusable element. */\n  focusableProps: DOMAttributes\n}\n\n/**\n * Used to make an element focusable and capable of auto focus.\n */\nexport function useFocusable<T extends FocusableElement = FocusableElement>(props: FocusableOptions<T>, domRef: RefObject<FocusableElement | null>): FocusableAria {\n  let {focusProps} = useFocus(props);\n  let {keyboardProps} = useKeyboard(props);\n  let interactions = mergeProps(focusProps, keyboardProps);\n  let domProps = useFocusableContext(domRef);\n  let interactionProps = props.isDisabled ? {} : domProps;\n  let autoFocusRef = useRef(props.autoFocus);\n\n  useEffect(() => {\n    if (autoFocusRef.current && domRef.current) {\n      focusSafely(domRef.current);\n    }\n    autoFocusRef.current = false;\n  }, [domRef]);\n\n  // Always set a tabIndex so that Safari allows focusing native buttons and inputs.\n  let tabIndex: number | undefined = props.excludeFromTabOrder ? -1 : 0;\n  if (props.isDisabled) {\n    tabIndex = undefined;\n  }\n\n  return {\n    focusableProps: mergeProps(\n      {\n        ...interactions,\n        tabIndex\n      },\n      interactionProps\n    )\n  };\n}\n\nexport interface FocusableComponentProps extends FocusableOptions {\n  children: ReactElement<DOMAttributes, string>\n}\n\nexport const Focusable = forwardRef(({children, ...props}: FocusableComponentProps, ref: ForwardedRef<FocusableElement>) => {\n  ref = useObjectRef(ref);\n  let {focusableProps} = useFocusable(props, ref);\n  let child = React.Children.only(children);\n\n  useEffect(() => {\n    if (process.env.NODE_ENV === 'production') {\n      return;\n    }\n\n    let el = ref.current;\n    if (!el || !(el instanceof getOwnerWindow(el).Element)) {\n      console.error('<Focusable> child must forward its ref to a DOM element.');\n      return;\n    }\n\n    if (!props.isDisabled && !isFocusable(el)) {\n      console.warn('<Focusable> child must be focusable. Please ensure the tabIndex prop is passed through.');\n      return;\n    }\n\n    if (\n      el.localName !== 'button' &&\n      el.localName !== 'input' &&\n      el.localName !== 'select' &&\n      el.localName !== 'textarea' &&\n      el.localName !== 'a' &&\n      el.localName !== 'area' &&\n      el.localName !== 'summary' &&\n      el.localName !== 'img' &&\n      el.localName !== 'svg'\n    ) {\n      let role = el.getAttribute('role');\n      if (!role) {\n        console.warn('<Focusable> child must have an interactive ARIA role.');\n      } else if (\n        // https://w3c.github.io/aria/#widget_roles\n        role !== 'application' &&\n        role !== 'button' &&\n        role !== 'checkbox' &&\n        role !== 'combobox' &&\n        role !== 'gridcell' &&\n        role !== 'link' &&\n        role !== 'menuitem' &&\n        role !== 'menuitemcheckbox' &&\n        role !== 'menuitemradio' &&\n        role !== 'option' &&\n        role !== 'radio' &&\n        role !== 'searchbox' &&\n        role !== 'separator' &&\n        role !== 'slider' &&\n        role !== 'spinbutton' &&\n        role !== 'switch' &&\n        role !== 'tab' &&\n        role !== 'tabpanel' &&\n        role !== 'textbox' &&\n        role !== 'treeitem' &&\n        // aria-describedby is also announced on these roles\n        role !== 'img' &&\n        role !== 'meter' &&\n        role !== 'progressbar'\n      ) {\n        console.warn(`<Focusable> child must have an interactive ARIA role. Got \"${role}\".`);\n      }\n    }\n  }, [ref, props.isDisabled]);\n\n  // @ts-ignore\n  let childRef = parseInt(React.version, 10) < 19 ? child.ref : child.props.ref;\n\n  return React.cloneElement(\n    child,\n    {\n      ...mergeProps(focusableProps, child.props),\n      // @ts-ignore\n      ref: mergeRefs(childRef, ref)\n    }\n  );\n});\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {createSyntheticEvent, setEventTarget, useSyntheticBlurEvent} from './utils';\nimport {DOMAttributes} from '@react-types/shared';\nimport {FocusEvent, useCallback, useRef} from 'react';\nimport {getActiveElement, getEventTarget, getOwnerDocument, nodeContains, useGlobalListeners} from '@react-aria/utils';\n\nexport interface FocusWithinProps {\n  /** Whether the focus within events should be disabled. */\n  isDisabled?: boolean,\n  /** Handler that is called when the target element or a descendant receives focus. */\n  onFocusWithin?: (e: FocusEvent) => void,\n  /** Handler that is called when the target element and all descendants lose focus. */\n  onBlurWithin?: (e: FocusEvent) => void,\n  /** Handler that is called when the the focus within state changes. */\n  onFocusWithinChange?: (isFocusWithin: boolean) => void\n}\n\nexport interface FocusWithinResult {\n  /** Props to spread onto the target element. */\n  focusWithinProps: DOMAttributes\n}\n\n/**\n * Handles focus events for the target and its descendants.\n */\nexport function useFocusWithin(props: FocusWithinProps): FocusWithinResult {\n  let {\n    isDisabled,\n    onBlurWithin,\n    onFocusWithin,\n    onFocusWithinChange\n  } = props;\n  let state = useRef({\n    isFocusWithin: false\n  });\n\n  let {addGlobalListener, removeAllGlobalListeners} = useGlobalListeners();\n\n  let onBlur = useCallback((e: FocusEvent) => {\n    // Ignore events bubbling through portals.\n    if (!e.currentTarget.contains(e.target)) {\n      return;\n    }\n\n    // We don't want to trigger onBlurWithin and then immediately onFocusWithin again\n    // when moving focus inside the element. Only trigger if the currentTarget doesn't\n    // include the relatedTarget (where focus is moving).\n    if (state.current.isFocusWithin && !(e.currentTarget as Element).contains(e.relatedTarget as Element)) {\n      state.current.isFocusWithin = false;\n      removeAllGlobalListeners();\n\n      if (onBlurWithin) {\n        onBlurWithin(e);\n      }\n\n      if (onFocusWithinChange) {\n        onFocusWithinChange(false);\n      }\n    }\n  }, [onBlurWithin, onFocusWithinChange, state, removeAllGlobalListeners]);\n\n  let onSyntheticFocus = useSyntheticBlurEvent(onBlur);\n  let onFocus = useCallback((e: FocusEvent) => {\n    // Ignore events bubbling through portals.\n    if (!e.currentTarget.contains(e.target)) {\n      return;\n    }\n\n    // Double check that document.activeElement actually matches e.target in case a previously chained\n    // focus handler already moved focus somewhere else.\n    const ownerDocument = getOwnerDocument(e.target);\n    const activeElement = getActiveElement(ownerDocument);\n    if (!state.current.isFocusWithin && activeElement === getEventTarget(e.nativeEvent)) {\n      if (onFocusWithin) {\n        onFocusWithin(e);\n      }\n\n      if (onFocusWithinChange) {\n        onFocusWithinChange(true);\n      }\n\n      state.current.isFocusWithin = true;\n      onSyntheticFocus(e);\n\n      // Browsers don't fire blur events when elements are removed from the DOM.\n      // However, if a focus event occurs outside the element we're tracking, we\n      // can manually fire onBlur.\n      let currentTarget = e.currentTarget;\n      addGlobalListener(ownerDocument, 'focus', e => {\n        if (state.current.isFocusWithin && !nodeContains(currentTarget, e.target as Element)) {\n          let nativeEvent = new ownerDocument.defaultView!.FocusEvent('blur', {relatedTarget: e.target});\n          setEventTarget(nativeEvent, currentTarget);\n          let event = createSyntheticEvent<FocusEvent>(nativeEvent);\n          onBlur(event);\n        }\n      }, {capture: true});\n    }\n  }, [onFocusWithin, onFocusWithinChange, onSyntheticFocus, addGlobalListener, onBlur]);\n\n  if (isDisabled) {\n    return {\n      focusWithinProps: {\n        // These cannot be null, that would conflict in mergeProps\n        onFocus: undefined,\n        onBlur: undefined\n      }\n    };\n  }\n\n  return {\n    focusWithinProps: {\n      onFocus,\n      onBlur\n    }\n  };\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {DOMAttributes, HoverEvents} from '@react-types/shared';\nimport {getOwnerDocument, nodeContains, useGlobalListeners} from '@react-aria/utils';\nimport {useEffect, useMemo, useRef, useState} from 'react';\n\nexport interface HoverProps extends HoverEvents {\n  /** Whether the hover events should be disabled. */\n  isDisabled?: boolean\n}\n\nexport interface HoverResult {\n  /** Props to spread on the target element. */\n  hoverProps: DOMAttributes,\n  isHovered: boolean\n}\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\n// See https://bugs.webkit.org/show_bug.cgi?id=214609.\nlet globalIgnoreEmulatedMouseEvents = false;\nlet hoverCount = 0;\n\nfunction setGlobalIgnoreEmulatedMouseEvents() {\n  globalIgnoreEmulatedMouseEvents = true;\n\n  // Clear globalIgnoreEmulatedMouseEvents after a short timeout. iOS fires onPointerEnter\n  // with pointerType=\"mouse\" immediately after onPointerUp and before onFocus. On other\n  // devices that don't have this quirk, we don't want to ignore a mouse hover sometime in\n  // the distant future because a user previously touched the element.\n  setTimeout(() => {\n    globalIgnoreEmulatedMouseEvents = false;\n  }, 50);\n}\n\nfunction handleGlobalPointerEvent(e) {\n  if (e.pointerType === 'touch') {\n    setGlobalIgnoreEmulatedMouseEvents();\n  }\n}\n\nfunction setupGlobalTouchEvents() {\n  if (typeof document === 'undefined') {\n    return;\n  }\n\n  if (typeof PointerEvent !== 'undefined') {\n    document.addEventListener('pointerup', handleGlobalPointerEvent);\n  } else if (process.env.NODE_ENV === 'test') {\n    document.addEventListener('touchend', setGlobalIgnoreEmulatedMouseEvents);\n  }\n\n  hoverCount++;\n  return () => {\n    hoverCount--;\n    if (hoverCount > 0) {\n      return;\n    }\n\n    if (typeof PointerEvent !== 'undefined') {\n      document.removeEventListener('pointerup', handleGlobalPointerEvent);\n    } else if (process.env.NODE_ENV === 'test') {\n      document.removeEventListener('touchend', setGlobalIgnoreEmulatedMouseEvents);\n    }\n  };\n}\n\n/**\n * Handles pointer hover interactions for an element. Normalizes behavior\n * across browsers and platforms, and ignores emulated mouse events on touch devices.\n */\nexport function useHover(props: HoverProps): HoverResult {\n  let {\n    onHoverStart,\n    onHoverChange,\n    onHoverEnd,\n    isDisabled\n  } = props;\n\n  let [isHovered, setHovered] = useState(false);\n  let state = useRef({\n    isHovered: false,\n    ignoreEmulatedMouseEvents: false,\n    pointerType: '',\n    target: null\n  }).current;\n\n  useEffect(setupGlobalTouchEvents, []);\n  let {addGlobalListener, removeAllGlobalListeners} = useGlobalListeners();\n\n  let {hoverProps, triggerHoverEnd} = useMemo(() => {\n    let triggerHoverStart = (event, pointerType) => {\n      state.pointerType = pointerType;\n      if (isDisabled || pointerType === 'touch' || state.isHovered || !event.currentTarget.contains(event.target)) {\n        return;\n      }\n\n      state.isHovered = true;\n      let target = event.currentTarget;\n      state.target = target;\n\n      // When an element that is hovered over is removed, no pointerleave event is fired by the browser,\n      // even though the originally hovered target may have shrunk in size so it is no longer hovered.\n      // However, a pointerover event will be fired on the new target the mouse is over.\n      // In Chrome this happens immediately. In Safari and Firefox, it happens upon moving the mouse one pixel.\n      addGlobalListener(getOwnerDocument(event.target), 'pointerover', e => {\n        if (state.isHovered && state.target && !nodeContains(state.target, e.target as Element)) {\n          triggerHoverEnd(e, e.pointerType);\n        }\n      }, {capture: true});\n\n      if (onHoverStart) {\n        onHoverStart({\n          type: 'hoverstart',\n          target,\n          pointerType\n        });\n      }\n\n      if (onHoverChange) {\n        onHoverChange(true);\n      }\n\n      setHovered(true);\n    };\n\n    let triggerHoverEnd = (event, pointerType) => {\n      let target = state.target;\n      state.pointerType = '';\n      state.target = null;\n\n      if (pointerType === 'touch' || !state.isHovered || !target) {\n        return;\n      }\n\n      state.isHovered = false;\n      removeAllGlobalListeners();\n\n      if (onHoverEnd) {\n        onHoverEnd({\n          type: 'hoverend',\n          target,\n          pointerType\n        });\n      }\n\n      if (onHoverChange) {\n        onHoverChange(false);\n      }\n\n      setHovered(false);\n    };\n\n    let hoverProps: DOMAttributes = {};\n\n    if (typeof PointerEvent !== 'undefined') {\n      hoverProps.onPointerEnter = (e) => {\n        if (globalIgnoreEmulatedMouseEvents && e.pointerType === 'mouse') {\n          return;\n        }\n\n        triggerHoverStart(e, e.pointerType);\n      };\n\n      hoverProps.onPointerLeave = (e) => {\n        if (!isDisabled && e.currentTarget.contains(e.target as Element)) {\n          triggerHoverEnd(e, e.pointerType);\n        }\n      };\n    } else if (process.env.NODE_ENV === 'test') {\n      hoverProps.onTouchStart = () => {\n        state.ignoreEmulatedMouseEvents = true;\n      };\n\n      hoverProps.onMouseEnter = (e) => {\n        if (!state.ignoreEmulatedMouseEvents && !globalIgnoreEmulatedMouseEvents) {\n          triggerHoverStart(e, 'mouse');\n        }\n\n        state.ignoreEmulatedMouseEvents = false;\n      };\n\n      hoverProps.onMouseLeave = (e) => {\n        if (!isDisabled && e.currentTarget.contains(e.target as Element)) {\n          triggerHoverEnd(e, 'mouse');\n        }\n      };\n    }\n    return {hoverProps, triggerHoverEnd};\n  }, [onHoverStart, onHoverChange, onHoverEnd, isDisabled, state, addGlobalListener, removeAllGlobalListeners]);\n\n  useEffect(() => {\n    // Call the triggerHoverEnd as soon as isDisabled changes to true\n    // Safe to call triggerHoverEnd, it will early return if we aren't currently hovering\n    if (isDisabled) {\n      triggerHoverEnd({currentTarget: state.target}, state.pointerType);\n    }\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isDisabled]);\n\n  return {\n    hoverProps,\n    isHovered\n  };\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// https://en.wikipedia.org/wiki/Right-to-left\nconst RTL_SCRIPTS = new Set(['Arab', 'Syrc', 'Samr', 'Mand', 'Thaa', 'Mend', 'Nkoo', 'Adlm', 'Rohg', 'Hebr']);\nconst RTL_LANGS = new Set(['ae', 'ar', 'arc', 'bcc', 'bqi', 'ckb', 'dv', 'fa', 'glk', 'he', 'ku', 'mzn', 'nqo', 'pnb', 'ps', 'sd', 'ug', 'ur', 'yi']);\n\n/**\n * Determines if a locale is read right to left using [Intl.Locale]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale}.\n */\nexport function isRTL(localeString: string): boolean {\n  // If the Intl.Locale API is available, use it to get the locale's text direction.\n  if (Intl.Locale) {\n    let locale = new Intl.Locale(localeString).maximize();\n\n    // Use the text info object to get the direction if possible.\n    // @ts-ignore - this was implemented as a property by some browsers before it was standardized as a function.\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getTextInfo\n    let textInfo = typeof locale.getTextInfo === 'function' ? locale.getTextInfo() : locale.textInfo;\n    if (textInfo) {\n      return textInfo.direction === 'rtl';\n    }\n\n    // Fallback: guess using the script.\n    // This is more accurate than guessing by language, since languages can be written in multiple scripts.\n    if (locale.script) {\n      return RTL_SCRIPTS.has(locale.script);\n    }\n  }\n\n  // If not, just guess by the language (first part of the locale)\n  let lang = localeString.split('-')[0];\n  return RTL_LANGS.has(lang);\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Direction} from '@react-types/shared';\nimport {isRTL} from './utils';\nimport {useEffect, useState} from 'react';\nimport {useIsSSR} from '@react-aria/ssr';\n\nexport interface Locale {\n  /** The [BCP47](https://www.ietf.org/rfc/bcp/bcp47.txt) language code for the locale. */\n  locale: string,\n  /** The writing direction for the locale. */\n  direction: Direction\n}\n\n// Locale passed from server by PackageLocalizationProvider.\nconst localeSymbol = Symbol.for('react-aria.i18n.locale');\n\n/**\n * Gets the locale setting of the browser.\n */\nexport function getDefaultLocale(): Locale {\n  let locale = typeof window !== 'undefined' && window[localeSymbol]\n    // @ts-ignore\n    || (typeof navigator !== 'undefined' && (navigator.language || navigator.userLanguage))\n    || 'en-US';\n\n  try {\n    Intl.DateTimeFormat.supportedLocalesOf([locale]);\n  } catch {\n    locale = 'en-US';\n  }\n  return {\n    locale,\n    direction: isRTL(locale) ? 'rtl' : 'ltr'\n  };\n}\n\nlet currentLocale = getDefaultLocale();\nlet listeners = new Set<(locale: Locale) => void>();\n\nfunction updateLocale() {\n  currentLocale = getDefaultLocale();\n  for (let listener of listeners) {\n    listener(currentLocale);\n  }\n}\n\n/**\n * Returns the current browser/system language, and updates when it changes.\n */\nexport function useDefaultLocale(): Locale {\n  let isSSR = useIsSSR();\n  let [defaultLocale, setDefaultLocale] = useState(currentLocale);\n\n  useEffect(() => {\n    if (listeners.size === 0) {\n      window.addEventListener('languagechange', updateLocale);\n    }\n\n    listeners.add(setDefaultLocale);\n\n    return () => {\n      listeners.delete(setDefaultLocale);\n      if (listeners.size === 0) {\n        window.removeEventListener('languagechange', updateLocale);\n      }\n    };\n  }, []);\n\n  // We cannot determine the browser's language on the server, so default to\n  // en-US. This will be updated after hydration on the client to the correct value.\n  if (isSSR) {\n    return {\n      locale: 'en-US',\n      direction: 'ltr'\n    };\n  }\n\n  return defaultLocale;\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {isRTL} from './utils';\nimport {Locale, useDefaultLocale} from './useDefaultLocale';\nimport React, {JSX, ReactNode, useContext} from 'react';\n\nexport interface I18nProviderProps {\n  /** Contents that should have the locale applied. */\n  children: ReactNode,\n  /** The locale to apply to the children. */\n  locale?: string\n}\n\nconst I18nContext = React.createContext<Locale | null>(null);\n\n/**\n * Provides the locale for the application to all child components.\n */\nexport function I18nProvider(props: I18nProviderProps): JSX.Element {\n  let {locale, children} = props;\n  let defaultLocale = useDefaultLocale();\n\n  let value: Locale = React.useMemo(() => {\n    if (!locale) {\n      return defaultLocale;\n    }\n\n    return {\n      locale,\n      direction: isRTL(locale) ? 'rtl' : 'ltr'\n    };\n  }, [defaultLocale, locale]);\n\n  return (\n    <I18nContext.Provider value={value}>\n      {children}\n    </I18nContext.Provider>\n  );\n}\n\n/**\n * Returns the current locale and layout direction.\n */\nexport function useLocale(): Locale {\n  let defaultLocale = useDefaultLocale();\n  let context = useContext(I18nContext);\n  return context || defaultLocale;\n}\n", "/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport type {LocalizedString} from './LocalizedStringFormatter';\n\nexport type LocalizedStrings<K extends string, T extends LocalizedString> = {\n  [lang: string]: Record<K, T>\n};\n\nconst localeSymbol = Symbol.for('react-aria.i18n.locale');\nconst stringsSymbol = Symbol.for('react-aria.i18n.strings');\nlet cachedGlobalStrings: {[packageName: string]: LocalizedStringDictionary<any, any>} | null | undefined = undefined;\n\n/**\n * Stores a mapping of localized strings. Can be used to find the\n * closest available string for a given locale.\n */\nexport class LocalizedStringDictionary<K extends string = string, T extends LocalizedString = string> {\n  private strings: LocalizedStrings<K, T>;\n  private defaultLocale: string;\n\n  constructor(messages: LocalizedStrings<K, T>, defaultLocale: string = 'en-US') {\n    // Clone messages so we don't modify the original object.\n    // Filter out entries with falsy values which may have been caused by applying optimize-locales-plugin.\n    this.strings = Object.fromEntries(\n      Object.entries(messages).filter(([, v]) => v)\n    );\n    this.defaultLocale = defaultLocale;\n  }\n\n  /** Returns a localized string for the given key and locale. */\n  getStringForLocale(key: K, locale: string): T {\n    let strings = this.getStringsForLocale(locale);\n    let string = strings[key];\n    if (!string) {\n      throw new Error(`Could not find intl message ${key} in ${locale} locale`);\n    }\n\n    return string;\n  }\n\n  /** Returns all localized strings for the given locale. */\n  getStringsForLocale(locale: string): Record<K, T> {\n    let strings = this.strings[locale];\n    if (!strings) {\n      strings = getStringsForLocale(locale, this.strings, this.defaultLocale);\n      this.strings[locale] = strings;\n    }\n\n    return strings;\n  }\n\n  static getGlobalDictionaryForPackage<K extends string = string, T extends LocalizedString = string>(packageName: string): LocalizedStringDictionary<K, T> | null {\n    if (typeof window === 'undefined') {\n      return null;\n    }\n\n    let locale = window[localeSymbol];\n    if (cachedGlobalStrings === undefined) {\n      let globalStrings = window[stringsSymbol];\n      if (!globalStrings) {\n        return null;\n      }\n\n      cachedGlobalStrings = {};\n      for (let pkg in globalStrings) {\n        cachedGlobalStrings[pkg] = new LocalizedStringDictionary({[locale]: globalStrings[pkg]}, locale);\n      }\n    }\n\n    let dictionary = cachedGlobalStrings?.[packageName];\n    if (!dictionary) {\n      throw new Error(`Strings for package \"${packageName}\" were not included by LocalizedStringProvider. Please add it to the list passed to createLocalizedStringDictionary.`);\n    }\n\n    return dictionary;\n  }\n}\n\nfunction getStringsForLocale<K extends string, T extends LocalizedString>(locale: string, strings: LocalizedStrings<K, T>, defaultLocale = 'en-US') {\n  // If there is an exact match, use it.\n  if (strings[locale]) {\n    return strings[locale];\n  }\n\n  // Attempt to find the closest match by language.\n  // For example, if the locale is fr-CA (French Canadian), but there is only\n  // an fr-FR (France) set of strings, use that.\n  // This could be replaced with Intl.LocaleMatcher once it is supported.\n  // https://github.com/tc39/proposal-intl-localematcher\n  let language = getLanguage(locale);\n  if (strings[language]) {\n    return strings[language];\n  }\n\n  for (let key in strings) {\n    if (key.startsWith(language + '-')) {\n      return strings[key];\n    }\n  }\n\n  // Nothing close, use english.\n  return strings[defaultLocale];\n}\n\nfunction getLanguage(locale: string) {\n  // @ts-ignore\n  if (Intl.Locale) {\n    // @ts-ignore\n    return new Intl.Locale(locale).language;\n  }\n\n  return locale.split('-')[0];\n}\n", "/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport type {LocalizedStringDictionary} from './LocalizedStringDictionary';\n\nexport type Variables = Record<string, string | number | boolean> | undefined;\nexport type LocalizedString = string | ((args: Variables, formatter?: LocalizedStringFormatter<any, any>) => string);\ntype InternalString = string | (() => string);\n\nconst pluralRulesCache = new Map<string, Intl.PluralRules>();\nconst numberFormatCache = new Map<string, Intl.NumberFormat>();\n\n/**\n * Formats localized strings from a LocalizedStringDictionary. Supports interpolating variables,\n * selecting the correct pluralization, and formatting numbers for the locale.\n */\nexport class LocalizedStringFormatter<K extends string = string, T extends LocalizedString = string> {\n  private locale: string;\n  private strings: LocalizedStringDictionary<K, T>;\n\n  constructor(locale: string, strings: LocalizedStringDictionary<K, T>) {\n    this.locale = locale;\n    this.strings = strings;\n  }\n\n  /** Formats a localized string for the given key with the provided variables. */\n  format(key: K, variables?: Variables): string {\n    let message = this.strings.getStringForLocale(key, this.locale);\n    return typeof message === 'function' ? message(variables, this) : message;\n  }\n\n  protected plural(count: number, options: Record<string, InternalString>, type: Intl.PluralRuleType = 'cardinal'): string {\n    let opt = options['=' + count];\n    if (opt) {\n      return typeof opt === 'function' ? opt() : opt;\n    }\n\n    let key = this.locale + ':' + type;\n    let pluralRules = pluralRulesCache.get(key);\n    if (!pluralRules) {\n      pluralRules = new Intl.PluralRules(this.locale, {type});\n      pluralRulesCache.set(key, pluralRules);\n    }\n\n    let selected = pluralRules.select(count);\n    opt = options[selected] || options.other;\n    return typeof opt === 'function' ? opt() : opt;\n  }\n\n  protected number(value: number): string {\n    let numberFormat = numberFormatCache.get(this.locale);\n    if (!numberFormat) {\n      numberFormat = new Intl.NumberFormat(this.locale);\n      numberFormatCache.set(this.locale, numberFormat);\n    }\n    return numberFormat.format(value);\n  }\n\n  protected select(options: Record<string, InternalString>, value: string): string {\n    let opt = options[value] || options.other;\n    return typeof opt === 'function' ? opt() : opt;\n  }\n}\n", "/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {LocalizedString, LocalizedStringDictionary, LocalizedStringFormatter, LocalizedStrings} from '@internationalized/string';\nimport {useLocale} from './context';\nimport {useMemo} from 'react';\n\nconst cache = new WeakMap();\nfunction getCachedDictionary<K extends string, T extends LocalizedString>(strings: LocalizedStrings<K, T>): LocalizedStringDictionary<K, T> {\n  let dictionary = cache.get(strings);\n  if (!dictionary) {\n    dictionary = new LocalizedStringDictionary(strings);\n    cache.set(strings, dictionary);\n  }\n\n  return dictionary;\n}\n\n/**\n * Returns a cached LocalizedStringDictionary for the given strings.\n */\nexport function useLocalizedStringDictionary<K extends string = string, T extends LocalizedString = string>(strings: LocalizedStrings<K, T>, packageName?: string): LocalizedStringDictionary<K, T> {\n  return (packageName && LocalizedStringDictionary.getGlobalDictionaryForPackage(packageName)) || getCachedDictionary(strings);\n}\n\n/**\n * Provides localized string formatting for the current locale. Supports interpolating variables,\n * selecting the correct pluralization, and formatting numbers. Automatically updates when the locale changes.\n * @param strings - A mapping of languages to localized strings by key.\n */\nexport function useLocalizedStringFormatter<K extends string = string, T extends LocalizedString = string>(strings: LocalizedStrings<K, T>, packageName?: string): LocalizedStringFormatter<K, T> {\n  let {locale} = useLocale();\n  let dictionary = useLocalizedStringDictionary(strings, packageName);\n  return useMemo(() => new LocalizedStringFormatter(locale, dictionary), [locale, dictionary]);\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DateFormatter} from '@internationalized/date';\nimport {useDeepMemo} from '@react-aria/utils';\nimport {useLocale} from './context';\nimport {useMemo} from 'react';\n\nexport interface DateFormatterOptions extends Intl.DateTimeFormatOptions {\n  calendar?: string\n}\n\n/**\n * Provides localized date formatting for the current locale. Automatically updates when the locale changes,\n * and handles caching of the date formatter for performance.\n * @param options - Formatting options.\n */\nexport function useDateFormatter(options?: DateFormatterOptions): DateFormatter {\n  // Reuse last options object if it is shallowly equal, which allows the useMemo result to also be reused.\n  options = useDeepMemo(options ?? {}, isEqual);\n  let {locale} = useLocale();\n  return useMemo(() => new DateFormatter(locale, options), [locale, options]);\n}\n\nfunction isEqual(a: DateFormatterOptions, b: DateFormatterOptions) {\n  if (a === b) {\n    return true;\n  }\n\n  let aKeys = Object.keys(a);\n  let bKeys = Object.keys(b);\n  if (aKeys.length !== bKeys.length) {\n    return false;\n  }\n\n  for (let key of aKeys) {\n    if (b[key] !== a[key]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n  AnchorHTMLAttributes,\n  ButtonHTMLAttributes,\n  ElementType,\n  HTMLAttributes,\n  InputHTMLAttributes,\n  RefObject\n} from 'react';\nimport {AriaButtonProps} from '@react-types/button';\nimport {DOMAttributes} from '@react-types/shared';\nimport {filterDOMProps, mergeProps} from '@react-aria/utils';\nimport {useFocusable, usePress} from '@react-aria/interactions';\n\nexport interface AriaButtonOptions<E extends ElementType> extends Omit<AriaButtonProps<E>, 'children'> {}\n\nexport interface ButtonAria<T> {\n  /** Props for the button element. */\n  buttonProps: T,\n  /** Whether the button is currently pressed. */\n  isPressed: boolean\n}\n\n// Order with overrides is important: 'button' should be default\nexport function useButton(props: AriaButtonOptions<'button'>, ref: RefObject<HTMLButtonElement | null>): ButtonAria<ButtonHTMLAttributes<HTMLButtonElement>>;\nexport function useButton(props: AriaButtonOptions<'a'>, ref: RefObject<HTMLAnchorElement | null>): ButtonAria<AnchorHTMLAttributes<HTMLAnchorElement>>;\nexport function useButton(props: AriaButtonOptions<'div'>, ref: RefObject<HTMLDivElement | null>): ButtonAria<HTMLAttributes<HTMLDivElement>>;\nexport function useButton(props: AriaButtonOptions<'input'>, ref: RefObject<HTMLInputElement | null>): ButtonAria<InputHTMLAttributes<HTMLInputElement>>;\nexport function useButton(props: AriaButtonOptions<'span'>, ref: RefObject<HTMLSpanElement | null>): ButtonAria<HTMLAttributes<HTMLSpanElement>>;\nexport function useButton(props: AriaButtonOptions<ElementType>, ref: RefObject<Element | null>): ButtonAria<DOMAttributes>;\n/**\n * Provides the behavior and accessibility implementation for a button component. Handles mouse, keyboard, and touch interactions,\n * focus behavior, and ARIA props for both native button elements and custom element types.\n * @param props - Props to be applied to the button.\n * @param ref - A ref to a DOM element for the button.\n */\nexport function useButton(props: AriaButtonOptions<ElementType>, ref: RefObject<any>): ButtonAria<HTMLAttributes<any>> {\n  let {\n    elementType = 'button',\n    isDisabled,\n    onPress,\n    onPressStart,\n    onPressEnd,\n    onPressUp,\n    onPressChange,\n    preventFocusOnPress,\n    // @ts-ignore - undocumented\n    allowFocusWhenDisabled,\n    onClick,\n    href,\n    target,\n    rel,\n    type = 'button'\n  } = props;\n  let additionalProps;\n  if (elementType === 'button') {\n    additionalProps = {\n      type,\n      disabled: isDisabled\n    };\n  } else {\n    additionalProps = {\n      role: 'button',\n      href: elementType === 'a' && !isDisabled ? href : undefined,\n      target: elementType === 'a' ? target : undefined,\n      type: elementType === 'input' ? type : undefined,\n      disabled: elementType === 'input' ? isDisabled : undefined,\n      'aria-disabled': !isDisabled || elementType === 'input' ? undefined : isDisabled,\n      rel: elementType === 'a' ? rel : undefined\n    };\n  }\n\n  let {pressProps, isPressed} = usePress({\n    onPressStart,\n    onPressEnd,\n    onPressChange,\n    onPress,\n    onPressUp,\n    onClick,\n    isDisabled,\n    preventFocusOnPress,\n    ref\n  });\n\n  let {focusableProps} = useFocusable(props, ref);\n  if (allowFocusWhenDisabled) {\n    focusableProps.tabIndex = isDisabled ? -1 : focusableProps.tabIndex;\n  }\n  let buttonProps = mergeProps(focusableProps, pressProps, filterDOMProps(props, {labelable: true}));\n\n  return {\n    isPressed, // Used to indicate press state for visual\n    buttonProps: mergeProps(additionalProps, buttonProps, {\n      'aria-haspopup': props['aria-haspopup'],\n      'aria-expanded': props['aria-expanded'],\n      'aria-controls': props['aria-controls'],\n      'aria-pressed': props['aria-pressed'],\n      'aria-current': props['aria-current']\n    })\n  };\n}\n", "import {DOMAttributes} from '@react-types/shared';\nimport {isFocusVisible, useFocus, useFocusVisibleListener, useFocusWithin} from '@react-aria/interactions';\nimport {useCallback, useRef, useState} from 'react';\n\nexport interface AriaFocusRingProps {\n  /**\n   * Whether to show the focus ring when something\n   * inside the container element has focus (true), or\n   * only if the container itself has focus (false).\n   * @default 'false'\n   */\n  within?: boolean,\n\n  /** Whether the element is a text input. */\n  isTextInput?: boolean,\n\n  /** Whether the element will be auto focused. */\n  autoFocus?: boolean\n}\n\nexport interface FocusRingAria {\n  /** Whether the element is currently focused. */\n  isFocused: boolean,\n\n  /** Whether keyboard focus should be visible. */\n  isFocusVisible: boolean,\n\n  /** Props to apply to the container element with the focus ring. */\n  focusProps: DOMAttributes\n}\n\n/**\n * Determines whether a focus ring should be shown to indicate keyboard focus.\n * Focus rings are visible only when the user is interacting with a keyboard,\n * not with a mouse, touch, or other input methods.\n */\nexport function useFocusRing(props: AriaFocusRingProps = {}): FocusRingAria {\n  let {\n    autoFocus = false,\n    isTextInput,\n    within\n  } = props;\n  let state = useRef({\n    isFocused: false,\n    isFocusVisible: autoFocus || isFocusVisible()\n  });\n  let [isFocused, setFocused] = useState(false);\n  let [isFocusVisibleState, setFocusVisible] = useState(() => state.current.isFocused && state.current.isFocusVisible);\n\n  let updateState = useCallback(() => setFocusVisible(state.current.isFocused && state.current.isFocusVisible), []);\n\n  let onFocusChange = useCallback(isFocused => {\n    state.current.isFocused = isFocused;\n    setFocused(isFocused);\n    updateState();\n  }, [updateState]);\n\n  useFocusVisibleListener((isFocusVisible) => {\n    state.current.isFocusVisible = isFocusVisible;\n    updateState();\n  }, [], {isTextInput});\n\n  let {focusProps} = useFocus({\n    isDisabled: within,\n    onFocusChange\n  });\n\n  let {focusWithinProps} = useFocusWithin({\n    isDisabled: !within,\n    onFocusWithinChange: onFocusChange\n  });\n\n  return {\n    isFocused,\n    isFocusVisible: isFocusVisibleState,\n    focusProps: within ? focusWithinProps : focusProps\n  };\n}\n", "{\n  \"dateRange\": \"{startDate} إلى {endDate}\",\n  \"dateSelected\": \"{date} المحدد\",\n  \"finishRangeSelectionPrompt\": \"انقر لإنهاء عملية تحديد نطاق التاريخ\",\n  \"maximumDate\": \"آخر تاريخ متاح\",\n  \"minimumDate\": \"أول تاريخ متاح\",\n  \"next\": \"التالي\",\n  \"previous\": \"السابق\",\n  \"selectedDateDescription\": \"تاريخ محدد: {date}\",\n  \"selectedRangeDescription\": \"المدى الزمني المحدد: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"انقر لبدء عملية تحديد نطاق التاريخ\",\n  \"todayDate\": \"اليوم، {date}\",\n  \"todayDateSelected\": \"اليوم، {date} محدد\"\n}\n", "{\n  \"dateRange\": \"{startDate} до {endDate}\",\n  \"dateSelected\": \"Избрано е {date}\",\n  \"finishRangeSelectionPrompt\": \"Натиснете, за да довършите избора на времеви интервал\",\n  \"maximumDate\": \"Последна налична дата\",\n  \"minimumDate\": \"Първа налична дата\",\n  \"next\": \"Напред\",\n  \"previous\": \"Назад\",\n  \"selectedDateDescription\": \"Избрана дата: {date}\",\n  \"selectedRangeDescription\": \"Избран диапазон: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Натиснете, за да пристъпите към избора на времеви интервал\",\n  \"todayDate\": \"Днес, {date}\",\n  \"todayDateSelected\": \"Днес, {date} са избрани\"\n}\n", "{\n  \"dateRange\": \"{startDate} až {endDate}\",\n  \"dateSelected\": \"Vybráno {date}\",\n  \"finishRangeSelectionPrompt\": \"Kliknutím dokončíte výběr rozsahu dat\",\n  \"maximumDate\": \"Poslední dostupné datum\",\n  \"minimumDate\": \"První dostupné datum\",\n  \"next\": \"Další\",\n  \"previous\": \"Předchozí\",\n  \"selectedDateDescription\": \"Vybrané datum: {date}\",\n  \"selectedRangeDescription\": \"Vybrané období: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Kliknutím zahájíte výběr rozsahu dat\",\n  \"todayDate\": \"Dnes, {date}\",\n  \"todayDateSelected\": \"Dnes, vybráno {date}\"\n}\n", "{\n  \"dateRange\": \"{startDate} til {endDate}\",\n  \"dateSelected\": \"{date} valgt\",\n  \"finishRangeSelectionPrompt\": \"Klik for at fuldføre valg af datoområde\",\n  \"maximumDate\": \"Sidste ledige dato\",\n  \"minimumDate\": \"Første ledige dato\",\n  \"next\": \"Næste\",\n  \"previous\": \"Forrige\",\n  \"selectedDateDescription\": \"Valgt dato: {date}\",\n  \"selectedRangeDescription\": \"Valgt interval: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Klik for at starte valg af datoområde\",\n  \"todayDate\": \"I dag, {date}\",\n  \"todayDateSelected\": \"I dag, {date} valgt\"\n}\n", "{\n  \"dateRange\": \"{startDate} bis {endDate}\",\n  \"dateSelected\": \"{date} ausgewählt\",\n  \"finishRangeSelectionPrompt\": \"Klicken, um die Auswahl des Datumsbereichs zu beenden\",\n  \"maximumDate\": \"Letztes verfügbares Datum\",\n  \"minimumDate\": \"Erstes verfügbares Datum\",\n  \"next\": \"Weiter\",\n  \"previous\": \"Zurück\",\n  \"selectedDateDescription\": \"Ausgewähltes Datum: {date}\",\n  \"selectedRangeDescription\": \"Ausgewählter Bereich: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Klicken, um die Auswahl des Datumsbereichs zu beginnen\",\n  \"todayDate\": \"Heute, {date}\",\n  \"todayDateSelected\": \"Heute, {date} ausgewählt\"\n}\n", "{\n  \"dateRange\": \"{startDate} έως {endDate}\",\n  \"dateSelected\": \"Επιλέχθηκε {date}\",\n  \"finishRangeSelectionPrompt\": \"Κάντε κλικ για να ολοκληρώσετε την επιλογή εύρους ημερομηνιών\",\n  \"maximumDate\": \"Τελευταία διαθέσιμη ημερομηνία\",\n  \"minimumDate\": \"Πρώτη διαθέσιμη ημερομηνία\",\n  \"next\": \"Επόμενο\",\n  \"previous\": \"Προηγούμενο\",\n  \"selectedDateDescription\": \"Επιλεγμένη ημερομηνία: {date}\",\n  \"selectedRangeDescription\": \"Επιλεγμένο εύρος: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Κάντε κλικ για να ξεκινήσετε την επιλογή εύρους ημερομηνιών\",\n  \"todayDate\": \"Σήμερα, {date}\",\n  \"todayDateSelected\": \"Σήμερα, επιλέχτηκε {date}\"\n}\n", "{\n  \"previous\": \"Previous\",\n  \"next\": \"Next\",\n  \"selectedDateDescription\": \"Selected Date: {date}\",\n  \"selectedRangeDescription\": \"Selected Range: {dateRange}\",\n  \"todayDate\": \"Today, {date}\",\n  \"todayDateSelected\": \"Today, {date} selected\",\n  \"dateSelected\": \"{date} selected\",\n  \"startRangeSelectionPrompt\": \"Click to start selecting date range\",\n  \"finishRangeSelectionPrompt\": \"Click to finish selecting date range\",\n  \"minimumDate\": \"First available date\",\n  \"maximumDate\": \"Last available date\",\n  \"dateRange\": \"{startDate} to {endDate}\"\n}\n", "{\n  \"dateRange\": \"{startDate} a {endDate}\",\n  \"dateSelected\": \"{date} seleccionado\",\n  \"finishRangeSelectionPrompt\": \"Haga clic para terminar de seleccionar rango de fechas\",\n  \"maximumDate\": \"Última fecha disponible\",\n  \"minimumDate\": \"Primera fecha disponible\",\n  \"next\": \"Siguiente\",\n  \"previous\": \"Anterior\",\n  \"selectedDateDescription\": \"Fecha seleccionada: {date}\",\n  \"selectedRangeDescription\": \"Intervalo seleccionado: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Haga clic para comenzar a seleccionar un rango de fechas\",\n  \"todayDate\": \"Hoy, {date}\",\n  \"todayDateSelected\": \"Hoy, {date} seleccionado\"\n}\n", "{\n  \"dateRange\": \"{startDate} kuni {endDate}\",\n  \"dateSelected\": \"{date} valitud\",\n  \"finishRangeSelectionPrompt\": \"Klõpsake kuupäevavahemiku valimise lõpetamiseks\",\n  \"maximumDate\": \"Viimane saadaolev kuupäev\",\n  \"minimumDate\": \"Esimene saadaolev kuupäev\",\n  \"next\": \"Järgmine\",\n  \"previous\": \"Eelmine\",\n  \"selectedDateDescription\": \"Valitud kuupäev: {date}\",\n  \"selectedRangeDescription\": \"Valitud vahemik: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Klõpsake kuupäevavahemiku valimiseks\",\n  \"todayDate\": \"Täna, {date}\",\n  \"todayDateSelected\": \"Täna, {date} valitud\"\n}\n", "{\n  \"dateRange\": \"{startDate} – {endDate}\",\n  \"dateSelected\": \"{date} valittu\",\n  \"finishRangeSelectionPrompt\": \"Lopeta päivämääräalueen valinta napsauttamalla tätä.\",\n  \"maximumDate\": \"Viimeinen varattavissa oleva päivämäärä\",\n  \"minimumDate\": \"Ensimmäinen varattavissa oleva päivämäärä\",\n  \"next\": \"Seuraava\",\n  \"previous\": \"Edellinen\",\n  \"selectedDateDescription\": \"Valittu päivämäärä: {date}\",\n  \"selectedRangeDescription\": \"Valittu aikaväli: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Aloita päivämääräalueen valinta napsauttamalla tätä.\",\n  \"todayDate\": \"Tänään, {date}\",\n  \"todayDateSelected\": \"Tänään, {date} valittu\"\n}\n", "{\n  \"dateRange\": \"{startDate} à {endDate}\",\n  \"dateSelected\": \"{date} sélectionné\",\n  \"finishRangeSelectionPrompt\": \"Cliquer pour finir de sélectionner la plage de dates\",\n  \"maximumDate\": \"Dernière date disponible\",\n  \"minimumDate\": \"Première date disponible\",\n  \"next\": \"Suivant\",\n  \"previous\": \"Précédent\",\n  \"selectedDateDescription\": \"Date sélectionnée : {date}\",\n  \"selectedRangeDescription\": \"Plage sélectionnée : {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Cliquer pour commencer à sélectionner la plage de dates\",\n  \"todayDate\": \"Aujourd'hui, {date}\",\n  \"todayDateSelected\": \"Aujourd’hui, {date} sélectionné\"\n}\n", "{\n  \"dateRange\": \"{startDate} עד {endDate}\",\n  \"dateSelected\": \"{date} נבחר\",\n  \"finishRangeSelectionPrompt\": \"חץ כדי לסיים את בחירת טווח התאריכים\",\n  \"maximumDate\": \"תאריך פנוי אחרון\",\n  \"minimumDate\": \"תאריך פנוי ראשון\",\n  \"next\": \"הבא\",\n  \"previous\": \"הקודם\",\n  \"selectedDateDescription\": \"תאריך נבחר: {date}\",\n  \"selectedRangeDescription\": \"טווח נבחר: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"לחץ כדי להתחיל בבחירת טווח התאריכים\",\n  \"todayDate\": \"היום, {date}\",\n  \"todayDateSelected\": \"היום, {date} נבחר\"\n}\n", "{\n  \"dateRange\": \"{startDate} do {endDate}\",\n  \"dateSelected\": \"{date} odabran\",\n  \"finishRangeSelectionPrompt\": \"Kliknite da dovršite raspon odabranih datuma\",\n  \"maximumDate\": \"Posljednji raspoloživi datum\",\n  \"minimumDate\": \"Prvi raspoloživi datum\",\n  \"next\": \"Sljedeći\",\n  \"previous\": \"Prethodni\",\n  \"selectedDateDescription\": \"Odabrani datum: {date}\",\n  \"selectedRangeDescription\": \"Odabrani raspon: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Kliknite da započnete raspon odabranih datuma\",\n  \"todayDate\": \"Danas, {date}\",\n  \"todayDateSelected\": \"Danas, odabran {date}\"\n}\n", "{\n  \"dateRange\": \"{startDate}–{endDate}\",\n  \"dateSelected\": \"{date} kiválasztva\",\n  \"finishRangeSelectionPrompt\": \"Kattintson a dátumtartomány kijelölésének befejezéséhez\",\n  \"maximumDate\": \"Utolsó elérhető dátum\",\n  \"minimumDate\": \"Az első elérhető dátum\",\n  \"next\": \"Következő\",\n  \"previous\": \"Előző\",\n  \"selectedDateDescription\": \"Kijelölt dátum: {date}\",\n  \"selectedRangeDescription\": \"Kijelölt tartomány: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Kattintson a dátumtartomány kijelölésének indításához\",\n  \"todayDate\": \"Ma, {date}\",\n  \"todayDateSelected\": \"Ma, {date} kijelölve\"\n}\n", "{\n  \"dateRange\": \"Da {startDate} a {endDate}\",\n  \"dateSelected\": \"{date} selezionata\",\n  \"finishRangeSelectionPrompt\": \"Fai clic per completare la selezione dell’intervallo di date\",\n  \"maximumDate\": \"Ultima data disponibile\",\n  \"minimumDate\": \"Prima data disponibile\",\n  \"next\": \"Successivo\",\n  \"previous\": \"Precedente\",\n  \"selectedDateDescription\": \"Data selezionata: {date}\",\n  \"selectedRangeDescription\": \"Intervallo selezionato: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Fai clic per selezionare l’intervallo di date\",\n  \"todayDate\": \"Oggi, {date}\",\n  \"todayDateSelected\": \"Oggi, {date} selezionata\"\n}\n", "{\n  \"dateRange\": \"{startDate} から {endDate}\",\n  \"dateSelected\": \"{date} を選択\",\n  \"finishRangeSelectionPrompt\": \"クリックして日付範囲の選択を終了\",\n  \"maximumDate\": \"最終利用可能日\",\n  \"minimumDate\": \"最初の利用可能日\",\n  \"next\": \"次へ\",\n  \"previous\": \"前へ\",\n  \"selectedDateDescription\": \"選択した日付 : {date}\",\n  \"selectedRangeDescription\": \"選択範囲 : {dateRange}\",\n  \"startRangeSelectionPrompt\": \"クリックして日付範囲の選択を開始\",\n  \"todayDate\": \"本日、{date}\",\n  \"todayDateSelected\": \"本日、{date} を選択\"\n}\n", "{\n  \"dateRange\": \"{startDate} ~ {endDate}\",\n  \"dateSelected\": \"{date} 선택됨\",\n  \"finishRangeSelectionPrompt\": \"날짜 범위 선택을 완료하려면 클릭하십시오.\",\n  \"maximumDate\": \"마지막으로 사용 가능한 일자\",\n  \"minimumDate\": \"처음으로 사용 가능한 일자\",\n  \"next\": \"다음\",\n  \"previous\": \"이전\",\n  \"selectedDateDescription\": \"선택 일자: {date}\",\n  \"selectedRangeDescription\": \"선택 범위: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"날짜 범위 선택을 시작하려면 클릭하십시오.\",\n  \"todayDate\": \"오늘, {date}\",\n  \"todayDateSelected\": \"오늘, {date} 선택됨\"\n}\n", "{\n  \"dateRange\": \"Nuo {startDate} iki {endDate}\",\n  \"dateSelected\": \"Pasirinkta {date}\",\n  \"finishRangeSelectionPrompt\": \"Spustelėkite, kad baigtumėte pasirinkti datų intervalą\",\n  \"maximumDate\": \"Paskutinė galima data\",\n  \"minimumDate\": \"Pirmoji galima data\",\n  \"next\": \"Paskesnis\",\n  \"previous\": \"Ankstesnis\",\n  \"selectedDateDescription\": \"Pasirinkta data: {date}\",\n  \"selectedRangeDescription\": \"Pasirinktas intervalas: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Spustelėkite, kad pradėtumėte pasirinkti datų intervalą\",\n  \"todayDate\": \"Šiandien, {date}\",\n  \"todayDateSelected\": \"Šiandien, pasirinkta {date}\"\n}\n", "{\n  \"dateRange\": \"No {startDate} līdz {endDate}\",\n  \"dateSelected\": \"Atlasīts: {date}\",\n  \"finishRangeSelectionPrompt\": \"Noklikšķiniet, lai pabeigtu datumu diapazona atlasi\",\n  \"maximumDate\": \"Pēdējais pieejamais datums\",\n  \"minimumDate\": \"Pirmais pieejamais datums\",\n  \"next\": \"Tālāk\",\n  \"previous\": \"Atpakaļ\",\n  \"selectedDateDescription\": \"Atlasītais datums: {date}\",\n  \"selectedRangeDescription\": \"Atlasītais diapazons: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Noklikšķiniet, lai sāktu datumu diapazona atlasi\",\n  \"todayDate\": \"Šodien, {date}\",\n  \"todayDateSelected\": \"Atlasīta šodiena, {date}\"\n}\n", "{\n  \"dateRange\": \"{startDate} til {endDate}\",\n  \"dateSelected\": \"{date} valgt\",\n  \"finishRangeSelectionPrompt\": \"Klikk for å fullføre valg av datoområde\",\n  \"maximumDate\": \"Siste tilgjengelige dato\",\n  \"minimumDate\": \"Første tilgjengelige dato\",\n  \"next\": \"Neste\",\n  \"previous\": \"Forrige\",\n  \"selectedDateDescription\": \"Valgt dato: {date}\",\n  \"selectedRangeDescription\": \"Valgt område: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Klikk for å starte valg av datoområde\",\n  \"todayDate\": \"I dag, {date}\",\n  \"todayDateSelected\": \"I dag, {date} valgt\"\n}\n", "{\n  \"dateRange\": \"{startDate} tot {endDate}\",\n  \"dateSelected\": \"{date} geselecteerd\",\n  \"finishRangeSelectionPrompt\": \"Klik om de selectie van het datumbereik te voltooien\",\n  \"maximumDate\": \"Laatste beschikbare datum\",\n  \"minimumDate\": \"Eerste beschikbare datum\",\n  \"next\": \"Volgende\",\n  \"previous\": \"Vorige\",\n  \"selectedDateDescription\": \"Geselecteerde datum: {date}\",\n  \"selectedRangeDescription\": \"Geselecteerd bereik: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Klik om het datumbereik te selecteren\",\n  \"todayDate\": \"Vandaag, {date}\",\n  \"todayDateSelected\": \"Vandaag, {date} geselecteerd\"\n}\n", "{\n  \"dateRange\": \"{startDate} do {endDate}\",\n  \"dateSelected\": \"Wybrano {date}\",\n  \"finishRangeSelectionPrompt\": \"Kliknij, aby zakończyć wybór zakresu dat\",\n  \"maximumDate\": \"Ostatnia dostępna data\",\n  \"minimumDate\": \"Pierwsza dostępna data\",\n  \"next\": \"Dalej\",\n  \"previous\": \"Wstecz\",\n  \"selectedDateDescription\": \"Wybrana data: {date}\",\n  \"selectedRangeDescription\": \"Wybrany zakres: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Kliknij, aby rozpocząć wybór zakresu dat\",\n  \"todayDate\": \"Dzisiaj, {date}\",\n  \"todayDateSelected\": \"Dzisiaj wybrano {date}\"\n}\n", "{\n  \"dateRange\": \"{startDate} a {endDate}\",\n  \"dateSelected\": \"{date} selecionado\",\n  \"finishRangeSelectionPrompt\": \"Clique para concluir a seleção do intervalo de datas\",\n  \"maximumDate\": \"Última data disponível\",\n  \"minimumDate\": \"Primeira data disponível\",\n  \"next\": \"Próximo\",\n  \"previous\": \"Anterior\",\n  \"selectedDateDescription\": \"Data selecionada: {date}\",\n  \"selectedRangeDescription\": \"Intervalo selecionado: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Clique para iniciar a seleção do intervalo de datas\",\n  \"todayDate\": \"Hoje, {date}\",\n  \"todayDateSelected\": \"Hoje, {date} selecionado\"\n}\n", "{\n  \"dateRange\": \"{startDate} a {endDate}\",\n  \"dateSelected\": \"{date} selecionado\",\n  \"finishRangeSelectionPrompt\": \"Clique para terminar de selecionar o intervalo de datas\",\n  \"maximumDate\": \"Última data disponível\",\n  \"minimumDate\": \"Primeira data disponível\",\n  \"next\": \"Próximo\",\n  \"previous\": \"Anterior\",\n  \"selectedDateDescription\": \"Data selecionada: {date}\",\n  \"selectedRangeDescription\": \"Intervalo selecionado: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Clique para começar a selecionar o intervalo de datas\",\n  \"todayDate\": \"Hoje, {date}\",\n  \"todayDateSelected\": \"Hoje, {date} selecionado\"\n}\n", "{\n  \"dateRange\": \"De la {startDate} până la {endDate}\",\n  \"dateSelected\": \"{date} selectată\",\n  \"finishRangeSelectionPrompt\": \"Apăsaţi pentru a finaliza selecţia razei pentru dată\",\n  \"maximumDate\": \"Ultima dată disponibilă\",\n  \"minimumDate\": \"Prima dată disponibilă\",\n  \"next\": \"Următorul\",\n  \"previous\": \"Înainte\",\n  \"selectedDateDescription\": \"Dată selectată: {date}\",\n  \"selectedRangeDescription\": \"Interval selectat: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Apăsaţi pentru a începe selecţia razei pentru dată\",\n  \"todayDate\": \"Astăzi, {date}\",\n  \"todayDateSelected\": \"Azi, {date} selectată\"\n}\n", "{\n  \"dateRange\": \"С {startDate} по {endDate}\",\n  \"dateSelected\": \"Выбрано {date}\",\n  \"finishRangeSelectionPrompt\": \"Щелкните, чтобы завершить выбор диапазона дат\",\n  \"maximumDate\": \"Последняя доступная дата\",\n  \"minimumDate\": \"Первая доступная дата\",\n  \"next\": \"Далее\",\n  \"previous\": \"Назад\",\n  \"selectedDateDescription\": \"Выбранная дата: {date}\",\n  \"selectedRangeDescription\": \"Выбранный диапазон: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Щелкните, чтобы начать выбор диапазона дат\",\n  \"todayDate\": \"Сегодня, {date}\",\n  \"todayDateSelected\": \"Сегодня, выбрано {date}\"\n}\n", "{\n  \"dateRange\": \"Od {startDate} do {endDate}\",\n  \"dateSelected\": \"Vybratý dátum {date}\",\n  \"finishRangeSelectionPrompt\": \"Kliknutím dokončíte výber rozsahu dátumov\",\n  \"maximumDate\": \"Posledný dostupný dátum\",\n  \"minimumDate\": \"Prvý dostupný dátum\",\n  \"next\": \"Nasledujúce\",\n  \"previous\": \"Predchádzajúce\",\n  \"selectedDateDescription\": \"Vybratý dátum: {date}\",\n  \"selectedRangeDescription\": \"Vybratý rozsah: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Kliknutím spustíte výber rozsahu dátumov\",\n  \"todayDate\": \"Dnes {date}\",\n  \"todayDateSelected\": \"Vybratý dnešný dátum {date}\"\n}\n", "{\n  \"dateRange\": \"{startDate} do {endDate}\",\n  \"dateSelected\": \"{date} izbrano\",\n  \"finishRangeSelectionPrompt\": \"Kliknite za dokončanje izbire datumskega obsega\",\n  \"maximumDate\": \"Zadnji razpoložljivi datum\",\n  \"minimumDate\": \"Prvi razpoložljivi datum\",\n  \"next\": \"Naprej\",\n  \"previous\": \"Nazaj\",\n  \"selectedDateDescription\": \"Izbrani datum: {date}\",\n  \"selectedRangeDescription\": \"Izbrano območje: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Kliknite za začetek izbire datumskega obsega\",\n  \"todayDate\": \"Danes, {date}\",\n  \"todayDateSelected\": \"Danes, {date} izbrano\"\n}\n", "{\n  \"dateRange\": \"{startDate} do {endDate}\",\n  \"dateSelected\": \"{date} izabran\",\n  \"finishRangeSelectionPrompt\": \"Kliknite da dovršite opseg izabranih datuma\",\n  \"maximumDate\": \"Zadnji raspoloživi datum\",\n  \"minimumDate\": \"Prvi raspoloživi datum\",\n  \"next\": \"Sledeći\",\n  \"previous\": \"Prethodni\",\n  \"selectedDateDescription\": \"Izabrani datum: {date}\",\n  \"selectedRangeDescription\": \"Izabrani period: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Kliknite da započnete opseg izabranih datuma\",\n  \"todayDate\": \"Danas, {date}\",\n  \"todayDateSelected\": \"Danas, izabran {date}\"\n}\n", "{\n  \"dateRange\": \"{startDate} till {endDate}\",\n  \"dateSelected\": \"{date} har valts\",\n  \"finishRangeSelectionPrompt\": \"Klicka för att avsluta val av datumintervall\",\n  \"maximumDate\": \"Sista tillgängliga datum\",\n  \"minimumDate\": \"Första tillgängliga datum\",\n  \"next\": \"Nästa\",\n  \"previous\": \"Föregående\",\n  \"selectedDateDescription\": \"Valt datum: {date}\",\n  \"selectedRangeDescription\": \"Valt intervall: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Klicka för att välja datumintervall\",\n  \"todayDate\": \"Idag, {date}\",\n  \"todayDateSelected\": \"Idag, {date} har valts\"\n}\n", "{\n  \"dateRange\": \"{startDate} - {endDate}\",\n  \"dateSelected\": \"{date} seçildi\",\n  \"finishRangeSelectionPrompt\": \"Tarih aralığı seçimini tamamlamak için tıklayın\",\n  \"maximumDate\": \"Son müsait tarih\",\n  \"minimumDate\": \"İlk müsait tarih\",\n  \"next\": \"Sonraki\",\n  \"previous\": \"Önceki\",\n  \"selectedDateDescription\": \"Seçilen Tarih: {date}\",\n  \"selectedRangeDescription\": \"Seçilen Aralık: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Tarih aralığı seçimini başlatmak için tıklayın\",\n  \"todayDate\": \"Bugün, {date}\",\n  \"todayDateSelected\": \"Bugün, {date} seçildi\"\n}\n", "{\n  \"dateRange\": \"{startDate} — {endDate}\",\n  \"dateSelected\": \"Вибрано {date}\",\n  \"finishRangeSelectionPrompt\": \"Натисніть, щоб завершити вибір діапазону дат\",\n  \"maximumDate\": \"Остання доступна дата\",\n  \"minimumDate\": \"Перша доступна дата\",\n  \"next\": \"Наступний\",\n  \"previous\": \"Попередній\",\n  \"selectedDateDescription\": \"Вибрана дата: {date}\",\n  \"selectedRangeDescription\": \"Вибраний діапазон: {dateRange}\",\n  \"startRangeSelectionPrompt\": \"Натисніть, щоб почати вибір діапазону дат\",\n  \"todayDate\": \"Сьогодні, {date}\",\n  \"todayDateSelected\": \"Сьогодні, вибрано {date}\"\n}\n", "{\n  \"dateRange\": \"{startDate} 至 {endDate}\",\n  \"dateSelected\": \"已选择 {date}\",\n  \"finishRangeSelectionPrompt\": \"单击以完成选择日期范围\",\n  \"maximumDate\": \"最后一个可用日期\",\n  \"minimumDate\": \"第一个可用日期\",\n  \"next\": \"下一页\",\n  \"previous\": \"上一页\",\n  \"selectedDateDescription\": \"选定的日期：{date}\",\n  \"selectedRangeDescription\": \"选定的范围：{dateRange}\",\n  \"startRangeSelectionPrompt\": \"单击以开始选择日期范围\",\n  \"todayDate\": \"今天，即 {date}\",\n  \"todayDateSelected\": \"已选择今天，即 {date}\"\n}\n", "{\n  \"dateRange\": \"{startDate} 至 {endDate}\",\n  \"dateSelected\": \"已選取 {date}\",\n  \"finishRangeSelectionPrompt\": \"按一下以完成選取日期範圍\",\n  \"maximumDate\": \"最後一個可用日期\",\n  \"minimumDate\": \"第一個可用日期\",\n  \"next\": \"下一頁\",\n  \"previous\": \"上一頁\",\n  \"selectedDateDescription\": \"選定的日期：{date}\",\n  \"selectedRangeDescription\": \"選定的範圍：{dateRange}\",\n  \"startRangeSelectionPrompt\": \"按一下以開始選取日期範圍\",\n  \"todayDate\": \"今天，{date}\",\n  \"todayDateSelected\": \"已選取今天，{date}\"\n}\n", "const _temp0 = require(\"../intl/ar-AE.json\");\nconst _temp1 = require(\"../intl/bg-BG.json\");\nconst _temp2 = require(\"../intl/cs-CZ.json\");\nconst _temp3 = require(\"../intl/da-DK.json\");\nconst _temp4 = require(\"../intl/de-DE.json\");\nconst _temp5 = require(\"../intl/el-GR.json\");\nconst _temp6 = require(\"../intl/en-US.json\");\nconst _temp7 = require(\"../intl/es-ES.json\");\nconst _temp8 = require(\"../intl/et-EE.json\");\nconst _temp9 = require(\"../intl/fi-FI.json\");\nconst _temp10 = require(\"../intl/fr-FR.json\");\nconst _temp11 = require(\"../intl/he-IL.json\");\nconst _temp12 = require(\"../intl/hr-HR.json\");\nconst _temp13 = require(\"../intl/hu-HU.json\");\nconst _temp14 = require(\"../intl/it-IT.json\");\nconst _temp15 = require(\"../intl/ja-JP.json\");\nconst _temp16 = require(\"../intl/ko-KR.json\");\nconst _temp17 = require(\"../intl/lt-LT.json\");\nconst _temp18 = require(\"../intl/lv-LV.json\");\nconst _temp19 = require(\"../intl/nb-NO.json\");\nconst _temp20 = require(\"../intl/nl-NL.json\");\nconst _temp21 = require(\"../intl/pl-PL.json\");\nconst _temp22 = require(\"../intl/pt-BR.json\");\nconst _temp23 = require(\"../intl/pt-PT.json\");\nconst _temp24 = require(\"../intl/ro-RO.json\");\nconst _temp25 = require(\"../intl/ru-RU.json\");\nconst _temp26 = require(\"../intl/sk-SK.json\");\nconst _temp27 = require(\"../intl/sl-SI.json\");\nconst _temp28 = require(\"../intl/sr-SP.json\");\nconst _temp29 = require(\"../intl/sv-SE.json\");\nconst _temp30 = require(\"../intl/tr-TR.json\");\nconst _temp31 = require(\"../intl/uk-UA.json\");\nconst _temp32 = require(\"../intl/zh-CN.json\");\nconst _temp33 = require(\"../intl/zh-TW.json\");\nmodule.exports = {\n  \"ar-AE\": _temp0,\n  \"bg-BG\": _temp1,\n  \"cs-CZ\": _temp2,\n  \"da-DK\": _temp3,\n  \"de-DE\": _temp4,\n  \"el-GR\": _temp5,\n  \"en-US\": _temp6,\n  \"es-ES\": _temp7,\n  \"et-EE\": _temp8,\n  \"fi-FI\": _temp9,\n  \"fr-FR\": _temp10,\n  \"he-IL\": _temp11,\n  \"hr-HR\": _temp12,\n  \"hu-HU\": _temp13,\n  \"it-IT\": _temp14,\n  \"ja-JP\": _temp15,\n  \"ko-KR\": _temp16,\n  \"lt-LT\": _temp17,\n  \"lv-LV\": _temp18,\n  \"nb-NO\": _temp19,\n  \"nl-NL\": _temp20,\n  \"pl-PL\": _temp21,\n  \"pt-BR\": _temp22,\n  \"pt-PT\": _temp23,\n  \"ro-RO\": _temp24,\n  \"ru-RU\": _temp25,\n  \"sk-SK\": _temp26,\n  \"sl-SI\": _temp27,\n  \"sr-SP\": _temp28,\n  \"sv-SE\": _temp29,\n  \"tr-TR\": _temp30,\n  \"uk-UA\": _temp31,\n  \"zh-CN\": _temp32,\n  \"zh-TW\": _temp33\n}", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CalendarDate, DateFormatter, endOfMonth, isSameDay, startOfMonth} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport type {LocalizedStringFormatter} from '@internationalized/string';\nimport {useDateFormatter, useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useMemo} from 'react';\n\ninterface HookData {\n  ariaLabel?: string,\n  ariaLabelledBy?: string,\n  errorMessageId: string,\n  selectedDateDescription: string\n}\n\nexport const hookData = new WeakMap<CalendarState | RangeCalendarState, HookData>();\n\nexport function getEraFormat(date: CalendarDate | undefined): 'short' | undefined {\n  return date?.calendar.identifier === 'gregory' && date.era === 'BC' ? 'short' : undefined;\n}\n\nexport function useSelectedDateDescription(state: CalendarState | RangeCalendarState): string {\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/calendar');\n\n  let start: CalendarDate | undefined, end: CalendarDate | undefined;\n  if ('highlightedRange' in state) {\n    ({start, end} = state.highlightedRange || {});\n  } else {\n    start = end = state.value ?? undefined;\n  }\n\n  let dateFormatter = useDateFormatter({\n    weekday: 'long',\n    month: 'long',\n    year: 'numeric',\n    day: 'numeric',\n    era: getEraFormat(start) || getEraFormat(end),\n    timeZone: state.timeZone\n  });\n\n  let anchorDate = 'anchorDate' in state ? state.anchorDate : null;\n  return useMemo(() => {\n    // No message if currently selecting a range, or there is nothing highlighted.\n    if (!anchorDate && start && end) {\n      // Use a single date message if the start and end dates are the same day,\n      // otherwise include both dates.\n      if (isSameDay(start, end)) {\n        let date = dateFormatter.format(start.toDate(state.timeZone));\n        return stringFormatter.format('selectedDateDescription', {date});\n      } else {\n        let dateRange = formatRange(dateFormatter, stringFormatter, start, end, state.timeZone);\n\n        return stringFormatter.format('selectedRangeDescription', {dateRange});\n      }\n    }\n    return '';\n  }, [start, end, anchorDate, state.timeZone, stringFormatter, dateFormatter]);\n}\n\nexport function useVisibleRangeDescription(startDate: CalendarDate, endDate: CalendarDate, timeZone: string, isAria: boolean): string {\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/calendar');\n  let era: any = getEraFormat(startDate) || getEraFormat(endDate);\n  let monthFormatter = useDateFormatter({\n    month: 'long',\n    year: 'numeric',\n    era,\n    calendar: startDate.calendar.identifier,\n    timeZone\n  });\n\n  let dateFormatter = useDateFormatter({\n    month: 'long',\n    year: 'numeric',\n    day: 'numeric',\n    era,\n    calendar: startDate.calendar.identifier,\n    timeZone\n  });\n\n  return useMemo(() => {\n    // Special case for month granularity. Format as a single month if only a\n    // single month is visible, otherwise format as a range of months.\n    if (isSameDay(startDate, startOfMonth(startDate))) {\n      let startMonth = startDate;\n      let endMonth = endDate;\n      if (startDate.calendar.getFormattableMonth) {\n        startMonth = startDate.calendar.getFormattableMonth(startDate);\n      }\n      if (endDate.calendar.getFormattableMonth) {\n        endMonth = endDate.calendar.getFormattableMonth(endDate);\n      }\n\n      if (isSameDay(endDate, endOfMonth(startDate))) {\n        return monthFormatter.format(startMonth.toDate(timeZone));\n      } else if (isSameDay(endDate, endOfMonth(endDate))) {\n        return isAria\n          ? formatRange(monthFormatter, stringFormatter, startMonth, endMonth, timeZone)\n          : monthFormatter.formatRange(startMonth.toDate(timeZone), endMonth.toDate(timeZone));\n      }\n    }\n\n    return isAria\n      ? formatRange(dateFormatter, stringFormatter, startDate, endDate, timeZone)\n      : dateFormatter.formatRange(startDate.toDate(timeZone), endDate.toDate(timeZone));\n  }, [startDate, endDate, monthFormatter, dateFormatter, stringFormatter, timeZone, isAria]);\n}\n\nfunction formatRange(dateFormatter: DateFormatter, stringFormatter: LocalizedStringFormatter, start: CalendarDate, end: CalendarDate, timeZone: string) {\n  let parts = dateFormatter.formatRangeToParts(start.toDate(timeZone), end.toDate(timeZone));\n\n  // Find the separator between the start and end date. This is determined\n  // by finding the last shared literal before the end range.\n  let separatorIndex = -1;\n  for (let i = 0; i < parts.length; i++) {\n    let part = parts[i];\n    if (part.source === 'shared' && part.type === 'literal') {\n      separatorIndex = i;\n    } else if (part.source === 'endRange') {\n      break;\n    }\n  }\n\n  // Now we can combine the parts into start and end strings.\n  let startValue = '';\n  let endValue = '';\n  for (let i = 0; i < parts.length; i++) {\n    if (i < separatorIndex) {\n      startValue += parts[i].value;\n    } else if (i > separatorIndex) {\n      endValue += parts[i].value;\n    }\n  }\n\n  return stringFormatter.format('dateRange', {startDate: startValue, endDate: endValue});\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\ntype Assertiveness = 'assertive' | 'polite';\n\n/* Inspired by https://github.com/AlmeroSteyn/react-aria-live */\nconst LIVEREGION_TIMEOUT_DELAY = 7000;\n\nlet liveAnnouncer: LiveAnnouncer | null = null;\n\ntype Message = string | {'aria-labelledby': string};\n\n/**\n * Announces the message using screen reader technology.\n */\nexport function announce(\n  message: Message,\n  assertiveness: Assertiveness = 'assertive',\n  timeout = LIVEREGION_TIMEOUT_DELAY\n): void {\n  if (!liveAnnouncer) {\n    liveAnnouncer = new LiveAnnouncer();\n    // wait for the live announcer regions to be added to the dom, then announce\n    // otherwise Safari won't announce the message if it's added too quickly\n    // found most times less than 100ms were not consistent when announcing with Safari\n\n    // IS_REACT_ACT_ENVIRONMENT is used by React 18. Previous versions checked for the `jest` global.\n    // https://github.com/reactwg/react-18/discussions/102\n    // if we're in a test environment, announce without waiting\n    // @ts-ignore\n    if (!(typeof IS_REACT_ACT_ENVIRONMENT === 'boolean' ? IS_REACT_ACT_ENVIRONMENT : typeof jest !== 'undefined')) {\n      setTimeout(() => {\n        if (liveAnnouncer?.isAttached()) {\n          liveAnnouncer?.announce(message, assertiveness, timeout);\n        }\n      }, 100);\n    } else {\n      liveAnnouncer.announce(message, assertiveness, timeout);\n    }\n  } else {\n    liveAnnouncer.announce(message, assertiveness, timeout);\n  }\n}\n\n/**\n * Stops all queued announcements.\n */\nexport function clearAnnouncer(assertiveness: Assertiveness): void {\n  if (liveAnnouncer) {\n    liveAnnouncer.clear(assertiveness);\n  }\n}\n\n/**\n * Removes the announcer from the DOM.\n */\nexport function destroyAnnouncer(): void {\n  if (liveAnnouncer) {\n    liveAnnouncer.destroy();\n    liveAnnouncer = null;\n  }\n}\n\n// LiveAnnouncer is implemented using vanilla DOM, not React. That's because as of React 18\n// ReactDOM.render is deprecated, and the replacement, ReactDOM.createRoot is moved into a\n// subpath import `react-dom/client`. That makes it hard for us to support multiple React versions.\n// As a global API, we can't use portals without introducing a breaking API change. LiveAnnouncer\n// is simple enough to implement without React, so that's what we do here.\n// See this discussion for more details: https://github.com/reactwg/react-18/discussions/125#discussioncomment-2382638\nclass LiveAnnouncer {\n  node: HTMLElement | null = null;\n  assertiveLog: HTMLElement | null = null;\n  politeLog: HTMLElement | null = null;\n\n  constructor() {\n    if (typeof document !== 'undefined') {\n      this.node = document.createElement('div');\n      this.node.dataset.liveAnnouncer = 'true';\n      // copied from VisuallyHidden\n      Object.assign(this.node.style, {\n        border: 0,\n        clip: 'rect(0 0 0 0)',\n        clipPath: 'inset(50%)',\n        height: '1px',\n        margin: '-1px',\n        overflow: 'hidden',\n        padding: 0,\n        position: 'absolute',\n        width: '1px',\n        whiteSpace: 'nowrap'\n      });\n\n      this.assertiveLog = this.createLog('assertive');\n      this.node.appendChild(this.assertiveLog);\n\n      this.politeLog = this.createLog('polite');\n      this.node.appendChild(this.politeLog);\n\n      document.body.prepend(this.node);\n    }\n  }\n\n  isAttached() {\n    return this.node?.isConnected;\n  }\n\n  createLog(ariaLive: string) {\n    let node = document.createElement('div');\n    node.setAttribute('role', 'log');\n    node.setAttribute('aria-live', ariaLive);\n    node.setAttribute('aria-relevant', 'additions');\n    return node;\n  }\n\n  destroy() {\n    if (!this.node) {\n      return;\n    }\n\n    document.body.removeChild(this.node);\n    this.node = null;\n  }\n\n  announce(message: Message, assertiveness = 'assertive', timeout = LIVEREGION_TIMEOUT_DELAY) {\n    if (!this.node) {\n      return;\n    }\n\n    let node = document.createElement('div');\n    if (typeof message === 'object') {\n      // To read an aria-labelledby, the element must have an appropriate role, such as img.\n      node.setAttribute('role', 'img');\n      node.setAttribute('aria-labelledby', message['aria-labelledby']);\n    } else {\n      node.textContent = message;\n    }\n\n    if (assertiveness === 'assertive') {\n      this.assertiveLog?.appendChild(node);\n    } else {\n      this.politeLog?.appendChild(node);\n    }\n\n    if (message !== '') {\n      setTimeout(() => {\n        node.remove();\n      }, timeout);\n    }\n  }\n\n  clear(assertiveness: Assertiveness) {\n    if (!this.node) {\n      return;\n    }\n\n    if ((!assertiveness || assertiveness === 'assertive') && this.assertiveLog) {\n      this.assertiveLog.innerHTML = '';\n    }\n\n    if ((!assertiveness || assertiveness === 'polite') && this.politeLog) {\n      this.politeLog.innerHTML = '';\n    }\n  }\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {announce} from '@react-aria/live-announcer';\nimport {AriaButtonProps} from '@react-types/button';\nimport {AriaLabelingProps, DOMAttributes, DOMProps} from '@react-types/shared';\nimport {CalendarPropsBase} from '@react-types/calendar';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\nimport {filterDOMProps, mergeProps, useLabels, useSlotId, useUpdateEffect} from '@react-aria/utils';\nimport {hookData, useSelectedDateDescription, useVisibleRangeDescription} from './utils';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useState} from 'react';\n\nexport interface CalendarAria {\n  /** Props for the calendar grouping element. */\n  calendarProps: DOMAttributes,\n  /** Props for the next button. */\n  nextButtonProps: AriaButtonProps,\n  /** Props for the previous button. */\n  prevButtonProps: AriaButtonProps,\n  /** Props for the error message element, if any. */\n  errorMessageProps: DOMAttributes,\n  /** A description of the visible date range, for use in the calendar title. */\n  title: string\n}\n\nexport function useCalendarBase(props: CalendarPropsBase & DOMProps & AriaLabelingProps, state: CalendarState | RangeCalendarState): CalendarAria {\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/calendar');\n  let domProps = filterDOMProps(props);\n\n  let title = useVisibleRangeDescription(state.visibleRange.start, state.visibleRange.end, state.timeZone, false);\n  let visibleRangeDescription = useVisibleRangeDescription(state.visibleRange.start, state.visibleRange.end, state.timeZone, true);\n\n  // Announce when the visible date range changes\n  useUpdateEffect(() => {\n    // only when pressing the Previous or Next button\n    if (!state.isFocused) {\n      announce(visibleRangeDescription);\n    }\n  }, [visibleRangeDescription]);\n\n  // Announce when the selected value changes\n  let selectedDateDescription = useSelectedDateDescription(state);\n  useUpdateEffect(() => {\n    if (selectedDateDescription) {\n      announce(selectedDateDescription, 'polite', 4000);\n    }\n    // handle an update to the caption that describes the currently selected range, to announce the new value\n  }, [selectedDateDescription]);\n\n  let errorMessageId = useSlotId([Boolean(props.errorMessage), props.isInvalid, props.validationState]);\n\n  // Pass the label to the child grid elements.\n  hookData.set(state, {\n    ariaLabel: props['aria-label'],\n    ariaLabelledBy: props['aria-labelledby'],\n    errorMessageId,\n    selectedDateDescription\n  });\n\n  // If the next or previous buttons become disabled while they are focused, move focus to the calendar body.\n  let [nextFocused, setNextFocused] = useState(false);\n  let nextDisabled = props.isDisabled || state.isNextVisibleRangeInvalid();\n  if (nextDisabled && nextFocused) {\n    setNextFocused(false);\n    state.setFocused(true);\n  }\n\n  let [previousFocused, setPreviousFocused] = useState(false);\n  let previousDisabled = props.isDisabled || state.isPreviousVisibleRangeInvalid();\n  if (previousDisabled && previousFocused) {\n    setPreviousFocused(false);\n    state.setFocused(true);\n  }\n\n  let labelProps = useLabels({\n    id: props['id'],\n    'aria-label': [props['aria-label'], visibleRangeDescription].filter(Boolean).join(', '),\n    'aria-labelledby': props['aria-labelledby']\n  });\n\n  return {\n    calendarProps: mergeProps(domProps, labelProps, {\n      role: 'application',\n      'aria-details': props['aria-details'] || undefined,\n      'aria-describedby': props['aria-describedby'] || undefined\n    }),\n    nextButtonProps: {\n      onPress: () => state.focusNextPage(),\n      'aria-label': stringFormatter.format('next'),\n      isDisabled: nextDisabled,\n      onFocusChange: setNextFocused\n    },\n    prevButtonProps: {\n      onPress: () => state.focusPreviousPage(),\n      'aria-label': stringFormatter.format('previous'),\n      isDisabled: previousDisabled,\n      onFocusChange: setPreviousFocused\n    },\n    errorMessageProps: {\n      id: errorMessageId\n    },\n    title\n  };\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaCalendarProps, DateValue} from '@react-types/calendar';\nimport {CalendarAria, useCalendarBase} from './useCalendarBase';\nimport {CalendarState} from '@react-stately/calendar';\n\n/**\n * Provides the behavior and accessibility implementation for a calendar component.\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nexport function useCalendar<T extends DateValue>(props: AriaCalendarProps<T>, state: CalendarState): CalendarAria {\n  return useCalendarBase(props, state);\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CalendarDate, getWeeksInMonth, startOfWeek, today} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\nimport {DOMAttributes} from '@react-types/shared';\nimport {hookData, useVisibleRangeDescription} from './utils';\nimport {KeyboardEvent, useMemo} from 'react';\nimport {mergeProps, useLabels} from '@react-aria/utils';\nimport {useDateFormatter, useLocale} from '@react-aria/i18n';\n\nexport interface AriaCalendarGridProps {\n  /**\n   * The first date displayed in the calendar grid.\n   * Defaults to the first visible date in the calendar.\n   * Override this to display multiple date grids in a calendar.\n   */\n  startDate?: CalendarDate,\n  /**\n   * The last date displayed in the calendar grid.\n   * Defaults to the last visible date in the calendar.\n   * Override this to display multiple date grids in a calendar.\n   */\n  endDate?: CalendarDate,\n  /**\n   * The style of weekday names to display in the calendar grid header,\n   * e.g. single letter, abbreviation, or full day name.\n   * @default \"narrow\"\n   */\n  weekdayStyle?: 'narrow' | 'short' | 'long',\n  /**\n   * The day that starts the week.\n   */\n  firstDayOfWeek?: 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'\n}\n\nexport interface CalendarGridAria {\n  /** Props for the date grid element (e.g. `<table>`). */\n  gridProps: DOMAttributes,\n  /** Props for the grid header element (e.g. `<thead>`). */\n  headerProps: DOMAttributes,\n  /** A list of week day abbreviations formatted for the current locale, typically used in column headers. */\n  weekDays: string[],\n  /** The number of weeks in the month. */\n  weeksInMonth: number\n}\n\n/**\n * Provides the behavior and accessibility implementation for a calendar grid component.\n * A calendar grid displays a single grid of days within a calendar or range calendar which\n * can be keyboard navigated and selected by the user.\n */\nexport function useCalendarGrid(props: AriaCalendarGridProps, state: CalendarState | RangeCalendarState): CalendarGridAria {\n  let {\n    startDate = state.visibleRange.start,\n    endDate = state.visibleRange.end,\n    firstDayOfWeek\n  } = props;\n\n  let {direction} = useLocale();\n\n  let onKeyDown = (e: KeyboardEvent) => {\n    switch (e.key) {\n      case 'Enter':\n      case ' ':\n        e.preventDefault();\n        state.selectFocusedDate();\n        break;\n      case 'PageUp':\n        e.preventDefault();\n        e.stopPropagation();\n        state.focusPreviousSection(e.shiftKey);\n        break;\n      case 'PageDown':\n        e.preventDefault();\n        e.stopPropagation();\n        state.focusNextSection(e.shiftKey);\n        break;\n      case 'End':\n        e.preventDefault();\n        e.stopPropagation();\n        state.focusSectionEnd();\n        break;\n      case 'Home':\n        e.preventDefault();\n        e.stopPropagation();\n        state.focusSectionStart();\n        break;\n      case 'ArrowLeft':\n        e.preventDefault();\n        e.stopPropagation();\n        if (direction === 'rtl') {\n          state.focusNextDay();\n        } else {\n          state.focusPreviousDay();\n        }\n        break;\n      case 'ArrowUp':\n        e.preventDefault();\n        e.stopPropagation();\n        state.focusPreviousRow();\n        break;\n      case 'ArrowRight':\n        e.preventDefault();\n        e.stopPropagation();\n        if (direction === 'rtl') {\n          state.focusPreviousDay();\n        } else {\n          state.focusNextDay();\n        }\n        break;\n      case 'ArrowDown':\n        e.preventDefault();\n        e.stopPropagation();\n        state.focusNextRow();\n        break;\n      case 'Escape':\n        // Cancel the selection.\n        if ('setAnchorDate' in state) {\n          e.preventDefault();\n          state.setAnchorDate(null);\n        }\n        break;\n    }\n  };\n\n  let visibleRangeDescription = useVisibleRangeDescription(startDate, endDate, state.timeZone, true);\n\n  let {ariaLabel, ariaLabelledBy} = hookData.get(state)!;\n  let labelProps = useLabels({\n    'aria-label': [ariaLabel, visibleRangeDescription].filter(Boolean).join(', '),\n    'aria-labelledby': ariaLabelledBy\n  });\n\n  let dayFormatter = useDateFormatter({weekday: props.weekdayStyle || 'narrow', timeZone: state.timeZone});\n  let {locale} = useLocale();\n  let weekDays = useMemo(() => {\n    let weekStart = startOfWeek(today(state.timeZone), locale, firstDayOfWeek);\n    return [...new Array(7).keys()].map((index) => {\n      let date = weekStart.add({days: index});\n      let dateDay = date.toDate(state.timeZone);\n      return dayFormatter.format(dateDay);\n    });\n  }, [locale, state.timeZone, dayFormatter, firstDayOfWeek]);\n  let weeksInMonth = getWeeksInMonth(startDate, locale, firstDayOfWeek);\n\n  return {\n    gridProps: mergeProps(labelProps, {\n      role: 'grid',\n      'aria-readonly': state.isReadOnly || undefined,\n      'aria-disabled': state.isDisabled || undefined,\n      'aria-multiselectable': ('highlightedRange' in state) || undefined,\n      onKeyDown,\n      onFocus: () => state.setFocused(true),\n      onBlur: () => state.setFocused(false)\n    }),\n    headerProps: {\n      // Column headers are hidden to screen readers to make navigating with a touch screen reader easier.\n      // The day names are already included in the label of each cell, so there's no need to announce them twice.\n      'aria-hidden': true\n    },\n    weekDays,\n    weeksInMonth\n  };\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CalendarDate, isEqualDay, isSameDay, isToday} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\nimport {DOMAttributes, RefObject} from '@react-types/shared';\nimport {focusWithoutScrolling, getScrollParent, mergeProps, scrollIntoViewport, useDeepMemo, useDescription} from '@react-aria/utils';\nimport {getEraFormat, hookData} from './utils';\nimport {getInteractionModality, usePress} from '@react-aria/interactions';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {useDateFormatter, useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useEffect, useMemo, useRef} from 'react';\n\nexport interface AriaCalendarCellProps {\n  /** The date that this cell represents. */\n  date: CalendarDate,\n  /**\n   * Whether the cell is disabled. By default, this is determined by the\n   * Calendar's `minValue`, `maxValue`, and `isDisabled` props.\n   */\n  isDisabled?: boolean\n}\n\nexport interface CalendarCellAria {\n  /** Props for the grid cell element (e.g. `<td>`). */\n  cellProps: DOMAttributes,\n  /** Props for the button element within the cell. */\n  buttonProps: DOMAttributes,\n  /** Whether the cell is currently being pressed. */\n  isPressed: boolean,\n  /** Whether the cell is selected. */\n  isSelected: boolean,\n  /** Whether the cell is focused. */\n  isFocused: boolean,\n  /**\n   * Whether the cell is disabled, according to the calendar's `minValue`, `maxValue`, and `isDisabled` props.\n   * Disabled dates are not focusable, and cannot be selected by the user. They are typically\n   * displayed with a dimmed appearance.\n   */\n  isDisabled: boolean,\n  /**\n   * Whether the cell is unavailable, according to the calendar's `isDateUnavailable` prop. Unavailable dates remain\n   * focusable, but cannot be selected by the user. They should be displayed with a visual affordance to indicate they\n   * are unavailable, such as a different color or a strikethrough.\n   *\n   * Note that because they are focusable, unavailable dates must meet a 4.5:1 color contrast ratio,\n   * [as defined by WCAG](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html).\n   */\n  isUnavailable: boolean,\n  /**\n   * Whether the cell is outside the visible range of the calendar.\n   * For example, dates before the first day of a month in the same week.\n   */\n  isOutsideVisibleRange: boolean,\n  /** Whether the cell is part of an invalid selection. */\n  isInvalid: boolean,\n  /** The day number formatted according to the current locale. */\n  formattedDate: string\n}\n\n/**\n * Provides the behavior and accessibility implementation for a calendar cell component.\n * A calendar cell displays a date cell within a calendar grid which can be selected by the user.\n */\nexport function useCalendarCell(props: AriaCalendarCellProps, state: CalendarState | RangeCalendarState, ref: RefObject<HTMLElement | null>): CalendarCellAria {\n  let {date, isDisabled} = props;\n  let {errorMessageId, selectedDateDescription} = hookData.get(state)!;\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/calendar');\n  let dateFormatter = useDateFormatter({\n    weekday: 'long',\n    day: 'numeric',\n    month: 'long',\n    year: 'numeric',\n    era: getEraFormat(date),\n    timeZone: state.timeZone\n  });\n  let isSelected = state.isSelected(date);\n  let isFocused = state.isCellFocused(date);\n  isDisabled = isDisabled || state.isCellDisabled(date);\n  let isUnavailable = state.isCellUnavailable(date);\n  let isSelectable = !isDisabled && !isUnavailable;\n  let isInvalid = state.isValueInvalid && Boolean(\n    'highlightedRange' in state\n      ? !state.anchorDate && state.highlightedRange && date.compare(state.highlightedRange.start) >= 0 && date.compare(state.highlightedRange.end) <= 0\n      : state.value && isSameDay(state.value, date)\n  );\n\n  if (isInvalid) {\n    isSelected = true;\n  }\n\n  // For performance, reuse the same date object as before if the new date prop is the same.\n  // This allows subsequent useMemo results to be reused.\n  date = useDeepMemo<CalendarDate>(date, isEqualDay);\n  let nativeDate = useMemo(() => date.toDate(state.timeZone), [date, state.timeZone]);\n\n  // aria-label should be localize Day of week, Month, Day and Year without Time.\n  let isDateToday = isToday(date, state.timeZone);\n  let label = useMemo(() => {\n    let label = '';\n\n    // If this is a range calendar, add a description of the full selected range\n    // to the first and last selected date.\n    if (\n      'highlightedRange' in state &&\n      state.value &&\n      !state.anchorDate &&\n      (isSameDay(date, state.value.start) || isSameDay(date, state.value.end))\n    ) {\n      label = selectedDateDescription + ', ';\n    }\n\n    label += dateFormatter.format(nativeDate);\n    if (isDateToday) {\n      // If date is today, set appropriate string depending on selected state:\n      label = stringFormatter.format(isSelected ? 'todayDateSelected' : 'todayDate', {\n        date: label\n      });\n    } else if (isSelected) {\n      // If date is selected but not today:\n      label = stringFormatter.format('dateSelected', {\n        date: label\n      });\n    }\n\n    if (state.minValue && isSameDay(date, state.minValue)) {\n      label += ', ' + stringFormatter.format('minimumDate');\n    } else if (state.maxValue && isSameDay(date, state.maxValue)) {\n      label += ', ' + stringFormatter.format('maximumDate');\n    }\n\n    return label;\n  }, [dateFormatter, nativeDate, stringFormatter, isSelected, isDateToday, date, state, selectedDateDescription]);\n\n  // When a cell is focused and this is a range calendar, add a prompt to help\n  // screenreader users know that they are in a range selection mode.\n  let rangeSelectionPrompt = '';\n  if ('anchorDate' in state && isFocused && !state.isReadOnly && isSelectable) {\n    // If selection has started add \"click to finish selecting range\"\n    if (state.anchorDate) {\n      rangeSelectionPrompt = stringFormatter.format('finishRangeSelectionPrompt');\n    // Otherwise, add \"click to start selecting range\" prompt\n    } else {\n      rangeSelectionPrompt = stringFormatter.format('startRangeSelectionPrompt');\n    }\n  }\n\n  let descriptionProps = useDescription(rangeSelectionPrompt);\n\n  let isAnchorPressed = useRef(false);\n  let isRangeBoundaryPressed = useRef(false);\n  let touchDragTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n  let {pressProps, isPressed} = usePress({\n    // When dragging to select a range, we don't want dragging over the original anchor\n    // again to trigger onPressStart. Cancel presses immediately when the pointer exits.\n    shouldCancelOnPointerExit: 'anchorDate' in state && !!state.anchorDate,\n    preventFocusOnPress: true,\n    isDisabled: !isSelectable || state.isReadOnly,\n    onPressStart(e) {\n      if (state.isReadOnly) {\n        state.setFocusedDate(date);\n        return;\n      }\n\n      if ('highlightedRange' in state && !state.anchorDate && (e.pointerType === 'mouse' || e.pointerType === 'touch')) {\n        // Allow dragging the start or end date of a range to modify it\n        // rather than starting a new selection.\n        // Don't allow dragging when invalid, or weird jumping behavior may occur as date ranges\n        // are constrained to available dates. The user will need to select a new range in this case.\n        if (state.highlightedRange && !isInvalid) {\n          if (isSameDay(date, state.highlightedRange.start)) {\n            state.setAnchorDate(state.highlightedRange.end);\n            state.setFocusedDate(date);\n            state.setDragging(true);\n            isRangeBoundaryPressed.current = true;\n            return;\n          } else if (isSameDay(date, state.highlightedRange.end)) {\n            state.setAnchorDate(state.highlightedRange.start);\n            state.setFocusedDate(date);\n            state.setDragging(true);\n            isRangeBoundaryPressed.current = true;\n            return;\n          }\n        }\n\n        let startDragging = () => {\n          state.setDragging(true);\n          touchDragTimerRef.current = undefined;\n\n          state.selectDate(date);\n          state.setFocusedDate(date);\n          isAnchorPressed.current = true;\n        };\n\n        // Start selection on mouse/touch down so users can drag to select a range.\n        // On touch, delay dragging to determine if the user really meant to scroll.\n        if (e.pointerType === 'touch') {\n          touchDragTimerRef.current = setTimeout(startDragging, 200);\n        } else {\n          startDragging();\n        }\n      }\n    },\n    onPressEnd() {\n      isRangeBoundaryPressed.current = false;\n      isAnchorPressed.current = false;\n      clearTimeout(touchDragTimerRef.current);\n      touchDragTimerRef.current = undefined;\n    },\n    onPress() {\n      // For non-range selection, always select on press up.\n      if (!('anchorDate' in state) && !state.isReadOnly) {\n        state.selectDate(date);\n        state.setFocusedDate(date);\n      }\n    },\n    onPressUp(e) {\n      if (state.isReadOnly) {\n        return;\n      }\n\n      // If the user tapped quickly, the date won't be selected yet and the\n      // timer will still be in progress. In this case, select the date on touch up.\n      // Timer is cleared in onPressEnd.\n      if ('anchorDate' in state && touchDragTimerRef.current) {\n        state.selectDate(date);\n        state.setFocusedDate(date);\n      }\n\n      if ('anchorDate' in state) {\n        if (isRangeBoundaryPressed.current) {\n          // When clicking on the start or end date of an already selected range,\n          // start a new selection on press up to also allow dragging the date to\n          // change the existing range.\n          state.setAnchorDate(date);\n        } else if (state.anchorDate && !isAnchorPressed.current) {\n          // When releasing a drag or pressing the end date of a range, select it.\n          state.selectDate(date);\n          state.setFocusedDate(date);\n        } else if (e.pointerType === 'keyboard' && !state.anchorDate) {\n          // For range selection, auto-advance the focused date by one if using keyboard.\n          // This gives an indication that you're selecting a range rather than a single date.\n          // For mouse, this is unnecessary because users will see the indication on hover. For screen readers,\n          // there will be an announcement to \"click to finish selecting range\" (above).\n          state.selectDate(date);\n          let nextDay = date.add({days: 1});\n          if (state.isInvalid(nextDay)) {\n            nextDay = date.subtract({days: 1});\n          }\n          if (!state.isInvalid(nextDay)) {\n            state.setFocusedDate(nextDay);\n          }\n        } else if (e.pointerType === 'virtual') {\n          // For screen readers, just select the date on click.\n          state.selectDate(date);\n          state.setFocusedDate(date);\n        }\n      }\n    }\n  });\n\n  let tabIndex: number | undefined = undefined;\n  if (!isDisabled) {\n    tabIndex = isSameDay(date, state.focusedDate) ? 0 : -1;\n  }\n\n  // Focus the button in the DOM when the state updates.\n  useEffect(() => {\n    if (isFocused && ref.current) {\n      focusWithoutScrolling(ref.current);\n\n      // Scroll into view if navigating with a keyboard, otherwise\n      // try not to shift the view under the user's mouse/finger.\n      // If in a overlay, scrollIntoViewport will only cause scrolling\n      // up to the overlay scroll body to prevent overlay shifting.\n      // Also only scroll into view if the cell actually got focused.\n      // There are some cases where the cell might be disabled or inside,\n      // an inert container and we don't want to scroll then.\n      if (getInteractionModality() !== 'pointer' && document.activeElement === ref.current) {\n        scrollIntoViewport(ref.current, {containingElement: getScrollParent(ref.current)});\n      }\n    }\n  }, [isFocused, ref]);\n\n  let cellDateFormatter = useDateFormatter({\n    day: 'numeric',\n    timeZone: state.timeZone,\n    calendar: date.calendar.identifier\n  });\n\n  let formattedDate = useMemo(() => cellDateFormatter.formatToParts(nativeDate).find(part => part.type === 'day')!.value, [cellDateFormatter, nativeDate]);\n\n  return {\n    cellProps: {\n      role: 'gridcell',\n      'aria-disabled': !isSelectable || undefined,\n      'aria-selected': isSelected || undefined,\n      'aria-invalid': isInvalid || undefined\n    },\n    buttonProps: mergeProps(pressProps, {\n      onFocus() {\n        if (!isDisabled) {\n          state.setFocusedDate(date);\n        }\n      },\n      tabIndex,\n      role: 'button',\n      'aria-disabled': !isSelectable || undefined,\n      'aria-label': label,\n      'aria-invalid': isInvalid || undefined,\n      'aria-describedby': [\n        isInvalid ? errorMessageId : undefined,\n        descriptionProps['aria-describedby']\n      ].filter(Boolean).join(' ') || undefined,\n      onPointerEnter(e) {\n        // Highlight the date on hover or drag over a date when selecting a range.\n        if ('highlightDate' in state && (e.pointerType !== 'touch' || state.isDragging) && isSelectable) {\n          state.highlightDate(date);\n        }\n      },\n      onPointerDown(e) {\n        // This is necessary on touch devices to allow dragging\n        // outside the original pressed element.\n        // (JSDOM does not support this)\n        if ('releasePointerCapture' in e.target) {\n          e.target.releasePointerCapture(e.pointerId);\n        }\n      },\n      onContextMenu(e) {\n        // Prevent context menu on long press.\n        e.preventDefault();\n      }\n    }),\n    isPressed,\n    isFocused,\n    isSelected,\n    isDisabled,\n    isUnavailable,\n    isOutsideVisibleRange: date.compare(state.visibleRange.start) < 0 || date.compare(state.visibleRange.end) > 0,\n    isInvalid,\n    formattedDate\n  };\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes} from '@react-types/shared';\nimport {mergeProps} from '@react-aria/utils';\nimport React, {CSSProperties, JSX, JSXElementConstructor, ReactNode, useMemo, useState} from 'react';\nimport {useFocusWithin} from '@react-aria/interactions';\n\nexport interface VisuallyHiddenProps extends DOMAttributes {\n  /** The content to visually hide. */\n  children?: ReactNode,\n\n  /**\n   * The element type for the container.\n   * @default 'div'\n   */\n  elementType?: string | JSXElementConstructor<any>,\n\n  /** Whether the element should become visible on focus, for example skip links. */\n  isFocusable?: boolean\n}\n\nconst styles: CSSProperties = {\n  border: 0,\n  clip: 'rect(0 0 0 0)',\n  clipPath: 'inset(50%)',\n  height: '1px',\n  margin: '-1px',\n  overflow: 'hidden',\n  padding: 0,\n  position: 'absolute',\n  width: '1px',\n  whiteSpace: 'nowrap'\n};\n\nexport interface VisuallyHiddenAria {\n  visuallyHiddenProps: DOMAttributes\n}\n\n/**\n * Provides props for an element that hides its children visually\n * but keeps content visible to assistive technology.\n */\nexport function useVisuallyHidden(props: VisuallyHiddenProps = {}): VisuallyHiddenAria {\n  let {\n    style,\n    isFocusable\n  } = props;\n\n  let [isFocused, setFocused] = useState(false);\n  let {focusWithinProps} = useFocusWithin({\n    isDisabled: !isFocusable,\n    onFocusWithinChange: (val) => setFocused(val)\n  });\n\n  // If focused, don't hide the element.\n  let combinedStyles = useMemo(() => {\n    if (isFocused) {\n      return style;\n    } else if (style) {\n      return {...styles, ...style};\n    } else {\n      return styles;\n    }\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isFocused]);\n\n  return {\n    visuallyHiddenProps: {\n      ...focusWithinProps,\n      style: combinedStyles\n    }\n  };\n}\n\n/**\n * VisuallyHidden hides its children visually, while keeping content visible\n * to screen readers.\n */\nexport function VisuallyHidden(props: VisuallyHiddenProps): JSX.Element {\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  let {children, elementType: Element = 'div', isFocusable, style, ...otherProps} = props;\n  let {visuallyHiddenProps} = useVisuallyHidden(props);\n\n  return (\n    <Element {...mergeProps(otherProps, visuallyHiddenProps)}>\n      {children}\n    </Element>\n  );\n}\n", "/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaProgressBarProps, useProgressBar} from 'react-aria';\nimport {clamp} from '@react-stately/utils';\nimport {ContextValue, RenderProps, SlotProps, useContextProps, useRenderProps, useSlot} from './utils';\nimport {LabelContext} from './Label';\nimport React, {createContext, ForwardedRef, forwardRef} from 'react';\n\nexport interface ProgressBarProps extends Omit<AriaProgressBarProps, 'label'>, RenderProps<ProgressBarRenderProps>, SlotProps {}\n\nexport interface ProgressBarRenderProps {\n  /**\n   * The value as a percentage between the minimum and maximum.\n   */\n  percentage?: number,\n  /**\n   * A formatted version of the value.\n   * @selector [aria-valuetext]\n   */\n  valueText: string | undefined,\n  /**\n   * Whether the progress bar is indeterminate.\n   * @selector :not([aria-valuenow])\n   */\n  isIndeterminate: boolean\n}\n\nexport const ProgressBarContext = createContext<ContextValue<ProgressBarProps, HTMLDivElement>>(null);\n\n/**\n * Progress bars show either determinate or indeterminate progress of an operation\n * over time.\n */\nexport const ProgressBar = forwardRef(function ProgressBar(props: ProgressBarProps, ref: ForwardedRef<HTMLDivElement>) {\n  [props, ref] = useContextProps(props, ref, ProgressBarContext);\n  let {\n    value = 0,\n    minValue = 0,\n    maxValue = 100,\n    isIndeterminate = false\n  } = props;\n  value = clamp(value, minValue, maxValue);\n\n  let [labelRef, label] = useSlot(\n    !props['aria-label'] && !props['aria-labelledby']\n  );\n  let {\n    progressBarProps,\n    labelProps\n  } = useProgressBar({...props, label});\n\n  // Calculate the width of the progress bar as a percentage\n  let percentage = isIndeterminate ? undefined : (value - minValue) / (maxValue - minValue) * 100;\n\n  let renderProps = useRenderProps({\n    ...props,\n    defaultClassName: 'react-aria-ProgressBar',\n    values: {\n      percentage,\n      valueText: progressBarProps['aria-valuetext'],\n      isIndeterminate\n    }\n  });\n\n  return (\n    <div {...progressBarProps} {...renderProps} ref={ref} slot={props.slot || undefined}>\n      <LabelContext.Provider value={{...labelProps, ref: labelRef, elementType: 'span'}}>\n        {renderProps.children}\n      </LabelContext.Provider>\n    </div>\n  );\n});\n", "/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {announce} from '@react-aria/live-announcer';\nimport {\n  AriaButtonProps,\n  HoverEvents,\n  mergeProps,\n  useButton,\n  useFocusRing,\n  useHover,\n  useId\n} from 'react-aria';\nimport {\n  ContextValue,\n  RenderProps,\n  SlotProps,\n  useContextProps,\n  useRenderProps\n} from './utils';\nimport {createHideableComponent} from '@react-aria/collections';\nimport {filterDOMProps} from '@react-aria/utils';\nimport {ProgressBarContext} from './ProgressBar';\nimport React, {createContext, ForwardedRef, useEffect, useRef} from 'react';\n\nexport interface ButtonRenderProps {\n  /**\n   * Whether the button is currently hovered with a mouse.\n   * @selector [data-hovered]\n   */\n  isHovered: boolean,\n  /**\n   * Whether the button is currently in a pressed state.\n   * @selector [data-pressed]\n   */\n  isPressed: boolean,\n  /**\n   * Whether the button is focused, either via a mouse or keyboard.\n   * @selector [data-focused]\n   */\n  isFocused: boolean,\n  /**\n   * Whether the button is keyboard focused.\n   * @selector [data-focus-visible]\n   */\n  isFocusVisible: boolean,\n  /**\n   * Whether the button is disabled.\n   * @selector [data-disabled]\n   */\n  isDisabled: boolean,\n  /**\n   * Whether the button is currently in a pending state.\n   * @selector [data-pending]\n   */\n  isPending: boolean\n}\n\nexport interface ButtonProps extends Omit<AriaButtonProps, 'children' | 'href' | 'target' | 'rel' | 'elementType'>, HoverEvents, SlotProps, RenderProps<ButtonRenderProps> {\n  /**\n   * The `<form>` element to associate the button with.\n   * The value of this attribute must be the id of a `<form>` in the same document.\n   */\n  form?: string,\n  /**\n   * The URL that processes the information submitted by the button.\n   * Overrides the action attribute of the button's form owner.\n   */\n  formAction?: string,\n  /** Indicates how to encode the form data that is submitted. */\n  formEncType?: string,\n  /** Indicates the HTTP method used to submit the form. */\n  formMethod?: string,\n  /** Indicates that the form is not to be validated when it is submitted. */\n  formNoValidate?: boolean,\n  /** Overrides the target attribute of the button's form owner. */\n  formTarget?: string,\n  /** Submitted as a pair with the button's value as part of the form data. */\n  name?: string,\n  /** The value associated with the button's name when it's submitted with the form data. */\n  value?: string,\n  /**\n   * Whether the button is in a pending state. This disables press and hover events\n   * while retaining focusability, and announces the pending state to screen readers.\n   */\n  isPending?: boolean\n}\n\ninterface ButtonContextValue extends ButtonProps {\n  isPressed?: boolean\n}\n\nconst additionalButtonHTMLAttributes = new Set(['form', 'formAction', 'formEncType', 'formMethod', 'formNoValidate', 'formTarget', 'name', 'value']);\n\nexport const ButtonContext = createContext<ContextValue<ButtonContextValue, HTMLButtonElement>>({});\n\n/**\n * A button allows a user to perform an action, with mouse, touch, and keyboard interactions.\n */\nexport const Button = /*#__PURE__*/ createHideableComponent(function Button(props: ButtonProps, ref: ForwardedRef<HTMLButtonElement>) {\n  [props, ref] = useContextProps(props, ref, ButtonContext);\n  props = disablePendingProps(props);\n  let ctx = props as ButtonContextValue;\n  let {isPending} = ctx;\n  let {buttonProps, isPressed} = useButton(props, ref);\n  let {focusProps, isFocused, isFocusVisible} = useFocusRing(props);\n  let {hoverProps, isHovered} = useHover({\n    ...props,\n    isDisabled: props.isDisabled || isPending\n  });\n  let renderValues = {\n    isHovered,\n    isPressed: (ctx.isPressed || isPressed) && !isPending,\n    isFocused,\n    isFocusVisible,\n    isDisabled: props.isDisabled || false,\n    isPending: isPending ?? false\n  };\n\n  let renderProps = useRenderProps({\n    ...props,\n    values: renderValues,\n    defaultClassName: 'react-aria-Button'\n  });\n\n  let buttonId = useId(buttonProps.id);\n  let progressId = useId();\n\n  let ariaLabelledby = buttonProps['aria-labelledby'];\n  if (isPending) {\n    // aria-labelledby wins over aria-label\n    // https://www.w3.org/TR/accname-1.2/#computation-steps\n    if (ariaLabelledby) {\n      ariaLabelledby = `${ariaLabelledby} ${progressId}`;\n    } else if (buttonProps['aria-label']) {\n      ariaLabelledby = `${buttonId} ${progressId}`;\n    }\n  }\n\n  let wasPending = useRef(isPending);\n  useEffect(() => {\n    let message = {'aria-labelledby': ariaLabelledby || buttonId};\n    if (!wasPending.current && isFocused && isPending) {\n      announce(message, 'assertive');\n    } else if (wasPending.current && isFocused && !isPending) {\n      announce(message, 'assertive');\n    }\n    wasPending.current = isPending;\n  }, [isPending, isFocused, ariaLabelledby, buttonId]);\n\n  // When the button is in a pending state, we want to stop implicit form submission (ie. when the user presses enter on a text input).\n  // We do this by changing the button's type to button.\n  return (\n    <button\n      {...filterDOMProps(props, {propNames: additionalButtonHTMLAttributes})}\n      {...mergeProps(buttonProps, focusProps, hoverProps)}\n      {...renderProps}\n      type={buttonProps.type === 'submit' && isPending ? 'button' : buttonProps.type}\n      id={buttonId}\n      ref={ref}\n      aria-labelledby={ariaLabelledby}\n      slot={props.slot || undefined}\n      aria-disabled={isPending ? 'true' : buttonProps['aria-disabled']}\n      data-disabled={props.isDisabled || undefined}\n      data-pressed={renderValues.isPressed || undefined}\n      data-hovered={isHovered || undefined}\n      data-focused={isFocused || undefined}\n      data-pending={isPending || undefined}\n      data-focus-visible={isFocusVisible || undefined}>\n      <ProgressBarContext.Provider value={{id: progressId}}>\n        {renderProps.children}\n      </ProgressBarContext.Provider>\n    </button>\n  );\n});\n\nfunction disablePendingProps(props) {\n  // Don't allow interaction while isPending is true\n  if (props.isPending) {\n    props.onPress = undefined;\n    props.onPressStart = undefined;\n    props.onPressEnd = undefined;\n    props.onPressChange = undefined;\n    props.onPressUp = undefined;\n    props.onKeyDown = undefined;\n    props.onKeyUp = undefined;\n    props.onClick = undefined;\n    props.href = undefined;\n  }\n  return props;\n}\n", "/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ContextValue, useContextProps} from './utils';\nimport React, {createContext, ForwardedRef, forwardRef, HTMLAttributes} from 'react';\n\nexport interface TextProps extends HTMLAttributes<HTMLElement> {\n  elementType?: string\n}\n\nexport const TextContext = createContext<ContextValue<TextProps, HTMLElement>>({});\n\nexport const Text = forwardRef(function Text(props: TextProps, ref: ForwardedRef<HTMLElement>) {\n  [props, ref] = useContextProps(props, ref, TextContext);\n  let {elementType: ElementType = 'span', ...domProps} = props;\n  // @ts-ignore\n  return <ElementType className=\"react-aria-Text\" {...domProps} ref={ref} />;\n});\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nimport {\n  CalendarDate,\n  DateDuration,\n  maxDate,\n  minDate,\n  startOfMonth,\n  startOfWeek,\n  startOfYear,\n  toCalendarDate\n} from '@internationalized/date';\nimport {DateValue} from '@react-types/calendar';\n\nexport function isInvalid(date: DateValue, minValue?: DateValue | null, maxValue?: DateValue | null): boolean {\n  return (minValue != null && date.compare(minValue) < 0) ||\n    (maxValue != null && date.compare(maxValue) > 0);\n}\n\nexport function alignCenter(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue | null, maxValue?: DateValue | null): CalendarDate {\n  let halfDuration: DateDuration = {};\n  for (let key in duration) {\n    halfDuration[key] = Math.floor(duration[key] / 2);\n    if (halfDuration[key] > 0 && duration[key] % 2 === 0) {\n      halfDuration[key]--;\n    }\n  }\n\n  let aligned = alignStart(date, duration, locale).subtract(halfDuration);\n  return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignStart(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue | null, maxValue?: DateValue | null): CalendarDate {\n  // align to the start of the largest unit\n  let aligned = date;\n  if (duration.years) {\n    aligned = startOfYear(date);\n  } else if (duration.months) {\n    aligned = startOfMonth(date);\n  } else if (duration.weeks) {\n    aligned = startOfWeek(date, locale);\n  }\n\n  return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function alignEnd(date: CalendarDate, duration: DateDuration, locale: string, minValue?: DateValue | null, maxValue?: DateValue | null): CalendarDate {\n  let d = {...duration};\n  // subtract 1 from the smallest unit\n  if (d.days) {\n    d.days--;\n  } else if (d.weeks) {\n    d.weeks--;\n  } else if (d.months) {\n    d.months--;\n  } else if (d.years) {\n    d.years--;\n  }\n\n  let aligned = alignStart(date, duration, locale).subtract(d);\n  return constrainStart(date, aligned, duration, locale, minValue, maxValue);\n}\n\nexport function constrainStart(\n  date: CalendarDate,\n  aligned: CalendarDate,\n  duration: DateDuration,\n  locale: string,\n  minValue?: DateValue | null,\n  maxValue?: DateValue | null): CalendarDate {\n  if (minValue && date.compare(minValue) >= 0) {\n    let newDate = maxDate(\n      aligned,\n      alignStart(toCalendarDate(minValue), duration, locale)\n    );\n    if (newDate) {\n      aligned = newDate;\n    }\n  }\n\n  if (maxValue && date.compare(maxValue) <= 0) {\n    let newDate = minDate(\n      aligned,\n      alignEnd(toCalendarDate(maxValue), duration, locale)\n    );\n    if (newDate) {\n      aligned = newDate;\n    }\n  }\n\n  return aligned;\n}\n\nexport function constrainValue(date: CalendarDate, minValue?: DateValue | null, maxValue?: DateValue | null): CalendarDate {\n  if (minValue) {\n    let newDate = maxDate(date, toCalendarDate(minValue));\n    if (newDate) {\n      date = newDate;\n    }\n  }\n\n  if (maxValue) {\n    let newDate = minDate(date, toCalendarDate(maxValue));\n    if (newDate) {\n      date = newDate;\n    }\n  }\n\n  return date;\n}\n\nexport function previousAvailableDate(date: CalendarDate, minValue: DateValue, isDateUnavailable?: (date: CalendarDate) => boolean): CalendarDate | null {\n  if (!isDateUnavailable) {\n    return date;\n  }\n\n  while (date.compare(minValue) >= 0 && isDateUnavailable(date)) {\n    date = date.subtract({days: 1});\n  }\n\n  if (date.compare(minValue) >= 0) {\n    return date;\n  }\n  return null;\n}\n", "/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {alignCenter, alignEnd, alignStart, constrainStart, constrainValue, isInvalid, previousAvailableDate} from './utils';\nimport {\n  Calendar,\n  CalendarDate,\n  CalendarIdentifier,\n  DateDuration,\n  DateFormatter,\n  endOfMonth,\n  endOfWeek,\n  getDayOfWeek,\n  GregorianCalendar,\n  isEqualCalendar,\n  isSameDay,\n  startOfMonth,\n  startOfWeek,\n  toCalendar,\n  toCalendarDate,\n  today\n} from '@internationalized/date';\nimport {CalendarProps, DateValue, MappedDateValue} from '@react-types/calendar';\nimport {CalendarState} from './types';\nimport {useControlledState} from '@react-stately/utils';\nimport {useMemo, useState} from 'react';\nimport {ValidationState} from '@react-types/shared';\n\nexport interface CalendarStateOptions<T extends DateValue = DateValue> extends CalendarProps<T> {\n  /** The locale to display and edit the value according to. */\n  locale: string,\n  /**\n   * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n   * object for a given calendar identifier. Such a function may be imported from the\n   * `@internationalized/date` package, or manually implemented to include support for\n   * only certain calendars.\n   */\n  createCalendar: (name: CalendarIdentifier) => Calendar,\n  /**\n   * The amount of days that will be displayed at once. This affects how pagination works.\n   * @default {months: 1}\n   */\n  visibleDuration?: DateDuration,\n  /** Determines how to align the initial selection relative to the visible date range. */\n  selectionAlignment?: 'start' | 'center' | 'end'\n}\n/**\n * Provides state management for a calendar component.\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nexport function useCalendarState<T extends DateValue = DateValue>(props: CalendarStateOptions<T>): CalendarState {\n  let defaultFormatter = useMemo(() => new DateFormatter(props.locale), [props.locale]);\n  let resolvedOptions = useMemo(() => defaultFormatter.resolvedOptions(), [defaultFormatter]);\n  let {\n    locale,\n    createCalendar,\n    visibleDuration = {months: 1},\n    minValue,\n    maxValue,\n    selectionAlignment,\n    isDateUnavailable,\n    pageBehavior = 'visible',\n    firstDayOfWeek\n  } = props;\n  let calendar = useMemo(() => createCalendar(resolvedOptions.calendar as CalendarIdentifier), [createCalendar, resolvedOptions.calendar]);\n\n  let [value, setControlledValue] = useControlledState<DateValue | null, MappedDateValue<T>>(props.value!, props.defaultValue ?? null!, props.onChange);\n  let calendarDateValue = useMemo(() => value ? toCalendar(toCalendarDate(value), calendar) : null, [value, calendar]);\n  let timeZone = useMemo(() => value && 'timeZone' in value ? value.timeZone : resolvedOptions.timeZone, [value, resolvedOptions.timeZone]);\n  let focusedCalendarDate = useMemo(() => (\n    props.focusedValue\n      ? constrainValue(toCalendar(toCalendarDate(props.focusedValue), calendar), minValue, maxValue)\n      : undefined\n  ), [props.focusedValue, calendar, minValue, maxValue]);\n  let defaultFocusedCalendarDate = useMemo(() => (\n    constrainValue(\n      props.defaultFocusedValue\n        ? toCalendar(toCalendarDate(props.defaultFocusedValue), calendar)\n        : calendarDateValue || toCalendar(today(timeZone), calendar),\n      minValue,\n      maxValue\n    )\n  ), [props.defaultFocusedValue, calendarDateValue, timeZone, calendar, minValue, maxValue]);\n  let [focusedDate, setFocusedDate] = useControlledState(focusedCalendarDate, defaultFocusedCalendarDate, props.onFocusChange);\n  let [startDate, setStartDate] = useState(() => {\n    switch (selectionAlignment) {\n      case 'start':\n        return alignStart(focusedDate, visibleDuration, locale, minValue, maxValue);\n      case 'end':\n        return alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue);\n      case 'center':\n      default:\n        return alignCenter(focusedDate, visibleDuration, locale, minValue, maxValue);\n    }\n  });\n  let [isFocused, setFocused] = useState(props.autoFocus || false);\n\n  let endDate = useMemo(() => {\n    let duration = {...visibleDuration};\n    if (duration.days) {\n      duration.days--;\n    } else {\n      duration.days = -1;\n    }\n    return startDate.add(duration);\n  }, [startDate, visibleDuration]);\n\n  // Reset focused date and visible range when calendar changes.\n  let [lastCalendar, setLastCalendar] = useState(calendar);\n  if (!isEqualCalendar(calendar, lastCalendar)) {\n    let newFocusedDate = toCalendar(focusedDate, calendar);\n    setStartDate(alignCenter(newFocusedDate, visibleDuration, locale, minValue, maxValue));\n    setFocusedDate(newFocusedDate);\n    setLastCalendar(calendar);\n  }\n\n  if (isInvalid(focusedDate, minValue, maxValue)) {\n    // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n    setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n  } else if (focusedDate.compare(startDate) < 0) {\n    setStartDate(alignEnd(focusedDate, visibleDuration, locale, minValue, maxValue));\n  } else if (focusedDate.compare(endDate) > 0) {\n    setStartDate(alignStart(focusedDate, visibleDuration, locale, minValue, maxValue));\n  }\n\n  // Sets focus to a specific cell date\n  function focusCell(date: CalendarDate) {\n    date = constrainValue(date, minValue, maxValue);\n    setFocusedDate(date);\n  }\n\n  function setValue(newValue: CalendarDate | null) {\n    if (!props.isDisabled && !props.isReadOnly) {\n      let localValue = newValue;\n      if (localValue === null) {\n        setControlledValue(null);\n        return;\n      }\n      localValue = constrainValue(localValue, minValue, maxValue);\n      localValue = previousAvailableDate(localValue, startDate, isDateUnavailable);\n      if (!localValue) {\n        return;\n      }\n\n      // The display calendar should not have any effect on the emitted value.\n      // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n      localValue = toCalendar(localValue, value?.calendar || new GregorianCalendar());\n\n      // Preserve time if the input value had one.\n      if (value && 'hour' in value) {\n        setControlledValue(value.set(localValue));\n      } else {\n        setControlledValue(localValue);\n      }\n    }\n  }\n\n  let isUnavailable = useMemo(() => {\n    if (!calendarDateValue) {\n      return false;\n    }\n\n    if (isDateUnavailable && isDateUnavailable(calendarDateValue)) {\n      return true;\n    }\n\n    return isInvalid(calendarDateValue, minValue, maxValue);\n  }, [calendarDateValue, isDateUnavailable, minValue, maxValue]);\n  let isValueInvalid = props.isInvalid || props.validationState === 'invalid' || isUnavailable;\n  let validationState: ValidationState | null = isValueInvalid ? 'invalid' : null;\n\n  let pageDuration = useMemo(() => {\n    if (pageBehavior === 'visible') {\n      return visibleDuration;\n    }\n\n    return unitDuration(visibleDuration);\n  }, [pageBehavior, visibleDuration]);\n\n  return {\n    isDisabled: props.isDisabled ?? false,\n    isReadOnly: props.isReadOnly ?? false,\n    value: calendarDateValue,\n    setValue,\n    visibleRange: {\n      start: startDate,\n      end: endDate\n    },\n    minValue,\n    maxValue,\n    focusedDate,\n    timeZone,\n    validationState,\n    isValueInvalid,\n    setFocusedDate(date) {\n      focusCell(date);\n      setFocused(true);\n    },\n    focusNextDay() {\n      focusCell(focusedDate.add({days: 1}));\n    },\n    focusPreviousDay() {\n      focusCell(focusedDate.subtract({days: 1}));\n    },\n    focusNextRow() {\n      if (visibleDuration.days) {\n        this.focusNextPage();\n      } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n        focusCell(focusedDate.add({weeks: 1}));\n      }\n    },\n    focusPreviousRow() {\n      if (visibleDuration.days) {\n        this.focusPreviousPage();\n      } else if (visibleDuration.weeks || visibleDuration.months || visibleDuration.years) {\n        focusCell(focusedDate.subtract({weeks: 1}));\n      }\n    },\n    focusNextPage() {\n      let start = startDate.add(pageDuration);\n      setFocusedDate(constrainValue(focusedDate.add(pageDuration), minValue, maxValue));\n      setStartDate(\n        alignStart(\n          constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n          pageDuration,\n          locale\n        )\n      );\n    },\n    focusPreviousPage() {\n      let start = startDate.subtract(pageDuration);\n      setFocusedDate(constrainValue(focusedDate.subtract(pageDuration), minValue, maxValue));\n      setStartDate(\n        alignStart(\n          constrainStart(focusedDate, start, pageDuration, locale, minValue, maxValue),\n          pageDuration,\n          locale\n        )\n      );\n    },\n    focusSectionStart() {\n      if (visibleDuration.days) {\n        focusCell(startDate);\n      } else if (visibleDuration.weeks) {\n        focusCell(startOfWeek(focusedDate, locale));\n      } else if (visibleDuration.months || visibleDuration.years) {\n        focusCell(startOfMonth(focusedDate));\n      }\n    },\n    focusSectionEnd() {\n      if (visibleDuration.days) {\n        focusCell(endDate);\n      } else if (visibleDuration.weeks) {\n        focusCell(endOfWeek(focusedDate, locale));\n      } else if (visibleDuration.months || visibleDuration.years) {\n        focusCell(endOfMonth(focusedDate));\n      }\n    },\n    focusNextSection(larger) {\n      if (!larger && !visibleDuration.days) {\n        focusCell(focusedDate.add(unitDuration(visibleDuration)));\n        return;\n      }\n\n      if (visibleDuration.days) {\n        this.focusNextPage();\n      } else if (visibleDuration.weeks) {\n        focusCell(focusedDate.add({months: 1}));\n      } else if (visibleDuration.months || visibleDuration.years) {\n        focusCell(focusedDate.add({years: 1}));\n      }\n    },\n    focusPreviousSection(larger) {\n      if (!larger && !visibleDuration.days) {\n        focusCell(focusedDate.subtract(unitDuration(visibleDuration)));\n        return;\n      }\n\n      if (visibleDuration.days) {\n        this.focusPreviousPage();\n      } else if (visibleDuration.weeks) {\n        focusCell(focusedDate.subtract({months: 1}));\n      } else if (visibleDuration.months || visibleDuration.years) {\n        focusCell(focusedDate.subtract({years: 1}));\n      }\n    },\n    selectFocusedDate() {\n      if (!(isDateUnavailable && isDateUnavailable(focusedDate))) {\n        setValue(focusedDate);\n      }\n    },\n    selectDate(date) {\n      setValue(date);\n    },\n    isFocused,\n    setFocused,\n    isInvalid(date) {\n      return isInvalid(date, minValue, maxValue);\n    },\n    isSelected(date) {\n      return calendarDateValue != null && isSameDay(date, calendarDateValue) && !this.isCellDisabled(date) && !this.isCellUnavailable(date);\n    },\n    isCellFocused(date) {\n      return isFocused && focusedDate && isSameDay(date, focusedDate);\n    },\n    isCellDisabled(date) {\n      return props.isDisabled || date.compare(startDate) < 0 || date.compare(endDate) > 0 || this.isInvalid(date);\n    },\n    isCellUnavailable(date) {\n      return props.isDateUnavailable ? props.isDateUnavailable(date) : false;\n    },\n    isPreviousVisibleRangeInvalid() {\n      let prev = startDate.subtract({days: 1});\n      return isSameDay(prev, startDate) || this.isInvalid(prev);\n    },\n    isNextVisibleRangeInvalid() {\n      // Adding may return the same date if we reached the end of time\n      // according to the calendar system (e.g. 9999-12-31).\n      let next = endDate.add({days: 1});\n      return isSameDay(next, endDate) || this.isInvalid(next);\n    },\n    getDatesInWeek(weekIndex, from = startDate) {\n      let date = from.add({weeks: weekIndex});\n      let dates: (CalendarDate | null)[] = [];\n\n      date = startOfWeek(date, locale, firstDayOfWeek);\n      \n      // startOfWeek will clamp dates within the calendar system's valid range, which may\n      // start in the middle of a week. In this case, add null placeholders.\n      let dayOfWeek = getDayOfWeek(date, locale, firstDayOfWeek);\n      for (let i = 0; i < dayOfWeek; i++) {\n        dates.push(null);\n      }\n\n      while (dates.length < 7) {\n        dates.push(date);\n        let nextDate = date.add({days: 1});\n        if (isSameDay(date, nextDate)) {\n          // If the next day is the same, we have hit the end of the calendar system.\n          break;\n        }\n        date = nextDate;\n      }\n\n      // Add null placeholders if at the end of the calendar system.\n      while (dates.length < 7) {\n        dates.push(null);\n      }\n\n      return dates;\n    }\n  };\n}\n\nfunction unitDuration(duration: DateDuration) {\n  let unit = {...duration};\n  for (let key in duration) {\n    unit[key] = 1;\n  }\n  return unit;\n}\n", "/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nimport {\n  AriaCalendarProps,\n  AriaRangeCalendarProps,\n  DateValue,\n  mergeProps,\n  useCalendar,\n  useCalendarCell,\n  useCalendarGrid,\n  useFocusRing,\n  useHover,\n  useLocale,\n  useRangeCalendar,\n  VisuallyHidden\n} from 'react-aria';\nimport {ButtonContext} from './Button';\nimport {CalendarDate, CalendarIdentifier, createCalendar, DateDuration, endOfMonth, Calendar as ICalendar, isSameDay, isSameMonth} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState, useCalendarState, useRangeCalendarState} from 'react-stately';\nimport {ContextValue, DOMProps, Provider, RenderProps, SlotProps, StyleProps, useContextProps, useRenderProps, useSlottedContext} from './utils';\nimport {DOMAttributes, FocusableElement, forwardRefType, HoverEvents} from '@react-types/shared';\nimport {filterDOMProps} from '@react-aria/utils';\nimport {HeadingContext} from './RSPContexts';\nimport React, {createContext, ForwardedRef, forwardRef, ReactElement, useContext, useRef} from 'react';\nimport {TextContext} from './Text';\n\nexport interface CalendarRenderProps {\n  /**\n   * Whether the calendar is disabled.\n   * @selector [data-disabled]\n   */\n  isDisabled: boolean,\n  /**\n   * State of the calendar.\n   */\n  state: CalendarState,\n  /**\n   * Whether the calendar is invalid.\n   * @selector [data-invalid]\n   */\n  isInvalid: boolean\n}\n\nexport interface RangeCalendarRenderProps extends Omit<CalendarRenderProps, 'state'> {\n  /**\n   * State of the range calendar.\n   */\n  state: RangeCalendarState\n}\n\nexport interface CalendarProps<T extends DateValue> extends Omit<AriaCalendarProps<T>, 'errorMessage' | 'validationState'>, RenderProps<CalendarRenderProps>, SlotProps {\n  /**\n   * The amount of days that will be displayed at once. This affects how pagination works.\n   * @default {months: 1}\n   */\n  visibleDuration?: DateDuration,\n\n  /**\n   * A function to create a new [Calendar](https://react-spectrum.adobe.com/internationalized/date/Calendar.html)\n   * object for a given calendar identifier. If not provided, the `createCalendar` function\n   * from `@internationalized/date` will be used.\n   */\n  createCalendar?: (identifier: CalendarIdentifier) => ICalendar\n}\n\nexport interface RangeCalendarProps<T extends DateValue> extends Omit<AriaRangeCalendarProps<T>, 'errorMessage' | 'validationState'>, RenderProps<RangeCalendarRenderProps>, SlotProps {\n  /**\n   * The amount of days that will be displayed at once. This affects how pagination works.\n   * @default {months: 1}\n   */\n  visibleDuration?: DateDuration,\n\n  /**\n   * A function to create a new [Calendar](https://react-spectrum.adobe.com/internationalized/date/Calendar.html)\n   * object for a given calendar identifier. If not provided, the `createCalendar` function\n   * from `@internationalized/date` will be used.\n   */\n  createCalendar?: (identifier: CalendarIdentifier) => ICalendar\n}\n\nexport const CalendarContext = createContext<ContextValue<CalendarProps<any>, HTMLDivElement>>(null);\nexport const RangeCalendarContext = createContext<ContextValue<RangeCalendarProps<any>, HTMLDivElement>>(null);\nexport const CalendarStateContext = createContext<CalendarState | null>(null);\nexport const RangeCalendarStateContext = createContext<RangeCalendarState | null>(null);\n\n/**\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nexport const Calendar = /*#__PURE__*/ (forwardRef as forwardRefType)(function Calendar<T extends DateValue>(props: CalendarProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n  [props, ref] = useContextProps(props, ref, CalendarContext);\n  let {locale} = useLocale();\n  let state = useCalendarState({\n    ...props,\n    locale,\n    createCalendar: props.createCalendar || createCalendar\n  });\n\n  let {calendarProps, prevButtonProps, nextButtonProps, errorMessageProps, title} = useCalendar(props, state);\n\n  let renderProps = useRenderProps({\n    ...props,\n    values: {\n      state,\n      isDisabled: props.isDisabled || false,\n      isInvalid: state.isValueInvalid\n    },\n    defaultClassName: 'react-aria-Calendar'\n  });\n\n  return (\n    <div\n      {...renderProps}\n      {...calendarProps}\n      ref={ref}\n      slot={props.slot || undefined}\n      data-disabled={props.isDisabled || undefined}\n      data-invalid={state.isValueInvalid || undefined}>\n      <Provider\n        values={[\n          [ButtonContext, {\n            slots: {\n              previous: prevButtonProps,\n              next: nextButtonProps\n            }\n          }],\n          [HeadingContext, {'aria-hidden': true, level: 2, children: title}],\n          [CalendarStateContext, state],\n          [CalendarContext, props as CalendarProps<any>],\n          [TextContext, {\n            slots: {\n              errorMessage: errorMessageProps\n            }\n          }]\n        ]}>\n        {/* Add a screen reader only description of the entire visible range rather than\n          * a separate heading above each month grid. This is placed first in the DOM order\n          * so that it is the first thing a touch screen reader user encounters.\n          * In addition, VoiceOver on iOS does not announce the aria-label of the grid\n          * elements, so the aria-label of the Calendar is included here as well. */}\n        <VisuallyHidden>\n          <h2>{calendarProps['aria-label']}</h2>\n        </VisuallyHidden>\n        {renderProps.children}\n        {/* For touch screen readers, add a visually hidden next button after the month grid\n          * so it's easy to navigate after reaching the end without going all the way\n          * back to the start of the month. */}\n        <VisuallyHidden>\n          <button\n            aria-label={nextButtonProps['aria-label']}\n            disabled={nextButtonProps.isDisabled}\n            onClick={() => state.focusNextPage()}\n            tabIndex={-1} />\n        </VisuallyHidden>\n      </Provider>\n    </div>\n  );\n});\n\n/**\n * A range calendar displays one or more date grids and allows users to select a contiguous range of dates.\n */\nexport const RangeCalendar = /*#__PURE__*/ (forwardRef as forwardRefType)(function RangeCalendar<T extends DateValue>(props: RangeCalendarProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n  [props, ref] = useContextProps(props, ref, RangeCalendarContext);\n  let {locale} = useLocale();\n  let state = useRangeCalendarState({\n    ...props,\n    locale,\n    createCalendar: props.createCalendar || createCalendar\n  });\n\n  let {calendarProps, prevButtonProps, nextButtonProps, errorMessageProps, title} = useRangeCalendar(\n    props,\n    state,\n    ref\n  );\n\n  let renderProps = useRenderProps({\n    ...props,\n    values: {\n      state,\n      isDisabled: props.isDisabled || false,\n      isInvalid: state.isValueInvalid\n    },\n    defaultClassName: 'react-aria-RangeCalendar'\n  });\n\n  return (\n    <div\n      {...renderProps}\n      {...calendarProps}\n      ref={ref}\n      slot={props.slot || undefined}\n      data-disabled={props.isDisabled || undefined}\n      data-invalid={state.isValueInvalid || undefined}>\n      <Provider\n        values={[\n          [ButtonContext, {\n            slots: {\n              previous: prevButtonProps,\n              next: nextButtonProps\n            }\n          }],\n          [HeadingContext, {'aria-hidden': true, level: 2, children: title}],\n          [RangeCalendarStateContext, state],\n          [RangeCalendarContext, props as RangeCalendarProps<any>],\n          [TextContext, {\n            slots: {\n              errorMessage: errorMessageProps\n            }\n          }]\n        ]}>\n        {/* Add a screen reader only description of the entire visible range rather than\n          * a separate heading above each month grid. This is placed first in the DOM order\n          * so that it is the first thing a touch screen reader user encounters.\n          * In addition, VoiceOver on iOS does not announce the aria-label of the grid\n          * elements, so the aria-label of the Calendar is included here as well. */}\n        <VisuallyHidden>\n          <h2>{calendarProps['aria-label']}</h2>\n        </VisuallyHidden>\n        {renderProps.children}\n        {/* For touch screen readers, add a visually hidden next button after the month grid\n          * so it's easy to navigate after reaching the end without going all the way\n          * back to the start of the month. */}\n        <VisuallyHidden>\n          <button\n            aria-label={nextButtonProps['aria-label']}\n            disabled={nextButtonProps.isDisabled}\n            onClick={() => state.focusNextPage()}\n            tabIndex={-1} />\n        </VisuallyHidden>\n      </Provider>\n    </div>\n  );\n});\n\nexport interface CalendarCellRenderProps {\n  /** The date that the cell represents. */\n  date: CalendarDate,\n  /** The day number formatted according to the current locale. */\n  formattedDate: string,\n  /**\n   * Whether the cell is currently hovered with a mouse.\n   * @selector [data-hovered]\n   */\n  isHovered: boolean,\n  /**\n   * Whether the cell is currently being pressed.\n   * @selector [data-pressed]\n   */\n  isPressed: boolean,\n  /**\n   * Whether the cell is selected.\n   * @selector [data-selected]\n   */\n  isSelected: boolean,\n  /**\n   * Whether the cell is the first date in a range selection.\n   * @selector [data-selection-start]\n   */\n  isSelectionStart: boolean,\n  /**\n   * Whether the cell is the last date in a range selection.\n   * @selector [data-selection-end]\n   */\n  isSelectionEnd: boolean,\n  /**\n   * Whether the cell is focused.\n   * @selector [data-focused]\n   */\n  isFocused: boolean,\n  /**\n   * Whether the cell is keyboard focused.\n   * @selector [data-focus-visible]\n   */\n  isFocusVisible: boolean,\n  /**\n   * Whether the cell is disabled, according to the calendar's `minValue`, `maxValue`, and `isDisabled` props.\n   * Disabled dates are not focusable, and cannot be selected by the user. They are typically\n   * displayed with a dimmed appearance.\n   * @selector [data-disabled]\n   */\n  isDisabled: boolean,\n  /**\n   * Whether the cell is outside the visible range of the calendar.\n   * For example, dates before the first day of a month in the same week.\n   * @selector [data-outside-visible-range]\n   */\n  isOutsideVisibleRange: boolean,\n  /**\n   * Whether the cell is outside the current month.\n   * @selector [data-outside-month]\n   */\n  isOutsideMonth: boolean,\n  /**\n   * Whether the cell is unavailable, according to the calendar's `isDateUnavailable` prop. Unavailable dates remain\n   * focusable, but cannot be selected by the user. They should be displayed with a visual affordance to indicate they\n   * are unavailable, such as a different color or a strikethrough.\n   *\n   * Note that because they are focusable, unavailable dates must meet a 4.5:1 color contrast ratio,\n   * [as defined by WCAG](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html).\n   *\n   * @selector [data-unavailable]\n   */\n  isUnavailable: boolean,\n  /**\n   * Whether the cell is part of an invalid selection.\n   * @selector [data-invalid]\n   */\n  isInvalid: boolean\n}\n\nexport interface CalendarGridProps extends StyleProps {\n  /**\n   * Either a function to render calendar cells for each date in the month,\n   * or children containing a `<CalendarGridHeader>`` and `<CalendarGridBody>`\n   * when additional customization is needed.\n   */\n  children?: ReactElement | ReactElement[] | ((date: CalendarDate) => ReactElement),\n  /**\n   * An offset from the beginning of the visible date range that this\n   * CalendarGrid should display. Useful when displaying more than one\n   * month at a time.\n   */\n  offset?: DateDuration,\n  /**\n   * The style of weekday names to display in the calendar grid header,\n   * e.g. single letter, abbreviation, or full day name.\n   * @default \"narrow\"\n   */\n  weekdayStyle?: 'narrow' | 'short' | 'long'\n}\n\ninterface InternalCalendarGridContextValue {\n  headerProps: DOMAttributes<FocusableElement>,\n  weekDays: string[],\n  startDate: CalendarDate,\n  weeksInMonth: number\n}\n\nconst InternalCalendarGridContext = createContext<InternalCalendarGridContextValue | null>(null);\n\n/**\n * A calendar grid displays a single grid of days within a calendar or range calendar which\n * can be keyboard navigated and selected by the user.\n */\nexport const CalendarGrid = /*#__PURE__*/ (forwardRef as forwardRefType)(function CalendarGrid(props: CalendarGridProps, ref: ForwardedRef<HTMLTableElement>) {\n  let calendarState = useContext(CalendarStateContext);\n  let rangeCalendarState = useContext(RangeCalendarStateContext);\n  let calenderProps = useSlottedContext(CalendarContext)!;\n  let rangeCalenderProps = useSlottedContext(RangeCalendarContext)!;\n  let state = calendarState ?? rangeCalendarState!;\n  let startDate = state.visibleRange.start;\n  if (props.offset) {\n    startDate = startDate.add(props.offset);\n  }\n\n  let firstDayOfWeek = calenderProps?.firstDayOfWeek ?? rangeCalenderProps?.firstDayOfWeek;\n\n  let {gridProps, headerProps, weekDays, weeksInMonth} = useCalendarGrid({\n    startDate,\n    endDate: endOfMonth(startDate),\n    weekdayStyle: props.weekdayStyle,\n    firstDayOfWeek\n  }, state);\n\n  return (\n    <InternalCalendarGridContext.Provider value={{headerProps, weekDays, startDate, weeksInMonth}}>\n      <table\n        {...filterDOMProps(props as any)}\n        {...gridProps}\n        ref={ref}\n        style={props.style}\n        className={props.className ?? 'react-aria-CalendarGrid'}>\n        {typeof props.children !== 'function'\n          ? props.children\n          : (<>\n            <CalendarGridHeaderForwardRef>\n              {day => <CalendarHeaderCellForwardRef>{day}</CalendarHeaderCellForwardRef>}\n            </CalendarGridHeaderForwardRef>\n            <CalendarGridBodyForwardRef>\n              {props.children}\n            </CalendarGridBodyForwardRef>\n          </>)\n        }\n      </table>\n    </InternalCalendarGridContext.Provider>\n  );\n});\n\nexport interface CalendarGridHeaderProps extends StyleProps {\n  /** A function to render a `<CalendarHeaderCell>` for a weekday name. */\n  children: (day: string) => ReactElement\n}\n\nfunction CalendarGridHeader(props: CalendarGridHeaderProps, ref: ForwardedRef<HTMLTableSectionElement>) {\n  let {children, style, className} = props;\n  let {headerProps, weekDays} = useContext(InternalCalendarGridContext)!;\n\n  return (\n    <thead\n      {...filterDOMProps(props as any)}\n      {...headerProps}\n      ref={ref}\n      style={style}\n      className={className || 'react-aria-CalendarGridHeader'}>\n      <tr>\n        {weekDays.map((day, key) => React.cloneElement(children(day), {key}))}\n      </tr>\n    </thead>\n  );\n}\n\n/**\n * A calendar grid header displays a row of week day names at the top of a month.\n */\nconst CalendarGridHeaderForwardRef = /*#__PURE__*/ (forwardRef as forwardRefType)(CalendarGridHeader);\nexport {CalendarGridHeaderForwardRef as CalendarGridHeader};\n\nexport interface CalendarHeaderCellProps extends DOMProps {}\n\nfunction CalendarHeaderCell(props: CalendarHeaderCellProps, ref: ForwardedRef<HTMLTableCellElement>) {\n  let {children, style, className} = props;\n  return (\n    <th\n      {...filterDOMProps(props as any)}\n      ref={ref}\n      style={style}\n      className={className || 'react-aria-CalendarHeaderCell'}>\n      {children}\n    </th>\n  );\n}\n\n/**\n * A calendar header cell displays a week day name at the top of a column within a calendar.\n */\nconst CalendarHeaderCellForwardRef = forwardRef(CalendarHeaderCell);\nexport {CalendarHeaderCellForwardRef as CalendarHeaderCell};\n\nexport interface CalendarGridBodyProps extends StyleProps {\n  /** A function to render a `<CalendarCell>` for a given date. */\n  children: (date: CalendarDate) => ReactElement\n}\n\nfunction CalendarGridBody(props: CalendarGridBodyProps, ref: ForwardedRef<HTMLTableSectionElement>) {\n  let {children, style, className} = props;\n  let calendarState = useContext(CalendarStateContext);\n  let rangeCalendarState = useContext(RangeCalendarStateContext);\n  let state = calendarState ?? rangeCalendarState!;\n  let {startDate, weeksInMonth} = useContext(InternalCalendarGridContext)!;\n\n  return (\n    <tbody\n      {...filterDOMProps(props as any)}\n      ref={ref}\n      style={style}\n      className={className || 'react-aria-CalendarGridBody'}>\n      {[...new Array(weeksInMonth).keys()].map((weekIndex) => (\n        <tr key={weekIndex}>\n          {state.getDatesInWeek(weekIndex, startDate).map((date, i) => (\n            date\n              ? React.cloneElement(children(date), {key: i})\n              : <td key={i} />\n          ))}\n        </tr>\n      ))}\n    </tbody>\n  );\n}\n\n/**\n * A calendar grid body displays a grid of calendar cells within a month.\n */\nconst CalendarGridBodyForwardRef = /*#__PURE__*/ (forwardRef as forwardRefType)(CalendarGridBody);\nexport {CalendarGridBodyForwardRef as CalendarGridBody};\n\nexport interface CalendarCellProps extends RenderProps<CalendarCellRenderProps>, HoverEvents {\n  /** The date to render in the cell. */\n  date: CalendarDate\n}\n\n/**\n * A calendar cell displays a date cell within a calendar grid which can be selected by the user.\n */\nexport const CalendarCell = /*#__PURE__*/ (forwardRef as forwardRefType)(function CalendarCell({date, ...otherProps}: CalendarCellProps, ref: ForwardedRef<HTMLTableCellElement>) {\n  let calendarState = useContext(CalendarStateContext);\n  let rangeCalendarState = useContext(RangeCalendarStateContext);\n  let state = calendarState ?? rangeCalendarState!;\n  let {startDate: currentMonth} = useContext(InternalCalendarGridContext) ?? {startDate: state.visibleRange.start};\n  let buttonRef = useRef<HTMLDivElement>(null);\n  let {cellProps, buttonProps, ...states} = useCalendarCell(\n    {date},\n    state,\n    buttonRef\n  );\n\n  let {hoverProps, isHovered} = useHover({...otherProps, isDisabled: states.isDisabled});\n  let {focusProps, isFocusVisible} = useFocusRing();\n  isFocusVisible &&= states.isFocused;\n  let isOutsideMonth = !isSameMonth(currentMonth, date);\n  let isSelectionStart = false;\n  let isSelectionEnd = false;\n  if ('highlightedRange' in state && state.highlightedRange) {\n    isSelectionStart = isSameDay(date, state.highlightedRange.start);\n    isSelectionEnd = isSameDay(date, state.highlightedRange.end);\n  }\n\n  let renderProps = useRenderProps({\n    ...otherProps,\n    defaultChildren: states.formattedDate,\n    defaultClassName: 'react-aria-CalendarCell',\n    values: {\n      date,\n      isHovered,\n      isOutsideMonth,\n      isFocusVisible,\n      isSelectionStart,\n      isSelectionEnd,\n      ...states\n    }\n  });\n\n  let dataAttrs = {\n    'data-focused': states.isFocused || undefined,\n    'data-hovered': isHovered || undefined,\n    'data-pressed': states.isPressed || undefined,\n    'data-unavailable': states.isUnavailable || undefined,\n    'data-disabled': states.isDisabled || undefined,\n    'data-focus-visible': isFocusVisible || undefined,\n    'data-outside-visible-range': states.isOutsideVisibleRange || undefined,\n    'data-outside-month': isOutsideMonth || undefined,\n    'data-selected': states.isSelected || undefined,\n    'data-selection-start': isSelectionStart || undefined,\n    'data-selection-end': isSelectionEnd || undefined,\n    'data-invalid': states.isInvalid || undefined\n  };\n\n  return (\n    <td {...cellProps} ref={ref}>\n      <div {...mergeProps(filterDOMProps(otherProps as any), buttonProps, focusProps, hoverProps, dataAttrs, renderProps)} ref={buttonRef} />\n    </td>\n  );\n});\n", "/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {HeadingContext} from './RSPContexts';\nimport React, {ElementType, ForwardedRef, forwardRef, HTMLAttributes} from 'react';\nimport {useContextProps} from './utils';\n\nexport interface HeadingProps extends HTMLAttributes<HTMLElement> {\n  level?: number\n}\n\nexport const Heading = forwardRef(function Heading(props: HeadingProps, ref: ForwardedRef<HTMLHeadingElement>) {\n  [props, ref] = useContextProps(props, ref, HeadingContext);\n  let {children, level = 3, className, ...domProps} = props;\n  let Element = `h${level}` as ElementType;\n\n  return (\n    <Element {...domProps} ref={ref} className={className ?? 'react-aria-Heading'}>\n      {children}\n    </Element>\n  );\n});\n", "import \"DateVariableEditor.styles_fg8c8z.wyw.css\"; export const popover = \"popover_p1lr6xzx\";\nexport const calendar = \"calendar_clr68rj\";", "import \"EnumVariableEditor.styles_r5qih.wyw.css\"; export const inputWrapper = \"inputWrapper_iuj0i9m\";\nexport const dropdownIcon = \"dropdownIcon_ddr6pxi\";", "import { ComboBox, type ComboBoxListItem } from \"@framerjs/fresco\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { LoadedScopeNode, RichTextNode } from \"document/models/CanvasTree/index.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport { getEnumControlPropValue } from \"document/models/controlProps/getControlProps.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport type { RenderId } from \"document/utils/RenderId.ts\"\nimport type { OnPageEnumVariableEditTool } from \"editorbar/engine/tools/OnPageEnumVariableEditTool.ts\"\nimport type { EnumControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { assert } from \"library/utils/assert.ts\"\nimport { fallbackTitleForOption } from \"utils/enumControlUtils.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { OnPageEditingComboboxPopover } from \"../chrome/contentManagement/OnPageEditingComboboxPopover.tsx\"\nimport type { EnumVariableEditTool } from \"../tools/EnumVariableEditTool.ts\"\nimport * as inlineEditingStyles from \"../utils/inlineEditing.styles.ts\"\nimport * as styles from \"./EnumVariableEditor.styles.ts\"\n\ninterface EnumVariableEditorProps {\n\ttool: EnumVariableEditTool | OnPageEnumVariableEditTool\n\tnode: RichTextNode\n\trenderId: RenderId\n\thidden?: boolean\n\tscopeNode: LoadedScopeNode\n}\n\nexport function EnumVariableEditor({ tool, node, renderId, hidden, scopeNode }: EnumVariableEditorProps) {\n\tconst variableInfo = tool.getVariableInfo()\n\tassert(variableInfo, \"Variable info must exist\")\n\n\tconst engine = useBaseEngine()\n\n\tconst controlProp = tool.getControlProp()\n\tconst controlDescription = variableInfo?.controlDescription\n\tassert(controlDescription?.type === ControlType.Enum, \"Control type must exist and be enum\")\n\n\tconst handleChange = useEngineCallback(\n\t\t(value: string) => {\n\t\t\ttool.changeValue(value)\n\t\t\tengine.exitTool()\n\t\t},\n\t\t[tool],\n\t)\n\n\tconst handleClose = useEngineCallback(() => {\n\t\tengine.exitTool()\n\t}, [])\n\n\tconst currentValue = getCurrentValue(controlProp, controlDescription)\n\n\tconst items: ComboBoxListItem[] = controlDescription.options.map((option: string, idx: number) => ({\n\t\ttype: \"option\",\n\t\tvalue: option,\n\t\ttitle: controlDescription.optionTitles?.[idx] ?? fallbackTitleForOption(option),\n\t}))\n\n\tconst selectedTitle = items.find(item => item.value === currentValue)?.title ?? \"\"\n\n\treturn (\n\t\t<OnPageEditingComboboxPopover\n\t\t\tnode={node}\n\t\t\trenderId={renderId}\n\t\t\thidden={hidden}\n\t\t\tonClose={handleClose}\n\t\t\tscopeNode={scopeNode}\n\t\t>\n\t\t\t<ComboBox\n\t\t\t\tautoFocus\n\t\t\t\tbackdropEnabled\n\t\t\t\trightChevron\n\t\t\t\twrapperClassName={styles.inputWrapper}\n\t\t\t\tmenuClassName={inlineEditingStyles.inlineEditingComboBoxMenu}\n\t\t\t\tvalue={selectedTitle}\n\t\t\t\tcheckedItems={currentValue ? [currentValue] : undefined}\n\t\t\t\tonChange={handleChange}\n\t\t\t\titems={items}\n\t\t\t/>\n\t\t</OnPageEditingComboboxPopover>\n\t)\n}\n\nfunction getCurrentValue(controlProp: ControlProp | undefined, control: EnumControlDescription): string | undefined {\n\tconst value = getEnumControlPropValue(control, controlProp)\n\tassert(!isDynamicValue(value), \"Dynamic values are not supported within the CMS.\")\n\treturn isString(value) ? value : undefined\n}\n", "import type { VekterEngine } from \"document/VekterEngine.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport type { WithPreviewSettings } from \"document/models/CanvasTree/traits/WithPreviewSettings.ts\"\nimport { withPreviewSettings } from \"document/models/CanvasTree/traits/WithPreviewSettings.ts\"\nimport type { PreviewSettingsProps } from \"preview-module/utils/PreviewSettings.ts\"\nimport { PreviewSettings, PreviewSettingsDefaults } from \"preview-module/utils/PreviewSettings.ts\"\nimport { entryNodeForNodeToRender } from \"preview-module/utils/entryNodeForNodeToRender.ts\"\nimport { isScreenNode } from \"preview-module/utils/isScreenNode.ts\"\n\nfunction updateNodePreviewSettings(engine: VekterEngine, nodeId: string, settings: Partial<PreviewSettingsProps>) {\n\tconst currentNode = engine.tree.getCurrentOrDraft(nodeId)\n\tif (!currentNode || !withPreviewSettings(currentNode)) return\n\n\tengine.scheduler.process(() => {\n\t\tconst mutableNode = engine.tree.getNodeAsDraft(currentNode) as CanvasNode & WithPreviewSettings\n\t\tconst previewSettings = {\n\t\t\t...PreviewSettingsDefaults,\n\t\t\t...currentNode.previewSettings,\n\t\t\t...settings,\n\t\t}\n\t\tmutableNode.previewSettings = new PreviewSettings(previewSettings)\n\t})\n}\n\nexport function togglePreviewNodeResponsive(engine: VekterEngine) {\n\tconst previewNode = engine.stores.previewStore.previewNode\n\tif (!previewNode || !withPreviewSettings(previewNode)) return\n\tconst { entryNode } = entryNodeForNodeToRender(previewNode, engine.tree)\n\tif (!isScreenNode(engine.tree, entryNode)) return\n\n\tconst previewSettings = {\n\t\t...PreviewSettingsDefaults,\n\t\t...previewNode.previewSettings,\n\t}\n\tconst currentValue = previewSettings[\"responsive\"]\n\tconst newValue = currentValue === undefined ? undefined : !currentValue\n\n\tif (newValue === undefined) return\n\n\tupdateNodePreviewSettings(engine, previewNode.id, {\n\t\tresponsive: newValue,\n\t})\n}\n", "import { EngineChange } from \"document/EngineChanges.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { ColorStyleTokenListNode } from \"../nodes/ColorStyleTokenListNode.ts\"\n\nexport function useColorTokens() {\n\tconst engine = useBaseEngine()\n\treturn useEngineState(() => ColorStyleTokenListNode.getAllTokenNodes(engine.tree), [], EngineChange.ColorStyleTokens)\n}\n", "import \"PreviewContainer.styles_u4npqx.wyw.css\"; export const container = \"container_c1mg1z6z\";\nexport const hidden = \"hidden_hj4htfi\";\nexport const explicitResponsive = \"explicitResponsive_efx4tx1\";\nexport const implicitResponsive = \"implicitResponsive_i1hpwtf0\";", "import { getServiceMap } from \"@framerjs/shared\"\nimport { environment } from \"environment/index.ts\"\nimport { editorPath } from \"utils/platformPaths.ts\"\n\ntype PreviewEntrypoint =\n\t/**\n\t * This is only using modules to render.\n\t */\n\t| \"preview-module\"\n\t/**\n\t * This always uses the development build of React, because that is needed\n\t * to make React fast-refresh work\n\t */\n\t| \"preview-module-fast-refresh\"\n\nexport function getSandboxURL({\n\tisDarkMode,\n\tframerSiteId,\n\thtmlEntrypoint = \"preview-module\",\n}: {\n\tframerSiteId?: string\n\tisDarkMode?: boolean\n\thtmlEntrypoint?: PreviewEntrypoint\n}): URL {\n\tconst services = getServiceMap()\n\n\tconst isDebugBuild = environment.isDebugBuild\n\tconst filename = `${htmlEntrypoint}${isDebugBuild ? \".debug\" : \"\"}.html`\n\n\t// On web, we want the preview sandbox to be served from the\n\t// canvas/sandboxed domain. In an automation context, we want it served\n\t// from the same origin, which is the FramerWeb server\n\t//\n\t// Note: useIFrameWithChannel does its own sandbox enforcement, it will\n\t// strip the origin and provide its own, sandboxed one.\n\tconst base = environment.isAutomation ? window.location.href : services.canvas\n\tconst previewURL = new URL(editorPath(filename), base)\n\n\t// TODO: Make the preview HTML request the bootstrap script itself, so\n\t// it does not need to get this as a hash.\n\tpreviewURL.hash = `services=${encodeURIComponent(JSON.stringify(services))}`\n\n\tpreviewURL.searchParams.set(\"mode\", isDarkMode ? \"dark\" : \"light\")\n\tpreviewURL.searchParams.set(\"siteId\", framerSiteId ?? \"\")\n\n\treturn previewURL\n}\n", "import type { Size, UnsafeJSON } from \"@framerjs/framer-services\"\nimport { Flags, ModulePreviewSandbox, ModulesUpdates, handleServiceError } from \"@framerjs/framer-services\"\nimport { unhandledStreamError, useIFrameWithChannel } from \"@framerjs/framer-services-hooks\"\nimport type { ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport {\n\tgetLogger,\n\tisEditorBar,\n\tisLocalModuleIdentifier,\n\tparseModuleIdentifier,\n\tunhandledError,\n} from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { defaultLocaleId } from \"document/models/CanvasTree/traits/WithLocales.ts\"\nimport { useColorTokens } from \"document/models/CanvasTree/utils/tokenHooks.ts\"\nimport { getPreviewTokenCSSRules } from \"document/models/CanvasTree/utils/tokens.ts\"\nimport type { ControlProps } from \"document/models/controlProps/ControlProp.ts\"\nimport { useGlobalPreviewHandlers } from \"document/preview/globalPreviewHandlers.ts\"\nimport { targetModuleRevisionsForNodeIds } from \"document/preview/targetModuleRevisionsForNodeIds.ts\"\nimport { isVekterEngine, useAndAssertVekterEngine } from \"document/useVekterEngine.ts\"\nimport { ActiveMainView } from \"document/utils/ActiveEditorType.ts\"\nimport { isOnPageEngine } from \"editorbar/engine/useOnPageEngine.ts\"\nimport * as previewStyles from \"preview-module/components/PreviewContainer.styles.ts\"\nimport { getSandboxURL } from \"preview-module/utils/getSandboxURL.ts\"\nimport type { ModuleWidth } from \"prosemirror/schema/module.ts\"\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from \"react\"\nimport { useFlagsService } from \"services/hooks/useFlagsService.ts\"\nimport { useDarkMode } from \"web/lib/useDarkMode.ts\"\nimport * as styles from \"./ModulePreviewWrapper.styles.ts\"\nimport { getVekterLocales } from \"./getRenderInfoForPreviewItem.ts\"\nimport { usePreviewShortcuts } from \"./usePreviewShortcuts.ts\"\n\nconst log = getLogger(\"ModulePreviewWrapper\")\n\ninterface BaseWrapperProps {\n\tclassName?: string\n\tstyle?: React.CSSProperties\n\tenableFastRefresh?: boolean\n\tonChangeComponentSize?: (size: Size) => void\n}\n\nexport type GeneratedComponentContext = Extract<\n\tModulePreviewSandbox.RenderInfo,\n\t{ kind: \"module\" }\n>[\"generatedComponentContext\"]\n\ninterface ComponentPreviewProps extends BaseWrapperProps {\n\tlayout: ModulePreviewSandbox.RenderLayout\n\tmoduleIdentifier: ModuleExportIdentifierString\n\tcontrolProps?: ControlProps\n\tblockEvents?: boolean\n\toverlay?: boolean\n\tframerSiteId: string\n\tmoduleWidth?: ModuleWidth\n\tgeneratedComponentContext?: GeneratedComponentContext\n}\n\nexport function ComponentPreviewWrapper({\n\tlayout,\n\tmoduleIdentifier,\n\tcontrolProps,\n\tenableFastRefresh = false,\n\tblockEvents,\n\tstyle,\n\tonChangeComponentSize,\n\toverlay,\n\tframerSiteId,\n\tmoduleWidth,\n\tgeneratedComponentContext,\n}: ComponentPreviewProps) {\n\tconst engine = useBaseEngine()\n\n\tconst renderInfo = useMemo((): ModulePreviewSandbox.RenderInfo => {\n\t\treturn {\n\t\t\tkind: \"module\",\n\t\t\tmoduleIdentifier,\n\t\t\tcontrolProps: controlProps as unknown as UnsafeJSON,\n\t\t\tlayout,\n\t\t\tlocales: getVekterLocales(engine.tree),\n\t\t\tinitialLocaleId: isVekterEngine(engine)\n\t\t\t\t? engine.stores.chromeStore.canvasLocaleId\n\t\t\t\t: isOnPageEngine(engine)\n\t\t\t\t\t? engine.stores.routeStore.localeId\n\t\t\t\t\t: defaultLocaleId,\n\t\t\tgeneratedComponentContext,\n\t\t\t// We don't support targetModuleRevisions in the code editor preview or module preview view yet.\n\t\t\ttargetModuleRevisions: [],\n\t\t\tadaptLayoutToTextDirection: engine.tree.root.adaptLayoutToTextDirection,\n\t\t}\n\t}, [moduleIdentifier, controlProps, layout, generatedComponentContext])\n\n\treturn (\n\t\t<ModulePreviewWrapper\n\t\t\trenderInfo={renderInfo}\n\t\t\tclassName={cx(blockEvents && styles.blockEvents)}\n\t\t\tstyle={style}\n\t\t\tenableFastRefresh={enableFastRefresh}\n\t\t\tonChangeComponentSize={onChangeComponentSize}\n\t\t\tframerSiteId={framerSiteId}\n\t\t\toverlay={overlay}\n\t\t\tmoduleWidth={moduleWidth}\n\t\t\t// We send the targetModuleRevisions in the renderInfo, and don't\n\t\t\t// provide them as a prop here.\n\t\t\ttargetModuleRevisions={undefined}\n\t\t/>\n\t)\n}\n\ninterface ModulePreviewInnerProps extends BaseWrapperProps {\n\tclassName?: string\n\trenderInfo: ModulePreviewSandbox.RenderInfo\n\tisDocumentLoaded?: boolean\n\toverlay?: boolean\n\tframerSiteId: string\n\ttargetModuleRevisions: ModulePreviewSandbox.TargetModuleRevision[] | undefined\n\tmoduleWidth?: ModuleWidth\n\t/** Time in ms before the sandbox is considered unresponsive and the iframe\n\t *  is reloaded. */\n\tunresponsiveRenderTimeThreshold?: number\n}\n\nexport const PreviewVisibilityContext = createContext<(() => void) | undefined>(undefined)\nPreviewVisibilityContext.displayName = \"PreviewVisibilityContext\"\n\n// Default threshold that determines when sandbox service is unresponsive either due to navigation\n// change or preview page becoming unresponsive.\nconst DEFAULT_UNRESPONSIVE_RENDER_TIME_THRESHOLD_MS = 250\n\nexport function ModulePreviewWrapper({\n\trenderInfo,\n\tclassName,\n\tstyle,\n\tframerSiteId,\n\tenableFastRefresh = false,\n\tonChangeComponentSize,\n\tisDocumentLoaded = true,\n\toverlay = false,\n\ttargetModuleRevisions,\n\tmoduleWidth,\n\tunresponsiveRenderTimeThreshold = DEFAULT_UNRESPONSIVE_RENDER_TIME_THRESHOLD_MS,\n}: ModulePreviewInnerProps) {\n\tconst engine = useBaseEngine()\n\n\tconst onPreviewContentUnmount = useContext(PreviewVisibilityContext)\n\tconst previewURL = useMemo(() => {\n\t\tconst url = getSandboxURL({\n\t\t\tframerSiteId,\n\t\t\thtmlEntrypoint: enableFastRefresh ? \"preview-module-fast-refresh\" : \"preview-module\",\n\t\t})\n\t\treturn url.href\n\t}, [enableFastRefresh, framerSiteId])\n\n\tconst isPreviewActive = usePreviewActive()\n\tconst [previewService, setPreviewService] = useState<ModulePreviewSandbox.Interface | undefined>()\n\tconst [isLoading, setIsLoading] = useState(false)\n\tconst [PreviewIFrame, previewChannel, iframeElement] = useIFrameWithChannel({\n\t\ttype: \"preview\",\n\t\tsrc: previewURL,\n\t})\n\n\tlog.debug(\"Render ModulePreviewInner\", previewChannel, previewService)\n\n\tuseEffect(() => {\n\t\tif (!previewChannel) return\n\t\tModulePreviewSandbox.on(previewChannel).discover().then(setPreviewService).catch(handleServiceError)\n\t\tlog.debug(\"useEffect register ModulesUpdates\")\n\t\tModulesUpdates.on(previewChannel).register(engine.stores.modulesStore.getModulesUpdatesService(enableFastRefresh))\n\t}, [previewChannel, enableFastRefresh, onChangeComponentSize])\n\n\t// Create a new local service\n\tconst flagsService = useFlagsService()\n\n\tuseEffect(() => {\n\t\tif (!previewChannel) return\n\t\tFlags.on(previewChannel).register(flagsService)\n\t}, [flagsService, previewChannel])\n\n\tuseEffect(() => {\n\t\tif (!previewService || !iframeElement) return\n\n\t\t// Before sending a render request to sandbox, we start\n\t\t// a timer that is called if sandbox does not send any\n\t\t// response back within a threshold\n\t\tconst unresponsiveRenderTimer = setTimeout(() => {\n\t\t\tif (renderInfo?.kind === \"empty\") {\n\t\t\t\t// If the render request is \"empty\", we know that\n\t\t\t\t// we are planning to close the module preview dialog. So,\n\t\t\t\t// if we do not get any response back from sandbox, we just\n\t\t\t\t// close the preview.\n\t\t\t\tonPreviewContentUnmount?.()\n\t\t\t} else {\n\t\t\t\t// if render request is not an empty request, we can assume that\n\t\t\t\t// either the user switched the page to a non framer page or the\n\t\t\t\t// page became unresponsive. In that case, we reload the page to\n\t\t\t\t// the origianl URL, which is the framer URL.\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion -- forces an iframe reload\n\t\t\t\tiframeElement.src += \"\"\n\t\t\t}\n\t\t}, unresponsiveRenderTimeThreshold)\n\n\t\tpreviewService\n\t\t\t.render(renderInfo)\n\t\t\t.then(() => {\n\t\t\t\tclearTimeout(unresponsiveRenderTimer)\n\t\t\t})\n\t\t\t.catch(unhandledError)\n\n\t\treturn () => clearTimeout(unresponsiveRenderTimer)\n\t}, [previewService, renderInfo, onPreviewContentUnmount, iframeElement, unresponsiveRenderTimeThreshold])\n\n\tuseEffect(() => {\n\t\tif (!previewService || moduleWidth === undefined) return\n\t\tpreviewService.setModuleWidth({ moduleWidth }).catch(unhandledError)\n\t}, [previewService, moduleWidth])\n\n\tuseEffect(() => {\n\t\tpreviewService\n\t\t\t?.setTargetModuleRevisions({ targetModuleRevisions: targetModuleRevisions ?? [] })\n\t\t\t.catch(unhandledError)\n\t}, [previewService, targetModuleRevisions])\n\n\tuseEffect(() => {\n\t\tif (!onChangeComponentSize || !previewService) return\n\t\tconst stream = previewService.componentSizeStream({ replay: \"latest\" })\n\t\tstream.read(onChangeComponentSize).catch(unhandledStreamError)\n\t\treturn () => void stream.cancel()\n\t}, [previewService, onChangeComponentSize])\n\n\tuseEffect(() => {\n\t\tif (!previewService) return\n\n\t\tconst stream = previewService.renderUpdateStream()\n\t\tstream\n\t\t\t.read(update => {\n\t\t\t\tif (update.didContentUnmount) onPreviewContentUnmount?.()\n\t\t\t\tif (update.isLoading !== undefined) setIsLoading(update.isLoading)\n\t\t\t})\n\t\t\t.catch(unhandledStreamError)\n\t\treturn () => void stream.cancel()\n\t}, [onPreviewContentUnmount, previewService])\n\n\tconst { isDarkMode } = useDarkMode()\n\tconst tokenNodes = useColorTokens()\n\tuseEffect(() => {\n\t\tif (!previewService) return\n\t\tconst tokenCSSRules = getPreviewTokenCSSRules(tokenNodes)\n\t\tpreviewService.setColorMode({ isDarkMode, tokenCSSRules }).catch(unhandledError)\n\t}, [previewService, isDarkMode, tokenNodes, isDocumentLoaded])\n\n\tconst handleReload = useCallback(() => {\n\t\tif (renderInfo.kind === \"empty\") return\n\n\t\t// Update the targetModuleRevisions to the latest versions on the nodes\n\t\tconst nodeIds =\n\t\t\ttargetModuleRevisions?.flatMap(targetModuleRevision => {\n\t\t\t\tconst moduleIdentifier = parseModuleIdentifier(targetModuleRevision.moduleIdentifier)\n\t\t\t\tif (!moduleIdentifier || !isLocalModuleIdentifier(moduleIdentifier)) return []\n\t\t\t\treturn moduleIdentifier.localIdName\n\t\t\t}) ?? []\n\t\tconst updatedRevisions = targetModuleRevisionsForNodeIds(engine.tree, nodeIds)\n\n\t\tconst unresponsiveRenderTimer = setTimeout(() => {\n\t\t\tif (iframeElement) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion -- forces an iframe reload\n\t\t\t\tiframeElement.src += \"\"\n\t\t\t}\n\t\t}, unresponsiveRenderTimeThreshold)\n\n\t\tpreviewService\n\t\t\t?.render({ ...renderInfo, targetModuleRevisions: updatedRevisions, remountComponents: true })\n\t\t\t.then(() => {\n\t\t\t\tclearTimeout(unresponsiveRenderTimer)\n\t\t\t})\n\t\t\t.catch(unhandledError)\n\t}, [previewService, renderInfo, targetModuleRevisions, unresponsiveRenderTimeThreshold])\n\n\tconst handleTogglePreviewInterface = useCallback(() => {\n\t\tif (!isPreviewActive) return\n\t\tif (!isVekterEngine(engine)) return\n\t\tengine.stores.fullsizePreviewStore.togglePreviewUIVisible()\n\t}, [isPreviewActive])\n\n\tuseGlobalPreviewHandlers({\n\t\treload: handleReload,\n\t\topenFullScreen: handleTogglePreviewInterface,\n\t})\n\n\tusePreviewShortcuts({\n\t\tpreviewChannel,\n\t\thandleReload,\n\t\thandleFullscreen: handleTogglePreviewInterface,\n\t})\n\n\tuseEffect(\n\t\tfunction handleHide() {\n\t\t\tconst shouldBlur = renderInfo.kind === \"empty\" && document.activeElement === iframeElement\n\n\t\t\tif (shouldBlur) {\n\t\t\t\tiframeElement?.blur()\n\t\t\t}\n\t\t},\n\t\t[iframeElement, renderInfo.kind],\n\t)\n\n\treturn (\n\t\t<div className={styles.iframeWrapper}>\n\t\t\t<PreviewIFrame\n\t\t\t\tclassName={cx(\n\t\t\t\t\tstyles.iframe,\n\t\t\t\t\tisLoading ? styles.loading : undefined,\n\t\t\t\t\tpreviewStyles.explicitResponsive,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={style}\n\t\t\t/>\n\t\t\t{overlay && <div className={cx(styles.iframeOverlay)} />}\n\t\t</div>\n\t)\n}\n\nfunction useVekterPreviewActive() {\n\tconst engine = useAndAssertVekterEngine()\n\treturn engine.stores.chromeStore.useState(state => state.mainView === ActiveMainView.Preview)\n}\n\nfunction useOnPagePreviewActive() {\n\treturn false\n}\n\nconst usePreviewActive = isEditorBar() ? useOnPagePreviewActive : useVekterPreviewActive\n", "import type { Flags } from \"@framerjs/framer-services\"\nimport { useEffect, useRef } from \"react\"\nimport { FlagsService } from \"../../app/FlagsService.ts\"\n\nexport function useFlagsService(forward?: Flags.Interface): Flags.Interface {\n\tconst service = useRef<Flags.Interface>()\n\tservice.current ??= forward ?? new FlagsService()\n\n\tuseEffect(() => {\n\t\tconst currentService = service.current\n\t\tif (!currentService || !(currentService instanceof FlagsService)) return\n\t\treturn () => currentService.stopUpdatesStream()\n\t}, [forward])\n\n\treturn service.current\n}\n", "import type { Flags, ServiceStream, ServiceStreamOptions } from \"@framerjs/framer-services\"\nimport { ServiceEventEmitter } from \"@framerjs/framer-services\"\nimport { FlagsUpdater, type FlagsUpdates, type FlagsValues } from \"./FlagsUpdater.ts\"\n\nexport class FlagsService implements Flags.Interface, FlagsUpdates {\n\tprivate readonly experimentsUpdatesEmitter = new ServiceEventEmitter<Flags.FlagsUpdateEvent>()\n\tprivate readonly employeesOnlySettingsUpdatesEmitter = new ServiceEventEmitter<Flags.FlagsUpdateEvent>()\n\tprivate readonly projectFeaturesUpdatesEmitter = new ServiceEventEmitter<Flags.FlagsUpdateEvent>()\n\tprivate readonly flagsUpdater = new FlagsUpdater(this)\n\n\tconstructor() {\n\t\tthis.flagsUpdater.startUpdatesStream()\n\t\tthis.experimentsUpdatesEmitter.onNewStream = options => {\n\t\t\tif (options?.replay !== \"latest\") return\n\n\t\t\treturn { latest: this.flagsUpdater.getInitialExperiments() }\n\t\t}\n\n\t\tthis.employeesOnlySettingsUpdatesEmitter.onNewStream = options => {\n\t\t\tif (options?.replay !== \"latest\") return\n\n\t\t\treturn { latest: this.flagsUpdater.getInitialEmployeesOnlySettings() }\n\t\t}\n\n\t\tthis.projectFeaturesUpdatesEmitter.onNewStream = _ => {\n\t\t\t// Make sure the first update is the full set\n\t\t\tthis.flagsUpdater.initProjectFeatures()\n\t\t\treturn undefined\n\t\t}\n\t}\n\n\tupdateExperiments(updates: FlagsValues): void {\n\t\tthis.experimentsUpdatesEmitter.emit(updates)\n\t}\n\n\tupdateEmployeesOnlySettings(updates: FlagsValues): void {\n\t\tthis.employeesOnlySettingsUpdatesEmitter.emit(updates)\n\t}\n\n\tupdateProjectFeatures(updates: FlagsValues): void {\n\t\tthis.projectFeaturesUpdatesEmitter.emit(updates)\n\t}\n\n\t/** Will unsubscribe from experiment updates and stop updating the stream. */\n\tstopUpdatesStream() {\n\t\tthis.flagsUpdater.stopUpdatesStream()\n\t}\n\n\tpublic experimentsUpdatesStream(options?: ServiceStreamOptions): ServiceStream<Flags.FlagsUpdateEvent> {\n\t\treturn this.experimentsUpdatesEmitter.newStream(options)\n\t}\n\tpublic employeesOnlySettingsUpdatesStream(options?: ServiceStreamOptions): ServiceStream<Flags.FlagsUpdateEvent> {\n\t\treturn this.employeesOnlySettingsUpdatesEmitter.newStream(options)\n\t}\n\tpublic projectFeaturesUpdatesStream(options?: ServiceStreamOptions): ServiceStream<Flags.FlagsUpdateEvent> {\n\t\treturn this.projectFeaturesUpdatesEmitter.newStream(options)\n\t}\n}\n", "import \"ModulePreviewWrapper.styles_1v3w1qr.wyw.css\"; export const iframeOverlay = \"iframeOverlay_iblik7k\";\nexport const iframeWrapper = \"iframeWrapper_i118z2f1\";\nexport const iframe = \"iframe_i1a8t54c\";\nexport const loading = \"loading_l1ngcbb2\";\nexport const blockEvents = \"blockEvents_bm6dco\";", "import { ModulePreviewSandbox, type PostMessageChannel } from \"@framerjs/framer-services\"\nimport { isAppleDevice } from \"@framerjs/shared\"\nimport { experiments } from \"app/experiments.ts\"\nimport type { VekterEngine } from \"document/VekterEngine.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { openAnalyticsFromCurrentlySelectedItem } from \"document/components/chrome/analytics/utils/openAnalytics.ts\"\nimport { ContextAction } from \"document/components/utils/contextActions.ts\"\nimport { togglePreviewNodeResponsive } from \"document/preview/togglePreviewNodeResponsive.ts\"\nimport { togglePreviewVisible } from \"document/preview/togglePreviewVisible.ts\"\nimport { isVekterEngine } from \"document/useVekterEngine.ts\"\nimport { ActiveMainView } from \"document/utils/ActiveEditorType.ts\"\nimport { unhandledStreamError, useServiceStream } from \"services/hooks/index.ts\"\n\nfunction resetMainViewState(engine: VekterEngine) {\n\tconst { analyticsStore, chromeStore, codeEditorStore, siteSettingsStore } = engine.stores\n\n\ttogglePreviewVisible(engine, { visible: false })\n\tsiteSettingsStore.close()\n\tanalyticsStore.close()\n\tchromeStore.setLocalizationsVisible(false)\n\tcodeEditorStore.closeEditor()\n\n\tif (chromeStore.mainView === ActiveMainView.ContentManagement) {\n\t\tContextAction.toggleContentManagementScope(engine)\n\t}\n}\n\nfunction handleModeShortcut(engine: VekterEngine, code: string) {\n\tconst { chromeStore } = engine.stores\n\n\tswitch (code) {\n\t\tcase \"Digit1\":\n\t\t\tresetMainViewState(engine)\n\t\t\tbreak\n\t\tcase \"Digit2\":\n\t\t\tif (chromeStore.mainView !== ActiveMainView.ContentManagement) {\n\t\t\t\tresetMainViewState(engine)\n\t\t\t\tContextAction.toggleContentManagementScope(engine)\n\t\t\t}\n\t\t\tbreak\n\t\tcase \"Digit3\":\n\t\t\tif (chromeStore.mainView !== ActiveMainView.Localizations) {\n\t\t\t\tresetMainViewState(engine)\n\t\t\t\tchromeStore.setLocalizationsVisible(true)\n\t\t\t}\n\t\t\tbreak\n\t\tcase \"Digit4\":\n\t\t\tif (chromeStore.mainView !== ActiveMainView.Analytics) {\n\t\t\t\topenAnalyticsFromCurrentlySelectedItem(engine)\n\t\t\t}\n\t\t\tbreak\n\t\tcase \"Digit5\":\n\t\t\tif (chromeStore.mainView !== ActiveMainView.SiteSettings) {\n\t\t\t\tresetMainViewState(engine)\n\t\t\t\tengine.stores.siteSettingsStore.open()\n\t\t\t}\n\t\t\tbreak\n\t}\n}\n\nexport function usePreviewShortcuts({\n\tpreviewChannel,\n\thandleToggleConsole,\n\thandleFullscreen,\n\thandleReload,\n}: {\n\tpreviewChannel: PostMessageChannel | null\n\thandleToggleConsole?: () => void\n\thandleFullscreen?: () => void\n\thandleReload: () => void\n}) {\n\tconst engine = useBaseEngine()\n\n\tuseServiceStream(\n\t\t{\n\t\t\tchannel: previewChannel || undefined,\n\t\t\tservice: ModulePreviewSandbox,\n\t\t\tonDiscover: discoveredService => discoveredService.previewKeyboardEventStream(),\n\t\t\tonError: unhandledStreamError,\n\t\t},\n\t\tasync (evt: ModulePreviewSandbox.KeyboardEvent) => {\n\t\t\tif (!isVekterEngine(engine)) return\n\n\t\t\t// TODO: Consolidate this between the context menu in PreviewToolbar and the\n\t\t\t// shortcuts registered in project/index.tsx.\n\t\t\tconst isCmdOrCtrl = evt.cmdOrCtrlKey\n\n\t\t\t// Full Screen\n\t\t\tif (\n\t\t\t\thandleFullscreen &&\n\t\t\t\tisCmdOrCtrl &&\n\t\t\t\t(isAppleDevice() ? evt.shiftKey : evt.altKey) &&\n\t\t\t\t(evt.key === \"f\" || evt.key === \"F\")\n\t\t\t) {\n\t\t\t\thandleFullscreen()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Toggle Preview\n\t\t\tif (!evt.altKey && (evt.key === \"Escape\" || (isCmdOrCtrl && evt.key === \"p\"))) {\n\t\t\t\ttogglePreviewVisible(engine, { source: \"keyboard_shortcut\" })\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Toggle Console\n\t\t\tif (handleToggleConsole && isCmdOrCtrl && evt.key === \"i\") {\n\t\t\t\thandleToggleConsole()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Reload\n\t\t\tif (isCmdOrCtrl && evt.key === \"r\") {\n\t\t\t\thandleReload()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Interaction highlights\n\t\t\tif (isCmdOrCtrl && evt.shiftKey && evt.key === \"H\") {\n\t\t\t\tengine.stores.previewStore.toggleHighlights()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Switch preview viewing mode\n\t\t\tif (evt.key === \"z\" && evt.targetNodeName === \"BODY\") {\n\t\t\t\ttogglePreviewNodeResponsive(engine)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Hide preview interface\n\t\t\tif (isCmdOrCtrl && evt.key === \".\") {\n\t\t\t\tengine.stores.fullsizePreviewStore.togglePreviewUIVisible()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Mode-selector shortcuts (Option+1\u20265)\n\t\t\tif (experiments.isOn(\"agent\") && evt.altKey) {\n\t\t\t\thandleModeShortcut(engine, evt.code)\n\t\t\t}\n\t\t},\n\t)\n}\n", "import { isEditorBar } from \"@framerjs/shared\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { useOnPageIsDarkMode } from \"utils/useOnPageIsDarkMode.ts\"\nimport { useDarkMode } from \"web/lib/useDarkMode.ts\"\nimport { ColorStyleTokenListNode } from \"../nodes/ColorStyleTokenListNode.ts\"\nimport { getTokenCSSProperties } from \"./tokens.ts\"\n\nexport function useTokenCSSProperties() {\n\tconst engine = useBaseEngine()\n\tconst isDarkMode = useIsDarkMode()\n\n\treturn useEngineState(\n\t\t() => getTokenCSSProperties(ColorStyleTokenListNode.getAllTokenNodes(engine.tree), isDarkMode),\n\t\t[isDarkMode],\n\t\t[EngineChange.Tree, EngineChange.DocumentSettings],\n\t)\n}\n\nfunction useVekterIsDarkMode() {\n\tconst { isDarkMode } = useDarkMode()\n\treturn isDarkMode\n}\n\nconst useIsDarkMode = isEditorBar() ? useOnPageIsDarkMode : useVekterIsDarkMode\n", "import { assert, type ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { LoadedScopeNode, RichTextNode } from \"document/models/CanvasTree/index.ts\"\nimport type { ComponentPresetNode } from \"document/models/CanvasTree/nodes/ComponentPresetNode.ts\"\nimport { isComponentPresetNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport { useTokenCSSProperties } from \"document/models/CanvasTree/utils/useTokenCSSProperties.ts\"\nimport { filterComponentPresetControls } from \"document/models/controlProps/filterComponentPresetControls.ts\"\nimport { getControlProps } from \"document/models/controlProps/getControlProps.ts\"\nimport type { RichTextTreeValue } from \"document/models/richText/richTextStorage.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport type { RenderId } from \"document/utils/RenderId.ts\"\nimport { CustomProperties } from \"library/index.ts\"\nimport { useStableCallback } from \"library/utils/useStableCallback.ts\"\nimport type { ProseMirror } from \"prosemirror/loader.ts\"\nimport { makeSchema } from \"prosemirror/schema/index.ts\"\nimport { serializeRichText } from \"prosemirror/serialization/dom.ts\"\nimport type React from \"react\"\nimport { useEffect, useMemo } from \"react\"\nimport {\n\tgetStylePresetBreakpointClassNamesForGroundNode,\n\tuseStylePresetBreakpoints,\n} from \"renderer/utils/getStylePresetBreakpointClassNames.ts\"\nimport { getGeneratedComponentContextValue } from \"utils/getGeneratedComponentContextValue.ts\"\nimport { getStylePresetClassNameByTagForNode } from \"utils/stylePresetUtils.ts\"\nimport { useConstant } from \"utils/useConstant.ts\"\nimport { useSet } from \"utils/useSet.ts\"\nimport type { GeneratedComponentContext } from \"../chrome/preview/ModulePreviewWrapper.tsx\"\nimport { RichTextEditorContent } from \"../chrome/richTextEditor/RichTextEditorContent.tsx\"\nimport { createMissingPresetsForHTML } from \"../chrome/richTextEditor/createMissingPresetsForHTML.ts\"\nimport { createRichTextEditorState } from \"../chrome/richTextEditor/createRichTextEditorState.ts\"\nimport { createRichTextEditorView } from \"../chrome/richTextEditor/createRichTextEditorView.ts\"\nimport {\n\ttype ComponentPresets,\n\tgetModuleNodeViewConstructor,\n} from \"../chrome/richTextEditor/getModuleNodeViewConstructor.ts\"\nimport type { TextEditEventSource } from \"../tools/TextEditTool.ts\"\nimport * as styles from \"./CollectionRichTextVariableEditor.styles.ts\"\nimport { autoSelectText, getDragOutsideStyle, useContainerStyle, useNodeRect } from \"./editorUtils.tsx\"\n\nconst supportsMedia = true\nconst supportsEmbeds = true\nconst supportsLinks = true\nconst supportsStyles = false\nconst supportsBlockquotes = true\nconst supportsTables = true\nconst supportedTags = undefined\n\ninterface Controls {\n\tundo(): void\n\tredo(): void\n}\n\ninterface BaseRichTextVariableEditTool {\n\teventSource: TextEditEventSource\n\tgetValue(): RichTextTreeValue | undefined\n\tchangeValue(html: string): void\n\tcontrols: Controls | undefined\n}\n\ninterface CollectionRichTextVariableEditorProps {\n\ttool: BaseRichTextVariableEditTool\n\tscopeNode: LoadedScopeNode\n\tnode: RichTextNode\n\trenderId: RenderId\n\tproseMirror: ProseMirror\n\tzoom: number\n\tonMouseDown?(event: React.MouseEvent): void\n\tonClickOutside?(event: React.MouseEvent): void\n\thasValidationWarning?: boolean\n\tstyle?: React.CSSProperties\n}\n\nexport function CollectionRichTextVariableEditor({\n\ttool,\n\tscopeNode,\n\tnode,\n\trenderId,\n\tproseMirror,\n\tzoom,\n\tonMouseDown,\n\tonClickOutside,\n\thasValidationWarning,\n\tstyle,\n}: CollectionRichTextVariableEditorProps) {\n\tconst engine = useBaseEngine()\n\n\tconst tokens = useTokenCSSProperties()\n\n\tconst groundNode = engine.tree.getGroundNodeFor(node)\n\tconst stylePresetBreakpoints = useStylePresetBreakpoints(engine.tree)\n\tconst breakpointClassNames = getStylePresetBreakpointClassNamesForGroundNode(stylePresetBreakpoints, groundNode)\n\n\tconst rect = useNodeRect(node, renderId)\n\tconst dragOutsideStyle = getDragOutsideStyle(zoom)\n\tconst containerStyle = useContainerStyle({ scopeNode, node, rect, zoom, hasValidationWarning })\n\n\t// Hide the node after we mount the editor so we avoid a white flicker.\n\tuseEffect(() => {\n\t\tengine.scheduler.processWhenReady(() => {\n\t\t\tengine.stores.toolStore.nodeInTextEditorId = renderId\n\t\t})\n\t}, [renderId])\n\n\tconst componentPresetNodes = useEngineState(\n\t\t() => {\n\t\t\tconst presetNodeIds = node.getComponentPresets()\n\t\t\tconst presetNodes = new Map<ModuleExportIdentifierString, ComponentPresetNode>()\n\n\t\t\tfor (const [componentIdentifier, presetId] of presetNodeIds) {\n\t\t\t\tconst presetNode = engine.tree.getNodeWithTrait(presetId, isComponentPresetNode)\n\t\t\t\tif (!presetNode) continue\n\n\t\t\t\tpresetNodes.set(componentIdentifier, presetNode)\n\t\t\t}\n\n\t\t\treturn presetNodes\n\t\t},\n\t\t[node],\n\t\t[EngineChange.Tree],\n\t)\n\n\tconst componentPresets = useEngineState(\n\t\t() => {\n\t\t\tconst presets: ComponentPresets = {}\n\n\t\t\tfor (const [componentIdentifier, presetNode] of componentPresetNodes) {\n\t\t\t\tconst component = engine.componentLoader.reactComponentForIdentifier(componentIdentifier)\n\t\t\t\tif (!component) continue\n\n\t\t\t\tconst rawControlProps = presetNode.getRawControlProps()\n\t\t\t\tconst controls = filterComponentPresetControls(component, \"onlyPresets\")\n\t\t\t\tpresets[componentIdentifier] = getControlProps(controls, rawControlProps)\n\t\t\t}\n\n\t\t\treturn presets\n\t\t},\n\t\t[componentPresetNodes],\n\t\t[EngineChange.ActiveBundle],\n\t\t{ deepEqual: true },\n\t)\n\n\tconst generatedComponentContext: GeneratedComponentContext = useMemo(() => {\n\t\tif (!groundNode) return\n\t\treturn getGeneratedComponentContextValue(scopeNode, groundNode, engine.componentLoader)\n\t}, [groundNode, scopeNode])\n\n\tconst [getStylePresetClassNameByTag, stylePresetClassNameByTagChangeListeners] = useStylePresetClassNameByTag(node)\n\n\tconst schema = useConstant(() =>\n\t\tmakeSchema({\n\t\t\tsupportsMedia,\n\t\t\tsupportsEmbeds,\n\t\t\tsupportsLinks,\n\t\t\tsupportsStyles,\n\t\t\tsupportsBlockquotes,\n\t\t\tsupportsTables,\n\t\t}),\n\t)\n\n\tconst editorView = useConstant(() => {\n\t\tconst initialValue = tool.getValue()\n\t\tassert(initialValue !== undefined, \"Initial value must exist\")\n\n\t\tconst editorState = createRichTextEditorState({\n\t\t\tengine,\n\t\t\tschema,\n\t\t\tinitialValue,\n\t\t\twithMediaPopout: false,\n\t\t\tsupportsSlashCommands: true,\n\t\t\tsupportsInlineFormatting: true,\n\t\t\tsupportedTags,\n\t\t\tgetStylePresetClassNameByTag,\n\t\t\tstylePresetClassNameByTagChangeListeners,\n\t\t\tproseMirror,\n\t\t\tkeyBindings: {\n\t\t\t\tEscape: engine.scheduler.wrapHandler(() => {\n\t\t\t\t\tengine.exitTool()\n\t\t\t\t\treturn true\n\t\t\t\t}),\n\t\t\t},\n\t\t})\n\n\t\tlet lastDocument = editorState.doc\n\n\t\treturn createRichTextEditorView({\n\t\t\tengine,\n\t\t\tschema,\n\t\t\tenabled: true,\n\t\t\teditorState,\n\t\t\tsetEditorState: nextEditorState => {\n\t\t\t\tengine.scheduler.processWhenReady(() => {\n\t\t\t\t\tif (nextEditorState.doc === lastDocument) return\n\t\t\t\t\tlastDocument = nextEditorState.doc\n\n\t\t\t\t\tconst html = serializeRichText(nextEditorState.doc, schema)\n\n\t\t\t\t\tcreateMissingPresetsForHTML(engine, html)\n\t\t\t\t\ttool.changeValue(html)\n\t\t\t\t})\n\t\t\t},\n\t\t\tproseMirror,\n\t\t})\n\t})\n\n\tuseEffect(() => {\n\t\ttool.controls = {\n\t\t\tundo() {\n\t\t\t\tproseMirror.undo(editorView.state, editorView.dispatch)\n\t\t\t},\n\n\t\t\tredo() {\n\t\t\t\tproseMirror.redo(editorView.state, editorView.dispatch)\n\t\t\t},\n\t\t}\n\n\t\treturn () => {\n\t\t\ttool.controls = undefined\n\t\t}\n\t}, [tool, proseMirror])\n\n\tuseEffect(() => {\n\t\tautoSelectText(engine, editorView.dom, tool.eventSource)\n\t}, [tool])\n\n\treturn (\n\t\t<CustomProperties customProperties={tokens}>\n\t\t\t<div className={breakpointClassNames} style={dragOutsideStyle} onMouseDown={onClickOutside}>\n\t\t\t\t<RichTextEditorContent\n\t\t\t\t\tclassName={styles.editor}\n\t\t\t\t\tstyle={{ ...containerStyle, ...style }}\n\t\t\t\t\tschema={schema}\n\t\t\t\t\teditorView={editorView}\n\t\t\t\t\tonMouseDown={onMouseDown}\n\t\t\t\t\tcomponentPresets={componentPresets}\n\t\t\t\t\tgetModuleNodeViewConstructor={getModuleNodeViewConstructor}\n\t\t\t\t\tgeneratedComponentContext={generatedComponentContext}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</CustomProperties>\n\t)\n}\n\nfunction useStylePresetClassNameByTag(node: RichTextNode) {\n\tconst presets = useMemo(() => {\n\t\treturn getStylePresetClassNameByTagForNode(node)\n\t}, [node])\n\n\tconst getPresets = useStableCallback(() => {\n\t\treturn presets\n\t})\n\n\tconst listeners = useSet<() => void>()\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: Intentional.\n\tuseEffect(() => {\n\t\tfor (const listener of listeners) {\n\t\t\tlistener()\n\t\t}\n\t}, [presets])\n\n\treturn [getPresets, listeners] as const\n}\n", "import { ReadOnlyContext, ThemeOverride, type ThemeOverrideMode } from \"@framerjs/fresco\"\nimport { ensureModulesAreLoaded } from \"code-generation/components/helpers/ensureModulesAreLoaded.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { type BaseEngine, EngineContext, useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { getModuleProps } from \"document/models/CanvasTree/nodes/utils/compileRichText.tsx\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { isEqual } from \"library/render/utils/isEqual.ts\"\nimport type { Node as ProseMirrorNode } from \"prosemirror-model\"\nimport type { EditorView, NodeView } from \"prosemirror-view\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport { ModuleAlignment, type ModuleNode, ModuleWidth, isModuleNode } from \"prosemirror/schema/module.ts\"\nimport React, { useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\"\nimport { flushSync } from \"react-dom\"\nimport ReactDOMClient from \"react-dom/client\"\nimport { useForceUpdate } from \"utils/useForceUpdate.ts\"\nimport type { GeneratedComponentContext } from \"../preview/ModulePreviewWrapper.tsx\"\nimport { ControlPropRowContext } from \"../properties/codeComponentRows/ControlPropRowContext.tsx\"\nimport type { PopoutButtonProps } from \"../shared/PopoutButton.tsx\"\nimport { EmbedPropertyControlsPopoutButton } from \"./EmbedPropertyControls.tsx\"\nimport { ModulePreview } from \"./ModulePreviewManager.tsx\"\nimport type { ComponentPresets } from \"./getModuleNodeViewConstructor.ts\"\nimport { isCanvasModuleIdentifier } from \"./moduleUtils.ts\"\n\ninterface PreviewRef {\n\tsetNode(node: ModuleNode): void\n}\n\n// TODO: Find a way to cache these components or the ModulePreview iframes.\n// currently iframes for CMS modules have to load every time they are mounted\n// resulting in a clunky user experience when a user switches back and forth\n// between CMS pages. Or toggles the preview on and off (from the CMS).\nexport class ModulePreviewView implements NodeView {\n\treadonly dom = document.createElement(\"div\")\n\tprivate readonly engine: BaseEngine\n\tprivate readonly reactRoot = ReactDOMClient.createRoot(this.dom)\n\n\tprivate readonly previewRef = React.createRef<PreviewRef>()\n\n\tconstructor(\n\t\tengine: BaseEngine,\n\t\tschema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithEmbeds,\n\t\tnode: ModuleNode,\n\t\teditorView: EditorView,\n\t\tgetPosition: () => number,\n\t\tonChange: VoidFunction,\n\t\tcontrolPropRows: ControlPropRowContext,\n\t\tinitialComponentPresets: ComponentPresets | undefined,\n\t\tinitialGeneratedComponentContext: GeneratedComponentContext,\n\t\tgetThemeOverrideMode: () => ThemeOverrideMode | undefined,\n\t\tpopoverAttachmentEdge: PopoutButtonProps[\"popoverAttachmentEdge\"],\n\t\tfallbackToModalAppearance: PopoutButtonProps[\"fallbackToModalAppearance\"],\n\t\tenabledChangeListener: Set<VoidFunction>,\n\t\tcomponentPresetsChangeListeners: Set<(presets: ComponentPresets | undefined) => void>,\n\t\tgeneratedComponentContextChangeListeners: Set<(generatedComponentContext: GeneratedComponentContext) => void>,\n\t\tthemeOverrideModeChangeListeners: Set<VoidFunction>,\n\t\tmodulePreviewCleanupListeners: Set<VoidFunction>,\n\t) {\n\t\tthis.engine = engine\n\t\tthis.updateDomAttributes(node)\n\n\t\tthis.reactRoot.render(\n\t\t\t<EngineContext.Provider value={engine}>\n\t\t\t\t<ControlPropRowContext.Provider value={controlPropRows}>\n\t\t\t\t\t<Preview\n\t\t\t\t\t\tinitialNode={node}\n\t\t\t\t\t\tpreviewRef={this.previewRef}\n\t\t\t\t\t\tschema={schema}\n\t\t\t\t\t\teditorView={editorView}\n\t\t\t\t\t\tgetPosition={getPosition}\n\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\tinitialComponentPresets={initialComponentPresets}\n\t\t\t\t\t\tinitialGeneratedComponentContext={initialGeneratedComponentContext}\n\t\t\t\t\t\tgetThemeOverrideMode={getThemeOverrideMode}\n\t\t\t\t\t\tpopoverAttachmentEdge={popoverAttachmentEdge}\n\t\t\t\t\t\tfallbackToModalAppearance={fallbackToModalAppearance}\n\t\t\t\t\t\tenabledChangeListener={enabledChangeListener}\n\t\t\t\t\t\tcomponentPresetsChangeListeners={componentPresetsChangeListeners}\n\t\t\t\t\t\tgeneratedComponentContextChangeListeners={generatedComponentContextChangeListeners}\n\t\t\t\t\t\tthemeOverrideModeChangeListeners={themeOverrideModeChangeListeners}\n\t\t\t\t\t\tmodulePreviewCleanupListeners={modulePreviewCleanupListeners}\n\t\t\t\t\t/>\n\t\t\t\t</ControlPropRowContext.Provider>\n\t\t\t</EngineContext.Provider>,\n\t\t)\n\t}\n\n\tprivate updateDomAttributes(node: ModuleNode) {\n\t\tconst width = node.attrs.width ?? ModuleWidth.Fill\n\t\tconst alignment = node.attrs.alignment ?? ModuleAlignment.Left\n\t\tconst identifier = node.attrs.identifier\n\t\tconst isCanvasModule = isCanvasModuleIdentifier(this.engine, identifier)\n\n\t\tthis.dom.classList.add(\"framer-text-module\")\n\t\tthis.dom.classList.toggle(\"framer-text-component\", isCanvasModule)\n\n\t\tthis.dom.setAttribute(\"data-width\", width)\n\t\tthis.dom.style.display = \"block\"\n\t\tthis.dom.style.width = width === ModuleWidth.Fill ? \"100%\" : \"fit-content\"\n\t\tthis.dom.style.maxWidth = width === ModuleWidth.Fill ? \"\" : \"100%\"\n\t\tthis.dom.style.marginLeft = \"\"\n\t\tthis.dom.style.marginRight = \"\"\n\n\t\tif (width === ModuleWidth.Fill) return\n\n\t\tif (alignment === ModuleAlignment.Center) {\n\t\t\tthis.dom.style.marginLeft = \"auto\"\n\t\t\tthis.dom.style.marginRight = \"auto\"\n\t\t\treturn\n\t\t}\n\n\t\tif (alignment === ModuleAlignment.Right) {\n\t\t\tthis.dom.style.marginLeft = \"auto\"\n\t\t\tthis.dom.style.marginRight = \"0\"\n\t\t\treturn\n\t\t}\n\t}\n\n\tupdate(node: ProseMirrorNode) {\n\t\tif (!isModuleNode(node)) return false\n\n\t\tflushSync(() => {\n\t\t\tthis.previewRef.current?.setNode(node)\n\t\t})\n\t\t// When going from Fill to Fit, we must update only after the rerender is committed.\n\t\t// Otherwise we risk having a `fit-content` containing an iframe that is still `100%`,\n\t\t// causing the browser to apply default replaced element sizing, which then reports as the component size.\n\t\tthis.updateDomAttributes(node)\n\n\t\treturn true\n\t}\n\n\tdestroy() {\n\t\tthis.reactRoot.unmount()\n\t}\n}\n\ninterface PreviewProps {\n\tinitialNode: ModuleNode\n\tpreviewRef: React.RefObject<PreviewRef>\n\tschema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithEmbeds\n\teditorView: EditorView\n\tgetPosition(): number\n\tonChange(): void\n\tinitialComponentPresets: ComponentPresets | undefined\n\tinitialGeneratedComponentContext: GeneratedComponentContext\n\tgetThemeOverrideMode(): ThemeOverrideMode | undefined\n\tpopoverAttachmentEdge: PopoutButtonProps[\"popoverAttachmentEdge\"]\n\tfallbackToModalAppearance: PopoutButtonProps[\"fallbackToModalAppearance\"]\n\tenabledChangeListener: Set<() => void>\n\tcomponentPresetsChangeListeners: Set<(presets: ComponentPresets | undefined) => void>\n\tgeneratedComponentContextChangeListeners: Set<(generatedComponentContext: GeneratedComponentContext) => void>\n\tthemeOverrideModeChangeListeners: Set<VoidFunction>\n\tmodulePreviewCleanupListeners: Set<() => void>\n}\n\nfunction Preview({\n\tinitialNode,\n\tpreviewRef,\n\tschema,\n\teditorView,\n\tgetPosition,\n\tonChange,\n\tinitialComponentPresets,\n\tinitialGeneratedComponentContext,\n\tgetThemeOverrideMode,\n\tpopoverAttachmentEdge,\n\tfallbackToModalAppearance,\n\tenabledChangeListener,\n\tcomponentPresetsChangeListeners,\n\tgeneratedComponentContextChangeListeners,\n\tthemeOverrideModeChangeListeners,\n\tmodulePreviewCleanupListeners,\n}: PreviewProps) {\n\tconst engine = useBaseEngine()\n\n\tconst [node, setNode] = useState(initialNode)\n\n\tuseImperativeHandle(previewRef, () => {\n\t\treturn { setNode }\n\t})\n\n\tconst { identifier, props: rawControlProps } = node.attrs\n\tconst moduleWidth = node.attrs.width ?? ModuleWidth.Fill\n\tconst rawControlPropsRef = useRef(rawControlProps)\n\tconst stableRawControlProps = useMemo(() => {\n\t\tconst previous = rawControlPropsRef.current\n\t\tif (previous && isEqual(previous, rawControlProps)) {\n\t\t\treturn previous\n\t\t}\n\t\trawControlPropsRef.current = rawControlProps\n\t\treturn rawControlProps\n\t}, [rawControlProps])\n\n\tconst [isComponentLoading, setIsComponentLoading] = useState(\n\t\t() => !engine.componentLoader.componentForIdentifier(identifier),\n\t)\n\n\tconst isReadOnly = !editorView.editable\n\tconst forceUpdate = useForceUpdate()\n\tuseEffect(() => {\n\t\tenabledChangeListener.add(forceUpdate)\n\t\treturn () => {\n\t\t\tenabledChangeListener.delete(forceUpdate)\n\t\t}\n\t}, [enabledChangeListener, forceUpdate])\n\n\tuseEffect(() => {\n\t\tlet isLatestEffect = true\n\n\t\tconst isLoading = !engine.componentLoader.componentForIdentifier(identifier)\n\t\tsetIsComponentLoading(isLoading)\n\n\t\tif (!isLoading) return\n\n\t\tasync function loadComponentDefinition() {\n\t\t\tawait ensureModulesAreLoaded([identifier], engine.stores.modulesStore, engine.componentLoader)\n\t\t}\n\n\t\tvoid loadComponentDefinition().finally(() => {\n\t\t\tif (isLatestEffect) {\n\t\t\t\tsetIsComponentLoading(false)\n\t\t\t}\n\t\t})\n\n\t\treturn () => {\n\t\t\tisLatestEffect = false\n\t\t}\n\t}, [identifier])\n\n\tconst [componentPresets, setComponentPresets] = useState(initialComponentPresets)\n\n\tuseEffect(() => {\n\t\tcomponentPresetsChangeListeners.add(setComponentPresets)\n\n\t\treturn () => {\n\t\t\tcomponentPresetsChangeListeners.delete(setComponentPresets)\n\t\t}\n\t}, [componentPresetsChangeListeners])\n\n\tconst component = useEngineState(\n\t\t() => engine.componentLoader.reactComponentForIdentifier(identifier),\n\t\t[identifier],\n\t\t[EngineChange.ActiveBundle],\n\t)\n\n\tconst presetProps = componentPresets?.[identifier]\n\n\tconst allControlProps = useMemo(() => {\n\t\tconst controlProps = getModuleProps(component, stableRawControlProps)\n\t\treturn {\n\t\t\t...controlProps,\n\t\t\t...presetProps,\n\t\t}\n\t}, [component, presetProps, stableRawControlProps])\n\n\tconst [generatedComponentContext, setGeneratedComponentContext] = useState<GeneratedComponentContext>(\n\t\tinitialGeneratedComponentContext,\n\t)\n\tconst [themeOverrideMode, setThemeOverrideMode] = useState<ThemeOverrideMode | undefined>(getThemeOverrideMode)\n\n\tuseEffect(() => {\n\t\tgeneratedComponentContextChangeListeners.add(setGeneratedComponentContext)\n\n\t\treturn () => {\n\t\t\tgeneratedComponentContextChangeListeners.delete(setGeneratedComponentContext)\n\t\t}\n\t}, [generatedComponentContextChangeListeners])\n\n\tuseEffect(() => {\n\t\tfunction handleThemeOverrideModeChange() {\n\t\t\tsetThemeOverrideMode(getThemeOverrideMode())\n\t\t}\n\n\t\tthemeOverrideModeChangeListeners.add(handleThemeOverrideModeChange)\n\n\t\treturn () => {\n\t\t\tthemeOverrideModeChangeListeners.delete(handleThemeOverrideModeChange)\n\t\t}\n\t}, [getThemeOverrideMode, themeOverrideModeChangeListeners])\n\n\tif (isComponentLoading) return null\n\n\tconst modulePreview = (\n\t\t<ModulePreview\n\t\t\tmoduleIdentifier={identifier}\n\t\t\tcontrolProps={allControlProps}\n\t\t\tmoduleWidth={moduleWidth}\n\t\t\tcleanupListeners={modulePreviewCleanupListeners}\n\t\t\tgeneratedComponentContext={generatedComponentContext}\n\t\t/>\n\t)\n\n\tif (!component) return modulePreview\n\n\tconst isNonPrimaryBreakpoint =\n\t\tgeneratedComponentContext?.activeVariantId !== undefined &&\n\t\tgeneratedComponentContext?.activeVariantId !== generatedComponentContext?.primaryVariantId\n\n\treturn (\n\t\t<ThemeOverride mode={themeOverrideMode}>\n\t\t\t<ReadOnlyContext.Provider value={isReadOnly}>\n\t\t\t\t<EmbedPropertyControlsPopoutButton\n\t\t\t\t\tidentifier={identifier}\n\t\t\t\t\tcomponent={component}\n\t\t\t\t\trawControlProps={rawControlProps}\n\t\t\t\t\tschema={schema}\n\t\t\t\t\teditorView={editorView}\n\t\t\t\t\tgetPosition={getPosition}\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\tpopoverAttachmentEdge={popoverAttachmentEdge}\n\t\t\t\t\tfallbackToModalAppearance={fallbackToModalAppearance}\n\t\t\t\t\tshowResponsiveComponentsHint={isNonPrimaryBreakpoint}\n\t\t\t\t>\n\t\t\t\t\t{modulePreview}\n\t\t\t\t</EmbedPropertyControlsPopoutButton>\n\t\t\t</ReadOnlyContext.Provider>\n\t\t</ThemeOverride>\n\t)\n}\n", "import type { AssetReference } from \"@framerjs/assets\"\nimport type { ReactComponentDefinition } from \"@framerjs/framer-runtime\"\nimport {\n\tButton,\n\tCenterChild,\n\tIconAlignCenter,\n\tIconAlignLeft,\n\tIconAlignRight,\n\tIconLayerComponent,\n\tLink,\n\tScroll,\n\tSegmentedControl,\n\tSegmentedControlItem,\n\tStack,\n\tuseReadOnly,\n} from \"@framerjs/fresco\"\nimport type { ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport { assert, parseModuleIdentifier } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { IconAgentComponent } from \"document/components/chrome/agentPanel/components/IconAgentComponent.tsx\"\nimport { editActionForCodeComponentIdentifier } from \"document/components/utils/editActionForCodeComponent.ts\"\nimport { getMetricsInteractionSourceForScopeType } from \"document/components/utils/getMetricsInteractionSourceForScopeType.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport type { RawControlProps } from \"document/models/controlProps/RawControlProp.ts\"\nimport { controlsWithAutoVariantOption } from \"document/models/controlProps/controlsWithAutoVariantOption.ts\"\nimport { filterComponentPresetControls } from \"document/models/controlProps/filterComponentPresetControls.ts\"\nimport { useControlProps } from \"document/models/controlProps/getControlProps.ts\"\nimport { getReducedControlProps } from \"document/models/controlProps/getReducedControlProps.ts\"\nimport { useMemoReducedControlProps } from \"document/models/controlProps/memoReducedControlProps.ts\"\nimport { isVekterEngine } from \"document/useVekterEngine.ts\"\nimport { ScopeType } from \"document/utils/scopeType.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { useStableCallback } from \"library/utils/useStableCallback.ts\"\nimport type { EditorView } from \"prosemirror-view\"\nimport { NodeViewPopoutButton } from \"prosemirror/NodeViewPopoutButton.tsx\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport { ModuleAlignment, ModuleWidth, isModuleNode } from \"prosemirror/schema/module.ts\"\nimport type React from \"react\"\nimport { useContext, useMemo } from \"react\"\nimport { record } from \"web/lib/tracker.ts\"\nimport { ControlPropRow } from \"../properties/codeComponentRows/ControlPropRow.tsx\"\nimport { getEditButtonTitle } from \"../properties/panels/utils/getEditButtonTitle.ts\"\nimport { PanelRow } from \"../properties/rows/PanelRow.tsx\"\nimport { doubleColumn } from \"../properties/utils/doubleColumn.ts\"\nimport type { PopoutButtonProps } from \"../shared/PopoutButton.tsx\"\nimport { PopoutContext } from \"../shared/PopoutContext.ts\"\nimport * as styles from \"./EmbedPropertyControls.styles.ts\"\nimport { isCanvasModuleIdentifier } from \"./moduleUtils.ts\"\nimport { useHiddenStateForModule } from \"./useHiddenStateForModule.tsx\"\n\nconst emptyNodeIdsArray: NodeID[] = []\n\nconst responsiveComponentsLearnMoreURL = \"https://www.framer.com/learn/component-variants/\"\n\ninterface EmbedPropertyControlsPopoutButtonProps extends Pick<\n\tPopoutButtonProps,\n\t\"popoverAttachmentEdge\" | \"fallbackToModalAppearance\"\n> {\n\tchildren: React.ReactElement\n\tcomponent: ReactComponentDefinition\n\tschema: FramerProseMirrorSchema & FramerProseMirrorSchema.WithEmbeds\n\teditorView: EditorView\n\tgetPosition(): number\n\tidentifier: ModuleExportIdentifierString\n\tonChange(): void\n\trawControlProps: RawControlProps\n\tshowResponsiveComponentsHint: boolean\n}\n\nexport function EmbedPropertyControlsPopoutButton({\n\tchildren,\n\tcomponent,\n\tschema,\n\teditorView,\n\tgetPosition,\n\tidentifier,\n\tonChange,\n\trawControlProps,\n\tpopoverAttachmentEdge,\n\tfallbackToModalAppearance,\n\tshowResponsiveComponentsHint,\n}: EmbedPropertyControlsPopoutButtonProps) {\n\tconst engine = useBaseEngine()\n\tconst agentExperimentEnabled = useExperimentIsOn(\"agent\")\n\n\tconst controls = useMemo(\n\t\t() => controlsWithAutoVariantOption(filterComponentPresetControls(component, \"onlyNonPresets\")),\n\t\t[component],\n\t)\n\tconst controlProps = useControlProps(controls, rawControlProps)\n\tconst popoutNavigation = useContext(PopoutContext)\n\n\tconst hiddenState = useHiddenStateForModule(identifier, controlProps)\n\n\tconst handleChange = useStableCallback((controlKey: string, getUpdate: (current: ControlProp) => ControlProp) => {\n\t\tconst state = editorView.state\n\t\tconst transaction = state.tr\n\t\tconst position = getPosition()\n\n\t\tconst latestControlProp = controlProps[controlKey]\n\t\tassert(latestControlProp)\n\t\tconst newControlProp = getUpdate(latestControlProp)\n\n\t\tconst node = state.doc.nodeAt(position)\n\t\tif (!isModuleNode(node)) return\n\n\t\ttransaction.setNodeMarkup(position, schema.nodes.module, {\n\t\t\t...node.attrs,\n\t\t\tprops: {\n\t\t\t\t...node.attrs.props,\n\t\t\t\t[controlKey]: newControlProp,\n\t\t\t},\n\t\t})\n\n\t\teditorView.dispatch(transaction)\n\t\tif (controlKey === \"variant\") {\n\t\t\trecord(\"collection_record_component_update\", {\n\t\t\t\tsource: getMetricsInteractionSourceForScopeType(engine.stores.scopeStore.scopeType),\n\t\t\t\tvariant: newControlProp.value == null ? \"auto\" : \"explicit\",\n\t\t\t})\n\t\t}\n\t\tonChange()\n\t})\n\n\tconst handleImageUpload = useStableCallback(async (upload: Promise<AssetReference | null>, controlKey: string) => {\n\t\t// Upload the image first, then update the rich text.\n\t\tconst reference = await upload\n\t\tif (!reference) return\n\t\thandleChange(controlKey, () => ({ type: ControlType.Image, value: reference }))\n\t})\n\n\tconst removeSelf = () => {\n\t\tconst pos = getPosition()\n\t\tconst tr = editorView.state.tr.delete(pos, pos + 1)\n\t\teditorView.dispatch(tr)\n\t}\n\n\tconst handleWidthChange = useStableCallback((newWidth: ModuleWidth) => {\n\t\tconst state = editorView.state\n\t\tconst transaction = state.tr\n\t\tconst position = getPosition()\n\t\tconst node = state.doc.nodeAt(position)\n\t\tif (!isModuleNode(node)) return\n\n\t\ttransaction.setNodeMarkup(position, schema.nodes.module, {\n\t\t\t...node.attrs,\n\t\t\twidth: newWidth,\n\t\t})\n\n\t\teditorView.dispatch(transaction)\n\t\trecord(\"collection_record_component_update\", {\n\t\t\tsource: getMetricsInteractionSourceForScopeType(engine.stores.scopeStore.scopeType),\n\t\t\twidth: newWidth,\n\t\t})\n\t\tonChange()\n\t\tpopoutNavigation?.triggerRender()\n\t})\n\n\tconst handleAlignmentChange = useStableCallback((newAlignment: ModuleAlignment) => {\n\t\tconst state = editorView.state\n\t\tconst transaction = state.tr\n\t\tconst position = getPosition()\n\t\tconst node = state.doc.nodeAt(position)\n\t\tif (!isModuleNode(node)) return\n\n\t\ttransaction.setNodeMarkup(position, schema.nodes.module, {\n\t\t\t...node.attrs,\n\t\t\talignment: newAlignment,\n\t\t})\n\n\t\teditorView.dispatch(transaction)\n\t\tonChange()\n\t\tpopoutNavigation?.triggerRender()\n\t})\n\n\tconst reducedControlProps = useMemoReducedControlProps(getReducedControlProps(controls ?? {}, [controlProps]))\n\tconst isCanvasModule = isCanvasModuleIdentifier(engine, identifier)\n\n\tconst rows: React.ReactElement[] = []\n\n\t// add Width and Alignment controls only for Canvas modules\n\tif (isCanvasModule) {\n\t\tconst currentNode = editorView.state.doc.nodeAt(getPosition())\n\t\tif (isModuleNode(currentNode)) {\n\t\t\tconst currentWidth = currentNode.attrs.width ?? ModuleWidth.Fill\n\t\t\tconst currentAlignment = currentNode.attrs.alignment ?? ModuleAlignment.Left\n\n\t\t\trows.push(\n\t\t\t\t<PanelRow key=\"component-width\" title=\"Width\">\n\t\t\t\t\t<SegmentedControl style={doubleColumn}>\n\t\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\t\tidentifier={ModuleWidth.Fill}\n\t\t\t\t\t\t\ttitle={Dictionary.Fill}\n\t\t\t\t\t\t\tonSelect={handleWidthChange}\n\t\t\t\t\t\t\tselected={currentWidth === ModuleWidth.Fill}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\t\tidentifier={ModuleWidth.Fit}\n\t\t\t\t\t\t\ttitle={Dictionary.Fit}\n\t\t\t\t\t\t\tonSelect={handleWidthChange}\n\t\t\t\t\t\t\tselected={currentWidth === ModuleWidth.Fit}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</SegmentedControl>\n\t\t\t\t</PanelRow>,\n\t\t\t)\n\n\t\t\t// Add Alignment control (only show when width is \"fit\")\n\t\t\tif (currentWidth === ModuleWidth.Fit) {\n\t\t\t\trows.push(\n\t\t\t\t\t<PanelRow key=\"component-alignment\" title=\"Align\">\n\t\t\t\t\t\t<SegmentedControl style={doubleColumn}>\n\t\t\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\t\t\tidentifier={ModuleAlignment.Left}\n\t\t\t\t\t\t\t\ttitle=\"Left\"\n\t\t\t\t\t\t\t\tonSelect={handleAlignmentChange}\n\t\t\t\t\t\t\t\tselected={currentAlignment === ModuleAlignment.Left}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconAlignLeft />\n\t\t\t\t\t\t\t</SegmentedControlItem>\n\t\t\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\t\t\tidentifier={ModuleAlignment.Center}\n\t\t\t\t\t\t\t\ttitle=\"Center\"\n\t\t\t\t\t\t\t\tonSelect={handleAlignmentChange}\n\t\t\t\t\t\t\t\tselected={currentAlignment === ModuleAlignment.Center}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconAlignCenter />\n\t\t\t\t\t\t\t</SegmentedControlItem>\n\t\t\t\t\t\t\t<SegmentedControlItem\n\t\t\t\t\t\t\t\tidentifier={ModuleAlignment.Right}\n\t\t\t\t\t\t\t\ttitle=\"Right\"\n\t\t\t\t\t\t\t\tonSelect={handleAlignmentChange}\n\t\t\t\t\t\t\t\tselected={currentAlignment === ModuleAlignment.Right}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconAlignRight />\n\t\t\t\t\t\t\t</SegmentedControlItem>\n\t\t\t\t\t\t</SegmentedControl>\n\t\t\t\t\t</PanelRow>,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const controlKey in reducedControlProps) {\n\t\tif (hiddenState[controlKey]) continue\n\t\tconst reducedControlProp = reducedControlProps[controlKey]\n\t\tif (!reducedControlProp) continue\n\t\tconst control = controls[controlKey]\n\t\tif (!control) continue\n\n\t\trows.push(\n\t\t\t<ControlPropRow\n\t\t\t\tkey={controlKey}\n\t\t\t\tnodeIds={emptyNodeIdsArray}\n\t\t\t\tcontrolKey={controlKey}\n\t\t\t\tcontrol={control}\n\t\t\t\tcontrolProp={reducedControlProp}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tonImageUpload={handleImageUpload}\n\t\t\t\tscopeType={ScopeType.ContentManagement}\n\t\t\t\tcontrolSourceIdentifier={identifier}\n\t\t\t/>,\n\t\t)\n\t}\n\n\tconst isReadOnly = useReadOnly()\n\n\tlet editButton: React.ReactElement | undefined\n\tif (isVekterEngine(engine)) {\n\t\tconst editAction = editActionForCodeComponentIdentifier(identifier, engine, { keepHistory: false })\n\t\tif (editAction) {\n\t\t\teditButton = (\n\t\t\t\t<Button\n\t\t\t\t\tclassName={styles.footerButton}\n\t\t\t\t\ttitle={getEditButtonTitle(engine, parseModuleIdentifier(identifier), isReadOnly)}\n\t\t\t\t\tonClick={editAction}\n\t\t\t\t/>\n\t\t\t)\n\t\t}\n\t}\n\n\treturn (\n\t\t<NodeViewPopoutButton\n\t\t\tdisplayDivider\n\t\t\tpopoverAttachmentEdge={popoverAttachmentEdge}\n\t\t\tfallbackToModalAppearance={fallbackToModalAppearance}\n\t\t\teditorView={editorView}\n\t\t\tnavigationTitle={component.name}\n\t\t\tkeyMap={{\n\t\t\t\tBackspace: removeSelf,\n\t\t\t\tDelete: removeSelf,\n\t\t\t}}\n\t\t\tpopout={\n\t\t\t\t<Stack className={styles.container} gap={0}>\n\t\t\t\t\t<Scroll direction=\"vertical\" className={styles.scroll}>\n\t\t\t\t\t\t{showResponsiveComponentsHint ? (\n\t\t\t\t\t\t\t<Stack className={styles.hintScrollContent}>\n\t\t\t\t\t\t\t\t<Stack className={styles.hintContents}>\n\t\t\t\t\t\t\t\t\t<CenterChild className={styles.icon}>\n\t\t\t\t\t\t\t\t\t\t{agentExperimentEnabled ? <IconAgentComponent /> : <IconLayerComponent />}\n\t\t\t\t\t\t\t\t\t</CenterChild>\n\t\t\t\t\t\t\t\t\t<Stack className={styles.hintText}>\n\t\t\t\t\t\t\t\t\t\t<div className={styles.heading}>Responsive Components</div>\n\t\t\t\t\t\t\t\t\t\t<div className={styles.description}>\n\t\t\t\t\t\t\t\t\t\t\tFor responsive components, add component variants that match breakpoint names.\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<Link href={responsiveComponentsLearnMoreURL} className={styles.learnMoreLink}>\n\t\t\t\t\t\t\t\t\t\t\tLearn more\n\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className={styles.rowsContent}>{rows}</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Scroll>\n\t\t\t\t\t{editButton && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{!showResponsiveComponentsHint && <hr className={styles.divider} />}\n\t\t\t\t\t\t\t<div className={styles.footer}>{editButton}</div>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t}\n\t\t>\n\t\t\t{children}\n\t\t</NodeViewPopoutButton>\n\t)\n}\n", "import type { AssetReference } from \"@framerjs/assets\"\nimport type { VerifiedControlDescription } from \"@framerjs/framer-runtime\"\nimport { assert, assertNever } from \"@framerjs/shared\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport type { HiddenStateByNodeId } from \"canvas-sandbox/ControlsVisibility.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { HardCodedCodeIdentifier } from \"document/models/CanvasTree/traits/utils/hardCodedCodeComponentIdentifiers.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport { prefixControlPropKey } from \"document/models/controlProps/controlPropKey.ts\"\nimport type { ReducedControlProp } from \"document/models/controlProps/getReducedControlProps.ts\"\nimport type { ScopeType } from \"document/utils/scopeType.ts\"\nimport type { SegmentedControlIcon } from \"library/render/types/PropertyControls.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport React from \"react\"\nimport type { ControlPropChangeHandler } from \"./ControlPropRowChangeHandler.ts\"\nimport { useControlPropRows } from \"./ControlPropRowContext.tsx\"\nimport { DescriptionRow } from \"./DescriptionRow.tsx\"\n\nexport interface ControlPropRowProps {\n\tnodeIds: NodeID[]\n\tcontrolKey: string\n\t/**\n\t * Meant for calculating the complete control path for nested controls. Value should not be set\n\t * except for object and array controls.\n\t */\n\tcontrolPath?: string\n\tcontrol: VerifiedControlDescription\n\tcontrolProp: ReducedControlProp\n\tonChange: ControlPropChangeHandler\n\tonImageUpload: (upload: Promise<AssetReference | null>, controlKey: string) => void\n\tonContextMenu?: (event: React.MouseEvent<HTMLElement>) => void\n\t/**\n\t * Should only be passed in by the component panel. Used by enums to know if they are compatible\n\t * with variables and allow for variable assignment. Also used by the prototype content\n\t * selection row (special case).\n\t */\n\tcontrolSourceIdentifier?: string\n\t/**\n\t * For controlReference variables, the control key of the referenced control.\n\t */\n\tcontrolSourceControlKey?: string\n\tsortable?: boolean\n\tsupportsVariables?: boolean\n\tsupportsComputedValues?: boolean\n\tsupportsFetchDataValues?: boolean\n\tdisplayInPopover?: boolean\n\t/** Only used by ControlType.Enum */\n\ticons?: SegmentedControlIcon[]\n\tcontrolKeyIsTraitTypeKey?: boolean\n\tpopoutId?: string\n\t/** Only used by ControlType.Object */\n\thiddenControlsByNodeId?: HiddenStateByNodeId\n\tscopeType: ScopeType\n\tallowP3?: boolean\n}\n\nexport const ControlPropRow = React.memo(function ControlPropRow({\n\tnodeIds,\n\tcontrolKey,\n\tcontrol,\n\tcontrolPath = controlKey,\n\tonChange,\n\tonImageUpload,\n\tonContextMenu,\n\tcontrolProp,\n\tcontrolSourceIdentifier,\n\tcontrolSourceControlKey,\n\tsortable,\n\tsupportsVariables,\n\tsupportsComputedValues,\n\tsupportsFetchDataValues = supportsComputedValues,\n\tdisplayInPopover,\n\ticons,\n\tcontrolKeyIsTraitTypeKey,\n\tpopoutId,\n\thiddenControlsByNodeId,\n\tscopeType,\n\tallowP3,\n}: ControlPropRowProps) {\n\tlet row: JSX.Element | undefined\n\tlet description: JSX.Element | undefined\n\n\tif (control.description) {\n\t\tdescription = <DescriptionRow description={control.description} />\n\t}\n\n\tconst traitTypeKeys = React.useMemo<string[] | undefined>(() => {\n\t\treturn controlKeyIsTraitTypeKey ? [prefixControlPropKey(controlKey)] : undefined\n\t}, [controlKey, controlKeyIsTraitTypeKey])\n\n\tconst changeHandler = React.useCallback(\n\t\t(updatedControlProp: ControlProp, controlKey: string) => {\n\t\t\tonChange(controlKey, () => updatedControlProp, nodeIds)\n\t\t},\n\t\t[nodeIds, onChange],\n\t)\n\n\tconst {\n\t\tArrayControlPropRow,\n\t\tBooleanControlPropRow,\n\t\tBorderControlPropRow,\n\t\tBorderRadiusControlPropRow,\n\t\tBoxShadowControlPropRow,\n\t\tCanvasPageInstanceRow,\n\t\tCollectionReferenceControlPropRow,\n\t\tColorArrayControlPropRow,\n\t\tColorControlPropRow,\n\t\tLocationControlPropRow,\n\t\tCursorControlPropRow,\n\t\tCustomCursorControlPropRow,\n\t\tDateControlPropRow,\n\t\tEnumControlPropRow,\n\t\tFileControlPropRow,\n\t\tFontControlPropRow,\n\t\tFusedNumberControlPropRow,\n\t\tGapControlPropRow,\n\t\tImageControlPropRow,\n\t\tLinkControlPropRow,\n\t\tLinkRelValuesControlPropRow,\n\t\tMultiCollectionReferenceControlPropRow,\n\t\tNumberControlPropRow,\n\t\tObjectControlPropRow,\n\t\tPaddingControlPropRow,\n\t\tPageScopeControlPropRow,\n\t\tRichTextControlPropRow,\n\t\tScrollSectionRefControlPropRow,\n\t\tSlotControlPropRow,\n\t\tStringControlPropRow,\n\t\tTrackingIdControlPropRow,\n\t\tTransitionControlPropRow,\n\t\tVectorSetItemControlPropRow,\n\t} = useControlPropRows()\n\n\tconst isInlineColorArrayExperimentOn = useExperimentIsOn(\"inlineColorArrayControl\")\n\n\tswitch (control.type) {\n\t\tcase ControlType.Boolean:\n\t\t\tassert(controlProp.type === ControlType.Boolean)\n\t\t\tif (!BooleanControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<BooleanControlPropRow\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsortable={sortable}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\t\t\tsupportsFetchDataValues={supportsFetchDataValues}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.Number:\n\t\t\tassert(controlProp.type === ControlType.Number)\n\t\t\tif (!NumberControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<NumberControlPropRow\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsortable={sortable}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\tsupportsFetchDataValues={supportsFetchDataValues}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.String:\n\t\t\tassert(controlProp.type === ControlType.String)\n\t\t\tif (!StringControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<StringControlPropRow\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={onChange as ControlPropChangeHandler<ControlType.String>}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsortable={sortable}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\tsupportsFetchDataValues={supportsFetchDataValues}\n\t\t\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.TrackingId:\n\t\t\tassert(controlProp.type === ControlType.TrackingId)\n\t\t\tif (!TrackingIdControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<TrackingIdControlPropRow\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.RichText:\n\t\t\tassert(controlProp.type === ControlType.RichText)\n\t\t\tif (!RichTextControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<RichTextControlPropRow\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={onChange as ControlPropChangeHandler<ControlType.RichText>}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsortable={sortable}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\tscopeType={scopeType}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.FusedNumber:\n\t\t\tassert(controlProp.type === ControlType.FusedNumber)\n\t\t\tif (!FusedNumberControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<FusedNumberControlPropRow\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsortable={sortable}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.Enum:\n\t\t\tassert(controlProp.type === ControlType.Enum)\n\t\t\tif (!EnumControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<EnumControlPropRow\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsortable={sortable}\n\t\t\t\t\ticons={icons}\n\t\t\t\t\tcontrolSourceIdentifier={controlSourceIdentifier}\n\t\t\t\t\tcontrolSourceControlKey={controlSourceControlKey}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.Color:\n\t\t\tassert(controlProp.type === ControlType.Color)\n\t\t\tif (!ColorControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<ColorControlPropRow\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsortable={sortable}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tdisplayInPopover={displayInPopover}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\t\t\tsupportsFetchDataValues={supportsFetchDataValues}\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\tpopoutId={popoutId}\n\t\t\t\t\tallowP3={allowP3}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.ResponsiveImage:\n\t\tcase ControlType.Image:\n\t\t\tassert(controlProp.type === ControlType.Image || controlProp.type === ControlType.ResponsiveImage)\n\t\t\tif (!ImageControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<ImageControlPropRow\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={onChange as ControlPropChangeHandler<ControlType.Image>}\n\t\t\t\t\tonUpload={onImageUpload}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsortable={sortable}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tdisplayInPopover={displayInPopover}\n\t\t\t\t\tsupportsFetchDataValues={supportsFetchDataValues}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\tpopoutId={popoutId}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.File:\n\t\t\tassert(controlProp.type === ControlType.File)\n\t\t\tif (!FileControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<FileControlPropRow\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsortable={sortable}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\tcontrolSourceIdentifier={controlSourceIdentifier}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.Slot: {\n\t\t\tassert(controlProp.type === ControlType.Slot)\n\n\t\t\t// The slot row only supports single selected nodes, because it needs to do an expensive\n\t\t\t// calculation to prevent circular dependencies.\n\t\t\tif (nodeIds.length !== 1) return null\n\n\t\t\tif (controlSourceIdentifier === HardCodedCodeIdentifier.prototype) {\n\t\t\t\tif (!CanvasPageInstanceRow) return\n\t\t\t\trow = (\n\t\t\t\t\t<CanvasPageInstanceRow\n\t\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tif (!SlotControlPropRow) return\n\t\t\t\trow = (\n\t\t\t\t\t<SlotControlPropRow\n\t\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\t\tcontrolPath={controlPath}\n\t\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\t\tonChange={onChange as ControlPropChangeHandler<ControlType.Slot>}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tbreak\n\t\t}\n\t\tcase ControlType.Transition:\n\t\t\tassert(controlProp.type === ControlType.Transition)\n\t\t\tif (!TransitionControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<TransitionControlPropRow\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsortable={sortable}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tpopoutId={popoutId}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.BoxShadow:\n\t\t\tassert(controlProp.type === ControlType.BoxShadow)\n\t\t\tif (!BoxShadowControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<BoxShadowControlPropRow\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={onChange as ControlPropChangeHandler<ControlType.BoxShadow>}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tpopoutId={popoutId}\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.Font:\n\t\t\tassert(controlProp.type === ControlType.Font)\n\t\t\tif (!FontControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<FontControlPropRow\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={onChange as ControlPropChangeHandler<ControlType.Font>}\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tpopoutId={popoutId}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\n\t\tcase ControlType.Object:\n\t\t\tassert(controlProp.type === ControlType.Object)\n\t\t\tif (!ObjectControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<ObjectControlPropRow\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolPath={controlPath}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={onChange as ControlPropChangeHandler<ControlType.Object>}\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\tControlPropRow={ControlPropRow}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsortable={sortable}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tpopoutId={popoutId}\n\t\t\t\t\tscopeType={scopeType}\n\t\t\t\t\thiddenControlsByNodeId={hiddenControlsByNodeId}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.Link:\n\t\t\tassert(controlProp.type === ControlType.Link)\n\t\t\tif (!LinkControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<LinkControlPropRow\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={onChange as ControlPropChangeHandler<ControlType.Link>}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsortable={sortable}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\t\t\tsupportsFetchDataValues={supportsFetchDataValues}\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.LinkRelValues:\n\t\t\tassert(controlProp.type === ControlType.LinkRelValues)\n\t\t\tif (!LinkRelValuesControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<LinkRelValuesControlPropRow\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.PageScope:\n\t\t\tassert(controlProp.type === ControlType.PageScope)\n\t\t\tif (!PageScopeControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<PageScopeControlPropRow\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.Date:\n\t\t\tassert(controlProp.type === ControlType.Date)\n\t\t\tif (!DateControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<DateControlPropRow\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsortable={sortable}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.ScrollSectionRef:\n\t\t\tassert(controlProp.type === ControlType.ScrollSectionRef)\n\t\t\tif (!ScrollSectionRefControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<ScrollSectionRefControlPropRow\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\tscopeType={scopeType}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.CustomCursor:\n\t\t\tassert(controlProp.type === ControlType.CustomCursor)\n\t\t\tif (!CustomCursorControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<CustomCursorControlPropRow\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tonChange={onChange}\n\t\t\t\t\tscopeType={scopeType}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.Cursor:\n\t\t\tassert(controlProp.type === ControlType.Cursor)\n\t\t\tif (!CursorControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<CursorControlPropRow\n\t\t\t\t\tpopoutId={controlKey}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.Array: {\n\t\t\tassert(controlProp.type === ControlType.Array)\n\n\t\t\t// Show a more native looking UI for arrays of colours\n\t\t\tconst isColorArray = control.control.type === ControlType.Color\n\t\t\tif (isColorArray && isInlineColorArrayExperimentOn && ColorArrayControlPropRow) {\n\t\t\t\trow = (\n\t\t\t\t\t<ColorArrayControlPropRow\n\t\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tscopeType={scopeType}\n\t\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\t\tcontrolPath={controlPath}\n\t\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\t\tonChange={onChange as ControlPropChangeHandler<ControlType.Array>}\n\t\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\t\tallowP3={allowP3}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tif (!ArrayControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<ArrayControlPropRow\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tscopeType={scopeType}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolPath={controlPath}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\thiddenControlsByNodeId={hiddenControlsByNodeId}\n\t\t\t\t\tControlPropRow={ControlPropRow}\n\t\t\t\t\tcontrolSourceIdentifier={controlSourceIdentifier}\n\t\t\t\t\tdisplayInPopover={displayInPopover}\n\t\t\t\t\tonChange={onChange as ControlPropChangeHandler<ControlType.Array>}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\tallowP3={allowP3}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\t}\n\t\tcase ControlType.Border: {\n\t\t\tassert(controlProp.type === ControlType.Border)\n\t\t\tif (!BorderControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<BorderControlPropRow\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={onChange as ControlPropChangeHandler<ControlType.Border>}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tpopoutId={controlKey}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\t}\n\t\tcase ControlType.Padding: {\n\t\t\tassert(controlProp.type === ControlType.Padding)\n\t\t\tif (!PaddingControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<PaddingControlPropRow\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\t}\n\t\tcase ControlType.Gap:\n\t\t\tassert(controlProp.type === ControlType.Gap)\n\t\t\tif (!GapControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<GapControlPropRow\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={onChange as ControlPropChangeHandler<ControlType.Gap>}\n\t\t\t\t\tnodeIds={nodeIds}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.BorderRadius:\n\t\t\tassert(controlProp.type === ControlType.BorderRadius)\n\t\t\tif (!BorderRadiusControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<BorderRadiusControlPropRow\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.CollectionReference:\n\t\t\tassert(controlProp.type === ControlType.CollectionReference)\n\t\t\tif (!CollectionReferenceControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<CollectionReferenceControlPropRow\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.MultiCollectionReference:\n\t\t\tassert(controlProp.type === ControlType.MultiCollectionReference)\n\t\t\tif (!MultiCollectionReferenceControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<MultiCollectionReferenceControlPropRow\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\tsupportsComputedValues={supportsComputedValues}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.VectorSetItem:\n\t\t\tassert(controlProp.type === ControlType.VectorSetItem)\n\t\t\tif (!VectorSetItemControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<VectorSetItemControlPropRow\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.Location:\n\t\t\tassert(controlProp.type === ControlType.Location)\n\t\t\tif (!LocationControlPropRow) return\n\t\t\trow = (\n\t\t\t\t<LocationControlPropRow\n\t\t\t\t\tcontrolKey={controlKey}\n\t\t\t\t\tcontrol={control}\n\t\t\t\t\tcontrolProp={controlProp}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tonContextMenu={onContextMenu}\n\t\t\t\t\ttraitTypeKeys={traitTypeKeys}\n\t\t\t\t\tsupportsVariables={supportsVariables}\n\t\t\t\t/>\n\t\t\t)\n\t\t\tbreak\n\t\tcase ControlType.EventHandler:\n\t\tcase ControlType.ChangeHandler:\n\t\t\t// No row for event handlers\n\t\t\tbreak\n\t\tdefault:\n\t\t\tassertNever(control)\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{row}\n\t\t\t{description}\n\t\t</>\n\t)\n})\n", "import type { ModuleIdentifier } from \"@framerjs/shared\"\nimport { ModuleType, isExternalModuleIdentifier } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport type { VekterEngine } from \"document/VekterEngine.ts\"\nimport type { ExternalModuleNode } from \"document/models/CanvasTree/nodes/ExternalModuleNode.ts\"\n\nexport function getEditButtonTitle(\n\tengine: VekterEngine,\n\tmoduleIdentifier: ModuleIdentifier,\n\tisReadOnly: boolean,\n): string {\n\tlet moduleType: string | undefined\n\n\tif (isExternalModuleIdentifier(moduleIdentifier)) {\n\t\tconst externalModuleNode = engine.tree.getNode<ExternalModuleNode>(moduleIdentifier.moduleId)\n\t\tmoduleType = externalModuleNode?.type\n\t} else {\n\t\tmoduleType = moduleIdentifier.type\n\t}\n\n\tconst action = isReadOnly ? Dictionary.View : Dictionary.Edit\n\n\tif (moduleType === ModuleType.LayoutTemplate || moduleType === ModuleType.Vector) {\n\t\treturn action\n\t}\n\n\tconst type = moduleType === ModuleType.Code ? Dictionary.Code : Dictionary.Component\n\treturn `${action} ${type}`\n}\n", "import \"EmbedPropertyControls.styles_6goaxr.wyw.css\"; export const container = \"container_c1603cea\";\nexport const scroll = \"scroll_sb8he9y\";\nexport const rowsContent = \"rowsContent_rqntnkt\";\nexport const hintScrollContent = \"hintScrollContent_hfp61a\";\nexport const footer = \"footer_f11spjyr\";\nexport const footerButton = \"footerButton_fo6c3vc\";\nexport const hintContents = \"hintContents_hmacpbp\";\nexport const icon = \"icon_i18nbbmj\";\nexport const hintText = \"hintText_h1jpjdla\";\nexport const heading = \"heading_h169caec\";\nexport const description = \"description_dmc88yj\";\nexport const learnMoreLink = \"learnMoreLink_l3u1wg6\";\nexport const divider = \"divider_dowepe2\";", "import type { ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport { assert, unhandledError } from \"@framerjs/shared\"\nimport type { HiddenState } from \"canvas-sandbox/ControlsVisibility.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { ControlProps } from \"document/models/controlProps/ControlProp.ts\"\nimport { useEffect, useState } from \"react\"\nimport type { Serializable } from \"utils/rpc/types.ts\"\n\nexport function useHiddenStateForModule(identifier: ModuleExportIdentifierString, moduleProps: ControlProps) {\n\tconst engine = useBaseEngine()\n\tconst [hiddenState, setHiddenState] = useState<HiddenState>({})\n\n\tuseEffect(() => {\n\t\tlet isLatestEffect = true\n\n\t\tasync function run() {\n\t\t\tconst controlsVisibility = engine.getControlsVisibility()\n\t\t\tassert(controlsVisibility, \"Controls visibility not available\")\n\n\t\t\tconst hiddenState = await controlsVisibility.getHiddenStateForModuleControls({\n\t\t\t\tmoduleIdentifier: identifier,\n\t\t\t\tmoduleProps: moduleProps as unknown as Record<string, Serializable>,\n\t\t\t})\n\n\t\t\tif (isLatestEffect) {\n\t\t\t\tsetHiddenState(hiddenState)\n\t\t\t}\n\t\t}\n\n\t\trun().catch(error => {\n\t\t\tunhandledError(error)\n\n\t\t\tif (isLatestEffect) {\n\t\t\t\tsetHiddenState({})\n\t\t\t}\n\t\t})\n\n\t\treturn () => {\n\t\t\tisLatestEffect = false\n\t\t}\n\t}, [identifier, moduleProps])\n\n\treturn hiddenState\n}\n", "import type { Size } from \"@framerjs/framer-services\"\nimport type { ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport { isExternalModuleIdentifier, isLocalModuleIdentifier, parseModuleIdentifier } from \"@framerjs/shared\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { EngineContext, useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { ExternalModuleNode } from \"document/models/CanvasTree/nodes/ExternalModuleNode.ts\"\nimport type { ControlProps } from \"document/models/controlProps/ControlProp.ts\"\nimport { useDeprecatedEngineState } from \"document/useDeprecatedEngineState.ts\"\nimport { isEqual } from \"library/index.ts\"\nimport { ModuleWidth } from \"prosemirror/schema/module.ts\"\nimport type React from \"react\"\nimport { useCallback, useLayoutEffect, useRef, useState } from \"react\"\nimport { createRoot } from \"react-dom/client\"\nimport type { TimeoutId } from \"utils/TimeoutId.ts\"\nimport { isShallowEqual } from \"utils/isShallowEqual.ts\"\nimport { isNumber, isString } from \"utils/typeChecks.ts\"\nimport { ComponentPreviewWrapper, type GeneratedComponentContext } from \"../preview/ModulePreviewWrapper.tsx\"\nimport { moveElementWithHierarchyFallback } from \"./moveElementWithHierarchyFallback.ts\"\nimport { useFramerSiteId } from \"./useFramerSiteId.tsx\"\n\nconst CLEANUP_TIMEOUT = 60_000\n\ndeclare global {\n\tinterface HTMLElement {\n\t\tmoveBefore?(node: HTMLElement, reference: Node | null): void\n\t}\n}\n\ntype ModuleProps = Record<string, unknown>\n\ninterface Props {\n\tmoduleIdentifier: ModuleExportIdentifierString\n\tcontrolProps: ControlProps\n\tmoduleWidth: ModuleWidth\n\tgeneratedComponentContext?: GeneratedComponentContext\n}\n\nfunction ModulePreviewIframe({ moduleIdentifier, controlProps, moduleWidth, generatedComponentContext }: Props) {\n\tconst framerSiteId = useFramerSiteId()\n\n\tconst intrinsicSize = useIntrinsicSize(moduleIdentifier)\n\tconst [componentSize, setComponentSize] = useState<Size | undefined>()\n\n\tconst onChangeComponentSize = useCallback((size: Size | undefined) => {\n\t\tsetComponentSize(currentComponentSize => {\n\t\t\tif (!currentComponentSize) {\n\t\t\t\treturn size\n\t\t\t} else if (!size) {\n\t\t\t\treturn currentComponentSize\n\t\t\t}\n\n\t\t\tconst currentHeight = currentComponentSize.height\n\t\t\tconst currentWidth = currentComponentSize.width\n\n\t\t\t// Only set the componentSize if it is actually different, to prevent rerender loop\n\t\t\t// Safari on iPhone caused issues where each calculation would increase/decrease by 1 pixel causing a constant flickering resize\n\t\t\tconst marginOfError = 1\n\t\t\tif (\n\t\t\t\tsize.height < currentHeight - marginOfError ||\n\t\t\t\tsize.height > currentHeight + marginOfError ||\n\t\t\t\tsize.width < currentWidth - marginOfError ||\n\t\t\t\tsize.width > currentWidth + marginOfError\n\t\t\t) {\n\t\t\t\treturn size\n\t\t\t}\n\n\t\t\treturn currentComponentSize\n\t\t})\n\t}, [])\n\n\t// Prefer the latest measurement for Fit so the iframe tracks responsive changes;\n\t// fall back to intrinsic metadata only until the iframe reports a size.\n\tconst fitSize = componentSize ?? intrinsicSize\n\tconst fitStyle: React.CSSProperties | undefined = fitSize && {\n\t\twidth: `${fitSize.width}px`,\n\t\theight: `${fitSize.height}px`,\n\t}\n\n\t// For Fill, never set width, it it defaults to 100% in blocks.\n\t// Before measurements, use height from metadata as a best guess heuristic,\n\t// even though text wrapping, fixed ratio, etc. may change the final height given the fill width.\n\tconst fillStyle: React.CSSProperties | undefined = componentSize\n\t\t? {\n\t\t\t\taspectRatio: `${componentSize.width} / ${componentSize.height}`,\n\t\t\t\theight: \"auto\",\n\t\t\t}\n\t\t: {\n\t\t\t\theight: intrinsicSize ? `${intrinsicSize.height}px` : undefined,\n\t\t\t}\n\n\tconst style = moduleWidth === ModuleWidth.Fit ? fitStyle : fillStyle\n\n\tif (!framerSiteId) return null\n\n\tconst wrapperStyle: React.CSSProperties | undefined =\n\t\tmoduleWidth === ModuleWidth.Fit && fitSize\n\t\t\t? {\n\t\t\t\t\twidth: `${fitSize.width}px`,\n\t\t\t\t\theight: `${fitSize.height}px`,\n\t\t\t\t\tmaxWidth: \"100%\",\n\t\t\t\t\tdisplay: \"inline-block\",\n\t\t\t\t\tverticalAlign: \"top\",\n\t\t\t\t}\n\t\t\t: undefined\n\n\treturn (\n\t\t<div style={wrapperStyle}>\n\t\t\t<ComponentPreviewWrapper\n\t\t\t\tframerSiteId={framerSiteId}\n\t\t\t\tmoduleIdentifier={moduleIdentifier}\n\t\t\t\tcontrolProps={controlProps}\n\t\t\t\tstyle={style}\n\t\t\t\tblockEvents\n\t\t\t\tlayout=\"cms\"\n\t\t\t\tonChangeComponentSize={onChangeComponentSize}\n\t\t\t\toverlay\n\t\t\t\tmoduleWidth={moduleWidth}\n\t\t\t\tgeneratedComponentContext={generatedComponentContext}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n\nexport function ModulePreview({\n\tmoduleIdentifier,\n\tcontrolProps,\n\tmoduleWidth,\n\tcleanupListeners,\n\tgeneratedComponentContext,\n}: Props & { cleanupListeners: Set<() => void> }) {\n\tconst engine = useBaseEngine()\n\tconst placeholderRef = useRef<HTMLDivElement>(null)\n\n\tuseLayoutEffect(() => {\n\t\tconst placeholder = placeholderRef.current\n\t\tif (!placeholder) return\n\t\tlet needsCleanup = true\n\t\tconst preview = modulePreviewCache.getPreview(moduleIdentifier)\n\t\tcleanupListeners.add(cleanup)\n\n\t\tpreview.move(placeholder)\n\t\tpreview.render(controlProps, moduleWidth, engine, generatedComponentContext)\n\n\t\tfunction cleanup() {\n\t\t\t// By doing that we avoid calling cleanup multiple times if the component is unmounted\n\t\t\tif (!needsCleanup) return\n\t\t\tneedsCleanup = false\n\t\t\tmodulePreviewCache.releasePreview(preview)\n\t\t\tcleanupListeners.delete(cleanup)\n\t\t}\n\n\t\treturn cleanup\n\t}, [moduleIdentifier, controlProps, moduleWidth, generatedComponentContext])\n\n\treturn <div ref={placeholderRef} />\n}\n\n/**\n * This class is used to cache the module previews. The reason for this is that we want to avoid iframe re-renders when the module identifier is the same under mainly two circumstances:\n * 1. CMS rich text editor operations (eg. pasting, cuting, moving etc.)\n * 2. On Page Canvas operations like loading etc...\n *\n * It is used to avoid creating a new preview for the same module identifier.\n * It is also used to cleanup the preview after a certain amount of time.\n * You have more info and a diagram of the module preview cache in this TLDRAW link:\n * https://www.tldraw.com/f/mK1uNWbh_33n7-4WFOBMR?d=v-3399.-3652.16995.8863.page\n */\nclass CachedModulePreview {\n\tprivate readonly container = document.createElement(\"div\")\n\tprivate readonly reactRoot = createRoot(this.container)\n\n\tprivate get parent() {\n\t\treturn this.container.parentElement\n\t}\n\n\tprivate controlProps: ControlProps | undefined\n\tprivate moduleWidth: ModuleWidth | undefined\n\tprivate generatedComponentContext: GeneratedComponentContext | undefined\n\n\tconstructor(readonly moduleIdentifier: ModuleExportIdentifierString) {\n\t\tdocument.body.appendChild(this.container)\n\t\tthis.hide()\n\t}\n\n\tprivate show() {\n\t\tthis.container.style.position = \"unset\"\n\t\tthis.container.style.width = \"unset\"\n\t\tthis.container.style.height = \"unset\"\n\t\tthis.container.style.top = \"unset\"\n\t\tthis.container.style.left = \"unset\"\n\t\tthis.container.style.opacity = \"unset\"\n\t}\n\n\tprivate hide() {\n\t\tthis.container.style.position = \"absolute\"\n\t\tthis.container.style.width = \"0\"\n\t\tthis.container.style.height = \"0\"\n\t\tthis.container.style.top = \"0\"\n\t\tthis.container.style.left = \"0\"\n\t\tthis.container.style.opacity = \"0\"\n\t}\n\n\tmove(parent: HTMLElement) {\n\t\tif (this.parent === parent) return\n\n\t\tmoveElementWithHierarchyFallback(parent, this.container)\n\n\t\tif (parent === document.body) {\n\t\t\tthis.hide()\n\t\t} else {\n\t\t\tthis.show()\n\t\t}\n\t}\n\n\trender(\n\t\tcontrolProps: ControlProps,\n\t\tmoduleWidth: ModuleWidth,\n\t\tengine: BaseEngine,\n\t\tgeneratedComponentContext?: GeneratedComponentContext,\n\t) {\n\t\tif (\n\t\t\tisShallowEqual(this.controlProps, controlProps) &&\n\t\t\tthis.moduleWidth === moduleWidth &&\n\t\t\tisEqual(this.generatedComponentContext, generatedComponentContext)\n\t\t) {\n\t\t\treturn\n\t\t}\n\t\tthis.controlProps = controlProps\n\t\tthis.moduleWidth = moduleWidth\n\t\tthis.generatedComponentContext = generatedComponentContext\n\n\t\tthis.reactRoot.render(\n\t\t\t<EngineContext.Provider value={engine}>\n\t\t\t\t<ModulePreviewIframe\n\t\t\t\t\tmoduleIdentifier={this.moduleIdentifier}\n\t\t\t\t\tcontrolProps={this.controlProps}\n\t\t\t\t\tmoduleWidth={this.moduleWidth}\n\t\t\t\t\tgeneratedComponentContext={this.generatedComponentContext}\n\t\t\t\t/>\n\t\t\t</EngineContext.Provider>,\n\t\t)\n\t}\n\n\tdestroy() {\n\t\tthis.reactRoot.unmount()\n\t}\n}\n\nclass ModulePreviewCache {\n\treadonly cachedPreviews = new Set<CachedModulePreview>()\n\tprivate readonly cleanupTimeouts = new WeakMap<CachedModulePreview, TimeoutId>()\n\n\tgetPreview(moduleIdentifier: ModuleExportIdentifierString) {\n\t\tfor (const preview of this.cachedPreviews) {\n\t\t\tif (preview.moduleIdentifier !== moduleIdentifier) continue\n\n\t\t\tthis.removePreviewFromCache(preview)\n\n\t\t\treturn preview\n\t\t}\n\n\t\treturn new CachedModulePreview(moduleIdentifier)\n\t}\n\n\tprivate removePreviewFromCache(preview: CachedModulePreview) {\n\t\tconst timeout = this.cleanupTimeouts.get(preview)\n\t\tif (timeout) clearTimeout(timeout)\n\t\tthis.cachedPreviews.delete(preview)\n\t}\n\n\treleasePreview(preview: CachedModulePreview) {\n\t\tif (this.cachedPreviews.has(preview)) return\n\n\t\tpreview.move(document.body)\n\t\tthis.cachedPreviews.add(preview)\n\n\t\tconst timeout = setTimeout(() => {\n\t\t\tpreview.destroy()\n\t\t\tthis.cachedPreviews.delete(preview)\n\t\t}, CLEANUP_TIMEOUT)\n\n\t\tthis.cleanupTimeouts.set(preview, timeout)\n\t}\n}\n\nconst modulePreviewCache = new ModulePreviewCache()\n\nfunction useIntrinsicSize(moduleIdentifier: ModuleExportIdentifierString | undefined): Size | undefined {\n\tconst engine = useBaseEngine()\n\n\treturn useDeprecatedEngineState(\n\t\t[engine.stores.modulesStore, EngineChange.Tree],\n\t\t() => {\n\t\t\tconst parsedIdentifier = isString(moduleIdentifier) ? parseModuleIdentifier(moduleIdentifier) : moduleIdentifier\n\t\t\tif (!parsedIdentifier) return\n\t\t\tlet intrinsicWidth: number | undefined\n\t\t\tlet intrinsicHeight: number | undefined\n\t\t\tif (isExternalModuleIdentifier(parsedIdentifier)) {\n\t\t\t\tconst node = engine.tree.getNode<ExternalModuleNode>(parsedIdentifier.moduleId)\n\t\t\t\tif (node) {\n\t\t\t\t\tintrinsicWidth = node.intrinsicWidth\n\t\t\t\t\tintrinsicHeight = node.intrinsicHeight\n\t\t\t\t}\n\t\t\t} else if (isLocalModuleIdentifier(parsedIdentifier)) {\n\t\t\t\tconst persistedModule = engine.stores.modulesStore.getPersistedModuleByLocalId(parsedIdentifier.localId)\n\t\t\t\tif (persistedModule) {\n\t\t\t\t\tintrinsicWidth = isNumber(persistedModule.metadata.intrinsicWidth)\n\t\t\t\t\t\t? persistedModule.metadata.intrinsicWidth\n\t\t\t\t\t\t: undefined\n\n\t\t\t\t\tintrinsicHeight = isNumber(persistedModule.metadata.intrinsicHeight)\n\t\t\t\t\t\t? persistedModule.metadata.intrinsicHeight\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\twidth: intrinsicWidth || 200,\n\t\t\t\theight: intrinsicHeight || 200,\n\t\t\t}\n\t\t},\n\t\t[moduleIdentifier],\n\t)\n}\n", "export function moveElementWithHierarchyFallback(parent: HTMLElement, element: HTMLElement) {\n\tif (parent.moveBefore) {\n\t\ttry {\n\t\t\tparent.moveBefore(element, null)\n\t\t\treturn\n\t\t} catch (error) {\n\t\t\t// Keep `moveBefore` for state-preserving moves, but degrade to append when Chromium rejects the move.\n\t\t\tif (!isHierarchyRequestError(error)) throw error\n\t\t}\n\t}\n\n\tparent.appendChild(element)\n}\n\nfunction isHierarchyRequestError(error: unknown): boolean {\n\treturn error instanceof DOMException && error.name === \"HierarchyRequestError\"\n}\n", "import { isEditorBar } from \"@framerjs/shared\"\nimport { useAndAssertVekterEngine } from \"document/useVekterEngine.ts\"\nimport { useAndAssertOnPageEngine } from \"editorbar/engine/useOnPageEngine.ts\"\n\nfunction useVekterFramerSiteId() {\n\tconst engine = useAndAssertVekterEngine()\n\treturn engine.stores.previewStore.useState(state => state.framerSiteId)\n}\nfunction useOnPageFramerSiteId() {\n\tconst engine = useAndAssertOnPageEngine()\n\treturn engine.siteId\n}\n\nexport const useFramerSiteId = isEditorBar() ? useOnPageFramerSiteId : useVekterFramerSiteId\n", "import type { ThemeOverrideMode } from \"@framerjs/fresco\"\nimport { assert, type ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { ControlProps } from \"document/models/controlProps/ControlProp.ts\"\nimport type { EditorView, NodeViewConstructor } from \"prosemirror-view\"\nimport { type FramerProseMirrorSchema, schemaSupportsEmbeds } from \"prosemirror/schema/index.ts\"\nimport type { ModuleNode } from \"prosemirror/schema/module.ts\"\nimport type { GeneratedComponentContext } from \"../preview/ModulePreviewWrapper.tsx\"\nimport type { ControlPropRowContext } from \"../properties/codeComponentRows/ControlPropRowContext.tsx\"\nimport type { PopoutButtonProps } from \"../shared/PopoutButton.tsx\"\nimport { CodeBlockView, isCodeBlockIdentifier } from \"./CodeBlockView/CodeBlockView.tsx\"\nimport { ModulePreviewView } from \"./ModulePreviewView.tsx\"\n\nexport type ComponentPresets = Record<ModuleExportIdentifierString, ControlProps>\n\nexport function getModuleNodeViewConstructor(\n\tengine: BaseEngine,\n\tschema: FramerProseMirrorSchema,\n\tsaveChanges: VoidFunction | undefined,\n\tcontrolPropRows: ControlPropRowContext,\n\tcomponentPresetsRef: React.MutableRefObject<ComponentPresets | undefined>,\n\tgeneratedComponentContextRef: React.MutableRefObject<GeneratedComponentContext>,\n\tgetThemeOverrideMode: () => ThemeOverrideMode | undefined,\n\tpopoverAttachmentEdge: PopoutButtonProps[\"popoverAttachmentEdge\"] | undefined,\n\tfallbackToModalAppearance: PopoutButtonProps[\"fallbackToModalAppearance\"] | undefined,\n\tenabledChangeListeners: Set<VoidFunction>,\n\tdarkModeChangeListeners: Set<VoidFunction>,\n\tcomponentPresetsChangeListeners: Set<(presets: ComponentPresets) => void>,\n\tgeneratedComponentContextChangeListeners: Set<(generatedComponentContext: GeneratedComponentContext) => void>,\n\tthemeOverrideModeChangeListeners: Set<VoidFunction>,\n\tmodulePreviewCleanupListeners: Set<VoidFunction>,\n): NodeViewConstructor {\n\treturn (node: ModuleNode, editorView: EditorView, getPosition: () => number) => {\n\t\tassert(schemaSupportsEmbeds(schema), \"getModuleNodeViewConstructor: Schema must support embeds\")\n\n\t\tfunction onModuleChange() {\n\t\t\tsaveChanges?.()\n\t\t}\n\n\t\tif (isCodeBlockIdentifier(node.attrs.identifier)) {\n\t\t\treturn new CodeBlockView(\n\t\t\t\tengine,\n\t\t\t\tschema,\n\t\t\t\tnode,\n\t\t\t\teditorView,\n\t\t\t\tgetPosition,\n\t\t\t\tcomponentPresetsRef.current,\n\t\t\t\tenabledChangeListeners,\n\t\t\t\tdarkModeChangeListeners,\n\t\t\t\tcomponentPresetsChangeListeners,\n\t\t\t)\n\t\t}\n\n\t\treturn new ModulePreviewView(\n\t\t\tengine,\n\t\t\tschema,\n\t\t\tnode,\n\t\t\teditorView,\n\t\t\tgetPosition,\n\t\t\tonModuleChange,\n\t\t\tcontrolPropRows,\n\t\t\tcomponentPresetsRef.current,\n\t\t\tgeneratedComponentContextRef.current,\n\t\t\tgetThemeOverrideMode,\n\t\t\tpopoverAttachmentEdge,\n\t\t\tfallbackToModalAppearance,\n\t\t\tenabledChangeListeners,\n\t\t\tcomponentPresetsChangeListeners,\n\t\t\tgeneratedComponentContextChangeListeners,\n\t\t\tthemeOverrideModeChangeListeners,\n\t\t\tmodulePreviewCleanupListeners,\n\t\t)\n\t}\n}\n\nexport type GetModuleNodeViewConstructor = typeof getModuleNodeViewConstructor\n", "import \"CollectionRichTextVariableEditor.styles_t1xwq5.wyw.css\"; export const editor = \"editor_e1pmgt77\";", "import { isEditorBar } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { type BaseEngine, useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { BaseRichTextEditTool } from \"document/base-engine/BaseRichTextEditTool.ts\"\nimport type { LoadedScopeNode, RichTextNode } from \"document/models/CanvasTree/index.ts\"\nimport { useTokenCSSProperties } from \"document/models/CanvasTree/utils/useTokenCSSProperties.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { useAndAssertVekterEngine } from \"document/useVekterEngine.ts\"\nimport { ActiveMainView } from \"document/utils/ActiveEditorType.ts\"\nimport type { RenderId } from \"document/utils/RenderId.ts\"\nimport { getLayoutDirectionValue } from \"document/utils/getLayoutDirectionValue.ts\"\nimport { useAndAssertOnPageEngine } from \"editorbar/engine/useOnPageEngine.ts\"\nimport { CustomProperties } from \"library/index.ts\"\nimport type { EditorView } from \"prosemirror-view\"\nimport type React from \"react\"\nimport { useCallback, useEffect } from \"react\"\nimport {\n\tgetStylePresetBreakpointClassNamesForGroundNode,\n\tuseStylePresetBreakpoints,\n} from \"renderer/utils/getStylePresetBreakpointClassNames.ts\"\nimport * as styles from \"./RichTextEditor.styles.ts\"\nimport { autoSelectText, getDragOutsideStyle, useContainerStyle, useNodeRect } from \"./editorUtils.tsx\"\n\ndeclare global {\n\tinterface CaretPosition {\n\t\treadonly offsetNode: Node\n\t\treadonly offset: number\n\t\tgetClientRect(): DOMRect\n\t}\n\n\tinterface Range {\n\t\texpand?(unit: \"character\" | \"word\" | \"sentence\" | \"textedit\"): void\n\t}\n}\n\ninterface RichTextEditorProps {\n\ttool: BaseRichTextEditTool\n\tscopeNode: LoadedScopeNode\n\tnode: RichTextNode\n\trenderId: RenderId\n\teditorView: EditorView\n\tzoom: number\n\thandleMouseDown?(event: React.MouseEvent): unknown\n\thandleOutsideClick?(event: React.MouseEvent): unknown\n\tstyle?: React.CSSProperties\n}\n\nexport function RichTextEditor({\n\ttool,\n\tscopeNode,\n\tnode,\n\trenderId,\n\teditorView,\n\tzoom,\n\thandleMouseDown,\n\thandleOutsideClick,\n\tstyle,\n}: RichTextEditorProps) {\n\tconst engine = useBaseEngine()\n\tconst tokens = useTokenCSSProperties()\n\tconst groundNode = engine.tree.getGroundNodeFor(node)\n\tconst stylePresetBreakpoints = useStylePresetBreakpoints(engine.tree)\n\tconst breakpointClassNames = getStylePresetBreakpointClassNamesForGroundNode(stylePresetBreakpoints, groundNode)\n\tconst layoutDirection = useDirectionAttributeForEditor(engine)\n\n\tconst rect = useNodeRect(node, renderId)\n\n\tconst containerRef = useCallback(\n\t\t(domNode: HTMLDivElement | null) => {\n\t\t\tconst editorNode = editorView.dom\n\n\t\t\teditorNode.parentNode?.removeChild(editorNode)\n\t\t\tdomNode?.appendChild(editorNode)\n\t\t},\n\t\t[editorView],\n\t)\n\n\t// Hide the node after we mount the editor so we avoid a white flicker.\n\tuseEffect(() => {\n\t\tengine.scheduler.processWhenReady(() => {\n\t\t\tengine.stores.toolStore.nodeInTextEditorId = renderId\n\t\t})\n\t}, [renderId])\n\n\tuseEffect(() => {\n\t\tautoSelectText(engine, editorView.dom, tool.eventSource)\n\t}, [tool, editorView])\n\n\tconst dragOutsideStyle = getDragOutsideStyle(zoom)\n\tconst containerStyle = useContainerStyle({ scopeNode, node, rect, zoom, hasValidationWarning: false })\n\n\treturn (\n\t\t<CustomProperties customProperties={tokens}>\n\t\t\t<div className={breakpointClassNames} style={dragOutsideStyle} onMouseDown={handleOutsideClick}>\n\t\t\t\t<div\n\t\t\t\t\tref={containerRef}\n\t\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\t\tonFocus={tool.handleOnFocus}\n\t\t\t\t\tonBlur={tool.handleOnBlur}\n\t\t\t\t\tstyle={{ ...containerStyle, ...style }}\n\t\t\t\t\tdir={layoutDirection}\n\t\t\t\t\tclassName={cx(styles.richTextStyle, styles.editor)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</CustomProperties>\n\t)\n}\n\nfunction useDirectionAttributeForEditor(engine: BaseEngine) {\n\tconst localeId = useLocaleId()\n\n\treturn useEngineState(\n\t\t() => {\n\t\t\tconst direction = getLayoutDirectionValue(\n\t\t\t\tengine.tree.root.getLocale(localeId),\n\t\t\t\tengine.tree.root.adaptLayoutToTextDirection,\n\t\t\t)\n\n\t\t\t// we avoid explicitly setting \"ltr\" since it's the default value of \"dir\" attribute,\n\t\t\t// and because we do the same for html tag of a page, which we imitate here\n\t\t\treturn direction === \"rtl\" ? \"rtl\" : undefined\n\t\t},\n\t\t[localeId],\n\t\t[EngineChange.Tree],\n\t)\n}\n\nconst useLocaleId = isEditorBar() ? useLocaleIdOnPage : useLocaleIdVekter\n\nfunction useLocaleIdVekter() {\n\tconst engine = useAndAssertVekterEngine()\n\n\tconst localeId = useEngineState(\n\t\t() => {\n\t\t\treturn engine.stores.chromeStore.mainView === ActiveMainView.Localizations\n\t\t\t\t? engine.stores.localizationStore.selectedLocaleId\n\t\t\t\t: engine.stores.chromeStore.canvasLocaleId\n\t\t},\n\t\t[],\n\t\t[engine.stores.chromeStore, engine.stores.localizationStore],\n\t)\n\n\treturn localeId\n}\n\nfunction useLocaleIdOnPage() {\n\tconst engine = useAndAssertOnPageEngine()\n\n\treturn useEngineState(() => engine.stores.routeStore.localeId, [], engine.stores.routeStore)\n}\n", "import \"RichTextEditor.styles_1puw71x.wyw.css\"; export const richTextStyle = \"richTextStyle_rc3ak3a\";\nexport const editor = \"editor_ej8focl\";", "import { assert } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { LoadedScopeNode, RichTextNode } from \"document/models/CanvasTree/index.ts\"\nimport { useTokenCSSProperties } from \"document/models/CanvasTree/utils/useTokenCSSProperties.ts\"\nimport { useEngineCallback } from \"document/useEngineCallback.ts\"\nimport type { RenderId } from \"document/utils/RenderId.ts\"\nimport type { OnPageLocalizedStringEditTool } from \"editorbar/engine/tools/OnPageLocalizedStringEditTool.ts\"\nimport type { OnPageStringVariableEditTool } from \"editorbar/engine/tools/OnPageStringVariableEditTool.ts\"\nimport { CustomProperties } from \"library/index.ts\"\nimport type React from \"react\"\nimport { createElement, useCallback, useEffect, useMemo, useRef } from \"react\"\nimport * as ReactProps from \"react-property\"\nimport {\n\tgetStylePresetBreakpointClassNamesForGroundNode,\n\tuseStylePresetBreakpoints,\n} from \"renderer/utils/getStylePresetBreakpointClassNames.ts\"\nimport { parseHTML } from \"utils/parseHTML.ts\"\nimport { parseStyleToJS } from \"utils/parseStyleToJS.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport type { StringVariableEditTool } from \"../tools/StringVariableEditTool.ts\"\nimport { richTextStyle } from \"./RichTextEditor.styles.ts\"\nimport * as styles from \"./StringEditor.styles.ts\"\nimport { autoSelectText, getDragOutsideStyle, useContainerStyle, useNodeRect } from \"./editorUtils.tsx\"\n\ninterface StringEditorProps {\n\ttool: StringVariableEditTool | OnPageStringVariableEditTool | OnPageLocalizedStringEditTool\n\tscopeNode: LoadedScopeNode\n\tnode: RichTextNode\n\trenderId: RenderId\n\tzoom: number\n\tonMouseDown?(event: React.MouseEvent): void\n\tonClickOutside?(event: React.MouseEvent): void\n\thasValidationWarning?: boolean\n\tstyle?: React.CSSProperties\n}\n\nexport function StringEditor({\n\ttool,\n\tscopeNode,\n\tnode,\n\trenderId,\n\tzoom,\n\tonMouseDown,\n\tonClickOutside,\n\thasValidationWarning,\n\tstyle,\n}: StringEditorProps) {\n\tconst engine = useBaseEngine()\n\n\tconst tokens = useTokenCSSProperties()\n\n\tconst groundNode = engine.tree.getGroundNodeFor(node)\n\tconst stylePresetBreakpoints = useStylePresetBreakpoints(engine.tree)\n\tconst breakpointClassNames = getStylePresetBreakpointClassNamesForGroundNode(stylePresetBreakpoints, groundNode)\n\n\tconst rect = useNodeRect(node, renderId)\n\n\tconst dragOutsideStyle = getDragOutsideStyle(zoom)\n\n\tconst containerStyle = useContainerStyle({ scopeNode, node, rect, zoom, hasValidationWarning })\n\n\t// Hide the node after we mount the editor so we avoid a white flicker.\n\tuseEffect(() => {\n\t\tengine.scheduler.processWhenReady(() => {\n\t\t\tengine.stores.toolStore.nodeInTextEditorId = renderId\n\t\t})\n\t}, [renderId])\n\n\tconst children = useMemo(() => {\n\t\tconst container = parseHTML(node.html)\n\n\t\tfunction getReactNode(element: HTMLElement): React.ReactNode {\n\t\t\tconst tag = element.tagName.toLowerCase()\n\t\t\tconst props = getReactProps(element.attributes)\n\n\t\t\tif (element.firstChild instanceof HTMLElement) {\n\t\t\t\tconst child = getReactNode(element.firstChild)\n\t\t\t\treturn createElement(tag, props, child)\n\t\t\t}\n\n\t\t\treturn <ContentEditable tool={tool} tag={tag} props={props} />\n\t\t}\n\n\t\tassert(container.firstChild instanceof HTMLElement)\n\t\treturn getReactNode(container.firstChild)\n\t}, [tool, node])\n\n\t// We can't use a textarea because it's not possible to style each line separately. This is\n\t// needed for inline code and background gradients to work as expected.\n\treturn (\n\t\t<CustomProperties customProperties={tokens}>\n\t\t\t<div style={dragOutsideStyle} className={breakpointClassNames} onMouseDown={onClickOutside}>\n\t\t\t\t<div style={{ ...containerStyle, ...style }} className={richTextStyle} onMouseDown={onMouseDown}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</CustomProperties>\n\t)\n}\n\ninterface ContentEditableProps {\n\ttool: StringVariableEditTool | OnPageStringVariableEditTool | OnPageLocalizedStringEditTool\n\ttag: string\n\tprops: Record<string, unknown>\n}\n\nfunction ContentEditable({ tool, tag, props }: ContentEditableProps) {\n\tconst editorRef = useRef<HTMLDivElement>(null)\n\tconst engine = useBaseEngine()\n\n\tconst handleBeforeInput = useCallback(\n\t\t(event: InputEvent) => {\n\t\t\tif (event.isComposing) return\n\t\t\tif (tool.supportsMultiline) return\n\n\t\t\t// https://w3c.github.io/input-events/#interface-InputEvent-Attributes\n\t\t\tif (event.inputType !== \"insertLineBreak\" && event.inputType !== \"insertParagraph\") return\n\n\t\t\tevent.preventDefault()\n\t\t},\n\t\t[tool],\n\t)\n\n\tconst handleInput = useEngineCallback(\n\t\t(event: React.FormEvent<HTMLElement>) => {\n\t\t\ttool.changeValue(event.currentTarget.innerText)\n\t\t},\n\t\t[tool],\n\t)\n\n\tconst handleKeyDown = useEngineCallback((event: React.KeyboardEvent<HTMLElement>) => {\n\t\tif (event.key === \"Escape\") {\n\t\t\tengine.exitTool()\n\t\t}\n\t}, [])\n\n\tuseEffect(() => {\n\t\tconst editor = editorRef.current\n\t\tassert(editor, \"Editor must exist\")\n\n\t\tconst value = tool.getValue()\n\t\tassert(isString(value), \"Value must be a string\")\n\n\t\teditor.innerText = value\n\t\tautoSelectText(engine, editor, tool.eventSource)\n\t}, [tool])\n\n\tuseEffect(() => {\n\t\tconst editor = editorRef.current\n\t\tassert(editor, \"Editor must exist\")\n\n\t\t// The `onInputEvent` property from React doesn't expose the native `beforeinput` event. So\n\t\t// we have to manually attach our event listener to the editor.\n\t\t// https://github.com/facebook/react/issues/11211\n\t\teditor.addEventListener(\"beforeinput\", handleBeforeInput)\n\n\t\treturn () => {\n\t\t\teditor.removeEventListener(\"beforeinput\", handleBeforeInput)\n\t\t}\n\t}, [handleBeforeInput])\n\n\t// This can be any element but to make TypeScript happy we have to cast it.\n\tconst Element = tag as \"div\"\n\n\treturn (\n\t\t<Element\n\t\t\t{...props}\n\t\t\tref={editorRef}\n\t\t\tclassName={cx(isString(props.className) && props.className, styles.editor)}\n\t\t\tcontentEditable=\"plaintext-only\"\n\t\t\tonInput={handleInput}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t/>\n\t)\n}\n\nfunction getReactProps(attributes: NamedNodeMap) {\n\tconst props: Record<string, unknown> = {}\n\n\tfor (const { name, value } of attributes) {\n\t\tconst propName = ReactProps.possibleStandardNames[name] ?? name\n\t\tconst propInfo = ReactProps.getPropertyInfo(propName)\n\n\t\tif (propInfo) {\n\t\t\tif (propInfo.type === ReactProps.BOOLEAN) {\n\t\t\t\tprops[propName] = true\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (propInfo.type === ReactProps.OVERLOADED_BOOLEAN && value === \"\") {\n\t\t\t\tprops[propName] = true\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif (propName === \"style\") {\n\t\t\tprops[propName] = parseStyleToJS(value)\n\t\t} else {\n\t\t\tprops[propName] = value\n\t\t}\n\t}\n\n\treturn props\n}\n", "import \"StringEditor.styles_62zx00.wyw.css\"; export const editor = \"editor_enbuct8\";", "import type { GeneratedComponentContext } from \"../preview/ModulePreviewWrapper.tsx\"\nimport type { PopoutButtonProps } from \"../shared/PopoutButton.tsx\"\nimport type { InsertButtonPopoverOptions, RichTextEditorWithToolbarProps } from \"./RichTextEditorWithToolbar.tsx\"\nimport { RichTextEditorWithToolbar } from \"./RichTextEditorWithToolbar.tsx\"\nimport { getModuleNodeViewConstructor } from \"./getModuleNodeViewConstructor.ts\"\n\ntype InheritedRichTextEditorProps = Pick<\n\tRichTextEditorWithToolbarProps,\n\t| \"className\"\n\t| \"variant\"\n\t| \"compactTagSelector\"\n\t| \"value\"\n\t| \"defaultValue\"\n\t| \"enabled\"\n\t| \"scopeType\"\n\t| \"onChange\"\n\t| \"onUnsavedChange\"\n\t| \"getCanFocus\"\n\t| \"schema\"\n\t| \"supportedTags\"\n\t| \"leftToolbarSlot\"\n\t| \"rightToolbarSlot\"\n\t| \"headerClassName\"\n\t| \"textEditorWrapperClassName\"\n\t| \"hideNonInformativeToolbarItems\"\n\t| \"saveOnMetaArrowNavigation\"\n\t| \"layoutDirection\"\n>\n\ninterface Props extends InheritedRichTextEditorProps {\n\tpopoverAttachmentEdge?: PopoutButtonProps[\"popoverAttachmentEdge\"]\n\tfallbackToModalAppearance?: PopoutButtonProps[\"fallbackToModalAppearance\"]\n\tinsertButtonPopoverOptions?: InsertButtonPopoverOptions\n\tgeneratedComponentContext?: GeneratedComponentContext\n}\n\nexport function RichTextEditorWithToolbarAndNodeViews({\n\tclassName,\n\tvalue,\n\tdefaultValue,\n\tenabled,\n\tvariant,\n\tscopeType,\n\tonChange,\n\tonUnsavedChange,\n\tgetCanFocus,\n\tcompactTagSelector,\n\tpopoverAttachmentEdge,\n\tfallbackToModalAppearance,\n\tinsertButtonPopoverOptions,\n\tgeneratedComponentContext,\n\tleftToolbarSlot,\n\trightToolbarSlot,\n\tschema,\n\tsupportedTags,\n\theaderClassName,\n\ttextEditorWrapperClassName,\n\thideNonInformativeToolbarItems,\n\tsaveOnMetaArrowNavigation,\n\tlayoutDirection,\n}: Props) {\n\treturn (\n\t\t<RichTextEditorWithToolbar\n\t\t\tclassName={className}\n\t\t\tvalue={value}\n\t\t\tdefaultValue={defaultValue}\n\t\t\tenabled={enabled}\n\t\t\tvariant={variant}\n\t\t\tonChange={onChange}\n\t\t\tscopeType={scopeType}\n\t\t\tonUnsavedChange={onUnsavedChange}\n\t\t\tgetCanFocus={getCanFocus}\n\t\t\tcompactTagSelector={compactTagSelector}\n\t\t\tschema={schema}\n\t\t\tsupportedTags={supportedTags}\n\t\t\tleftToolbarSlot={leftToolbarSlot}\n\t\t\trightToolbarSlot={rightToolbarSlot}\n\t\t\theaderClassName={headerClassName}\n\t\t\ttextEditorWrapperClassName={textEditorWrapperClassName}\n\t\t\thideNonInformativeToolbarItems={hideNonInformativeToolbarItems}\n\t\t\tsaveOnMetaArrowNavigation={saveOnMetaArrowNavigation}\n\t\t\tpopoverAttachmentEdge={popoverAttachmentEdge}\n\t\t\tfallbackToModalAppearance={fallbackToModalAppearance}\n\t\t\tinsertButtonPopoverOptions={insertButtonPopoverOptions}\n\t\t\tgetModuleNodeViewConstructor={getModuleNodeViewConstructor}\n\t\t\tgeneratedComponentContext={generatedComponentContext}\n\t\t\tlayoutDirection={layoutDirection}\n\t\t/>\n\t)\n}\n", "import \"LargePanelRow.styles_1deedxe.wyw.css\"; export const largeControlRow = \"largeControlRow_lso1duq\";\nexport const largeControlRowTitle = \"largeControlRowTitle_l39bf4m\";\nexport const largeControlRowTitleInsetMobile = \"largeControlRowTitleInsetMobile_l7tr0k5\";\nexport const largeControlRowTitleDivider = \"largeControlRowTitleDivider_l79v3nf\";\nexport const largeControlRowTitleReadOnly = \"largeControlRowTitleReadOnly_l1l5sssc\";\nexport const collectionInputFontSize = \"collectionInputFontSize_c1e4wssz\";\nexport const collectionInputPaddingInline = \"collectionInputPaddingInline_czbl35c\";\nexport const collectionInputTextOffsetPaddingLeft = \"collectionInputTextOffsetPaddingLeft_c15ogidf\";\nexport const collectionImageWrapperPaddingBlock = \"collectionImageWrapperPaddingBlock_c1uvd312\";\nexport const collectionInputMessageHeight = \"collectionInputMessageHeight_coe8i7n\";\nexport const collectionInputHeightLegacy = \"collectionInputHeightLegacy_cd65kt2\";\nexport const description = \"description_d1qmemby\";\nexport const overlayInputTextOffsetLeft = \"overlayInputTextOffsetLeft_o1aqh12j\";\nexport const descriptionPlain = \"descriptionPlain_dteeu6s\";\nexport const descriptionSpacingAfter = \"descriptionSpacingAfter_du9cfa2\";\nexport const warningMessagePlain = \"warningMessagePlain_w1x0jagq\";", "const PROTOCOL_REGEX = /^https?:\\/\\//\nconst WWW_REGEX = /^www\\./\nconst TRAILING_SLASH_REGEX = /\\/+$/\n\nexport function formatCanonicalUrlForDisplay(url: string): string {\n\treturn url.replace(PROTOCOL_REGEX, \"\").replace(WWW_REGEX, \"\").replace(TRAILING_SLASH_REGEX, \"\")\n}\n", "import { openNewTab } from \"@framerjs/app-shared\"\nimport { Button, InputMessage } from \"@framerjs/fresco\"\nimport { isEditorBar } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { hostnamePlaceholder } from \"document/components/chrome/siteSettings/metadataPlaceholders.ts\"\nimport { formatCanonicalUrlForDisplay } from \"document/components/utils/formatCanonicalUrlForDisplay.ts\"\nimport { getWebPagePath } from \"document/components/utils/getWebPagePath.ts\"\nimport type { AnyWebPageNode, CollectionNode } from \"document/models/CanvasTree/index.ts\"\nimport { defaultLocaleId } from \"document/models/CanvasTree/traits/WithLocales.ts\"\nimport type { SlugVariableDefinition } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport { useAndAssertVekterEngine } from \"document/useVekterEngine.ts\"\nimport { slugify } from \"library/utils/slugify.ts\"\nimport { useMemo } from \"react\"\nimport { collectionInputMessageHeight } from \"./LargePanelRow.styles.ts\"\nimport * as styles from \"./SlugPreviewLink.styles.ts\"\n\nconst PROTOCOL_REGEX = /^https?:\\/\\//u\n\nexport function SlugPreviewLink({\n\tassociatedWebPageNode,\n\tclickable,\n\tcollectionNode,\n\tslug,\n\tvariable,\n}: {\n\tassociatedWebPageNode: AnyWebPageNode | undefined\n\tclickable: boolean\n\tcollectionNode: CollectionNode\n\tslug: string\n\tvariable: SlugVariableDefinition\n}) {\n\tconst { url, isFallback } = useURLPreview({\n\t\tassociatedWebPageNode,\n\t\tcollectionNode,\n\t\tvariable,\n\t\tslug,\n\t})\n\n\treturn (\n\t\t<Button\n\t\t\ttabIndex={-1}\n\t\t\tclassName={cx(styles.slugButton, collectionInputMessageHeight)}\n\t\t\tvariant=\"link\"\n\t\t\tenabled={clickable && !isFallback}\n\t\t\tonClick={() => openNewTab(url.startsWith(\"http\") ? url : `https://${url}`)}\n\t\t\tstyle={{ width: \"100%\" }}\n\t\t>\n\t\t\t<InputMessage type=\"globe\" title={url.replace(PROTOCOL_REGEX, \"\")} />\n\t\t</Button>\n\t)\n}\n\nfunction fallbackURLPreview(collection: CollectionNode, slug: string): string {\n\tlet value = hostnamePlaceholder\n\tconst name = collection.resolveValue(\"name\")\n\tif (name) value += \"/\" + slugify(name)\n\tvalue += \"/\" + slug\n\treturn value\n}\n\nfunction useURLPreview({\n\tassociatedWebPageNode,\n\tcollectionNode,\n\tvariable,\n\tslug,\n}: {\n\tassociatedWebPageNode: AnyWebPageNode | undefined\n\tcollectionNode: CollectionNode\n\tvariable: SlugVariableDefinition\n\tslug: string\n}): { url: string; isFallback: boolean } {\n\tconst engine = useBaseEngine()\n\n\tconst { defaultHostnameString, customHostnameString } = engine.stores.hostnameStore.useState()\n\n\tconst fallback = () => ({\n\t\turl: fallbackURLPreview(collectionNode, slug),\n\t\tisFallback: true,\n\t})\n\n\tconst hostBase = useHostBase(customHostnameString || defaultHostnameString)\n\n\tif (!hostBase || !associatedWebPageNode) {\n\t\treturn fallback()\n\t}\n\n\tconst pagePath = getWebPagePath(engine.tree, associatedWebPageNode, defaultLocaleId, { [variable.id]: slug }, true)\n\n\tif (!pagePath) {\n\t\treturn fallback()\n\t}\n\n\treturn {\n\t\turl: hostBase + pagePath,\n\t\tisFallback: false,\n\t}\n}\n\nconst useHostBase = isEditorBar() ? useOnPageHostBase : useVekterHostBase\n\nfunction useVekterHostBase(originalHostname: string | undefined) {\n\tconst engine = useAndAssertVekterEngine()\n\tconst { canonicalURL } = engine.stores.publishStore.useState()\n\tconst showCanonicalUrl = useExperimentIsOn(\"showCanonicalUrlAsDefault\")\n\n\treturn useMemo(() => {\n\t\tif (!showCanonicalUrl || canonicalURL.type !== \"custom\") {\n\t\t\treturn originalHostname\n\t\t}\n\n\t\tconst hasProtocol = originalHostname?.startsWith(\"http\")\n\t\treturn hasProtocol ? canonicalURL.url : formatCanonicalUrlForDisplay(canonicalURL.url)\n\t}, [showCanonicalUrl, canonicalURL, originalHostname])\n}\n\n/**\n * TODO: support canonical URLs in OnPageHostnameStore\n *       for this, we need to load the {@link import(\"@framerjs/app-config\").ProjectSettingsFeatureFlags}, which\n *       requires extra API calls. Then in {@link OnPageHostnameStore} we need to implement an equivalent to\n *       {@link PublishStore.canonicalURL}.\n */\n// eslint-disable-next-line @eslint-react/hooks-extra/no-unnecessary-use-prefix, @eslint-react/hooks-extra/no-redundant-custom-hook\nfunction useOnPageHostBase(originalHostname: string | undefined) {\n\treturn originalHostname\n}\n", "import \"SlugPreviewLink.styles_p2wdc0.wyw.css\"; export const slugButton = \"slugButton_s93imxl\";", "import { InputMessage, Stack, ThemeOverride } from \"@framerjs/fresco\"\nimport { type HTMLProps, type PropsWithChildren, memo } from \"react\"\n\nexport type WithWarningTintAndMessageProps = PropsWithChildren<{\n\twarningVisible?: boolean\n\twarningMessage?: string\n\twarningMessageClassName?: string\n\tshowWarningTint?: boolean\n\ttruncateWarningMessage?: boolean\n\tafterWarningMessage?: React.ReactNode\n\tgap?: number\n}> &\n\tPick<HTMLProps<HTMLDivElement>, \"aria-labelledby\" | \"className\" | \"role\">\n\nexport const WithWarningTintAndMessage = memo(function WithWarningTintAndMessage({\n\twarningVisible = true,\n\twarningMessage,\n\twarningMessageClassName,\n\tshowWarningTint,\n\tchildren,\n\tafterWarningMessage,\n\ttruncateWarningMessage = true,\n\t...rest\n}: WithWarningTintAndMessageProps) {\n\tconst showWarningMessage = warningVisible && warningMessage\n\n\treturn (\n\t\t<ThemeOverride mode={showWarningMessage || showWarningTint ? \"warning\" : undefined}>\n\t\t\t<Stack direction=\"column\" {...rest}>\n\t\t\t\t{children}\n\t\t\t\t{showWarningMessage && (\n\t\t\t\t\t<InputMessage\n\t\t\t\t\t\ttype=\"warning\"\n\t\t\t\t\t\ttitle={warningMessage}\n\t\t\t\t\t\ttruncate={truncateWarningMessage}\n\t\t\t\t\t\tclassName={warningMessageClassName}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{afterWarningMessage}\n\t\t\t</Stack>\n\t\t</ThemeOverride>\n\t)\n})\n", "import { WithWarningTintAndMessage } from \"document/components/chrome/shared/WithWarningTintAndMessage.tsx\"\nimport { type PropsWithChildren, useId } from \"react\"\nimport * as styles from \"./OnPageControlRow.styles.ts\"\n\nexport function OnPageControlRow({\n\tchildren,\n\ttitle,\n\twarningMessage,\n\tshowWarningTint,\n}: PropsWithChildren<{\n\ttitle: string\n\twarningMessage: string | undefined\n\tshowWarningTint?: boolean\n}>) {\n\tconst titleId = useId()\n\n\treturn (\n\t\t<WithWarningTintAndMessage\n\t\t\tclassName={styles.controlRow}\n\t\t\ttruncateWarningMessage={false}\n\t\t\twarningMessage={warningMessage}\n\t\t\tshowWarningTint={showWarningTint}\n\t\t\t// biome-ignore lint/a11y/useSemanticElements: not worth it as the fieldset element needs risky CSS changes\n\t\t\trole=\"group\"\n\t\t\taria-labelledby={titleId}\n\t\t>\n\t\t\t<span className={styles.controlRowTitle} id={titleId}>\n\t\t\t\t{title}\n\t\t\t</span>\n\t\t\t{children}\n\t\t</WithWarningTintAndMessage>\n\t)\n}\n", "import \"OnPageControlRow.styles_p1jjo1.wyw.css\"; export const controlRow = \"controlRow_c4yyols\";\nexport const controlRowTitle = \"controlRowTitle_cd5ztge\";", "import { TextInput } from \"@framerjs/fresco\"\nimport { assert } from \"@framerjs/shared\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport { getRouteSegmentNodeByWebPageId } from \"document/components/chrome/Pages/utils/getRouteSegmentNodeByWebPageId.ts\"\nimport { collectionInputHeightLegacy } from \"document/components/chrome/contentManagement/LargePanelRow.styles.ts\"\nimport { SlugPreviewLink } from \"document/components/chrome/contentManagement/SlugPreviewLink.tsx\"\nimport type { AnyWebPageNode, CollectionItemNode, CollectionNode, NodeID } from \"document/models/CanvasTree/index.ts\"\nimport {\n\tisCollectionNode,\n\tisRouteSegmentNode,\n\tisWebPageNode,\n} from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport type { SlugVariableDefinition, VariableID } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport type { CollectionControlProp } from \"document/models/controlProps/CollectionControlProp.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport type { OnPageEngine } from \"editorbar/engine/OnPageEngine.ts\"\nimport { useAndAssertOnPageEngine } from \"editorbar/engine/useOnPageEngine.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { slugify } from \"library/utils/slugify.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { OnPageControlRow } from \"./OnPageControlRow.tsx\"\n\nexport function getDefaultSlug(variable: SlugVariableDefinition, collectionItem: CollectionItemNode): string {\n\tconst associatedStringVariableId = variable.associatedStringVariable\n\tconst associatedString = associatedStringVariableId ? collectionItem.getControlProp(associatedStringVariableId) : null\n\treturn associatedString && isString(associatedString.value) ? slugify(associatedString.value) : \"\"\n}\n\nexport function OnPageSlugRow({\n\tassociatedVariableString,\n\tcollectionNode,\n\tcontrolProp,\n\tonChange,\n\tvariable,\n\twarningMessage,\n}: {\n\tassociatedVariableString: string | undefined\n\tcollectionNode: CollectionNode\n\tcontrolProp: CollectionControlProp | undefined\n\tonChange: (variableId: VariableID, newControlProp: CollectionControlProp) => void\n\tvariable: SlugVariableDefinition\n\twarningMessage: string | undefined\n}) {\n\tconst engine = useAndAssertOnPageEngine()\n\tlet value = \"\"\n\tconst defaultSlug = associatedVariableString ? slugify(associatedVariableString) : \"\"\n\n\tif (controlProp) {\n\t\tassert(controlProp.type === ControlType.String, \"Unexpected control type\")\n\t\tassert(isString(controlProp.value), \"A slug control prop can't be a DynamicValue\")\n\t\tvalue = slugify(controlProp.value)\n\t}\n\n\tconst associatedWebPageNode = useEngineState(\n\t\t() => getDetailPageNode(engine, collectionNode.id),\n\t\t[collectionNode.id],\n\t\t[EngineChange.Tree],\n\t)\n\n\treturn (\n\t\t<OnPageControlRow title=\"Slug\" warningMessage={warningMessage}>\n\t\t\t<TextInput\n\t\t\t\tconstantChange\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(newValue: string) => {\n\t\t\t\t\tonChange(variable.id, {\n\t\t\t\t\t\ttype: ControlType.String,\n\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t})\n\t\t\t\t}}\n\t\t\t\tplaceholder={value ? \"\" : defaultSlug}\n\t\t\t\tclassName={collectionInputHeightLegacy}\n\t\t\t/>\n\t\t\t{!!associatedWebPageNode?.dataIdentifier && (\n\t\t\t\t<SlugPreviewLink\n\t\t\t\t\tassociatedWebPageNode={associatedWebPageNode}\n\t\t\t\t\tclickable={false}\n\t\t\t\t\tcollectionNode={collectionNode}\n\t\t\t\t\tslug={value || defaultSlug}\n\t\t\t\t\tvariable={variable}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</OnPageControlRow>\n\t)\n}\n\nfunction getDetailPageNode(engine: OnPageEngine, collectionNodeId: NodeID): AnyWebPageNode | null {\n\tconst currentPageNodeId = engine.stores.routeStore.webPageNodeId\n\tconst currentPageNode = engine.stores.treeStore.tree.getNodeWithTrait(currentPageNodeId, isWebPageNode)\n\n\tif (!currentPageNode) return null\n\n\tconst collectionNode = engine.stores.treeStore.tree.getNodeWithTrait(collectionNodeId, isCollectionNode)\n\tassert(collectionNode, \"Collection node must exist\")\n\n\tif (currentPageNode.dataIdentifier === collectionNode.instanceIdentifier) return currentPageNode\n\n\t// See if there is a detail page associated with the current page\n\tconst routeSegmentNodeForCurrentPage = getRouteSegmentNodeByWebPageId(engine.tree, currentPageNode.id)\n\tif (!routeSegmentNodeForCurrentPage) return null\n\n\tfor (const segment of routeSegmentNodeForCurrentPage.walk()) {\n\t\tif (!isRouteSegmentNode(segment) || !segment.webPageId) continue\n\n\t\tif (segment.dataIdentifier === collectionNode.instanceIdentifier) {\n\t\t\treturn engine.tree.getNodeWithTrait(segment.webPageId, isWebPageNode)\n\t\t}\n\t}\n\n\treturn null\n}\n", "import { useEffect, useRef } from \"react\"\n\nexport function useOnClickOutside(ref: React.RefObject<HTMLElement>, handler: (event: MouseEvent) => void) {\n\tconst latestHandler = useRef(handler)\n\tlatestHandler.current = handler\n\n\tuseEffect(() => {\n\t\tfunction handleClick(event: MouseEvent) {\n\t\t\tif (ref.current && !ref.current.contains(event.target as Node)) {\n\t\t\t\tlatestHandler.current(event)\n\t\t\t}\n\t\t}\n\n\t\tdocument.addEventListener(\"mousedown\", handleClick)\n\t\tdocument.addEventListener(\"touchstart\", handleClick)\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"mousedown\", handleClick)\n\t\t\tdocument.removeEventListener(\"touchstart\", handleClick)\n\t\t}\n\t}, [ref])\n}\n", "import type { AssetSize } from \"@framerjs/assets\"\nimport { updateAssetReferencePreferredSize } from \"@framerjs/assets\"\nimport { unhandledError } from \"@framerjs/shared\"\nimport type { BaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { Locale } from \"document/models/CanvasTree/traits/WithLocales.ts\"\nimport type { LocalizedTextValue, NonNullLocalizedValue } from \"document/models/LocalizedValue.ts\"\nimport { isNonNullLocalizedValue } from \"document/models/LocalizedValue.ts\"\nimport { createAssetReferenceForUploadImageResult } from \"document/utils/createAssetReferenceFromImageUpload.ts\"\nimport type { RelativeNumber } from \"library/render/types/RelativeNumber.ts\"\nimport { useCallback } from \"react\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport type { ImageUploadResultWithOptionalAssetSize } from \"web/pages/project/lib/UploadService.ts\"\nimport type { ImageLocalizationSource, LocalizationSource } from \"./getLocalizationSources.ts\"\nimport { isImageSource } from \"./getLocalizationSources.ts\"\nimport { getLocalizedFallback } from \"./getLocalizedFallback.ts\"\nimport type { LocalizedValueTrackingSource } from \"./updateLocalizedValue.ts\"\nimport { clearLocalizedValue, setLocalizedValue } from \"./updateLocalizedValue.ts\"\n\nfunction getImageLocalizedValueWithoutFallback(\n\tactiveLocale: Locale,\n\tsource: ImageLocalizationSource,\n): NonNullLocalizedValue<LocalizedTextValue> | undefined {\n\tconst localizedValue = source.imageLocalizedValues[activeLocale.id]\n\treturn isNonNullLocalizedValue(localizedValue) ? localizedValue : undefined\n}\n\nfunction getImageLocalizedFallback(\n\tsource: ImageLocalizationSource,\n\tactiveLocale: Locale,\n\tlocales: readonly Locale[],\n\tlocalizedImage: NonNullLocalizedValue<LocalizedTextValue> | undefined,\n): NonNullLocalizedValue<LocalizedTextValue> | undefined {\n\t// The image is already localized so we aren't interested in an inherited value\n\tif (localizedImage) return\n\treturn getLocalizedFallback(source, activeLocale, locales, \"imageSrc\")\n}\n\ninterface ImageLocalizedProperties {\n\toriginalImageValue: string | undefined\n\timageValue: string | undefined\n\timageFallback: string | undefined\n\thandleImageUpload: (imageUpload: Promise<ImageUploadResultWithOptionalAssetSize[]>) => void\n\tupdateAssetSize: (size: AssetSize) => void\n\tclearImage: () => void\n\timageSupportsFocalPoint: boolean\n\toriginalImagePositionX: RelativeNumber | undefined\n\toriginalImagePositionY: RelativeNumber | undefined\n\timagePositionX: RelativeNumber | undefined\n\timagePositionY: RelativeNumber | undefined\n\thandleFocalPointChange: (focalPointX: RelativeNumber | undefined, focalPointY: RelativeNumber | undefined) => void\n}\n\nexport function useLocalizedImageEditingState(\n\tengine: BaseEngine,\n\tsource: LocalizationSource,\n\tactiveLocale: Locale,\n\tlocales: readonly Locale[],\n\ttrackingSource: LocalizedValueTrackingSource,\n): ImageLocalizedProperties {\n\tconst isImage = isImageSource(source)\n\tconst localizedImage = isImage ? getImageLocalizedValueWithoutFallback(activeLocale, source) : undefined\n\tconst localizedImageFallback = isImage\n\t\t? getImageLocalizedFallback(source, activeLocale, locales, localizedImage)\n\t\t: undefined\n\tconst localizedImageOrFallback = localizedImage ?? localizedImageFallback\n\n\tconst originalImageValue = isImage ? source.image : undefined\n\tconst originalImagePositionX = isImage ? source.positionX : undefined\n\tconst originalImagePositionY = isImage ? source.positionY : undefined\n\n\tconst imageValue = isString(localizedImage?.value) ? localizedImage.value : undefined\n\tconst imageFallback = isString(localizedImageFallback?.value) ? localizedImageFallback.value : originalImageValue\n\tconst imagePositionX = localizedImageOrFallback\n\t\t? localizedImageOrFallback.imageFocalPoint?.positionX\n\t\t: originalImagePositionX\n\tconst imagePositionY = localizedImageOrFallback\n\t\t? localizedImageOrFallback.imageFocalPoint?.positionY\n\t\t: originalImagePositionY\n\tconst imageSupportsFocalPoint = isImage ? source.supportsFocalPoint : false\n\n\tconst handleImageUpload = useCallback(\n\t\t(imageUpload: Promise<ImageUploadResultWithOptionalAssetSize[]>) => {\n\t\t\timageUpload\n\t\t\t\t.then(([image]) => {\n\t\t\t\t\tif (!image || !image.filename) return null\n\n\t\t\t\t\tconst assetReference = createAssetReferenceForUploadImageResult(image, image.preferredSize)\n\n\t\t\t\t\tsetLocalizedValue(engine, assetReference, source, activeLocale, {\n\t\t\t\t\t\ttarget: \"imageSrc\",\n\t\t\t\t\t\ttrackingSource,\n\t\t\t\t\t\t// Reset focal point when new image is uploaded\n\t\t\t\t\t\timageFocalPoint: undefined,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(unhandledError)\n\t\t},\n\t\t[activeLocale, engine, source, trackingSource],\n\t)\n\n\tconst handleFocalPointChange = useCallback(\n\t\t(positionX: RelativeNumber | undefined, positionY: RelativeNumber | undefined) => {\n\t\t\tconst currentValue = imageValue ?? imageFallback\n\t\t\tif (!isString(currentValue)) return\n\t\t\tconst newImageFocalPoint = positionX && positionY ? { positionX, positionY } : undefined\n\t\t\tsetLocalizedValue(engine, currentValue, source, activeLocale, {\n\t\t\t\ttarget: \"imageSrc\",\n\t\t\t\ttrackingSource,\n\t\t\t\timageFocalPoint: newImageFocalPoint,\n\t\t\t})\n\t\t},\n\t\t[activeLocale, engine, imageFallback, imageValue, source, trackingSource],\n\t)\n\n\tconst updateAssetSize = useCallback(\n\t\t(size: AssetSize) => {\n\t\t\tconst currentValue = imageValue ?? imageFallback\n\t\t\tif (!isString(currentValue)) return\n\t\t\tconst assetReference = updateAssetReferencePreferredSize(currentValue, size)\n\t\t\tsetLocalizedValue(engine, assetReference, source, activeLocale, {\n\t\t\t\ttarget: \"imageSrc\",\n\t\t\t\ttrackingSource,\n\t\t\t})\n\t\t},\n\t\t[activeLocale, engine, imageFallback, imageValue, source, trackingSource],\n\t)\n\n\tconst clearImage = useCallback(() => {\n\t\tclearLocalizedValue(engine, source, activeLocale, { target: \"imageSrc\", trackingSource })\n\t}, [activeLocale, engine, source, trackingSource])\n\n\treturn {\n\t\toriginalImageValue,\n\t\timageValue,\n\t\timageFallback,\n\t\thandleImageUpload,\n\t\tupdateAssetSize,\n\t\tclearImage,\n\t\timageSupportsFocalPoint,\n\t\toriginalImagePositionX,\n\t\toriginalImagePositionY,\n\t\timagePositionX,\n\t\timagePositionY,\n\t\thandleFocalPointChange,\n\t}\n}\n", "import { unhandledError } from \"@framerjs/shared\"\nimport type { GetHiddenStateForControlsByNodeArgs, HiddenStateByNodeId } from \"canvas-sandbox/ControlsVisibility.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { isEqual } from \"library/index.ts\"\nimport React from \"react\"\n\nconst emptyHiddenState: HiddenStateByNodeId = Object.freeze({})\n\n/**\n * Fetches the per-control `hidden` state for the given node ids from the\n * sandbox via RPC, since the `hidden(props)` predicate lives in the sandbox\n * iframe (host-side property controls are serialized and have `hidden`\n * stripped out).\n *\n * Works against whichever engine is in `EngineContext` (or the global\n * `VekterEngine` singleton fallback), so it can be used from chrome property\n * panels and from on-page editing UI alike.\n */\nexport function useControlHiddenState(nodeIds: readonly NodeID[]): HiddenStateByNodeId {\n\tconst engine = useBaseEngine()\n\tconst [hiddenState, setHiddenState] = React.useState<HiddenStateByNodeId>(emptyHiddenState)\n\n\t// No deps: re-fetch every render. `cancelled` drops stale RPC responses\n\t// when nodeIds change while a fetch is in flight.\n\tReact.useEffect(() => {\n\t\tlet cancelled = false\n\n\t\tconst fetchHiddenByNodeId = async () => {\n\t\t\ttry {\n\t\t\t\tconst controlsVisibility = engine.getControlsVisibility()\n\t\t\t\tif (!controlsVisibility) {\n\t\t\t\t\t// Sandbox is reloading/reconnecting. Clear to the empty\n\t\t\t\t\t// map so we don't keep applying stale `hidden` flags from\n\t\t\t\t\t// a previous render and hide the wrong controls.\n\t\t\t\t\tsetHiddenState(current => (isEqual(current, emptyHiddenState) ? current : emptyHiddenState))\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst args: GetHiddenStateForControlsByNodeArgs = {}\n\t\t\t\tfor (const id of nodeIds) {\n\t\t\t\t\targs[id] = {}\n\t\t\t\t}\n\n\t\t\t\tconst newHiddenState = await controlsVisibility.getHiddenStateForControlsByNode(args)\n\t\t\t\tif (cancelled) return\n\n\t\t\t\tsetHiddenState(current => (isEqual(current, newHiddenState) ? current : newHiddenState))\n\t\t\t} catch (error) {\n\t\t\t\tif (cancelled) return\n\t\t\t\tunhandledError(error)\n\t\t\t\tsetHiddenState(current => (isEqual(current, emptyHiddenState) ? current : emptyHiddenState))\n\t\t\t}\n\t\t}\n\t\tvoid fetchHiddenByNodeId()\n\n\t\treturn () => {\n\t\t\tcancelled = true\n\t\t}\n\t})\n\n\treturn hiddenState\n}\n", "import type { SerializedVerifiedControlDescription } from \"@framerjs/framer-runtime\"\nimport type { HiddenStateByNodeId } from \"canvas-sandbox/ControlsVisibility.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { isBoolean } from \"utils/typeChecks.ts\"\nimport { isHiddenRow } from \"./isHiddenRow.tsx\"\n\n/**\n * Decides whether a code-component property-control row should be hidden.\n *\n * Static `hidden: true` is bypassed for dynamic vector instances so users\n * can still edit those rows. Function-based `hidden(props)` is resolved in\n * the sandbox and looked up via `hiddenState`.\n */\nexport function shouldHideControlRow(\n\tcontrol: SerializedVerifiedControlDescription,\n\tcontrolKey: string,\n\tnodeIds: NodeID[],\n\thasDynamicVectorInstance: boolean,\n\thiddenState: HiddenStateByNodeId | undefined,\n): boolean {\n\tif (isBoolean(control.hidden)) {\n\t\treturn control.hidden && !hasDynamicVectorInstance\n\t}\n\treturn isHiddenRow(controlKey, nodeIds, hiddenState)\n}\n", "import \"LargeBooleanInputRows.styles_19bwj66.wyw.css\"; export const segmentedControlItem = \"segmentedControlItem_sl4q073\";\nexport const inputHeight = \"inputHeight_i1j96idx\";\nexport const toggleRowPlain = \"toggleRowPlain_t10wb1rz\";", "import type { VerifiedArrayControlDescription } from \"@framerjs/framer-runtime\"\nimport { assert } from \"@framerjs/shared\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { isReadonlyArray } from \"utils/typeChecks.ts\"\nimport { NotFound } from \"../CanvasTree/traits/utils/Reduced.ts\"\nimport type { ControlProp, StaticArrayControlPropValue } from \"./ControlProp.ts\"\nimport { getArrayControlPropValue } from \"./getControlProps.ts\"\nimport type { ReducedArrayControlProp, ReducedArrayItemControlProp } from \"./getReducedControlProps.ts\"\nimport { reduceControlProp } from \"./getReducedControlProps.ts\"\n\nexport function getReducedStaticArrayControlValue(\n\tcontrol: VerifiedArrayControlDescription,\n\tvalue: StaticArrayControlPropValue,\n\tignoreMaxCount?: boolean,\n): readonly ReducedArrayItemControlProp[] {\n\tconst controlProp: ControlProp = {\n\t\ttype: ControlType.Array,\n\t\tvalue: getArrayControlPropValue(control, { type: ControlType.Array, value }, undefined, ignoreMaxCount),\n\t}\n\tassert(controlProp, \"`getControlProp` can't return `null` for valid array control description\")\n\tassert(controlProp.type === ControlType.Array, \"Control prop must be of type `Array`\")\n\tassert(isReadonlyArray(controlProp.value), \"Control prop value must be an array\")\n\n\tconst reducedControlProp: ReducedArrayControlProp = { type: ControlType.Array, value: NotFound }\n\treduceControlProp(reducedControlProp, controlProp, control)\n\n\tassert(isReadonlyArray(reducedControlProp.value), \"Reduced array must be array because we only reduce a single value\")\n\treturn reducedControlProp.value\n}\n", "import type { VerifiedArrayControlDescription } from \"@framerjs/framer-runtime\"\nimport { cx } from \"@linaria/core\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport { getMetricsInteractionSourceForScopeType } from \"document/components/utils/getMetricsInteractionSourceForScopeType.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport type { VariableID } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport type { CollectionArrayControlProp } from \"document/models/controlProps/CollectionControlProp.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport { isStaticArrayControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport { getReducedStaticArrayControlValue } from \"document/models/controlProps/getReducedStaticArrayControlValue.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { assert } from \"library/utils/assert.ts\"\nimport React, { useCallback, useMemo } from \"react\"\nimport { isReadonlyArray } from \"utils/typeChecks.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport { record } from \"web/lib/tracker.ts\"\nimport { GalleryInput } from \"./GalleryInput.tsx\"\nimport { collectionImageWrapperPaddingBlock, collectionInputTextOffsetPaddingLeft } from \"./LargePanelRow.styles.ts\"\nimport type { ContentManagementFieldVariant } from \"./fieldVariant.ts\"\nimport type { CollectionItemChangeHandler } from \"./utils/CollectionItemChangeHandler.ts\"\n\ninterface Props {\n\tcollectionId: NodeID\n\tcontrol: VerifiedArrayControlDescription\n\tcontrolProp: ControlProp | undefined\n\tfieldId: VariableID\n\titemId: NodeID\n\tonChange: (getUpdate: CollectionItemChangeHandler, fieldId: VariableID, id: NodeID) => void\n\trequired: boolean\n\tvariant: ContentManagementFieldVariant\n}\n\nexport const GalleryInputRow = React.memo(function GalleryInputRow({\n\tcollectionId,\n\tcontrol,\n\tfieldId,\n\tcontrolProp,\n\titemId,\n\tonChange,\n\tvariant,\n}: Props) {\n\tconst engine = useBaseEngine()\n\tassert(!controlProp || isStaticArrayControlProp(controlProp))\n\n\tconst currentItems = useMemo(() => {\n\t\tconst value = controlProp?.value ?? []\n\t\t// If the user has uploaded more items than the max we want to display the full array so\n\t\t// they can see all of their items and potentially remove some\n\t\tconst ignoreMaxCount = true\n\t\treturn getReducedStaticArrayControlValue(control, value, ignoreMaxCount)\n\t}, [controlProp, control])\n\n\tconst currentItemCount = currentItems.length\n\n\tconst updateItems = useCallback(\n\t\t(getUpdate: (current: CollectionArrayControlProp) => CollectionArrayControlProp) => {\n\t\t\tonChange(\n\t\t\t\t(currentControlProp: CollectionArrayControlProp | undefined) => {\n\t\t\t\t\tconst newControlProp = getUpdate({\n\t\t\t\t\t\ttype: ControlType.Array,\n\t\t\t\t\t\tvalue: currentControlProp?.value ?? [],\n\t\t\t\t\t})\n\t\t\t\t\tassert(isReadonlyArray(newControlProp.value))\n\n\t\t\t\t\tconst newItemCount = newControlProp.value.length\n\t\t\t\t\tconst itemCountIncreased = newItemCount > currentItemCount\n\t\t\t\t\tif (itemCountIncreased) {\n\t\t\t\t\t\trecord(\"collection_array_add\", {\n\t\t\t\t\t\t\titemCount: newItemCount,\n\t\t\t\t\t\t\tsource: getMetricsInteractionSourceForScopeType(engine.stores.scopeStore.scopeType),\n\t\t\t\t\t\t\tcollectionId,\n\t\t\t\t\t\t\tvariableId: fieldId,\n\t\t\t\t\t\t\tcollectionItemId: itemId,\n\t\t\t\t\t\t})\n\t\t\t\t\t\twarnIfOverSoftLimit(newItemCount)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn newControlProp\n\t\t\t\t},\n\t\t\t\tfieldId,\n\t\t\t\titemId,\n\t\t\t)\n\t\t},\n\t\t[fieldId, itemId, collectionId, currentItemCount, onChange],\n\t)\n\n\treturn (\n\t\t<GalleryInput\n\t\t\tvariant={variant}\n\t\t\tcontrol={control}\n\t\t\tvalue={currentItems}\n\t\t\tonChange={updateItems}\n\t\t\twrapperClassName={\n\t\t\t\tvariant === \"plain\" ? cx(collectionInputTextOffsetPaddingLeft, collectionImageWrapperPaddingBlock) : undefined\n\t\t\t}\n\t\t/>\n\t)\n})\n\nconst arrayVariableItemsSoftLimit = 100\n\nfunction warnIfOverSoftLimit(length: number) {\n\tif (length > arrayVariableItemsSoftLimit) {\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"warning\",\n\t\t\ttext: `Adding over ${arrayVariableItemsSoftLimit} images may affect performance`,\n\t\t\tkey: \"array-variable-items-soft-limit\",\n\t\t\ticon: \"warning\",\n\t\t\tduration: 5_000,\n\t\t})\n\t}\n}\n", "import { SegmentedControl, SegmentedControlItem, Stack, Toggle } from \"@framerjs/fresco\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { assert } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { VariableID } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport { getBooleanControlPropValue } from \"document/models/controlProps/getControlProps.ts\"\nimport type { BooleanControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport React from \"react\"\nimport { isNull } from \"utils/typeChecks.ts\"\nimport * as styles from \"./LargeBooleanInputRows.styles.ts\"\nimport { smallCollectionInput } from \"./LargeControlRow.styles.ts\"\nimport * as largePanelStyles from \"./LargePanelRow.styles.ts\"\nimport { collectionInputTextOffsetPaddingLeft } from \"./LargePanelRow.styles.ts\"\nimport type { ContentManagementFieldVariant } from \"./fieldVariant.ts\"\nimport { getUpdatedBooleanControlProp } from \"./utils/getUpdatedFieldControlProp.ts\"\n\nfunction getCurrentValue(\n\tcontrolProp: ControlProp | undefined,\n\tcontrol: BooleanControlDescription,\n): boolean | undefined {\n\tconst value = getBooleanControlPropValue(control, controlProp)\n\tassert(!isDynamicValue(value), \"Dynamic values are not supported within the CMS.\")\n\tassert(!isNull(value), \"Optional booleans are not supported within the CMS.\")\n\treturn value\n}\n\ninterface Props {\n\tcontrol: BooleanControlDescription\n\tcontrolProp: ControlProp | undefined\n\tdescription?: string\n\tfieldId: VariableID\n\titemId: NodeID\n\tonChange: (value: ControlProp, fieldId: VariableID, id: NodeID) => void\n\tvariant: ContentManagementFieldVariant\n}\n\nexport const BooleanInputRow = React.memo(function BooleanInputRow({\n\tcontrol,\n\tcontrolProp,\n\tdescription,\n\tfieldId,\n\titemId,\n\tonChange,\n\tvariant,\n}: Props) {\n\tconst value = getCurrentValue(controlProp, control)\n\n\tconst changeHandler = (newValue: boolean) => {\n\t\tonChange(getUpdatedBooleanControlProp(newValue), fieldId, itemId)\n\t}\n\n\tif (variant === \"plain\") {\n\t\treturn (\n\t\t\t<Stack\n\t\t\t\tgap={15}\n\t\t\t\tdirection=\"row\"\n\t\t\t\talignItems=\"flex-start\"\n\t\t\t\tclassName={cx(styles.toggleRowPlain, collectionInputTextOffsetPaddingLeft)}\n\t\t\t>\n\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={0} className={styles.inputHeight}>\n\t\t\t\t\t<Toggle small focusOutline value={value === true} onChange={changeHandler} />\n\t\t\t\t</Stack>\n\t\t\t\t{description && (\n\t\t\t\t\t<div className={cx(largePanelStyles.description, largePanelStyles.descriptionPlain)}>{description}</div>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t)\n\t}\n\n\treturn (\n\t\t<SegmentedControl large style={{ height: dimensions.css.inputHeightLarge }} className={smallCollectionInput}>\n\t\t\t<SegmentedControlItem\n\t\t\t\tidentifier\n\t\t\t\ttitle={control.enabledTitle || Dictionary.Yes}\n\t\t\t\tselected={value === true}\n\t\t\t\tonSelect={changeHandler}\n\t\t\t\tclassName={styles.segmentedControlItem}\n\t\t\t/>\n\t\t\t<SegmentedControlItem\n\t\t\t\tidentifier={false}\n\t\t\t\ttitle={control.disabledTitle || Dictionary.No}\n\t\t\t\tselected={value === false}\n\t\t\t\tonSelect={changeHandler}\n\t\t\t\tclassName={styles.segmentedControlItem}\n\t\t\t/>\n\t\t</SegmentedControl>\n\t)\n})\n", "import \"LargeControlRow.styles_152cpwa.wyw.css\"; export const squareButton = \"squareButton_s1x6lpc1\";\nexport const squareButtonGhostFocusOutline = \"squareButtonGhostFocusOutline_s1puvjlo\";\nexport const smallCollectionInput = \"smallCollectionInput_s1sippt9\";", "import type { InputVariant } from \"@framerjs/fresco\"\nimport type { AttachmentEdgePreferences } from \"@framerjs/fresco/src/components/Popover\"\nimport { assert } from \"@framerjs/shared\"\nimport { useDimensionValue } from \"app/agent/hooks/useDimensionValue.ts\"\nimport { useBaseEngine } from \"document/base-engine/BaseEngine.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { VariableID } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport { getColorControlPropValue } from \"document/models/controlProps/getControlProps.ts\"\nimport type { ColorControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport React from \"react\"\nimport type { ColorPickerPopoutProps } from \"../shared/ColorPicker/ColorPickerPopout.tsx\"\nimport { colorFillDisplayValue } from \"../shared/ColorPicker/utils.ts\"\nimport { PopoutButtonBackgroundPreview } from \"../shared/PopoutButtonBackgroundPreview.tsx\"\nimport { PopoutButtonWithPreview } from \"../shared/PopoutButtonWithPreview.tsx\"\nimport * as styles from \"./LargeColorAndLinkInputRow.styles.ts\"\nimport type { ContentManagementFieldVariant } from \"./fieldVariant.ts\"\nimport { getUpdatedColorControlProp } from \"./utils/getUpdatedFieldControlProp.ts\"\n\nfunction getCurrentValue(controlProp: ControlProp | undefined, control: ColorControlDescription): string {\n\tconst value = getColorControlPropValue(control, controlProp)\n\tassert(!isDynamicValue(value), \"Dynamic values are not supported within the CMS.\")\n\treturn value ?? \"\"\n}\n\ninterface Props {\n\tcontrol: ColorControlDescription\n\tcontrolProp: ControlProp | undefined\n\tfieldId: string\n\titemId: NodeID\n\tonChange: (value: ControlProp, fieldId: VariableID, id: NodeID) => void\n\tColorPickerPopoutComponent: React.ComponentType<ColorPickerPopoutProps>\n\tvariant: ContentManagementFieldVariant\n}\n\nconst popoverAttachmentEdge: AttachmentEdgePreferences = [\"left\", \"auto-vertical\"]\n\nexport const ColorInputRow = React.memo(function ColorInputRow({\n\tcontrol,\n\tcontrolProp,\n\tfieldId,\n\titemId,\n\tonChange,\n\tColorPickerPopoutComponent,\n\tvariant,\n}: Props) {\n\tconst isLarge = variant === \"legacy\"\n\tconst inputVariant: InputVariant = variant === \"plain\" ? \"ghost\" : \"default\"\n\n\tconst engine = useBaseEngine()\n\tconst value = getCurrentValue(controlProp, control)\n\n\tconst panelPadding = useDimensionValue(\"panelPadding\")\n\n\tconst changeHandler = (newValue: string) => {\n\t\tonChange(getUpdatedColorControlProp(newValue), fieldId, itemId)\n\t}\n\n\treturn (\n\t\t<PopoutButtonWithPreview\n\t\t\tlarge={isLarge}\n\t\t\tvariant={inputVariant}\n\t\t\tpreviewWithoutWrapper={variant === \"plain\"}\n\t\t\tdisplayInPopover\n\t\t\tpopoverAttachmentEdge={popoverAttachmentEdge}\n\t\t\tfallbackToModalAppearance\n\t\t\tnavigationTitle=\"Color\"\n\t\t\ttitle={colorFillDisplayValue(value, engine).title}\n\t\t\tclassName={styles.layout}\n\t\t\tpopout={<ColorPickerPopoutComponent value={value} onChange={changeHandler} />}\n\t\t\tpreview={\n\t\t\t\t<PopoutButtonBackgroundPreview large={isLarge} variant={inputVariant} shape=\"round\" background={value} />\n\t\t\t}\n\t\t\tpopoverOffset={{ x: panelPadding * 3, y: 0 }}\n\t\t/>\n\t)\n})\n", "import \"LargeColorAndLinkInputRow.styles_lx4y2r.wyw.css\"; export const layout = \"layout_l1louxtg\";", "import { DateInput, Stack, TimeInput, type InputVariant } from \"@framerjs/fresco\"\nimport { assert } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { VariableID } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport { getDateControlPropValue } from \"document/models/controlProps/getControlProps.ts\"\nimport type { DateControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport React from \"react\"\nimport { timeInputIconFix } from \"./DateInputRow.styles.ts\"\nimport { collectionInputFontSize, collectionInputHeightLegacy } from \"./LargePanelRow.styles.ts\"\nimport type { ContentManagementFieldVariant } from \"./fieldVariant.ts\"\nimport { getUpdatedDateControlProp } from \"./utils/getUpdatedFieldControlProp.ts\"\n\nfunction getCurrentValue(controlProp: ControlProp | undefined, control: DateControlDescription): string | undefined {\n\tconst value = getDateControlPropValue(control, controlProp)\n\tassert(!isDynamicValue(value), \"Dynamic values are not supported within the CMS.\")\n\treturn value\n}\n\ninterface Props {\n\tcontrol: DateControlDescription\n\tcontrolProp: ControlProp | undefined\n\tfieldId: VariableID\n\titemId: NodeID\n\trequired: boolean\n\tonChange: (value: ControlProp, fieldId: VariableID, id: NodeID) => void\n\tvariant: ContentManagementFieldVariant\n}\n\nexport const DateInputRow = React.memo(function DateInputRow({\n\tcontrol,\n\tcontrolProp,\n\tfieldId,\n\titemId,\n\trequired,\n\tonChange,\n\tvariant,\n}: Props) {\n\tconst isLegacy = variant === \"legacy\"\n\tconst isPlain = variant === \"plain\"\n\tconst inputVariant: InputVariant = isPlain ? \"ghost\" : \"default\"\n\n\tconst value = getCurrentValue(controlProp, control)\n\tconst displayTime = control.displayTime ?? false\n\n\tconst changeHandler = React.useCallback(\n\t\t(newValue: string) => {\n\t\t\tonChange(getUpdatedDateControlProp(newValue), fieldId, itemId)\n\t\t},\n\t\t[onChange, fieldId, itemId],\n\t)\n\n\treturn (\n\t\t<Stack direction=\"row\">\n\t\t\t<DateInput\n\t\t\t\tclassName={cx(isPlain && collectionInputFontSize, isLegacy && collectionInputHeightLegacy)}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={changeHandler}\n\t\t\t\trequired={required}\n\t\t\t\tvariant={inputVariant}\n\t\t\t/>\n\t\t\t{displayTime && (\n\t\t\t\t<TimeInput\n\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\tisPlain && collectionInputFontSize,\n\t\t\t\t\t\tisLegacy && collectionInputHeightLegacy,\n\t\t\t\t\t\tisLegacy && timeInputIconFix,\n\t\t\t\t\t)}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\trequired={required}\n\t\t\t\t\tvariant={inputVariant}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</Stack>\n\t)\n})\n", "import \"DateInputRow.styles_165xoyq.wyw.css\"; export const timeInputIconFix = \"timeInputIconFix_twu5bil\";", "import { PopupButton, PopupButtonItem, Stack } from \"@framerjs/fresco\"\nimport { assert } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { VariableID } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport { getEnumControlPropValue } from \"document/models/controlProps/getControlProps.ts\"\nimport type { EnumControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport React from \"react\"\nimport { fallbackTitleForOption } from \"utils/enumControlUtils.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport * as booleanRowStyles from \"./LargeBooleanInputRows.styles.ts\"\nimport * as styles from \"./LargeEnumInputRow.styles.ts\"\nimport { collectionInputTextOffsetPaddingLeft } from \"./LargePanelRow.styles.ts\"\nimport type { ContentManagementFieldVariant } from \"./fieldVariant.ts\"\nimport { getUpdatedEnumControlProp } from \"./utils/getUpdatedFieldControlProp.ts\"\n\nfunction getCurrentValue(controlProp: ControlProp | undefined, control: EnumControlDescription): string | undefined {\n\tconst value = getEnumControlPropValue(control, controlProp)\n\tassert(!isDynamicValue(value), \"Dynamic values are not supported within the CMS.\")\n\treturn isString(value) ? value : undefined\n}\n\ninterface Props {\n\tcontrol: EnumControlDescription\n\tcontrolProp: ControlProp | undefined\n\tfieldId: VariableID\n\titemId: NodeID\n\tvariant: ContentManagementFieldVariant\n\tonChange: (value: ControlProp, fieldId: VariableID, id: NodeID) => void\n}\n\nexport const EnumInputRow = React.memo(function EnumInputRow({\n\tcontrol,\n\tcontrolProp,\n\tfieldId,\n\titemId,\n\tonChange,\n\tvariant,\n}: Props) {\n\tconst value = getCurrentValue(controlProp, control)\n\n\tconst changeHandler = (newValue: string) => {\n\t\tonChange(getUpdatedEnumControlProp(newValue), fieldId, itemId)\n\t}\n\n\tif (variant === \"legacy\") {\n\t\treturn (\n\t\t\t<PopupButton\n\t\t\t\tlarge\n\t\t\t\tvariant=\"default\"\n\t\t\t\tclassName={styles.popupButtonLegacy}\n\t\t\t\t// The icon is aligned to the date input icon\n\t\t\t\tnudgeDropdownIconHorizontally={-4}\n\t\t\t>\n\t\t\t\t{control.options.map((option: string, idx: number) => (\n\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\tkey={option}\n\t\t\t\t\t\tidentifier={option}\n\t\t\t\t\t\ttitle={control.optionTitles?.[idx] ?? fallbackTitleForOption(option)}\n\t\t\t\t\t\tselected={value === option}\n\t\t\t\t\t\tonSelect={changeHandler}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</PopupButton>\n\t\t)\n\t}\n\n\treturn (\n\t\t<Stack\n\t\t\tgap={0}\n\t\t\tdirection=\"row\"\n\t\t\talignItems=\"center\"\n\t\t\tclassName={cx(booleanRowStyles.inputHeight, collectionInputTextOffsetPaddingLeft)}\n\t\t>\n\t\t\t<PopupButton aria-label={control.title} variant=\"pill\">\n\t\t\t\t{control.options.map((option: string, idx: number) => (\n\t\t\t\t\t<PopupButtonItem\n\t\t\t\t\t\tkey={option}\n\t\t\t\t\t\tidentifier={option}\n\t\t\t\t\t\ttitle={control.optionTitles?.[idx] ?? fallbackTitleForOption(option)}\n\t\t\t\t\t\tselected={value === option}\n\t\t\t\t\t\tonSelect={changeHandler}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</PopupButton>\n\t\t</Stack>\n\t)\n})\n", "import \"LargeEnumInputRow.styles_tnuw3u.wyw.css\"; export const popupButtonLegacy = \"popupButtonLegacy_p1xzt8sa\";", "import { createAssetReference, parseAssetReference } from \"@framerjs/assets\"\nimport {\n\tButton,\n\tCenterChild,\n\tIconInputClose,\n\tIconVariableFile,\n\tIconVariableFileLarge,\n\tLegacyIconVariableFile,\n\tInputMessage,\n\tSpacer,\n\tStack,\n\ttruncateWithEllipsis,\n\tuseReadOnly,\n} from \"@framerjs/fresco\"\nimport { assert, unhandledError } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { VariableID } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport { getFileControlPropValue } from \"document/models/controlProps/getControlProps.ts\"\nimport type { FileControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport React from \"react\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport { chooseFileService } from \"web/pages/project/lib/ChooseFileService.ts\"\nimport { isCompatibleFileType } from \"../properties/utils/allowedFileTypes.ts\"\nimport * as styles from \"./FileInputRow.styles.ts\"\nimport { collectionInputFontSize, collectionInputMessageHeight, warningMessagePlain } from \"./LargePanelRow.styles.ts\"\nimport type { ContentManagementFieldVariant } from \"./fieldVariant.ts\"\nimport { getUpdatedFileControlProp } from \"./utils/getUpdatedFieldControlProp.ts\"\n\ninterface Props {\n\tcontrol: FileControlDescription\n\tcontrolProp: ControlProp | undefined\n\tfieldId: VariableID\n\titemId: NodeID\n\tonChange: (value: ControlProp, fieldId: VariableID, id: NodeID) => void\n\treset: (prop: string, id: NodeID) => void\n\tvariant: ContentManagementFieldVariant\n}\n\nfunction getCurrentValue(controlProp: ControlProp | undefined, control: FileControlDescription): string {\n\tconst value = getFileControlPropValue(control, controlProp)\n\tassert(!isDynamicValue(value), \"Dynamic values are not supported within the CMS.\")\n\tif (!isString(value)) return \"\"\n\tconst assetReference = parseAssetReference(value)\n\treturn assetReference?.originalFilename ?? \"\"\n}\n\nexport function checkIfIsValidFileType(controlProp: ControlProp | undefined, control: FileControlDescription): boolean {\n\tconst fileControlPropValue = getFileControlPropValue(control, controlProp)\n\tassert(!isDynamicValue(fileControlPropValue), \"Dynamic values are not supported within the CMS.\")\n\tif (!isString(fileControlPropValue)) return true\n\tconst assetReference = parseAssetReference(fileControlPropValue)\n\tconst fileExtension = assetReference?.fileExtension\n\n\treturn !fileExtension || isCompatibleFileType(fileExtension, control.allowedFileTypes)\n}\n\nexport const FileInputRow = React.memo(function FileInputRow({\n\tcontrol,\n\tcontrolProp,\n\tfieldId,\n\titemId,\n\tonChange,\n\treset,\n\tvariant,\n}: Props) {\n\tconst isPlain = variant === \"plain\"\n\tconst isLegacy = variant === \"legacy\"\n\tconst agentExperimentEnabled = useExperimentIsOn(\"agent\")\n\tconst [isPickerOpen, setIsPickerOpen] = React.useState(false)\n\n\tconst isReadOnly = useReadOnly()\n\n\tconst clear = () => {\n\t\treset(fieldId, itemId)\n\t}\n\n\tconst value = getCurrentValue(controlProp, control)\n\n\tconst chooseFile = async () => {\n\t\tconst { allowedFileTypes } = control\n\t\ttry {\n\t\t\tlet files: Awaited<ReturnType<typeof chooseFileService.pickFile>> | undefined\n\t\t\ttry {\n\t\t\t\tsetIsPickerOpen(true)\n\t\t\t\tfiles = await chooseFileService.pickFile({ allowedFileTypes })\n\t\t\t} finally {\n\t\t\t\tsetIsPickerOpen(false)\n\t\t\t}\n\t\t\tconst file = files?.[0]\n\t\t\tif (!file) return\n\t\t\tconst fileInfo = await chooseFileService.uploadFile(file)\n\t\t\tif (!fileInfo) return // Uploading failed\n\t\t\tconst reference = createAssetReference(fileInfo.filename, null, fileInfo.originalFilename)\n\t\t\tonChange(getUpdatedFileControlProp(reference), fieldId, itemId)\n\t\t} catch (error) {\n\t\t\tunhandledError(error)\n\t\t}\n\t}\n\n\tconst listOfExtensions = control.allowedFileTypes.join(\", \")\n\tconst isValidFileType = checkIfIsValidFileType(controlProp, control)\n\tconst title = value || (isPlain ? \"Choose File\u2026\" : Dictionary.AddEllipsis)\n\tconst messageClassName = isPlain ? cx(warningMessagePlain, collectionInputMessageHeight) : undefined\n\n\tconst uploadFileEnabled = !isReadOnly && control.allowedFileTypes.length > 0\n\tconst removeEnabled = Boolean(value) && !isReadOnly\n\tconst uploadOrRemoveEnabled = uploadFileEnabled || removeEnabled\n\n\tconst onKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\tif (!value || isReadOnly) return\n\t\tif (event.key === \"Delete\" || event.key === \"Backspace\") {\n\t\t\tclear()\n\t\t\tevent.preventDefault()\n\t\t}\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Stack\n\t\t\t\talignItems=\"center\"\n\t\t\t\tjustifyContent=\"center\"\n\t\t\t\tgap={0}\n\t\t\t\tdirection=\"row\"\n\t\t\t\tclassName={cx(\n\t\t\t\t\tstyles.container,\n\t\t\t\t\tisPlain && styles.containerPlain,\n\t\t\t\t\tisPlain && isPickerOpen && styles.containerPlainPickerActive,\n\t\t\t\t\tisLegacy && styles.containerLegacy,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Button\n\t\t\t\t\tclassName={cx(styles.uploadButton, isLegacy && styles.uploadButtonLegacy)}\n\t\t\t\t\tvariant={isPlain ? \"clean\" : \"default\"}\n\t\t\t\t\tonClick={chooseFile}\n\t\t\t\t\tenabled={uploadFileEnabled}\n\t\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t\t\ttabIndex={uploadOrRemoveEnabled ? 0 : -1}\n\t\t\t\t\taria-description={removeEnabled ? \"Press Delete or Backspace to remove the current file.\" : undefined}\n\t\t\t\t\taria-keyshortcuts={removeEnabled ? \"Delete Backspace\" : undefined}\n\t\t\t\t>\n\t\t\t\t\t{isLegacy && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<CenterChild\n\t\t\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\t\t\tstyles.svgWrapper,\n\t\t\t\t\t\t\t\t\tisLegacy && styles.svgWrapperLegacy,\n\t\t\t\t\t\t\t\t\tisLegacy && !value && styles.svgWrapperPlaceholderLegacy,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{fileInputIcon(isLegacy, agentExperimentEnabled)}\n\t\t\t\t\t\t\t</CenterChild>\n\t\t\t\t\t\t\t<Spacer size={10} />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\ttruncateWithEllipsis,\n\t\t\t\t\t\t\tstyles.titleWrapper,\n\t\t\t\t\t\t\tisPlain && collectionInputFontSize,\n\t\t\t\t\t\t\t!value && styles.titleWrapperPlaceholder,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</div>\n\t\t\t\t</Button>\n\t\t\t\t{removeEnabled && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant={isPlain ? \"clean\" : \"default\"}\n\t\t\t\t\t\tonClick={clear}\n\t\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\t\tstyles.deleteIconWrapper,\n\t\t\t\t\t\t\tisPlain && styles.deleteIconWrapperPlain,\n\t\t\t\t\t\t\tisLegacy && styles.deleteIconWrapperLegacy,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\ttitle={Dictionary.Remove}\n\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconInputClose />\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t{isLegacy && !value && listOfExtensions.length > 0 && (\n\t\t\t\t\t<div className={cx(truncateWithEllipsis, styles.extensionList)} title={listOfExtensions}>\n\t\t\t\t\t\t{listOfExtensions}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t\t{!isValidFileType && <InputMessage type=\"warning\" title=\"Incorrect file type\" className={messageClassName} />}\n\t\t\t{control.allowedFileTypes.length === 0 && (\n\t\t\t\t<InputMessage\n\t\t\t\t\ttype=\"info-warning\"\n\t\t\t\t\ttitle=\"File fields must have a list of accepted extensions\"\n\t\t\t\t\tclassName={messageClassName}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t)\n})\n\nfunction fileInputIcon(isLegacyCMSVariant: boolean, agentExperimentEnabled: boolean) {\n\tif (isLegacyCMSVariant) return <IconVariableFileLarge />\n\tif (agentExperimentEnabled) return <IconVariableFile />\n\treturn <LegacyIconVariableFile />\n}\n", "import \"FileInputRow.styles_7ohya4.wyw.css\"; export const titleWrapper = \"titleWrapper_tqf3amo\";\nexport const titleWrapperPlaceholder = \"titleWrapperPlaceholder_t1g2w9lq\";\nexport const deleteIconWrapper = \"deleteIconWrapper_dyvokqq\";\nexport const deleteIconWrapperPlain = \"deleteIconWrapperPlain_d1cnybc5\";\nexport const deleteIconWrapperLegacy = \"deleteIconWrapperLegacy_dw4eadl\";\nexport const extensionList = \"extensionList_e1ixnr3p\";\nexport const svgWrapper = \"svgWrapper_s3yypfe\";\nexport const svgWrapperLegacy = \"svgWrapperLegacy_sbsgz8e\";\nexport const svgWrapperPlaceholderLegacy = \"svgWrapperPlaceholderLegacy_swjzcm1\";\nexport const container = \"container_cj12poa\";\nexport const containerLegacy = \"containerLegacy_c1rure90\";\nexport const containerPlain = \"containerPlain_c17x0zv8\";\nexport const containerPlainPickerActive = \"containerPlainPickerActive_c9vo2t\";\nexport const uploadButton = \"uploadButton_uw7e33a\";\nexport const uploadButtonLegacy = \"uploadButtonLegacy_u139iqsc\";", "import { FileDropZone, useReadOnly } from \"@framerjs/fresco\"\nimport { assert, unhandledError } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport type { VariableID } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport type { ControlProp, ImageControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport { getControlProp } from \"document/models/controlProps/getControlProps.ts\"\nimport type { ReducedResponsiveImageControlProp } from \"document/models/controlProps/getReducedControlProps.ts\"\nimport { getReducedResponsiveImageControlProp } from \"document/models/controlProps/getReducedControlProps.ts\"\nimport { reducedImageControlPropMatchesDefault } from \"document/models/controlProps/reducedImageControlPropMatchesDefault.ts\"\nimport { createAssetReferenceForUploadImageResult } from \"document/utils/createAssetReferenceFromImageUpload.ts\"\nimport type { ResponsiveImageControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport React, { useCallback, useMemo, useState } from \"react\"\nimport { chooseFileService } from \"web/pages/project/lib/ChooseFileService.ts\"\nimport type { LargeImageInputChildrenInfo } from \"./LargeImageInput.tsx\"\nimport { LargeImageInput } from \"./LargeImageInput.tsx\"\nimport * as styles from \"./LargeImageInputRow.styles.ts\"\nimport { LargeImagePreview } from \"./LargeImagePreview.tsx\"\nimport { LargeImageTitle } from \"./LargeImageTitle.tsx\"\nimport { collectionImageWrapperPaddingBlock } from \"./LargePanelRow.styles.ts\"\nimport type { ContentManagementFieldVariant } from \"./fieldVariant.ts\"\nimport type { CollectionItemChangeHandler } from \"./utils/CollectionItemChangeHandler.ts\"\nimport { getUpdatedImageControlProp } from \"./utils/getUpdatedFieldControlProp.ts\"\n\ninterface Props {\n\tcontrol: ResponsiveImageControlDescription\n\tcontrolProp: ControlProp | undefined\n\tfieldId: VariableID\n\titemId: NodeID\n\tonChange: (getUpdate: CollectionItemChangeHandler, fieldId: VariableID, itemId: NodeID) => void\n\treset: (fieldId: VariableID, id: NodeID) => void\n\tvariant: ContentManagementFieldVariant\n}\n\nexport const ImageInputRow = React.memo(function ImageInputRow({\n\tcontrol,\n\tcontrolProp: rawControlProp,\n\tfieldId,\n\titemId,\n\tonChange,\n\treset,\n\tvariant,\n}: Props) {\n\tconst isPlain = variant === \"plain\"\n\tconst isLegacy = variant === \"legacy\"\n\n\tconst isReadOnly = useReadOnly()\n\n\tconst controlProp = useMemo<ImageControlProp>(() => {\n\t\tconst controlValue = getControlProp(control, rawControlProp)\n\t\tassert(controlValue?.type === ControlType.Image, \"Can't be undefined, after using `getControlProp`\")\n\t\treturn controlValue\n\t}, [control, rawControlProp])\n\n\tconst reducedControlProp = useMemo<ReducedResponsiveImageControlProp>(() => {\n\t\treturn getReducedResponsiveImageControlProp(controlProp, control)\n\t}, [control, controlProp])\n\n\tconst reducedControlPropMatchesDefault = useMemo(() => {\n\t\treturn reducedImageControlPropMatchesDefault(control, reducedControlProp)\n\t}, [control, reducedControlProp])\n\n\tconst handleUpdateImage = useCallback(\n\t\t(getUpdate: (current: ImageControlProp | undefined) => ImageControlProp) => {\n\t\t\tonChange(\n\t\t\t\t(currentControlProp: ImageControlProp | undefined) => {\n\t\t\t\t\tconst newControlProp = getUpdate(currentControlProp)\n\t\t\t\t\treturn newControlProp\n\t\t\t\t},\n\t\t\t\tfieldId,\n\t\t\t\titemId,\n\t\t\t)\n\t\t},\n\t\t[fieldId, itemId, onChange],\n\t)\n\n\tfunction clearImage() {\n\t\treset(fieldId, itemId)\n\t}\n\n\tconst [dragOver, setDragOver] = useState(false)\n\tconst handleDragEnter = useCallback(() => setDragOver(true), [])\n\tconst handleDragLeave = useCallback(() => setDragOver(false), [])\n\n\tconst handleFileDrop = useCallback(\n\t\t(event: DragEvent) => {\n\t\t\tif (isReadOnly) return\n\t\t\tif (!event.dataTransfer) return\n\n\t\t\tconst firstFile = event.dataTransfer.files.item(0)\n\t\t\tif (!firstFile) return\n\n\t\t\tchooseFileService\n\t\t\t\t.addImages([firstFile])\n\t\t\t\t.then(([image]) => {\n\t\t\t\t\tif (!image) return\n\n\t\t\t\t\tconst assetReference = createAssetReferenceForUploadImageResult(image)\n\t\t\t\t\thandleUpdateImage(current => {\n\t\t\t\t\t\treturn getUpdatedImageControlProp(current, { value: assetReference })\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(unhandledError)\n\t\t},\n\t\t[handleUpdateImage, isReadOnly],\n\t)\n\n\treturn (\n\t\t<LargeImageInput\n\t\t\tpopoutId={fieldId}\n\t\t\tcontrol={control}\n\t\t\tcontrolProp={reducedControlProp}\n\t\t\tonChange={handleUpdateImage}\n\t\t\tlargePopoutButtonVariant={isLegacy}\n\t\t\tonClear={!reducedControlPropMatchesDefault && !isReadOnly ? clearImage : undefined}\n\t\t\tpopoutButtonClassName={cx(\n\t\t\t\tstyles.popoutButton,\n\t\t\t\tisPlain && styles.popoutButtonPlain,\n\t\t\t\tdragOver && isPlain && styles.popoutButtonDragOverPlain,\n\t\t\t\tisLegacy && styles.popoutButtonLegacy,\n\t\t\t\tdragOver && isLegacy && styles.popoutButtonDragOverLegacy,\n\t\t\t)}\n\t\t>\n\t\t\t{info => (\n\t\t\t\t<FileDropZone\n\t\t\t\t\tonDragEnter={handleDragEnter}\n\t\t\t\t\tonDragLeave={handleDragLeave}\n\t\t\t\t\tonDrop={handleFileDrop}\n\t\t\t\t\tclassName={cx(\n\t\t\t\t\t\tstyles.content,\n\t\t\t\t\t\tisPlain && collectionImageWrapperPaddingBlock,\n\t\t\t\t\t\tisLegacy && styles.contentLegacy,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<LargeImagePreview\n\t\t\t\t\t\tvalue={info.value}\n\t\t\t\t\t\tpositionX={info.positionX}\n\t\t\t\t\t\tpositionY={info.positionY}\n\t\t\t\t\t\tonClear={info.clearImage}\n\t\t\t\t\t\tclassName={styles.imageWrapper}\n\t\t\t\t\t/>\n\t\t\t\t\t{isLegacy && (\n\t\t\t\t\t\t<LargeImageTitle text={getDisplayTitle(info)} isPlaceholder={!info.assetReference || isReadOnly} />\n\t\t\t\t\t)}\n\t\t\t\t</FileDropZone>\n\t\t\t)}\n\t\t</LargeImageInput>\n\t)\n})\n\nfunction getDisplayTitle(info: LargeImageInputChildrenInfo) {\n\tif (info.altText) return info.altText\n\tif (info.assetReference) return Dictionary.Image\n\treturn Dictionary.AddEllipsis\n}\n", "import \"LargeImageInputRow.styles_him548.wyw.css\"; export const popoutButton = \"popoutButton_pmf2mrs\";\nexport const imageWrapper = \"imageWrapper_iv0n0ks\";\nexport const popoutButtonPlain = \"popoutButtonPlain_peuz1mk\";\nexport const popoutButtonLegacy = \"popoutButtonLegacy_pl80d2p\";\nexport const popoutButtonDragOverLegacy = \"popoutButtonDragOverLegacy_p1p7pyz3\";\nexport const popoutButtonDragOverPlain = \"popoutButtonDragOverPlain_p11bpavk\";\nexport const content = \"content_c5m5cvs\";\nexport const contentLegacy = \"contentLegacy_c19betsd\";", "import { NumberInputWithTicker, Slider, Stack, Stepper } from \"@framerjs/fresco\"\nimport { assert } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport type { VariableID } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport type { ControlProp } from \"document/models/controlProps/ControlProp.ts\"\nimport { getNumberControlPropValue } from \"document/models/controlProps/getControlProps.ts\"\nimport type { NumberControlDescription } from \"library/render/types/PropertyControls.ts\"\nimport React from \"react\"\nimport { isNull, isNumber } from \"utils/typeChecks.ts\"\nimport { smallCollectionInput } from \"./LargeControlRow.styles.ts\"\nimport { collectionInputFontSize, collectionInputHeightLegacy } from \"./LargePanelRow.styles.ts\"\nimport * as styles from \"./NumberInputRow.styles.ts\"\nimport type { ContentManagementFieldVariant } from \"./fieldVariant.ts\"\nimport { getUpdatedNumberControlProp } from \"./utils/getUpdatedFieldControlProp.ts\"\n\nfunction getCurrentValue(controlProp: ControlProp | undefined, control: NumberControlDescription): number | undefined {\n\tconst value = getNumberControlPropValue(control, controlProp)\n\tassert(!isDynamicValue(value), \"Dynamic values are not supported within the CMS.\")\n\tassert(!isNull(value), \"Optional numbers are not supported within the CMS.\")\n\treturn value\n}\n\ninterface Props {\n\tcontrol: NumberControlDescription\n\tcontrolProp: ControlProp | undefined\n\tfieldId: VariableID\n\titemId: NodeID\n\tonChange: (value: ControlProp, fieldId: VariableID, id: NodeID) => void\n\tvariant: ContentManagementFieldVariant\n}\n\nexport const NumberInputRow = React.memo(function NumberInputRow({\n\tcontrol,\n\tcontrolProp,\n\tfieldId,\n\titemId,\n\tonChange,\n\tvariant,\n}: Props) {\n\tconst isPlain = variant === \"plain\"\n\tconst isLegacy = variant === \"legacy\"\n\n\tconst changeHandler = (newValue: number) => {\n\t\tif (isNumber(control.step) && control.step >= 1) {\n\t\t\tnewValue = Math.round(newValue)\n\t\t}\n\t\tonChange(getUpdatedNumberControlProp(newValue), fieldId, itemId)\n\t}\n\n\tconst value = getCurrentValue(controlProp, control)\n\n\tconst numberInput = (\n\t\t<NumberInputWithTicker\n\t\t\tvalue={value}\n\t\t\tonChange={changeHandler}\n\t\t\tmin={control.min}\n\t\t\tmax={control.max}\n\t\t\tstep={control.step}\n\t\t\tunit={control.unit}\n\t\t\twrapperClassName={cx(styles.grow, isLegacy && collectionInputHeightLegacy)}\n\t\t\tclassName={cx(isPlain && styles.input, isPlain && collectionInputFontSize, isLegacy && styles.inputLegacy)}\n\t\t\tvariant={isPlain ? \"ghost\" : \"default\"}\n\t\t/>\n\t)\n\n\tif (isPlain) return numberInput\n\n\treturn (\n\t\t<Stack direction=\"row\" className={smallCollectionInput}>\n\t\t\t{numberInput}\n\t\t\t{control.displayStepper ? (\n\t\t\t\t<Stepper\n\t\t\t\t\tlarge\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tmin={control.min}\n\t\t\t\t\tmax={control.max}\n\t\t\t\t\tstep={control.step}\n\t\t\t\t\tclassName={cx(styles.grow, styles.noPadding, isLegacy && collectionInputHeightLegacy)}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<Slider\n\t\t\t\t\tlarge\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={changeHandler}\n\t\t\t\t\tmin={control.min}\n\t\t\t\t\tmax={control.max}\n\t\t\t\t\tstep={control.step}\n\t\t\t\t\tclassName={cx(styles.grow, styles.noPadding, isLegacy && collectionInputHeightLegacy)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</Stack>\n\t)\n})\n", "import \"NumberInputRow.styles_1p3lelg.wyw.css\"; export const grow = \"grow_g17bz3ya\";\nexport const noPadding = \"noPadding_n11m1ez3\";\nexport const input = \"input_i1xp7xfm\";\nexport const inputLegacy = \"inputLegacy_il03pw\";", "import \"LargeStringInputRow.styles_evwhfm.wyw.css\"; export const textArea = \"textArea_toqpzs7\";\nexport const textAreaGhost = \"textAreaGhost_t57r6u2\";"],
  "mappings": "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",
  "names": ["import_react", "sortable", "traitTypeKeys", "readOnly", "name", "title", "import_react", "import_react", "import_jsx_runtime", "import_jsx_runtime", "controlType", "sortable", "traitTypeKeys", "readOnly", "title", "name", "import_jsx_runtime", "icon", "import_react", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "property", "sortable", "traitTypeKeys", "identifier", "name", "title", "identifier", "icon", "import_react", "import_jsx_runtime", "sortable", "traitTypeKeys", "React", "value", "allowedFileTypes", "name", "variable", "title", "base", "image", "import_react", "clearButton", "import_jsx_runtime", "clearButton", "base", "import_jsx_runtime", "noInset", "dimmed", "base", "import_jsx_runtime", "title", "popoverOffset", "popoverAttachmentEdge", "import_jsx_runtime", "image", "sortable", "traitTypeKeys", "title", "name", "import_react", "clearButton", "import_jsx_runtime", "controlType", "getPopoutId", "sortable", "traitTypeKeys", "readOnly", "title", "name", "clearButton", "import_react", "import_react", "import_jsx_runtime", "Spinner", "import_jsx_runtime", "icon", "React", "Spinner", "import_jsx_runtime", "React", "VectorSetItemControlPropRow", "title", "traitTypeKeys", "identifier", "VectorSetItemRow", "id", "type", "fallback", "VectorSetItemPopoutButton", "tokens", "VectorSetItemThumbnail", "highlighted", "icon", "VectorSetItemPopout", "name", "import_react", "import_react", "import_jsx_runtime", "React", "LinkRelValuesRow", "readOnly", "LinkRelValueList", "menu", "LinkRelValue", "import_react", "import_jsx_runtime", "content", "import_react", "identifier", "data", "token", "import_react", "import_react", "import_jsx_runtime", "title", "id", "variable", "import_jsx_runtime", "variable", "id", "properties", "clearButton", "import_react", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "readOnly", "title", "clearButton", "import_react", "tokenText", "ghostButtonFocusOutline", "import_jsx_runtime", "React", "MultiComboBox", "final", "from", "sortingEnabled", "ghostButtonFocusOutline", "tokenText", "import_jsx_runtime", "import_react", "import_react", "marks", "doc", "variable", "import_react", "tags", "marks", "import_jsx_runtime", "import_jsx_runtime", "selection", "import_react", "meta", "hasSelection", "import_jsx_runtime", "popoverOffset", "attachmentEdgePreferences", "menuItem", "icon", "final", "allItemsDisabled", "disabledItems", "import_react", "import_react_dom", "menuAnchor", "import_react", "menuItem", "menuItemIconContainer", "import_jsx_runtime", "SlashCommandMenuItem", "menuItem", "menuItemIconContainer", "menuContainer", "import_jsx_runtime", "menuContainer", "import_react", "import_react", "inactiveState", "meta", "match", "import_jsx_runtime", "getChildren", "identifier", "name", "import_jsx_runtime", "noSelectionIndex", "popoverOffset", "top", "heading", "menuAnchor", "import_react", "import_jsx_runtime", "popoverAttachmentEdge", "getModuleNodeViewConstructor", "import_react", "divider", "icon", "import_jsx_runtime", "row", "icon", "import_jsx_runtime", "insertComponent", "name", "row", "divider", "import_react", "from", "from", "text", "a", "offset", "string", "Line", "top", "number", "findClusterBreak", "surrogateLow", "surrogateHigh", "codePointAt", "codePointSize", "MapMode", "doc", "process", "insert", "i", "values", "compare", "config", "type", "_a", "id", "prec", "content", "base", "scrollIntoView", "CharCategory", "EditorState", "require", "name", "defaults", "cur", "array", "spec", "a", "id", "doc", "text", "elt", "doc", "cur", "top", "rect", "from", "name", "offset", "insert", "text", "flatten", "view", "pos", "a", "BlockType", "Decoration", "_a", "_b", "dist", "decorations", "Direction", "type", "replace", "isNum", "findClusterBreak", "values", "t", "id", "content", "cView", "c", "i", "marks", "inside", "atoms", "EditorState", "scrollIntoView", "base", "handlers", "record", "input", "event", "data", "QueryType", "DecorationComparator", "gap", "to", "array", "entries", "key", "config", "observers", "prefix", "cache", "shift", "meta", "name", "command", "stopPropagation", "_a", "_b", "prefix", "codePointAt", "codePointSize", "doc", "from", "config", "match", "_f", "to", "deco", "m", "_a", "Decoration", "codePointAt", "t", "_a", "input", "i", "values", "_a", "_b", "config", "t", "entries", "space", "offset", "top", "elt", "Range", "from", "config", "match", "type", "parser", "bracketed", "name", "id", "types", "IterMode", "c", "data", "_a", "cur", "cache", "nodeSet", "children", "positions", "node", "buffer", "contextHash", "length", "lookAhead", "base", "pair", "nodeSize", "nodeStart", "to", "offset", "input", "string", "done", "inner", "r", "pos", "a", "base", "t", "a", "sameArray", "config", "array", "tags", "from", "type", "hasChild", "rangeFrom", "rangeTo", "content", "heading", "values", "data", "parser", "name", "EditorState", "top", "base", "from", "type", "doc", "from", "parser", "_a", "input", "language", "name", "a", "values", "EditorState", "service", "text", "from", "cur", "base", "lineEnd", "space", "closing", "cur", "lineEnd", "service", "from", "Decoration", "a", "from", "_a", "to", "a", "values", "config", "baseTheme$1", "Decoration", "baseTheme$1", "type", "values", "Decoration", "from", "to", "config", "cur", "token", "bracket", "text", "pos", "string", "indentUnit", "match", "_a", "parser", "data", "input", "from", "line", "indentation", "inside", "eol", "rangeEnd", "offset", "id", "name", "t", "type", "Decoration", "types", "token", "type", "chars", "words", "list", "match", "match", "score", "_a", "text", "from", "codePointAt", "codePointSize", "chars", "type", "a", "c", "list", "space", "offset", "config", "content", "icon", "off", "applyCompletion", "options", "id", "disabled", "scrollIntoView", "name", "header", "container", "_b", "compare", "cur", "none", "noAttrs", "baseTheme", "from", "text", "indent", "pos", "name", "m", "Decoration", "snippet", "editor", "match", "from", "inputHandler", "insert", "codePointSize", "codePointAt", "tokens", "token", "bracket", "doc", "config", "stringPrefixes", "content", "prefix", "config", "data", "from", "tokens", "c", "comment", "token", "indent", "_a", "_b", "none", "a", "isAdjacent", "t", "_f", "from", "config", "bracket", "match", "space", "from", "cur", "findClusterBreak", "findClusterBreak", "nextChar", "lineEnd", "from", "findClusterBreak", "dist", "from", "indent", "insert", "changes", "cur", "space", "theme", "colors", "theme", "theme", "darkTheme", "name", "Stack", "score", "_a", "type", "parser", "base", "cur", "top", "i", "Recover", "goto", "input", "Type", "array", "offset", "token", "from", "data", "id", "readToken", "dialect", "Safety", "FragmentCursor", "nodeSet", "mask", "Rec", "Parse", "a", "match", "tokens", "insert", "disabled", "name", "config", "t", "prec", "values", "Element", "input", "offset", "name", "type", "getAttrs", "tags", "array", "id", "attrs", "from", "dash", "input", "inside", "parser", "name", "tags", "identifier", "doc", "_a", "callee", "cur", "node", "parser", "space", "slash", "input", "spec_identifier", "parser", "type", "id", "doc", "top", "node", "name", "c", "parser", "config", "doc", "android", "from", "text", "_a", "name", "base", "insert", "a", "elementName", "doc", "name", "identifier", "from", "elt", "_a", "token", "base", "config", "cur", "dialect", "autoCloseTags", "selfClosers", "text", "_b", "insert", "Text", "input", "token", "parser", "_a", "language", "config", "base", "input", "match", "spec_identifier", "parser", "parser", "spec_identifier", "parser", "parser", "type", "from", "hash", "nodeSet", "Type", "content", "Line", "text", "indent", "elt", "space", "marks", "base", "title", "parser", "input", "FragmentCursor", "eol", "none", "top", "offset", "rangeEnd", "t", "config", "nodeTypes", "name", "id", "spec", "token", "a", "conc", "Element", "comment", "c", "cur", "node", "next", "match", "parser", "type", "match", "heading", "from", "doc", "number", "cur", "node", "offset", "content", "space", "insert", "changes", "config", "EditorState", "Boolean", "keywords", "name", "isSpace", "input", "match", "semicolon", "content", "parser", "parser", "config", "base", "node", "eof", "ParenL", "newline", "space", "hash", "input", "spaces", "chars", "topIndent", "content", "spec_identifier", "parser", "cache", "ScopeNodes", "defID", "type", "id", "gatherCompletions", "_a", "_b", "getScope", "doc", "top", "node", "name", "c", "Identifier", "dontComplete", "localCompletionSource", "snippets", "base", "parser", "RawString", "Zero", "Quote", "GreaterThan", "input", "spec_identifier", "parser", "parser", "type", "LineComment", "BlockComment", "Number", "Bool", "ParenL", "ParenR", "BraceL", "BracketL", "Dot", "Punctuation", "Identifier", "Type", "isAlpha", "input", "Space", "keywords", "types", "defaults", "dialect", "_a", "cur", "tokens", "doc", "text", "id", "name", "c", "namespace", "type", "top", "from", "keyword", "parser", "language", "config", "parser", "exprParser", "baseParser", "exprMixed", "textParser", "input", "attrParser", "textMixed", "attrMixed", "baseHTML", "base", "config", "Context", "type", "indent", "t", "keywords", "types", "atoms", "number", "isOperatorChar", "curPunc", "tokenBase", "tokenString", "tokenComment", "cur", "contains", "indentUnit", "closing", "words", "contains", "identifier", "token", "match", "cpp", "java", "Context", "indentUnit", "type", "stream", "state", "keywords", "cur", "Context", "type", "pushContext", "popContext", "t", "indentUnit", "closing", "t", "type", "words", "identifiers", "keywords", "tokenBase", "tokenComment", "match", "tokenString", "words", "builtins", "keywords", "normal", "bracketed", "string", "closing", "words", "keywords", "tokenBase", "cur", "tokenString", "wordRegexp", "words", "identifiers", "builtins", "keywords", "tokenBase", "tokenComment", "tokenBase", "c", "chain", "stream", "state", "string", "words", "keywords", "closing", "curPunc", "tokenBase", "indentUnit", "words", "tokenBase", "tokenString", "cur", "words", "tokenString", "tokenBase", "words", "keywords", "atoms", "types", "operators", "identifier", "tokenBase", "tokenComment", "tokenize", "tokenString", "Context", "pushContext", "popContext", "bracket", "closing", "name", "identifier", "doc", "language", "from", "import_react", "import_react", "import_jsx_runtime", "React", "LinkOptionBooleanRow", "title", "traitTypeKeys", "OpenInNewTabRow", "SmoothScrollRow", "PreserveParamsRow", "import_react", "import_react", "import_react", "import_jsx_runtime", "LinkScrollTargetPopoutButton", "id", "import_jsx_runtime", "PageLinkScrollTargetRows", "id", "variable", "data", "import_react", "import_jsx_runtime", "PageLinkSlugRow", "import_react", "import_jsx_runtime", "traitTypeKeys", "title", "import_react", "import_jsx_runtime", "traitTypeKeys", "React", "TrackingIdRow", "container", "title", "clearButton", "import_jsx_runtime", "React", "title", "clearButton", "container", "readOnly", "menu", "container", "import_react", "button", "import_jsx_runtime", "React", "RichTextToolbarButton", "disabled", "button", "html", "tags", "import_react", "import_jsx_runtime", "popoverAttachmentEdge", "import_jsx_runtime", "decorations", "ReactDOMClient", "Image", "button", "doc", "decorations", "button", "container", "node", "supportedTags", "keymap", "redo", "undo", "match", "EditorView", "isAtEnd", "import_react", "identifier", "import_jsx_runtime", "IconAgentCode", "type", "supportedTags", "popoverAttachmentEdge", "getModuleNodeViewConstructor", "html", "supportsLinks", "assert", "language", "insertButtonDisabled", "container", "tags", "popupButton", "identifier", "doc", "from", "fallback", "import_jsx_runtime", "import_react", "import_jsx_runtime", "title", "description", "React", "import_react", "title", "button", "fadeIn", "import_react", "import_jsx_runtime", "type", "title", "image", "React", "identifier", "fadeIn", "import_jsx_runtime", "React", "offset", "button", "import_react", "import_jsx_runtime", "image", "interactiveArea", "React", "import_react", "container", "clamp", "top", "import_react", "container", "import_react", "import_jsx_runtime", "LargeImageInput", "popoverOffset", "image", "checkerboard", "clearButton", "import_jsx_runtime", "checkerboard", "image", "clearButton", "title", "import_jsx_runtime", "text", "title", "import_jsx_runtime", "from", "popoutNavigation", "item", "image", "container", "import_jsx_runtime", "editor", "import_react", "import_jsx_runtime", "hidden", "inputWrapper", "import_jsx_runtime", "hidden", "assert", "handleClose", "inputWrapper", "import_react", "import_react", "React", "c", "id", "title", "import_jsx_runtime", "title", "id", "a", "a", "a", "a", "absolute", "date", "offset", "calendar", "a", "res", "ms", "offset", "calendar", "calendar", "offset", "cur", "calendar", "mask", "c", "name", "a", "import_react", "$95phC$createContext", "$HgANd$react", "fn", "$lmaYr$useRef", "$lmaYr$useCallback", "$fCAlL$useState", "$fCAlL$useRef", "fn", "$670gB$react", "$670gB$useContext", "$670gB$useRef", "$670gB$react", "prefix", "id", "$670gB$useState", "$eKkEp$useState", "$eKkEp$useRef", "$eKkEp$useEffect", "id", "$eKkEp$useCallback", "doc", "doc", "a", "isLink", "fn", "modifiers", "properties", "fn", "$lPAwt$useRef", "$lPAwt$useCallback", "type", "fn", "$lPAwt$useEffect", "id", "$gbmns$useRef", "$gbmns$useCallback", "$gbmns$useMemo", "$9vW05$useRef", "$9vW05$useEffect", "description", "id", "$hQ5Hp$useState", "isEqual", "$jtQ6z$useRef", "$3whtM$useState", "$3whtM$useRef", "$3whtM$useEffect", "$3whtM$useCallback", "value", "values", "Context", "$iETbY$react", "$iETbY$useMemo", "$iETbY$useContext", "$iETbY$useMemo", "$8SdCi$createContext", "fn", "$8SdCi$useContext", "$8SdCi$forwardRef", "$6dfIe$useRef", "$6dfIe$useCallback", "e", "window", "property", "$3aeG1$react", "$7mdmh$useContext", "type", "$7mdmh$useState", "$7mdmh$useRef", "$7mdmh$useMemo", "pressProps", "e", "$7mdmh$flushSync", "$7mdmh$useEffect", "fn", "$28AnR$useEffect", "$hf0lj$useCallback", "$fcPuG$react", "$fcPuG$useContext", "$fcPuG$useRef", "$fcPuG$useEffect", "$3b9Q0$useRef", "$3b9Q0$useCallback", "e", "$AWxnT$useState", "$AWxnT$useRef", "$AWxnT$useEffect", "$AWxnT$useMemo", "triggerHoverEnd", "hoverProps", "$ffhGL$useState", "$ffhGL$useEffect", "$h9FiU$react", "$h9FiU$useContext", "string", "language", "type", "$6ksNp$useMemo", "$6wxND$useMemo", "a", "type", "$isWE5$useRef", "$isWE5$useState", "$isWE5$useCallback", "isFocused", "$3HATx$useMemo", "$parcel$interopDefault", "title", "$g2t6q$useState", "$NQfxu$useMemo", "$parcel$interopDefault", "$dm6hl$useMemo", "label", "$dm6hl$useRef", "$dm6hl$useEffect", "$7JYt2$useState", "$7JYt2$useMemo", "Element", "$7JYt2$react", "$hU2kz$createContext", "$fM325$createContext", "Button", "$fM325$useRef", "$fM325$useEffect", "$fM325$react", "$1B3Dx$createContext", "$7G4ZY$useMemo", "calendar", "$7G4ZY$useState", "from", "$dCiKx$createContext", "$dCiKx$forwardRef", "title", "$dCiKx$react", "$dCiKx$createContext", "$dCiKx$forwardRef", "$dCiKx$useContext", "$dCiKx$react", "$dCiKx$useRef", "$bt28J$forwardRef", "Element", "$bt28J$react", "popover", "import_jsx_runtime", "popoverAttachmentEdges", "hidden", "assert", "handleClose", "popover", "inputWrapper", "import_jsx_runtime", "hidden", "assert", "handleClose", "inputWrapper", "container", "base", "import_react", "import_react", "service", "loading", "import_jsx_runtime", "log", "layout", "blockEvents", "loading", "import_react", "import_react", "import_react_dom", "import_client", "import_react", "import_react", "import_jsx_runtime", "React", "ControlPropRow", "sortable", "row", "description", "traitTypeKeys", "controlKey", "BooleanControlPropRow", "DateControlPropRow", "EnumControlPropRow", "FileControlPropRow", "ImageControlPropRow", "StringControlPropRow", "VectorSetItemControlPropRow", "type", "container", "scroll", "hintContents", "icon", "hintText", "heading", "description", "divider", "import_react", "identifier", "hiddenState", "import_jsx_runtime", "identifier", "popoverAttachmentEdge", "container", "scroll", "hintContents", "icon", "hintText", "heading", "description", "divider", "import_react", "import_client", "import_jsx_runtime", "preview", "import_jsx_runtime", "popoverAttachmentEdge", "ReactDOMClient", "React", "identifier", "popoverAttachmentEdge", "editor", "import_jsx_runtime", "tokens", "html", "editor", "import_react", "editor", "import_jsx_runtime", "tokens", "editor", "import_react", "editor", "import_jsx_runtime", "tokens", "container", "editor", "Element", "name", "import_jsx_runtime", "popoverAttachmentEdge", "supportedTags", "description", "import_react", "import_jsx_runtime", "PROTOCOL_REGEX", "variable", "name", "fallback", "import_react", "import_jsx_runtime", "WithWarningTintAndMessage", "import_react", "import_jsx_runtime", "title", "import_jsx_runtime", "variable", "import_react", "import_react", "image", "import_react", "React", "id", "import_react", "import_jsx_runtime", "React", "GalleryInputRow", "assert", "import_react", "import_jsx_runtime", "getCurrentValue", "React", "BooleanInputRow", "description", "import_react", "import_jsx_runtime", "getCurrentValue", "popoverAttachmentEdge", "React", "ColorInputRow", "import_react", "import_jsx_runtime", "getCurrentValue", "React", "DateInputRow", "import_react", "import_jsx_runtime", "getCurrentValue", "React", "EnumInputRow", "import_react", "titleWrapper", "container", "containerLegacy", "import_jsx_runtime", "getCurrentValue", "React", "FileInputRow", "allowedFileTypes", "title", "container", "containerLegacy", "titleWrapper", "import_react", "popoutButton", "imageWrapper", "popoutButtonLegacy", "content", "import_jsx_runtime", "React", "ImageInputRow", "image", "popoutButton", "popoutButtonLegacy", "content", "imageWrapper", "import_react", "input", "import_jsx_runtime", "getCurrentValue", "React", "NumberInputRow", "input"]
}
